头文件
#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;
}