通讯录(链表)

今天主要用链表实现了通讯录;

但蓝色字体即注释掉的部分(链表之间的赋值)还未实现。

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

STU *add()
{
	system("clear");
	STU *p1, *p2, *head;
	printf("请输入联系人的年龄和名字或者输入bye放弃添加联系人:\n");
	p1 = p2 = (STU *)malloc(sizeof(STU));
	scanf("%s", p1->name);
	head = NULL;
	if(!strcmp(p1->name,"bye"))
	{
		return head;
	}
	scanf("%d", &p1->year);
	while(strcmp(p1->name,"bye"))
	{
		person += 1;
		if(person == 1)
		{
			head = p1;
		}
		else
		{
			p2->next = p1;
		}
		p2 = p1;
		p1 = (STU *)malloc(sizeof(STU));
		scanf("%s", p1->name);
		if(!strcmp(p1->name,"bye"))
		{
			p2->next = NULL;
			return head;
		}
		scanf("%d", &p1->year);
	}
}

int seek(STU *head)
{
	int n;
	char temp[20];
	STU *p;
	system("clear");
	if(head == NULL)
	{
		printf("列表中没有联系人\n");
		sleep(3);
		return -1;
	}
up:	printf("请输入一个想要查找的姓名:\n");
	scanf("%s", &temp);
	getchar();
	if(head != NULL)
	{	
		p = head;
		do
		{
			if(!strcmp(p->name, temp))
			{
				printf("%s	%d\n", p->name, p->year);
				getchar();
				break;
			}
			else
			{
				p = p->next;
			}
		}while(p != NULL);
	}
	if(p == NULL)
	{
		printf("没有此人\n");
		printf("您还想继续查找吗?请输入想(1)或者不想(0)\n");
		scanf("%d",&n);
		if(n == 1)
		{
			goto up;
		}
	}
}
/*
int delete(STU *head)
{
	system("clear");
	STU temp;
	STU *p;
	char t[20];
	if(head == NULL)
	{
		printf("列表中无联系人\n");
	}
	int x, flag = 0;
rp:	printf("选择你想删除的联系人并输入他(她)(它)的名字\n");
	scanf("%s", &t);
	if(head != NULL)
	{
		p = head;
		do
		{
			if(!strcmp(t,p->name))
			{
				free(a[i]);
				for(j = i; j < person - 1; j++)
				{
					a[j] = a[j+1];
	            }
				printf("删除成功!\n");
				flag = 1;
				sleep(2);
				break;
			}
		}while(p != NULL);
	}
	if(p == NULL)
	{
		printf("您输入的人我们暂时查找不到阿\n");
		printf("您还想再继续查找其他联系人吗?\n如果想,输入1;不想,输入0\n");
		scanf("%d", &x);
		if(x == 1)
		{
			goto rp;
		}
	}
}
*/
int alter(STU *head)
{
	system("clear");
	char temp[20];
	STU *p;
	int n;
	if(head == NULL)
	{
		printf("列表中没有联系人\n");
		sleep(2);
		return -1;
	}
jp:	printf("请输入你要修改的信息的人名:\n");
	scanf("%s", &temp);
	if(head != NULL)
	{
		p = head;
		do
		{
			if(!strcmp(temp,p->name))
			{		
				printf("此人信息如下:\n");
				printf("%s	%d\n", p->name, p->year);
				printf("请修改名字与年龄:\n");
				scanf("%s%d", p->name, &p->year);
				printf("恭喜修改成功!\n");
				sleep(2);
				break;
			}
			else
			{
				p = p->next;
			}
		}while(p != NULL);
	}
	if(p == NULL)
	{
		printf("您输入的是谁呢,我不认识诶~O~\n您还想修改其他联系人的信息吗?\n如果想输入1,不想输入0\n");
		scanf("%d", &n);
		if(n == 1)
		{
			goto jp;
		}
	}
}

int checker(STU *head)
{
	system("clear");
	STU *p1, *p2;
	char temp[20];
	int t;
	getchar();
	if(head == NULL)
	{
		printf("列表中无联系人\n");
		sleep(2);
		return -1;
	}
	if(head != NULL)
	{
/*		p1 = head;
		p2 = p1->next;
		do
		{
			do
			{
				if(strcmp(p1->name, p2->name) > 0)
				{
					strcpy(temp,p1->name);
					t = p1->year;
					strcpy(p1->name,p2->name);
					p1->year = p2->year;
					strcpy(p2->name,temp);
					p2->year = t;
				}
			}while(p2 != NULL);
			p1 = p1->next;
			p2 = p1->next;
		}while(p1 != NULL);
*/		do
		{
			printf("%s		%d\n", head->name, head->year);
			head = head->next;
		}while(head != NULL);
	}
	printf("按任意键可结束查看\n");
	getchar();
}

int main()
{
	struct information *head = NULL;
	int num;
	welcome();
	while(1)
	{
		menu();
	lop:printf("请输入你想要执行的功能序号:\n");
		scanf("%d",&num);
		switch(num)
		{
			case 1:
				head = add();
				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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值