#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1000
#define RED "\033[0;32;31m"
#define NONE "\033[m"
int num;
struct student
{
char name[20];
int age;
char phone[20];
struct student * next;
};
typedef struct student STU;
STU *insert(STU *head)
{
system("clear");
int location,count,flag;
STU *p,*q1,*q2;
p = (STU *) malloc (sizeof(STU));
while(1)
{
flag = 0;
count = 1;
if(num == 0)
{
printf("通讯录内容为空(等待自动跳回主菜单)\n");
sleep (3);
return head;
}
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",&location);
q2 = head;
while(count != location && q2->next != NULL)
{
q1 = q2;
q2 = q2->next;
++count;
}
if(count == location)
{
flag = 1;
if(location == 1)
{
head = p;
p->next = q2->next;
}
else
if(location == num + 2)
{
q2->next = p;
p->next = NULL;
}
else
{
q1->next = p;
p->next = q2;
}
++num;
printf("插入成功\n");
}
if(!flag)
{
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("%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();
STU *p;
printf("当前通讯录内容为:\n");
p = head;
if(head != NULL)
{
do
{
printf("%s %d %s\n",p->name,p->age,p->phone);
p = p->next;
}while(p != 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"5.退出通讯录\n"NONE);
printf(RED"请输入序号进入指定功能\n"NONE);
}
int main()
{
STU *head;
int choice;
welcome();
while(1)
{
M: menue();
scanf("%d",&choice);
switch(choice)
{
case 1:
{
head = create();
break;
}
case 2:
{
print(head);
break;
}
case 3:
{
search(head);
break;
}
case 4:
{
head = delete(head);
break;
}
case 5:
{
/*transfer(per);
break;*/
}
case 6:
{
head = insert(head);
break;
}
case 7:
{
exit (0);
break;
}
default:
{
goto M;
}
}
}
return 0;
}
通讯录链表2.0实现(删除功能BUG已解决,插入功能仍有BUG)
猜你喜欢
转载自blog.csdn.net/ZCzhouchao1/article/details/81394268
今日推荐
周排行