链表通讯录

今日任务:用链表完成通讯录

完成情况:已完成

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define size 1000
#define SUCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003

int person=0;

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

	struct book *next;
};
/* _____________.h__________________*/

typedef struct book BOOK;

int cmp(const void *a,const void *b)
{
	struct book *aa = (struct book *)a;
	struct book *bb = (struct book *)b;
	return(strcmp(aa->name,bb->name)<0?1:-1);
}


int paixu(BOOK *head)
{
	BOOK *q,*len;
	struct book sorry[100];
	int count=0,i;

	len=head;

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

	q=head;

	for(i=0;i<count;i++)
	{
		q=q->next;
		strcpy(sorry[i].name,q->name);	
		sorry[i].tel=q->tel;
		sorry[i].age=q->age;
		strcpy(sorry[i].sex,q->sex);
	}
	qsort(sorry,count,sizeof(sorry[0]),cmp);
	q=head;

	for(i=0;i<count;i++)
	{
		q=q->next;
		strcpy(q->name,sorry[i].name);	
		q->tel=sorry[i].tel;
		q->age=sorry[i].age;
		strcpy(q->sex,sorry[i].sex);
	}
	return SUCESS;
}

int bookinit(BOOK **list)
{
	
	*list = (BOOK *)malloc(sizeof(BOOK)*1);
	if(*list == NULL)
	{
		return FAILURE;
	}


	(*list)->next = NULL;

	return SUCESS;
}


int bookcreat(BOOK *list, int n, char na[], int te, char se[], int ag)
{
	int k=1;
	BOOK *p=list;
	BOOK *q = (BOOK *)malloc(sizeof(BOOK));

	if(list==NULL)
	{
		return FAILURE;
	}

	while(k<n && p!=NULL)
	{
		p=p->next;
		k++;
	}

	if(k>n || p==NULL)
		return FAILURE;
	

	strcpy(q->name,na);
	q->tel = te;
	strcpy(q->sex,se);
	q->age = ag;

	q->next = p->next;
	p->next = q;
	person++;

	return SUCESS;
}

int bookinsert(BOOK *list, int n, char na[], int te, char se[], int ag)
{
	int k=1;
	BOOK *p=list;
	BOOK *q = (BOOK *)malloc(sizeof(BOOK));

	if(list==NULL)
	{
		return FAILURE;
	}

	while(k<n && p!=NULL)
	{
		p=p->next;
		k++;
	}

	if(k>n || p==NULL)
		return FAILURE;
	
	
	strcpy(q->name,na);
	q->tel = te;
	strcpy(q->sex,se);
	q->age = ag;

	q->next = p->next;
	p->next = q;
	person++;

	return SUCESS;
}

int bookprint(BOOK *list)
{
	BOOK *p=list;
	if(p==NULL)
		return FAILURE;

	while(p->next)
	{
		p=p->next;
		printf("姓名:%s  电话:%d  性别:%s  年龄:%d  \n", p->name, p->tel, p->sex, p->age);
	} 
	return SUCESS;
}

int bookfind(BOOK *list, char na[])
{
	int k=1;
	BOOK *p=list->next;
	if(list==NULL)
	{
		return FAILURE;
	}

	while(p)
	{
		if( strcmp(p->name,na)==0 )
		{
			printf("内容如下:");
				printf("姓名:%s  电话:%d  性别:%s  年龄:%d  \n", p->name, p->tel, p->sex, p->age);
				return k;
		}
		p=p->next;
		k++;
	}

	if(p==NULL)
	{
		return FALSE;
	}
}

int bookdel(BOOK *list,int n )
{
	int i;
	BOOK *p=list->next;
	BOOK *q ;
	if(list==NULL)
	{
		return FAILURE;
	}

	for(i=1; i<n-1; i++)
	{
		p=p->next;
	}
	q= p->next;
	
	p->next = q->next;
	free(q);
	person--;

	return SUCESS;
}

int length(BOOK *list)
{
	int i=0;

	if(list==NULL)
	{
		return FAILURE;
	}


	while(list->next)
	{
		list=list->next;
		i++;
	}

	return i;
}

int change(BOOK *list,int n,char na[], int te, char se[], int ag)
{
	int k=1;

	BOOK *p=list;

	if(list==NULL)
	{
		return FAILURE;
	}

	while(k<n&&p!=NULL)
	{
		p=p->next;
		k++;
	}

	if(k>n||p==NULL)
	{
		return FAILURE;
	}
	strcpy(p->name,na);
	p->tel = te;
	strcpy(p->sex,se);
	p->age = ag;
	
	return SUCESS;
}

