C语言实现通讯录(链表实现)

 用c语言实现简易通讯录,代码初稿如下:


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

#define LEN sizeof(struct information)

typedef struct information
{
	char name[20];
	char id[20];
	char phone[20];
	char home[20];
	struct information *next;
}INFO;


/*face()用来显示通讯录的基本功能选择。*/
void face()
{
	printf("****************************\n");
	printf("1:显示通讯录已有信息。\n");
	printf("2:添加通讯录人员信息。\n");
	printf("3:删除通讯录人员信息。\n");
	printf("4:修改通讯录人员信息。\n");
	printf("5:查找通讯录人员信息。\n");
	printf("9:清屏。\n");
	printf("0:退出通讯录。\n");
	printf("****************************\n");
}


/*print()用来显示通讯录已有信息。*/
INFO *print(INFO *head)
{
	INFO *p;
	p = head;
	system("clear");

	if(head != NULL)
	{
		printf("已有成员如下:\n");
		while(p != NULL)
		{
			printf("姓名:%s\n",p->name);
			printf("ID:%s\n",p->id);
			printf("电话号码:%s\n",p->phone);
			printf("家庭住址:%s\n\n",p->home);
			p = p->next;
		}
	}
	else
	{
		printf("通讯录目前无信息!\n\n");
	}
	return head;
	
}


/*add()添加通讯录信息,将信息存入p0节点*/
INFO *add(INFO *head)
{
	INFO *p0 = NULL, *p1, *p2;
	p0 = (INFO *)malloc(LEN);
	p1 = head;
	p2 = head;
	
	printf("请输入你需要添加的成员信息:\n");
	printf("****************************\n");
	printf("姓名:");
	scanf("%s",p0->name);
	printf("ID:");
	scanf("%s",p0->id);
	printf("电话号码:");
	scanf("%s",p0->phone);
	printf("家庭住址:");
	scanf("%s",p0->home);
	
	/*再将节点p0存入链表*/
	/*
	if(head == NULL)
	{
		head = p0;
		head->next = NULL;	
		return head;
	}
	else
	{
		p2->next = p1;
		p2 = p1;
	}while(p1->next != NULL);
	p1->next = p0;
	p0->next = NULL;
	return head;
	*/
	
	
	if(head==NULL)
	{
		head=p0;
		p0->next=NULL;
	}
	else
	{
		while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))
		{
			p2=p1;
			p1=p1->next;
		}
		if((strcmp(p0->name,p1->name))<=0)
		{
			if(head==p1)
				head=p0;
			else
				p2->next=p0;
			p0->next=p1;
		}
		else
		{
			p1->next=p0;
			p0->next=NULL;
		}
		printf("恭喜你!!成功添加了联系人信息!!");
		printf("\n************************************************************\n");
		printf("\n\n");
	}
	return(head);
	
}


/*delete()删除通讯录人员信息。*/
INFO *delete(INFO *head)
{
	INFO *p1, *p2;
	char name[10];
	p1 = head;
	p2 = head;
	
	printf("请以姓名为关键字,输入需要删除的成员信息:\n");
	printf("****************************\n");
	scanf("%s",name);
	
	if(head != NULL)
	{
		while(p1 != NULL)
		{
			if(0 == strcmp(p1->name,name))
			{
				if(head != p1)
				{
					p2->next = p1->next;
				}
				else
				{
					head = p1->next;
				}
				free(p1);
				printf("删除成功。\n");
				return head;
			}
			else
			{
				p2 = p1;
				p2->next = p1;
			}
		}
		printf("查无此人。\n");
	}
	else
	{
		printf("目前通讯录为空。\n");
		return head;
	}
	
}


/*rev()修改通讯录人员信息。*/
INFO *revise(INFO *head)
{
	INFO *p1, *p2;
	char name[10];
	p1 = head;
	p2 = head;
	
	printf("请以姓名为关键字,输入需要修改的成员信息:\n");
	printf("****************************\n");
	scanf("%s",name);
	
	if(head != NULL)
	{
		while(p1 != NULL)
		{
			if(0 == strcmp(p1->name,name))
			{
				printf("请根据提示修改成员信息:\n");
				printf("将姓名%s修改为:",p1->name);
				scanf("%s",p1->name);
				printf("将ID%s修改为:",p1->id);
				scanf("%s",p1->id);
				printf("将电话号码%s修改为:",p1->phone);
				scanf("%s",p1->phone);
				printf("将家庭住址%s修改为:",p1->home);
				scanf("%s",p1->home);
				printf("修改成功。\n");
				return head;
				
			}
			else
			{
				p2 = p1;
				p2->next = p1;
			}
		}
		printf("查无此人。\n");
	}
	else
	{
		printf("目前通讯录为空。\n");
	}
	
}


/*search()查找通讯录人员信息。*/
INFO *search(INFO *head)
{
	INFO *p1, *p2;
	char name[10];
	p1 = head;
	p2 = head;
	
	printf("请以姓名为关键字,输入需要查找的成员信息:\n");
	printf("****************************\n");
	scanf("%s",name);
	
	if(head != NULL)
	{
		while(p1 != NULL)
		{
			if(0 == strcmp(p1->name,name))
			{
				printf("以下是此人信息:\n");
				printf("将姓名%s修改为:",p1->name);
				printf("将ID%s修改为:",p1->id);
				printf("将电话号码%s修改为:",p1->phone);
				printf("将家庭住址%s修改为:",p1->home);
				printf("\n");
				return head;
			}
			else
			{
				p2 = p1;
				p2->next = p1;
			}
		}
		printf("查无此人。\n");
	}
	else
	{
		printf("目前通讯录为空。\n");
	}
	
}


int main()
{
	int choose;
	INFO *head = NULL;
	head = (INFO *)malloc(LEN);
	system("clear");
	
	while(1)
	{
		printf("请输入你需要进行的操作号码:\n");
		face();
		
		scanf("%d",&choose);
		switch(choose)
		{
			case 0:return 0;
			case 1:head = print(head);break;
			case 2:head = add(head);break;
			case 3:head = delete(head);break;
			case 4:head = revise(head);break;
			case 5:head = search(head);break;
			case 9:system("clear");break;
			default :printf("输入错误!\n");break;
		}
	
	}
}

猜你喜欢

转载自blog.csdn.net/x18261294286/article/details/81191344