头文件
#ifndef _ADL_LINKLIST_H #define _ADL_LINKLIST_H #define N 20 #define M 100 #define FAILURE 10001 #define SUCCESS 10002 /*颜色管理*/ #define NONE "\033[m" #define RED "\033[0;32;31m" #define LIGHT_RED "\033[1;31m" #define GREEN "\033[0;32;32m" #define LIGHT_GREEN "\033[1;32m" #define BLUE "\033[0;32;34m" #define LIGHT_BLUE "\033[1;34m" #define DARY_GRAY "\033[1;30m" #define CYAN "\033[0;36m" #define LIGHT_CYAN "\033[1;36m" #define PURPLE "\033[0;35m" #define LIGHT_PURPLE "\033[1;35m" #define BROWN "\033[0;33m" #define YELLOW "\033[1;33m" #define LIGHT_GRAY "\033[0;37m" #define WHITE "\033[1;37m" struct LinkMan { char name[N]; char age[N]; char sex[N]; char phonenum[N]; struct LinkMan * next; }; typedef struct LinkMan linkman; //函数申明 void welcome(); int menu(int e); int Linklist_init(linkman **l); int Addinfo(linkman *l, linkman *info); int Showinfo(linkman *l); int searchinfo(linkman *l, char *ptr); int deleteinfo(linkman *l, char *ptr); int changeinfo(linkman *l); #endif
自定义函数
#include "adl_linklist.h" #include<stdio.h> #include<stdlib.h> #include<string.h> //欢迎界面 void welcome() { system("clear"); printf("\n"); printf(PURPLE"****\n"NONE); sleep(1); system("clear"); printf("\n"); printf(PURPLE"***********\n"NONE); sleep(1); system("clear"); printf("\n"); printf(PURPLE"*****************\n"NONE); sleep(1); system("clear"); printf("\n"); printf(PURPLE"************************\n"NONE); sleep(1); system("clear"); printf("\n"); printf(PURPLE"*****************************\n"NONE); sleep(1); system("clear"); printf("\n"); printf(PURPLE"********************************\n"NONE); sleep(1); system("clear"); printf("\n"); printf(PURPLE"*******"NONE);printf(YELLOW"加载完成,欢迎使用"NONE);printf(PURPLE"********\n"NONE); sleep(2); } //初始化一个链表 int Linklist_init(linkman **l) { *l = (linkman *) malloc (sizeof(linkman) * 1); if(NULL == l) { return FAILURE; } (*l)->next = NULL; return SUCCESS; } //主菜单界面 int menu(int e) { int num_select; //序号选择功能 printf("\n"); printf(YELLOW"*********************************\n"NONE); printf(GREEN"****------------*------------****\n"NONE); printf(BLUE"* 1、添加信息 2、查看信息 *\n"NONE); printf(LIGHT_RED"* 3、查找信息 4、删除信息 *\n"NONE); printf(LIGHT_BLUE"* 5、修改信息 6、退出菜单 *\n"NONE); printf(GREEN"****------------*------------****\n"NONE); printf(YELLOW"*********************************\n"NONE); printf("\n"); printf("输入序号选择功能: "); scanf("%d", &num_select); return num_select; } //添加联系人 int Addinfo(linkman *l, linkman *info) { if(NULL == l) { return FAILURE; } if(l->next == NULL) { l->next = info; info->next = NULL; return SUCCESS; } linkman *p = l; info->next = l->next; l->next = info; return SUCCESS; } //查看联系人 int Showinfo(linkman *l) { if(NULL == l) { return FAILURE; } linkman *p = l; while(p->next != NULL) { p = p->next; printf("姓名: ");printf("%s\n",p->name); printf("年龄: ");printf("%s\n",p->age); printf("性别: ");printf("%s\n",p->sex); printf("号码: ");printf("%s\n",p->phonenum); printf("\n"); } return SUCCESS; } //查找联系人 int searchinfo(linkman *l, char *ptr) { if(NULL == l) { return FAILURE; } linkman *p = l->next; while(p != NULL) { if(strcmp(ptr, p->name) == 0) { printf("姓名: ");printf("%s\n",p->name); printf("年龄: ");printf("%s\n",p->age); printf("性别: ");printf("%s\n",p->sex); printf("号码: ");printf("%s\n",p->phonenum); printf("\n"); } p = p->next; } return SUCCESS; } //删除联系人 int deleteinfo(linkman *l, char *ptr) { if(NULL == l) { return FAILURE; } linkman *q = NULL; linkman *p = l; while(p->next != NULL) { if(strcmp(ptr, p->next->name) == 0) { q = p->next; p->next = p->next->next; free(q); return SUCCESS; } p = p->next; } return FAILURE; } //修改联系人 int changeinfo(linkman *l) { if(NULL == l) { return FAILURE; } char ptr[N]; char new1[N]; printf("选择要修改的姓名: "); scanf("%s",ptr); linkman *p = l; while(p->next != NULL) { if(strcmp(ptr, p->next->name) == 0) { printf("输入要修改的姓名:"); scanf("%s",new1); strcpy(p->next->name,new1); strcpy(new1,""); printf("输入要修改的年龄:"); scanf("%s",new1); strcpy(p->next->age,new1); strcpy(new1,""); printf("输入要修改的性别:"); scanf("%s",new1); strcpy(p->next->sex,new1); strcpy(new1,""); printf("输入要修改的号码:"); scanf("%s",new1); strcpy(p->next->phonenum,new1); strcpy(new1,""); return SUCCESS; } p = p->next; } return FAILURE; }
main主函数
#include "adl_linklist.h" #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int ret; linkman *first = NULL;//头结点 linkman *info = NULL; system("clear"); printf("****初始化链表开始****\n"); sleep(1); ret = Linklist_init(&first); if(FAILURE ==ret) { printf("初始化链表失败!\n"); exit(0); } else { printf("初始化链表成功!\n"); sleep(1); system("clear"); } //welcome(); while(1) { int e, num_choice; num_choice = menu(e); switch(num_choice) { case 1: { system("clear"); info = (linkman *) malloc (sizeof(linkman) * M); if(NULL == info) { printf("Add the info Failure!\n"); } printf("输入联系人姓名: "); scanf("%s",info->name); printf("\n"); printf("输入联系人年龄: "); scanf("%s",&info->age); printf("\n"); printf("输入联系人性别: "); getchar(); scanf("%s",info->sex); printf("\n"); printf("输入联系人号码: "); scanf("%s",info->phonenum); printf("\n"); ret = Addinfo(first, info); if(FAILURE == ret) { printf("Add the info Failure!\n"); } else { printf("Add the info Success!\n"); } break; } case 2: { ret = Showinfo(first); if(FAILURE == ret) { printf("Show Failure!\n"); } else { printf("Show Success!\n"); } break; } case 3: { char *ptr; ptr = (char *) malloc (sizeof(char) * N); printf("输入要查找的联系人姓名: "); getchar(); scanf("%s", ptr); ret = searchinfo(first, ptr); if(FAILURE == ret) { printf("Search Failure!\n"); } else { printf("Search Success!\n"); } break; } case 4: { char *ptr; ptr = (char *) malloc (sizeof(char) * N); printf("输入要删除的联系人姓名: "); getchar(); scanf("%s", ptr); ret = deleteinfo(first, ptr); if(FAILURE == ret) { printf("Delete Failure!\n"); } else { printf("Delete Success!\n"); } break; } case 5: { ret = changeinfo(first); if(FAILURE == ret) { printf("Change Failure!\n"); } else { printf("Change Success!\n"); } break; } case 6: { printf("******退出系统中******\n"); sleep(1); exit(0); break; } default: { printf("输入有误差! 请重新选择!\n"); } } } return 0; }