通讯录管理系统
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define AD struct address_list
struct person
{
char name[20];
char address[40];
long zip;
char phone[15];
};
AD
{
char name[20];
char address[40];
long zip;
char phone[15];
AD *next;
};
FILE *fp;
AD *load(char filename[])
{
AD *p,*q,*head;
struct person per;
head=(AD *)malloc(sizeof(AD));
q=head=NULL;
if((fp=fopen(filename,"rb"))==NULL)
return head;
else
{
while(!feof(fp))
{
if(fread(&per,sizeof(struct person),1,fp)==1)
{
p=(AD *)malloc(sizeof(AD));
strcpy(p->name,per.name);
strcpy(p->address,per.address);
p->zip=per.zip;
strcpy(p->phone,per.phone);
head=p;
p->next=q;
q=head;
}
}
fclose(fp);
return(head);
}
}
AD *insert(AD *head)
{
AD *temp,*p;
p=head;
temp=(AD *)malloc(sizeof(AD));
printf("\n\t请输入姓名:");
scanf("%s",temp->name);
getchar();
printf("\n\t请输入通信地址:");
scanf("%s",temp->address);
getchar();
printf("\n\t请输入邮政编码:");
scanf("%ld",&temp->zip);
getchar();
printf("\n\t请输入电话号码:");
scanf("%s",temp->phone);
getchar();
head=temp;
temp->next=p;
return head;
}
void save(AD *head,char filename[])
{
AD *p;
struct person per;
if((fp=fopen(filename,"wb"))==NULL)
{
printf("文件无法写入");
exit(1);
}
else
{
p=head;
while(p!=NULL)
{
strcpy(per.name,p->name);
strcpy(per.address,p->address);
per.zip=p->zip;
strcpy(per.phone,p->phone);
if(fwrite(&per,sizeof(struct person),1,fp)!=1)
{
printf("文件不能写入数据!");
exit(1);
}
p=p->next;
}
fclose(fp);
}
}
void show(AD *head)
{
AD *p;
p=head;
while(p!=NULL)
{
printf("姓名:%s\n",p->name);
printf("地址:%s\n",p->address);
printf("邮编:%ld\n",p->zip);
printf("电话:%s\n",p->phone);
p=p->next;
}
}
void find(AD *head)
{
AD *p;
char name[20];
printf("请输入要查找的姓名:");
scanf("%s",name);
p=head;
while(p!=NULL)
{
if(strcmp(name,p->name)==0)
{
printf("姓名:%s\n",p->name);
printf("地址:%s\n",p->address);
printf("邮编:%ld\n",p->zip);
printf("电话:%s\n",p->phone);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("\n\n查无此人!\n\n");
}
AD *deleteinfor(AD *head)
{
AD *p,*q;
char name[20];
printf("请输入要删除人的姓名:");
scanf("%s",name);
p=q=head;
while(p!=NULL)
{
if((strcmp(name,p->name))==0)
{
if(head==p)
head=p->next;
else
q->next=p->next;
free(p);
break;
}
else
{
q=p;
p=p->next;
}
}
if(p==NULL)
printf("\n\n\t查无此人\n\n\t");
return head;
}
void main()
{
AD *head;
char fname[20];
char choise;
printf("请输入一个文件名:");
scanf("%s",fname);
getchar();
head=load(fname);
while(1)
{
printf("\t\t 通讯录管理系统\n");
printf("\t\t====================================\n");
printf("\t\t 1.插入一条纪录\n");
printf("\t\t 2.显示所有纪录\n");
printf("\t\t 3.按姓名查找纪录\n");
printf("\t\t 4.按姓名删除纪录\n");
printf("\t\t 5.存盘并退出\n");
printf("\n\n\t请选择1~5:");
scanf("%c",&choise);
getchar();
switch(choise)
{
case '1':
head=insert(head);
break;
case '2':
show(head);
break;
case '3':
find(head);
break;
case '4':
head=deleteinfor(head);
break;
case '5':
save(head,fname);
exit(0);
default:
printf("输入错误,请重新输入。\n");
}
}
}