通讯录(链表版)

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);
}

猜你喜欢

转载自blog.csdn.net/ZCzhouchao1/article/details/81434623