#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define null 0
#define TYPE struct telbook
void menue();
void add();
void list();
void over();
void findByname();
void findBytel();
void updateByname();
void updateBytel();
void detelByname();
void detelBytel();
struct telbook
{
char name[50];
int tel;
struct telbook *next;
}*head,*pf;
int count=0;
void menue()
{
int flag;
printf("***************************************/n");
printf("*** 請選擇: ***/n");
printf("*** 1:添加一個新聯繫人 ***/n");
printf("*** 2:列出所有聯繫人 ***/n");
printf("*** 3:根據姓名查找某人信息 ***/n");
printf("*** 4:根據電話號碼查找某人信息 ***/n");
printf("*** 5:根據姓名修改某人信息 ***/n");
printf("*** 6:根據電話號碼修改某人信息 ***/n");
printf("*** 7:根據姓名刪除某人信息 ***/n");
printf("*** 8:根據電話號碼刪除某人信息 ***/n");
printf("*** 0:退出系統 ***/n");
printf("***************************************/n");
printf("/n/n/n/n");
scanf("%d",&flag);
while(flag!=1&&flag!=0&&flag!=2&&flag!=3&&flag!=4&&flag!=5&&flag!=6&&flag!=7&&flag!=8)
{
printf("請選擇正確的操作:/n");
scanf("%d",&flag);
}
switch(flag)
{
case 1 :add();menue();break;
case 2 :list();menue();break;
case 3 :findByname();menue();break;
case 4 :findBytel();menue();break;
case 5 :updateByname();menue();break;
case 6 :updateBytel();menue();break;
case 7 :detelByname();menue();break;
case 8 :detelBytel();menue();break;
case 0 :over();
default:;
}
}
void findBytel()
{
TYPE *p=head;
int tel;
int flag=0;
printf("請輸入電話號碼:/n");
scanf("%d",&tel);
printf("姓名/t電話號碼/t:/n");
while(p)
{
if(p->tel==tel)
{
printf("%s/t",p->name);
printf("%d/t/n",p->tel);
flag=1;
}
p=p->next;
}
if(flag==0)
printf("沒有你要查找的號碼的人的信息!/n");
}
void findByname()
{
TYPE *p=head;
char name[20];
int flag=0;
printf("請輸入姓名:/n");
scanf("%s",name);
printf("姓名/t電話號碼/t:/n");
while(p)
{
if(strcmp(name,p->name)==0)
{
printf("%s/t",p->name);
printf("%d/t/n",p->tel);
flag=1;
}
p=p->next;
}
if(flag==0)
printf("沒有你要查找的人的信息!/n");
}
void main()
{
menue();
}
void add()
{
TYPE *pb;
pb=(struct telbook *)malloc(sizeof(struct telbook));
while(pb==null)
{
printf("申請空間失敗!/n");
pb=(struct telbook *)malloc(sizeof(struct telbook));
}
printf("請輸入聯繫人的姓名:/n");
scanf("%s",&pb->name);
printf("請輸入聯繫人的電話號碼:/n");
scanf("%d",&pb->tel);
pb->next=null;
if(count==0)
{
pf=head=pb;
count++;
}
else
{
pf->next=pb;
pf=pb;
count++;
}
printf("添加信息成功:/n");
}
void list()
{
struct telbook *p=head;
printf("姓名/t電話號碼/t:/n");
while(p!=null)
{
printf("%s/t",p->name);
printf("%d/t",p->tel);
printf("/n");
p=p->next;
}
}
void updateByname()
{
TYPE *p=head;
char name[20];
int flag=0;
int tel;
printf("請輸入姓名:/n");
scanf("%s",name);
while(p)
{
if(strcmp(p->name,name)==0)
{
printf("輸入新號碼:/n");
scanf("%d",&tel);
p->tel=tel;
flag=9;
printf("修改成功!/n");
}
p=p->next;
}
if(flag==0)
printf("沒有 查詢的人/n");
}
void updateBytel()
{
TYPE *p=head;
char name[20];
int flag=0;
int tel;
printf("請輸入電話號碼:/n");
scanf("%d",&tel);
while(p)
{
if(p->tel==tel)
{
printf("輸入新姓名:/n");
scanf("%s",name);
strcpy(p->name,name);
flag=9;
printf("修改成功!/n");
}
p=p->next;
}
if(flag==0)
printf("沒有 查詢的人/n");
}
void detelByname()
{
TYPE *p,*q;
char name[20];
int flag;
q=p=head;
flag=0;
printf("請輸入姓名:/n");
scanf("%s",name);
while(p)
{
if(strcmp(p->name,name)==0)
q->next=p->next;
q=p;
p=p->next;
free(p);
flag=9;
printf("刪除成功/n");
}
if(flag==0)printf("沒有要刪除的信息/n");
}
void detelBytel()
{
TYPE *p,*q;
int flag=0;
int tel;
q=p=head;
printf("請輸入電話號碼:/n");
scanf("%d",&tel);
while(p)
{
if(p->tel==tel)
{
q->next=p->next;
q=p;
p=p->next;
free(p);
flag=1;
printf("刪除成功/n");
}
}
if(flag==0)
printf("沒有要刪除的人/n");
}
void over()
{
TYPE *pb,*p;
pb=p=head;
while(pb)
{
p=pb;
pb=pb->next;
free(p);
}
exit(1);
}