#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLACK "\e[0;30m"
#define L_BLACK "\e[1;30m"
#define RED "\e[0;31m"
#define L_RED "\e[1;31m"
#define GREEN "\e[0;32m"
#define L_GREEN "\e[1;32m"
#define BROWN "\e[0;33m"
#define YELLOW "\e[1;33m"
#define BLUE "\e[0;34m"
#define L_BLUE "\e[1;34m"
#define PURPLE "\e[0;35m"
#define L_PURPLE "\e[1;35m"
#define CYAN "\e[0;36m"
#define L_CYAN "\e[1;36m"
#define GRAY "\e[0;37m"
#define WHITE "\e[1;37m"
#define NONE "\e[0m"
# define size 1000
#define failure 10000
#define success 10001
#define FALSE 10002
#define TRUE 10003
int count = 0;
int number = -1;
char sort = '0';
struct person
{
int no;
char name[20];
int age;
char sex[10];
char tel[20];
struct person *next;
};
typedef struct person Person;
void CutInfo(Person *ps)
{
Person *q = NULL;
int i, j;
char quit = 'a',C_flag;
char name[20];
aa: printf("按任意键继续删除操作,按0结束\n");
scanf(" %c",&quit);
system("clear");
while(quit != '0')
{
if(count == 0)
{
printf("您还没有联系人快去添加吧!");
goto aa;
}
else if(count == 1)
{
Person *q = ps->next;
printf("\n您只有一位联系人\n");
printf("姓名:%s 年龄:%d 性别:%s 联系方式:%s\n",
q->name,q->age,q->sex,q->tel);
bb: printf("确定删除吗?确定请按1,返回请按0;\n");
scanf(" %c",&C_flag);
if(C_flag == '1')
{
free(q);
ps->next = NULL;
count--;
printf("已删除!\n");
goto aa;
}
else if(C_flag == '0')
goto aa;
else
{
printf("输入有误,请尝试重新输入\n");
goto bb;
}
}
else
{
system("clear");
printf("\n请输入要删除的联系人姓名:\n");
scanf("%s",name);
while(ps->next)
{ q = ps;
ps = ps->next;
if(strcmp(ps->name,name) == 0)
{
cc: printf("确定要删除序号:%d 姓名:%s 年龄:%d 性别:%s 电话号码:%s\n",
ps->no,ps->name,ps->age,ps->sex,ps->tel);
printf("确认请按1,返回请按0\n");
scanf(" %c",&C_flag);
if(C_flag == '0')
goto aa;
else if(C_flag == '1')
{
q->next = ps->next;
free(ps);
printf("删除成功!\n");
count--;
//Display(ps);
goto aa;
}
else
{
printf("请检查输入是否有误\n");
goto cc;
}
}
}
if(i == count)
{
printf("没有找到相关联系人,请检查输入是否有误\n");
goto aa;
}
}
}
}
void hello()
{
system("clear");
printf(RED"\n********************************************"NONE);
printf(L_BLUE"\n 欢迎进入通讯录"NONE);
printf(RED"\n********************************************\n");
printf("请选择功能>> \n\n");
printf(L_BLUE"* 1、添加联系人 * 2、删除联系人 \n"NONE);
printf(L_BLUE"* 3、显示联系人 * 4、修改信息 \n"NONE);
printf(L_BLUE"* 5、排序选择 * 6、查找联系人 \n"NONE);
printf(L_BLUE"* 7、退出\n"NONE);
printf(RED"\n********************************************\n"NONE);
sleep(0.5);
}
int PersonInit(Person **ps)
{
*ps = (Person *)malloc(sizeof(Person));
if(NULL == *ps)
return failure;
(*ps)->next = NULL;
// (*ps)->name[] = {0};
(*ps)->age = 0;
// (*ps)->tel = NULL;
// (*ps)->sex = NULL;
return success;
}
int Large(char *str, char *ptr)
{
return (strcmp(str, ptr) < 0) ? TRUE : FALSE;
}
int PersonInsert(Person *ps, int i, int (*cmp)(char *, char *))
{
Person *p = (Person *)malloc(sizeof(Person));
Person *q = ps;
if(NULL == ps || p == NULL)
{
return failure;
}
printf(BLUE"请按照:姓名、年龄、性别、电话号码的顺序来输入中间输入空格或回车\n"NONE);
scanf("%s%d %s%s",p->name,&p->age,p->sex,p->tel);
printf(BLUE"姓名为:%s\t年龄为:%d\n性别为: %s\t联系方式为:%s\n"NONE,
p->name,p->age,p->sex,p->tel);
ps->no = i + 1;
while(ps->next)
{
q = ps;
ps = ps->next;
if(cmp(p->name, ps->name) == TRUE)
{
p->next = ps;
q->next = p;
return success;
}
}
ps->next = p;
p->next = NULL;
return success;
}
void AddInfo(Person *ps)
{
int ret;
int i, clear = 0;
char A_flag = 'a', flag;
system("clear");
A: printf("如需退出请按0,任意键继续\n");
sleep(1);
scanf(" %c",&A_flag);
while(A_flag != '0')
{
printf(BLUE"\n*****************************请输入联系人********************************\n"NONE);
for(i = count; i < 1000; i++)
{
ret = PersonInsert(ps, i, Large);
if(ret == failure)
{
printf("build failure!\n");
goto A;
}
count++;
clear++;
printf(BLUE"是否需要继续输入?任意键继续,退出请按0\n"NONE);
scanf(" %c",&flag);
if(flag == '0')
goto A;
if(clear == 2)
{
system("clear");
clear = 0;
}
}
}
}
int Traverse(Person *ps)
{
int i = 1;
if(NULL == ps)
return failure;
while(ps->next)
{
ps = ps->next;
ps->no = i;
printf("NO:%d\tName: %s\t\tage: %d\n\tSex: %s\t\ttel: %s\n",ps->no, ps->name, ps->age, ps->sex, ps->tel);
i++;
}
return success;
}
void Display(Person *ps)
{
system("clear");
printf("\n");
int i = 1;
char D_flag = 'a';
int flag = 0;
int way;
while(D_flag != '0')
{
if(count == 0)
{
printf(L_BLUE"联系人为空,快去添加吧 \n"NONE);
goto D;
}
else
{
printf("按姓名升序请按0,任意键降序!\n");
scanf(" %c",&sort);
if(sort == '0')
{
printf("*********************************************************************\n");
Person *q = ps;
way = Traverse(q);
if(way == failure)
{
printf("display failure!\n");
goto D;
}
else
{
printf("display success!\n");
}
}
else
{
if(flag == 0)
{
Person *p = ps->next;
ps->next = NULL;
Person *q = NULL;
while(p)
{
q = p;
p = p->next;
q->next = ps->next;
ps->next = q;
}
flag++;
}
while(ps->next)
{
ps = ps->next;
ps->no = i;
printf("NO:%d\tName: %s\t\tage: %d\n\tSex: %s\t\ttel: %s\n",ps->no, ps->name, ps->age, ps->sex, ps->tel);
i++;
}
}
}
D: printf(L_BLUE"返回上一级请按0\n"NONE);
scanf(" %c",&D_flag);
i = 1;
}
}
void FindInfo(Person *ps)
{
char name[20];
int i;
char F_flag = 'a';
dd: printf(L_PURPLE"退出查找请按0,任意键继续\n"NONE);
scanf(" %c",&F_flag);
system("clear");
if(count == 0)
{
F_flag = '0';
Display(ps);
}
while(F_flag != '0')
{
printf(L_PURPLE"请输入要查找的联系人姓名:\n"NONE);
scanf("%s",name);
while(ps->next)
{
ps = ps->next;
if(strcmp(ps->name,name) == 0)
{
printf(L_PURPLE"已找到!\n"NONE);
printf(L_PURPLE"编号:%d 姓名:%s 年龄:%d 性别:%s 联系方式:%s\n"NONE,
ps->no, ps->name, ps->age, ps->sex, ps->tel);
number = ps->no;
goto dd;
}
}
if(ps->next == NULL)
{
printf(L_PURPLE"没有相关联系人,请检查输入是否有误\n"NONE);
goto dd;
}
}
}
void Modify(Person *ps)
{
char c;
int i = 0;
char M_flag = 'a';
if(count == 0)
{
system("clear");
printf("\n\n还没有联系人,快去添加吧!\n");
M_flag = '0';
}
M2: printf("如需退出修改请按0,任意键继续\n");
scanf(" %c",&M_flag);
while(M_flag != '0')
{
FindInfo(ps);
if(number != -1)
{
while(i < number && ps)
{
ps = ps->next;
i++;
}
M1: system("clear");
printf("序号为:%d\t姓名为:%s\t\t 年龄为:%d\n\t\t\t性别为: %s\t联系方式为:%s\n",
ps->no,ps->name,ps->age,ps->sex,ps->tel);
printf("请选择需要修改项:1、姓名 2、年龄 3、性别 4、联系方式\t 按0键返回\n");
scanf(" %c",&c);
if(c == '1')
{
printf("请输入姓名:\n");
scanf("%s",ps->name);
printf("修改成功!");
goto M1;
}
else if(c == '2')
{
printf("请输入年龄:\n");
scanf("%d",&ps->age);
printf("修改成功!\n");
goto M1;
}
else if(c == '3')
{
printf("请输入性别:\n");
scanf("%s",ps->sex);
printf("修改成功!\n");
goto M1;
}
else if(c == '4')
{
printf("请输入联系号码:\n");
scanf("%s",ps->tel);
printf("修改成功!\n");
goto M1;
}
else if(c == '0')
{
goto M2;
}
else
{
printf("输入不符合规范请重试\n");
goto M1;
}
}
if(number == -1)
{
printf("没有相关联系人\n");
goto M2;
}
}
}
int main()
{
char choice;
int test;
Person *ps = NULL;
test = PersonInit(&ps);
if(test == failure)
{
system("clear");
printf("初始化失败!\n");
sleep(1);
}
else
{
system("clear");
printf("初始化成功!\n");
sleep(1);
}
while(1)
{
hello();
printf("请输入你的选择:\n");
scanf(" %c",&choice);
switch (choice)
{
case '1' :
AddInfo(ps);
break;
case '2':
CutInfo(ps);
break;
case '3':
Display(ps);
break;
case '4':
Modify(ps);
break;
case '6':
FindInfo(ps);
break;
case '7':
system("clear");
exit (0);
break;
default:
printf("输入有误,重新输入!\n");
break;
}
}
return 0;
}
链表实现通讯录
猜你喜欢
转载自blog.csdn.net/LX370ZZZ/article/details/81487660
今日推荐
周排行