void transfer(STU *head)//修改链表元素
{
system("clear");
STU *p,*q;
int i,flag;
p = (STU *) malloc (sizeof(STU));
while(1)
{
flag = 0;
if(num == 0)
{
printf("通讯录内容为空(等待自动跳回主菜单)!\n");
sleep (3);
break;
}
q = head;
printf("请输入要修改的联系人的姓名(输入quit退回主菜单):\n");
scanf("%s",p->name);
if(!strcmp(p->name,"quit"))
{
break;
}
for(i = 0; i < num;i++)
{
if(!strcmp(p->name,q->name))
{
printf("请输入修改后的联系人姓名、年龄、和电话:\n");
scanf("%s%d%s",q->name,&q->age,q->phone);
printf("修改成功!\n");
flag = 1;
}
q = q->next;
}
if(!flag)
{
printf("通讯录中无此成员!\n");
}
}
}
STU *insert(STU *head)//插入链表元素
{
system("clear");
int n,i;
STU *p,*q1,*q2;
while(1)
{
if(num == 0)
{
printf("通讯录内容为空(等待自动跳回主菜单)!\n");
sleep (3);
return head;
}
p = (STU *) malloc (sizeof(STU));
printf("请输入要插入的新联系人的姓名、年龄、电话(输入quit退回主菜单):\n");
scanf("%s",p->name);
if(!strcmp(p->name,"quit"))
{
return head;
}
scanf("%d",&p->age);
scanf("%s",p->phone);
printf("请输入要插入的位置:\n");
scanf("%d",&n);
q1 =head;
if(n == 1)
{
head = p;
p->next = q1;
++num;
printf("插入成功!\n");
}
else
{
for(i = 0;i < n - 1 && n <= num + 1;i++)
{
q2 = q1;
q1 = q1->next;
}
if(n <= num + 1 && n != 0)
{
q2->next = p;
p->next = q1;
++num;
printf("插入成功!\n");
}
else
{
printf("插入失败!\n");
}
}
}
}
void search(STU *head)//查找链表元素
{
system("clear");
STU *p,*q;
int i,flag;
p = (STU *) malloc (sizeof(STU));
while(1)
{
flag = 0;
if(num == 0)
{
printf("通讯录内容为空(等待自动跳回主菜单)!\n");
sleep(3);
break;
}
q = head;
printf("请输入要查看的联系人的姓名(输入quit退回主菜单):\n");
scanf("%s",p->name);
if(!strcmp(p->name,"quit"))
{
break;
}
for(i = 0; i < num;i++)
{
if(!strcmp(p->name,q->name))
{
printf("查找成功,要查找的联系人信息如下:\n");
printf("%s %d %s\n",q->name,q->age,q->phone);
flag = 1;
}
q = q->next;
}
if(!flag)
{
printf("通讯录中无此成员!\n");
}
}
}
STU *delete(STU *head)//删除链表元素
{
system("clear");
STU *p,*q,*t;
int flag;
p = (STU *) malloc (sizeof(STU));
while(1)
{
flag = 0;
if(num == 0)
{
printf("通讯录内容为空(等待自动跳回主菜单)!\n");
sleep (3);
return head;
}
q = head;
printf("请输入要删除人的姓名(输入quit退回主菜单):\n");
scanf("%s",p->name);
if(!strcmp(p->name,"quit"))
{
return head;
}
while(strcmp(q->name,p->name) && q->next != NULL)
{
t = q;
q = q->next;
}
if(!strcmp(q->name,p->name))
{
flag = 1;
if(q == head)
{
head = q->next;
}
else
{
t->next = q->next;
}
free(q);
--num;
printf("删除成功!\n");
}
if(!flag)
{
printf("通讯录中无此成员!\n");
}
}
}
STU *create()//新建链表
{
system("clear");
STU *head,*p1,*p2;
num = 0;
p1 = p2 = (STU *) malloc (sizeof(STU));
printf("请输入联系人的姓名、年龄和电话!(输入quit退回主菜单):\n");
scanf("%s",p1->name);
head = NULL;
while(strcmp(p1->name,"quit"))
{
scanf("%d",&p1->age);
scanf("%s",p1->phone);
++num;
if(num == 1)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (STU *) malloc (sizeof(STU));
printf("请输入联系人的姓名、年龄和电话(输入quit退回主菜单)!\n");
scanf("%s",p1->name);
}
p2->next = NULL;
return head;
}
void print(STU *head)//打印链表
{
system("clear");
getchar();
int flag = 1;
STU *q;
q = head;
if(!num)
{
flag = 0;
}
if(!flag)
{
printf("当前通讯录内容为空!\n");
}
else
{
printf("当前通讯录内容为:\n");
if(head != NULL)
{
do
{
printf("%s %d %s\n",q->name,q->age,q->phone);
q = q->next;
}while(q != NULL);
}
}
printf("请按任意键退出!\n");
getchar();
}
void sort(STU *head)//给链表元素排序
{
system("clear");
getchar();
int i,j,flag = 1;
STU *p,*q;
STU temp = {0};
p = head;
q = head;
if(!num)
{
flag = 0;
}
if(!flag)
{
printf("当前通讯录内容为空!\n");
}
else
{
for(i = 0;i < num - 1;i++)
{
p = q;
for(j = 0;j < num - 1 - i;j++)
{
if(strcmp(p->name,p->next->name) > 0)
{
strcpy(temp.name,p->next->name);
strcpy(p->next->name,p->name);
strcpy(p->name,temp.name);
temp.age = p->next->age;
p->next->age = p->age;
p->age = temp.age;
strcpy(temp.phone,p->next->phone);
strcpy(p->next->phone,p->phone);
strcpy(p->phone,temp.phone);
}
p = p->next;
}
}
printf("按联系人名字排序后的通讯录内容为:\n");
if(head != NULL)
{
do
{
printf("%s %d %s\n",q->name,q->age,q->phone);
q = q->next;
}while(q != NULL);
}
}
printf("请按任意键退出!\n");
getchar();
}
void welcome()
{
system("clear");
printf("\n\n\n\n\n");
printf(RED" 欢迎来到主菜单!\n"NONE);
sleep(3);
}
int menue()
{
system("clear");
printf(RED"\n\n\n\n 主菜单\n\n\n"NONE);
printf(RED"1.新建通讯录 2.查看信息\n"NONE);
printf(RED"3.查找信息 4.删除信息\n"NONE);
printf(RED"5.修改信息 6.插入信息\n"NONE);
printf(RED"7.排序 8.退出通讯录\n"NONE);
printf(RED"请输入序号进入指定功能\n"NONE);
}