void menu()
{
        
        
          //  system("cls");
           
	printf("\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           按8***************修改\n");
	printf("\n           按9***************排序\n");
	printf("\n           按10**************结束\n");
	printf("\n********************************************\n");
	printf("\n********************************************\n");
}


int main()
{
	int choice,num;
	int ret;
	int i;

	char na[10],se[10];
	int ag ,te;

	BOOK *list=NULL;
	system("color F2");

	while(1)
	{
		 menu();
		 printf("\n请输入命令:\n\n");
         scanf("%d",&choice);
		switch(choice)
		{
		     case 1:
				 {
					 ret = bookinit(&list);
					 if(ret==SUCESS)
					 
						 printf("\n初始化成功!\n\n");
					 else
						 printf("\n初始化失败!\n\n");
					 break;
				 }				 
			 case 2:
				 {
				  printf("\n请输入你想创建的数量\n\n");	
				  scanf("%d",&num);
				  for(i=1; i<=num; i++)
				  {
					  printf("请输入!:");
					  scanf("%s%d%s%d",na,&te,se,&ag);
					  ret=bookcreat(list,i,na,te,se,ag);

					  if(ret==SUCESS)
						  printf("输入成功!\n");
					  else
						  printf("输入失败!\n");
				  }
				  printf("\n创建完成!\n\n");
				  break;
				 }
			 case 3:
				 {
			         printf("\n请输入你想插入的位置和内容\n\n");
				     printf("位置 姓名 电话 性别 年龄\n");
				     scanf("%d %s%d %s%d",&num,na,&te,se,&ag);
				     ret=bookinsert(list,num,na,te,se,ag);
				     if(ret==SUCESS)
					     printf("\n插入完成!\n\n");
				     else
					     printf("\n插入失败!\n\n");
				     break;
				 }
	    	 case 4:
				 {
		       		ret=bookprint(list);
					if(ret==SUCESS)
						printf("遍历完成!\n");
					else
						printf("遍历失败!\n");
					break;
				 }
             case 5:
				 {
					 printf("\n请输入你想查找的姓名!\n\n");
					 scanf("%s",na);
		     	  ret=bookfind(list,na);
				  if(ret==FAILURE)
					  printf("查找失败!\n\n");
				  else if(ret==FALSE)
					  printf("未找到此人!\n\n");
				  else
					  printf("此人位置为%d",ret);
                  break;
				 }
			 case 6:
				 {
					 printf("\n请输入你想查找的姓名!\n\n");
					 scanf("%s",na);
					 num=bookfind(list,na);
					 if(num==FAILURE)
					  printf("查找失败!\n\n");
				  else if(num==FALSE)
					  printf("未找到此人!\n\n");
				  else
					  printf("此人位置为:%d\n\n",num);

				  ret=bookdel(list,num);
				  if(ret==SUCESS)
					  printf("delet sucess!\n\n");
				  else
					  printf("delet failure!\n\n");
					  break;
				 }
                 
             case 7:
				 {
                      ret=length(list);
					  if(ret==FAILURE)
					  {
						  printf("秋长度失败!\n\n");
					  }
					  printf("\n长度为:%d\n\n",ret);
					  break;
				 }
			 case 8:
				 {
					 printf("\n请输入你想修改的人的姓名:\n\n");
					 scanf("%s",na);
					 num=bookfind(list,na);
					 if(num==FAILURE)
					  printf("查找失败!\n\n");
				  else if(num==FALSE)
					  printf("未找到此人!\n\n");
				  else
					  printf("此人位置为:%d\n\n",num);

				 printf("\n请输入你想修改的内容\n\n");
				     printf("姓名 电话 性别 年龄\n");
				     scanf("%d %s%d %s%d",&num,na,&te,se,&ag);
				     ret=change(list,num,na,te,se,ag);
				  if(ret==SUCESS)
					  printf("修改成功!\n\n");
				  else
					  printf("修改失败!\n\n");	
				   break;
				 }
				
			 case 9:
				 {
					ret = paixu(list);
					if(ret==SUCESS)
						printf("排序成功!\n\n");
					else
						printf("排序失败!\n\n");
					break;
				 }
			 case 10:
				 exit(0);
				 break;
                  

	}
}


}

猜你喜欢

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