加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

通讯录管理系统源代码(使用C语言)

(2008-07-15 08:56:35)
标签:

通讯录管理系统

文化

分类: 我的文章

#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));
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有