发新话题
打印

通讯录管理系统

通讯录管理系统

#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");
  }
}
}
北京大唐电信集团大唐软件BSS电信项目部
** 欢迎各位朋友访问我的BLOG: http://yatou_worm.51.com

TOP

同学,你发两次了哈

TOP

发新话题