链表通讯录的部分功能实现(删除功能仍有BUG)

#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;

void delete(STU *head)
{	
	system("clear");
	while(1)
	{
		STU *p,*q,*t;
		p = (STU *) malloc (sizeof(STU));
		printf("请输入要删除人的姓名\n");
		scanf("%s",p->name);
		if(head == NULL)
		{
			printf("通讯录内容为空\n");
			sleep(3);
			break;
		}
		q = head;
		while(strcmp(q->name,p->name) && q != NULL)
		{
			t = q;
			q = q->next;
		}
		if(!strcmp(q->name,p->name) && q != NULL)
		{
			if(q == head)
			{
				head = q->next;
			}
			else
			{
				t->next = q->next;
			}
			free(q);
			--num;
			printf("删除成功\n");
		}
		if(q == NULL)
		{
			printf("删除失败\n");
		}
		if(!strcmp(p->name,"quit"))
		{
			break;
		}
	}
}

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"请输入序号进入指定功能\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(per);
					break;*/
				}
			case 4:
				{
					delete(head);
					break;
				}
			case 5:
				{
					/*transfer(per);
					break;*/
				}
			case 6:
				{
					exit (0);
					break;
				}
			default:
				{
					goto M;
				}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ZCzhouchao1/article/details/81349065
今日推荐