链表通讯录,优化过,基本完成
#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;
}
}
}