#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct peo{
char name[20];
char street[20];
char city[20];
char eip[20];
char state[20];
struct peo *next;
}PEO;
PEO *creat()
{
PEO *head,*tail,*p;
char
na[20],str[20],ci[20],ei[20],sta[20],s[3]={"00"};
int
size=sizeof(PEO);
head=tail=NULL;
printf("请输入姓名,街道,城市,邮编,国家(姓名为00时表示输入结束):\n");
scanf("%s%s%s%s%s",na,str,ci,ei,sta);
while(strcmp(na,s))
{
p=(PEO *)malloc(size);
strcpy(p->name,na);
strcpy(p->street,str);
strcpy(p->city,ci);
strcpy(p->eip,ei);
strcpy(p->state,sta);
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
printf("请输入姓名,街道,城市,邮编,国家:\n");
scanf("%s%s%s%s%s",na,str,ci,ei,sta);
}
return head;
}
void initial(PEO *h)
{
h=NULL;
}
void sort(PEO *h)
{
PEO *p,*q,*s;
char
t[20];
p=h;
while(p)
{
s=p;
q=p->next;
while(q)
{
if(strcmp(q->name,s->name)<=0)
s=q;
q=q->next;
}
if(s!=p)
{
strcpy(t,p->name);
strcpy(p->name,s->name);
strcpy(s->name,t);
}
p=p->next;
}
}
PEO *enter(PEO *h)
{
PEO *p,*p0;
p=(PEO *)malloc(sizeof(PEO));
printf("请输入所要添加的人的姓名,街道,城市,邮编,国家:\n");
scanf("%s%s%s%s%s",p->name,p->street,p->city,p->eip,p->state);
p->next=NULL;
if(h==NULL)
{
h=p;
printf("添加成功!\n");
return h;
}
p0=h;
if(strcmp(p0->name,p->name)>0)
{
p->next=h;
h=p;
printf("添加成功!\n");
return h;
}
while(p0->next!=NULL&&strcmp(p0->next->name,p->name)<0)
p0=p0->next;
if(p0->next==NULL)
{
p0->next=p;
printf("添加成功!\n");
return h;
}
else
if(!strcmp(p0->next->name,p->name))
{
printf("记录已存在!\n");
free(p);
return h;
}
else
{
p->next=p0->next;
p0->next=p;
printf("添加成功!\n");
return h;
}
}
void display(PEO *h)
{
PEO *ptr;
if(h==NULL)
{
printf("没有记录!\n");
return ;
}
printf("所有人情况如下:\n");
printf("
姓名
街道
城市
邮编
国家\n");
for(ptr=h;ptr!=NULL;ptr=ptr->next)
printf("%6s%10s%10s%10s%10s\n",ptr->name,ptr->street,ptr->city,ptr->eip,ptr->state);
printf("\n");
}
void search(PEO *h)
{
char s[20];
PEO *ptr;
ptr=h;
if(ptr==NULL)
{
printf("没有记录!\n");
return ;
}
printf("请输入所要查找人的姓名:\n");
scanf("%s",s);
for(
;ptr!=NULL;ptr=ptr->next)
if(!strcmp(ptr->name,s))
{
printf("此人情况如下:\n");
printf("
姓名
街道
城市
邮编
国家\n");
printf("%6s%10s%10s%10s%10s\n",ptr->name,ptr->street,ptr->city,
ptr->eip,ptr->state);
return
;
}
printf("查无此人!\n");
}
PEO *delet(PEO *h)
{
char s[20];
PEO *p,*p0;
if(h==NULL)
{
printf("没有记录!\n");
return h;
}
printf("请输入所要删除人的姓名:\n");
scanf("%s",s);
p0=h;
if(!strcmp(p0->name,s))
{
h=p0->next;
free(p0);
printf("删除成功!\n");
return h;
}
p=p0->next;
while(p!=NULL)
{
if(!strcmp(p->name,s))
{
p0->next=p->next;
free(p);
printf("删除成功!\n");
return
h;
}
p0=p;
p=p->next;
}
printf("没有此人的记录!\n");
return h;
}
void save(PEO *h)
{
FILE *fp;
PEO *ptr;
int size=sizeof(PEO);
ptr=(PEO *)malloc(sizeof(PEO));
ptr=h;
if((fp=fopen("people.txt","w"))==NULL){
printf("can not open the
file!\n"); exit(0);
}
for(ptr=h;ptr!=NULL;ptr=ptr->next)
fprintf(fp,"%6s%10s%10s%10s%10s\n",ptr->name,ptr->street,ptr->city,ptr->eip,ptr->state);
printf("保存成功!\n");
if(fclose(fp)){
printf("Can not close file
people.txt!\n"); exit(0);
}
}
PEO *load(PEO *h)
{
FILE *fp;
PEO *ptr;
int size=sizeof(PEO);
ptr=(PEO *)malloc(size);
ptr=h;
if((fp=fopen("people.txt","r"))==NULL){
printf("can not open the
file!\n"); exit(0);
}
while(!feof(fp)){
fscanf(fp,"%6s%10s%10s%10s%10s\n",ptr->name,ptr->street,ptr->city,ptr->eip,ptr->state);
ptr=ptr->next;
}
printf("已成功载入!\n");
if(fclose(fp)){
printf("Can not close file
people.txt!\n"); exit(0);
}
return h;
}
void main()
{
int k;
PEO *head;
char s[20],c[20]={'1'};
printf("欢迎进入通讯录管理系统,请先建立原始记录!\n");
head=creat();
do{
printf("查询请按1,添加记录请按2,删除记录请按3,显示全部请按4,保存记录请按5,载入记录请按6!\n");
scanf("%d",&k);
while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=6){
printf("请输入1或2或3或4或5或6!\n");
scanf("%d",&k);
}
switch(k){
case 1:
do{
search(head);
printf("继续查询请按1,按其他键退出查询!\n");
scanf("%s",s);
}while(!strcmp(s,c));
break;
case 2:
do{
sort(head);
head=enter(head);
printf("继续添加请按1,按其他键退出添加!\n");
scanf("%s",s);
}while(!strcmp(s,c));
break;
case 3:
do{
sort(head);
head=delet(head);
printf("继续删除请按1,按其他键退出删除!\n");
scanf("%s",s);
}while(!strcmp(s,c));
break;
case 4:
{
sort(head);
display(head);
}
break;
case 5:
{
sort(head);
save(head);
}
break;
case 6:
{
initial(head);
head=load(head);
}
break;
}
printf("继续服务请按1,按其他键退出服务!\n");
scanf("%s",s);
}while(!strcmp(s,c));
}
加载中,请稍候......