0730

链表通讯录,优化过,基本完成

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

//void del();
//void print();
//void find()
//void change()
//void creat()
//
//struct book *creat();



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

	struct book *next;
};


struct book *creat(struct book *h)          //新建
{
	struct book *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,*len;
	int x,y,count=0,i;
	char a[10];

	p=head->next;
	q=head;
	len=head;

//	printf("当前已有联系人如下:\n");
	print(q);
	printf("\n");
	while(len->next!=NULL)
	{
		count++;
		len=len->next;
	}

	printf("请输入你想删除的人的姓名\n");
	printf("请输入:");
	scanf("%s",a);

	for(i=0;i<count;i++)
	{
		if((strcmp(p->name,a)!=0)&&(p!=0))
		{
			q=p;
			p=p->next;
		
		}
		else
			break;
	}

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

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

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


void find(struct book *head)         //查找
{
	struct book *p,*len;
	int x,y,k,count=0,i;
	char a[10];

	p=head->next;
	len=head;

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

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

	if(x==2)
	{
		printf("\n请输入你想查找的电话:\n\n");
		printf("请输入:");
		scanf("%d",&y);
//		while((p->tel!=y)&&(p!=0))
//		{
//			p=p->next;
//		}
		for(i=0;i<count;i++)
		{
			if((p->tel!=y)&&(p!=0))
			{
				p=p->next;
			}
			else
				break;
		}

		if(p==0)
		{
			printf("未找到该联系人:\n\n");
			find(head);
		}
		else
		{
		printf("姓名: %s 电话: %d 性别: %s 年龄: %d\n", p->name, p->tel, p->sex, p->age);
		}
	}

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

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



void change(struct book *head)
{
	struct book *p,*len;
	int x,y,k,z,i,count=0,r,n;
	char a[10];

	p=head->next;
	len=head;

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

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

		for(r=0;r<count;r++)
		{
			if((p->tel!=y)&&(p!=0))
			{
				p=p->next;
			}
			else
				break;
		}

		if(p==0)
		{
			printf("未找到该联系人:\n");
			change(head);
		}
		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==3)
	{
		printf("请输入你想查找的年龄:\n");
		printf("请输入:");
		scanf("%d",&y);
//		while((p->age!=y)&&(p!=0))
//		{
//			p=p->next;
//		}

		for(r=0;r<count;r++)
		{
			if((p->age!=y)&&(p!=0))
			{
				p=p->next;
			}
			else
				break;
		}

		if(p==0)
		{
			printf("未找到该联系人:\n");
			change(head);
		}
		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);
			}
		}

	}

	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;
	char na[10],se[10];
	int te,ag;

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

	q=head;
	p=head->next;

	for(i=0;i<count;i++)
	{
		printf("1111");
		for(j=0;j<count;j++)
		{
			q=p;
			p=p->next;
			
			if( (strcmp(q->name,p->name)<0)&&(p!=0) )
			{
				strcpy(na,p->name);
				strcpy(p->name,q->name);
				strcpy(q->name,na);

				strcpy(se,p->sex);
				strcpy(p->sex,q->sex);
				strcpy(q->sex,se);

				te=(p->tel);
				(p->tel)=(q->tel);
				(q->tel)=te;

				ag=(p->age);
				(p->age)=(q->age);
				(q->age)=ag;

			}
			
			

		}

	}
	print(head);
	
}


void menu()
{
        
        
          //  system("cls");
           
	printf("\n\n\n\n******************************************\n");
	printf("\n*******************通讯录*****************\n");
	printf("\n           按1*************显示录\n");
	printf("\n           按2***************新建\n");
	printf("\n           按3***************删除\n");
	printf("\n           按4***************查找\n");
	printf("\n           按5***************修改\n");
	printf("\n           按6***************排序\n");
	printf("\n           按7***************结束\n");
	printf("\n********************************************\n");
	printf("\n********************************************\n");
}


int main()
{
    
    int choice;
	struct book *head;

	system("color F2");

    while(1)
    {
        menu();
        printf("请输入命令:");
        scanf("%d",&choice);

        switch(choice)
		{
        case 1:
            print(head);
            break;
        case 2:
            head=creat(head);
            break;
        case 3:
			del(head);
            break;
        case 4:
			find(head);
            break;
        case 5:
			change(head);
            break;
       case 6:
			paixu(head);
            break;
        case 7:
            exit(0);
            break;
		}
		

    }
}

猜你喜欢

转载自blog.csdn.net/qq_42719683/article/details/81290480
073
030
730
今日推荐