通讯录(链表)

代码段如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define size 10
typedef struct information STU;
int person = 0;

struct information
{
	char name[20];
	int year;
	struct information *next;
};

void welcome()
{
	system("clear");
	printf("\n\n\n\n\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
	printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
	printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
	printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
	printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
	printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
	printf("\033[1m\033[44;31m*************************WELCOME************************* \033[0m\n");
	sleep(1);
}

void menu()
{
	system("clear");
	printf("\n\n\n\n\033[1m\033[42;35m*****************Welcome******************\033[0m\n");
	printf("\033[1m\033[45;33m1、添加信息\033[0m                          \033[5m\033[47;34m2、查找信息\033[0m\n");
	printf("\033[7m\033[1m\033[42;31m3、删除信息\033[0m                          \033[1m\033[46;35m4、修改信息\033[0m\n");
	printf("\033[4m\033[1m\033[41;34m5、查看信息\033[0m                          \033[5m\033[43;35m6、退出\033[0m\n");
	printf("\033[1m\033[5m\033[44;35m""***************请输入你想使用功能的序号****************""\033[0m\n");
}

void Init(STU **head)
{
	if(*head == NULL)
	{
		*head = (STU *)malloc(sizeof(STU));
		(*head)->next = NULL;
	}
}
int add(STU *head)
{
	system("clear");
	int t;
	char temp[20];
lo:	printf("请输入联系人的年龄和名字:\n");
	scanf("%s%d", temp, &t);
	if(head == NULL)
	{
		printf("插入失败!\n");
		return -1;
	}
	STU *p = head;
	while(p->next != NULL)
	{
		p = p->next;
	}
	STU *q = (STU *)malloc(sizeof(STU));
	strcpy(q->name, temp);
	q->year = t;
	p->next = q;
	q->next = NULL;
	
	int i;
	printf("您还想继续添加联系人吗,如果想输入1,不想输入0\n");
	scanf("%d", &i);

	if(i == 0)
	{
		return -1;
	}
	else
	{
		goto lo;
	}
}

int seek(STU *head)
{
	system("clear");
	char temp[20];
	if(head == NULL || head->next == NULL)
	{
		printf("列表中无联系人!\n");
		return -1;
	}
lp:	printf("请输入您要查找的联系人:\n");
	scanf("%s", temp);
	STU *p = head->next;
	while(p)
	{
		if(!strcmp(p->name, temp))
		{
			printf("查到此人如下:\n%s	%d\n", p->name, p->year);
			break;
		}
		p = p->next;
	}
	if(p == NULL)
	{
		int i;
		printf("不好意思,联系簿中并没有您想找的人!\n是否还想继续查找其他人,若想输入1,不想输入0\n");
		scanf("%d", &i);
		if(i == 0)
		{
			return -1;
		}
		else
		{
			goto lp;
		}
	}

	int q;
	printf("您还想继续查看其他人吗,若想输入1,不想输入0\n");
	scanf("%d", &q);

	if(q == 0)
	{
		return -1;
	}
	else
	{
		goto lp;
	}
}

int delete(STU *head)
{
	system("clear");
	char temp[20];
rp:	if(head == NULL || head->next == NULL)
	{
		printf("列表中无联系人\n");
		return -1;
	}

	int flag = 0;

	printf("选择你想删除的联系人并输入他(她)(它)的名字\n");
	scanf("%s", temp);

	STU *p = head;
	while(p->next)
	{
		STU *q = p->next;
		if(!strcmp(q->name, temp))
		{
			p->next = q->next;
			free(q);
			printf("删除成功!\n");
			flag = 1;
			break;
		}
		p = p->next;
	}
	if(p->next == NULL && flag == 0)
	{
		int i;
		printf("列表中没有您想删除的联系人\n如果想删除其他联系人请输入1不想输入0\n");
		scanf("%d", &i);
		if(i == 0)
		{
			return -1;
		}
		else
		{
			goto rp;
		}
	}

	int j;
	printf("是否还想删除其他联系人,若想输入1,不想输入0\n");
	scanf("%d", &j);
	if(j == 0)
	{
		return -1;
	}
	else
	{
		goto rp;
	}
}
int alter(STU *head)
{
	system("clear");
	char temp[20];
jp:	if(head == NULL || head->next == NULL)
	{
		printf("列表中没有联系人\n");
		sleep(2);
		return -1;
	}
	printf("请输入你要修改的信息的人名:\n");
	scanf("%s", &temp);

	STU *p = head->next;
	while(p)
	{
		if(!strcmp(p->name, temp))
		{
			printf("您想修改人联系人信息如下:\n%s	%d\n请输入您修改后的联系人姓名和年龄:\n", p->name, p->year);
			scanf("%s%d", p->name, &p->year);
			printf("修改成功!\n");
			break;
		}
		p = p->next;
	}
	if(p == NULL)
	{
		int i;
		printf("不好意思,列表中并没有您想修改的人,如果想继续修改其他人的信息请输入1,不想输入0\n");
		scanf("%d", &i);
		if(i == 0)
		{
			return -1;
		}
		else
		{
			goto jp;
		}
	}

	int o;
	printf("您还想继续修改其他人的信息吗,如果想输入1,不想输入0\n");
	scanf("%d", &o);
	if(o == 0)
	{
		return -1;
	}
	else
	{
		goto jp;
	}
}

int checker(STU *head)
{
	system("clear");
	getchar();
	if(head == NULL || head->next == NULL)
	{
		printf("列表中无联系人!\n");
		sleep(2);
		return -1;
	}
	STU *q = head->next;
	char temp[20];
	
	while(q->next)
	{
		STU *p = q->next;
		while(p)
		{
			if(strcmp(q->name, p->name) > 0)
			{
				strcpy(temp, q->name);
				strcpy(q->name, p->name);
				strcpy(p->name, temp);
			}
			p = p->next;
		}
		q = q->next;
	}

	q = head->next;
	while(q)
	{
		printf("%s	%d\n", q->name, q->year);
		q = q->next;
	}
	printf("按任意键退出查看\n");
	getchar();
}

int main()
{
	struct information *head = NULL;
	int num;
	welcome();
	Init(&head);
	while(1)
	{
		menu();
	lop:printf("请输入你想要执行的功能序号:\n");
		scanf("%d",&num);
		switch(num)
		{
			case 1:
				add(head);
				break;
			case 2:
				seek(head);
				break;
			case 3:
				delete(head);
				break;
			case 4:
				alter(head);
			    break;
			case 5:
				checker(head);
				break;
			case 6:
				exit(0);
				break;
			default:
				goto lop;
		}
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值