今日任务:用链表完成通讯录
完成情况:已完成
代码如下:
#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;
}
}
}