用链表写通讯录

初步实现了新建,删除,查找,显示,修改的功能,排序还在修改

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

void del();
void print();
struct book *creat();



struct book
{
	char name[10];
	int tel;
	char sex[5];
	int age;

	struct book *next;
};


struct book *creat()          //新建
{
	struct book *h,*in,*last;
	char na[10]={0},se[5]={0};
	int te,ag;
	 
	h=(struct book *)malloc(sizeof(struct book));
	last=h;
	printf("请输入你想要录入的联系人信息,输入(over)结束\n");
	printf("姓名 电话 性别 年龄\n");
	scanf("%s%d%s%d",na,&te,se,&ag);

	while(strncmp(na,"over",4)!=0)
	{
		printf("______________\n");
		in=(struct book *)malloc(sizeof(struct book));
		strcpy(in->name,na);
		in->tel=te;
		strcpy(in->sex,se);
		in->age=ag;

		last->next=in;
		last=in;
		scanf("%s%d%s%d",na,&te,se,&ag);

	}
	last->next='\0';
	printf("\n");
	printf("\n");
	printf("\n");
	printf("\n");
	return h;	
}



void print(struct book *head)          //打印
{

	struct book *q;
	q=head->next;
	printf("通讯录内容如下:\n");
	if(!q)
	{
		printf("null\n");
	}
	else
	{
		do
		{
			printf("%s %d %s %d\n", q->name, q->tel, q->sex, q->age);
			q=q->next;
		}
		while(q);
	}
}



void del(struct book *head)
{
	struct book *p,*q;
	int x,y;
	char a[10];

	p=head->next;
	q=head;

//	printf("当前已有联系人如下:\n");
	print(q);
	printf("\n");

	printf("请输入你想删除的人的姓名\n");
	printf("请输入:");
	scanf("%s",a);
	while((strcmp(p->name,a)!=0)&&(p!=0))
	{
		q=p;
		p=p->next;
	}

	if(strcmp(p->name,0)==0)
	{
		printf("找不到该联系人\n");              //无法使用
	//	return 0;
		del(head);
	}
	else
	{

		printf("确认删除该联系人? 1是  2否\n");
		printf("请输入:");
		scanf("%d",&x);
		if(x==1)
		{
			q->next=p->next;
			free(p);
		//	return 1;
		}
		else
		{
			printf("你在逗我???\n");
		}
	}

	printf("是否还要继续删除? 1是 2否\n");
	printf("请输入:");
	scanf("%d",&y);
	if(y==1)
	{
		del(head);
	}
	else
	{
		printf("完成\n");
	}
}


void find(struct book *head)
{
	struct book *p;
	int x,y,k;
	char a[10];

	p=head->next;


	printf("请输入你想使用的查找方式: 1 姓名 2 电话 3 年龄\n");
	printf("请输入:");
	scanf("%d",&x);
	
	if(x==1)
	{
		printf("请输入你想查找的姓名:\n");
		printf("请输入:");
		scanf("%s",a);
		while((strcmp(p->name,a)!=0)&&(p!=0))
		{
			p=p->next;
		}
	
		if(p==0)
			printf("未找到该联系人:\n");
		else
		{
		printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
		}
	}

	if(x==2)
	{
		printf("请输入你想查找的电话:\n");
		printf("请输入:");
		scanf("%d",&y);
		while((p->tel!=y)&&(p!=0))
		{
			p=p->next;
		}
		if(p==0)
			printf("未找到该联系人:\n");
		{
		printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
		}
	}

	if(x==3)
	{
		printf("请输入你想查找的年龄:\n");
		printf("请输入:");
		scanf("%d",&y);
		while((p->age!=y)&&(p!=0))
		{
			p=p->next;
		}
		if(p==0)
			printf("未找到该联系人:\n");
		{
		printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
		}
	}

	printf("是否还要继续查找? 1 是 2 否");
	printf("请输入:");
	scanf("%d",&k);
	if(k==1)
		find(head);
	else
		printf("完成\n");
}



void change(struct book *head)
{
	struct book *p;
	int x,y,k,z,i;
	char a[10];

	p=head->next;


	printf("请输入你想使用的查找方式: 1 姓名 2 电话 3 年龄\n");
	printf("请输入:");
	scanf("%d",&x);
	
	if(x==1)
	{
		printf("请输入你想查找的姓名:\n");
		printf("请输入:");
		scanf("%s",a);
		while((strcmp(p->name,a)!=0)&&(p!=0))
		{
			p=p->next;
		}
	
		if(p==0)
			printf("未找到该联系人:\n");
		else
		{
		printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
		printf("请选择你想修改的内容:1 姓名 2电话 3性别 4年龄\n");
		printf("请输入:");
		scanf("%d",&z);
			if(z==1)
			{
			printf("修改为:");
			scanf("%s",p->name);
			}
			if(z==2)
			{
			printf("修改为:");
			scanf("%d",&p->tel);
			}
			if(z==3)
			{
			printf("修改为:");
			scanf("%s",p->sex);
			}
			if(z==4)
			{
			printf("修改为:");
			scanf("%d",&p->age);
			}


		}

	}

	if(x==2)
	{
		printf("请输入你想查找的电话:\n");
		printf("请输入:");
		scanf("%d",&y);
		while((p->tel!=y)&&(p!=0))
		{
			p=p->next;
		}
		if(p==0)
			printf("未找到该联系人:\n");
		{
		printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
		printf("请选择你想修改的内容:1 姓名 2电话 3性别 4年龄\n");
		printf("请输入:");
		scanf("%d",&z);
			if(z==1)
			{
			printf("修改为:");
			scanf("%s",p->name);
			}
			if(z==2)
			{
			printf("修改为:");
			scanf("%d",&p->tel);
			}
			if(z==3)
			{
			printf("修改为:");
			scanf("%s",p->sex);
			}
			if(z==4)
			{
			printf("修改为:");
			scanf("%d",&p->age);
			}
		}

	}

	if(x==3)
	{
		printf("请输入你想查找的年龄:\n");
		printf("请输入:");
		scanf("%d",&y);
		while((p->age!=y)&&(p!=0))
		{
			p=p->next;
		}
		if(p==0)
			printf("未找到该联系人:\n");
		{
		printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
		printf("请选择你想修改的内容:1 姓名 2电话 3性别 4年龄\n");
		printf("请输入:");
		scanf("%d",&z);
			if(z==1)
			{
			printf("修改为:");
			scanf("%s",p->name);
			}
			if(z==2)
			{
			printf("修改为:");
			scanf("%d",&p->tel);
			}
			if(z==3)
			{
			printf("修改为:");
			scanf("%s",p->sex);
			}
			if(z==4)
			{
			printf("修改为:");
			scanf("%d",&p->age);
			}
		}

	}

	printf("现状如下;\n");
	printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
	printf("是否继续修改? 1是  2否\n");
	printf("请输入:");
	scanf("%d",&i);
	if(i==1)
		change(head);
	else
		printf("完成\n");
}

void paixu(struct book *head)
{
	struct book *p,*q,*len,*tmp;
	int count=0,i,j,x;

	len=head;
	tmp=head;
	while(len->next!=NULL)
	{
		count++;
		len=len->next;
	}

	q=head;
	p=head->next;

	printf("请选择你的排序方式: 1姓名 2电话 3性别 4年龄\n");
	printf("请输入:");
	scanf("%d",&x);

	if(x==1)
	{
		for(i=0;i<count-1;i++)
		{
			for(j=0;j<count-1;j++)
			{
				if(strcmp(q,p)<0)
				{
					*tmp=*p;
					*p=*q;
					*q=*tmp
				}

			}
		}

	}
}


main()
{
	struct book *head;
	head=creat();
//	print(head);
//	del(head);
//	find(head);
	change(head);
}

猜你喜欢

转载自blog.csdn.net/qq_42719683/article/details/81265276