龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

通讯录的源代码(用链表实现)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
#include stdio.h #include stdlib.h/*与malloc.h差不多*/ #include string.h #define maxlen 100 strUCt persons {char name[10];/*定义结构体数组用于缓存数据*/ char addr[20]; char phnum[10]; }persons[maxlen]; ; ; ; typedef struct l
#include <stdio.h>
  #include <stdlib.h>  /*与malloc.h差不多*/
  #include <string.h>
  #define maxlen 100
  strUCt persons
  { char name[10]; /*定义结构体数组用于缓存数据*/
   char addr[20];
   char phnum[10];
   }persons[maxlen];
  ;
  ;
  ;
  typedef struct lnode{ /*通讯录结构中结点的定义*/
   char name[10]; /*姓名*/
   char addr[20]; /*地址*/
   char phnum[10]; /*电话*/
   struct lnode *next;
   }listnode,*linklist;
  ;
  ;
  ;
   linklist head=NULL,r=NULL; /*定义头指针和尾指针*/
   listnode  *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7;
   int i;
   char name1[10],ch;
   char str1[20];
   FILE *fp;  /*定义文件指针*/
  ;
  ;
  void creat()  /*将文件的信息读入结构体数组在转存入链表中*/
  {   int j;
   long k;
   fp=fopen("people.txt","r+t"); /*打开文件*/
   if(fp!=NULL)
   {for(i=1;i<maxlen;i++)
  { j=fgetc(fp);
   if(j==EOF)
   return;
   k=i-1;
   fseek(fp,k*sizeof(struct persons),0); /*读取一个人的信息*/
   fread(&persons[i],sizeof(struct persons),1,fp);
   s=(linklist)malloc(sizeof(listnode)); /*装存入链表中*/
   strcpy(s->name,persons[i].name);
   strcpy(s->addr,persons[i].addr);
   strcpy(s->phnum,persons[i].phnum);
   if(head==NULL)  /*用尾插法将其插入链表中*/
   head=s;
   else
   r->next=s;
   r=s;}
  }
   else
   { fp=fopen("people.txt","w"); /*不能打开另开辟一个文件*/
   i=1;
       }
  }
  ;
  ;
  ;
  void Show() /*显示所有的信息*/
  {    p1=head;
       while(p1!=NULL)
     { printf(" name:%s ",p1->name);
       printf(" addr:%s",p1->addr);
       printf(" phnum:%s",p1->phnum);
       p1=p1->next;
      }
   }
  ;
  ;
  ;
  void Delete() /*定义一个删除的函数*/
  { printf(" please input the name:");
   gets(name1); /*输入要删除人的姓名*/
   p4=head;
   if(strcmp(p4->name,name1)==0)
       {  p4=p4->next;  /*根据各种情况判定可能性*/
   head=p4;
       }
   else
       {  while(strcmp(p4->next->name,name1)!=0)
   p4=p4->next;
   p5=p4->next;
   p4->next=p5->next;
   free(p5);
   }  } ;
  ;
  ;
  void Find()  /*查找的函数定义*/
  {   printf(" please input the name:");
    p0=head;
    gets(name1); /*查找人的姓名输入*/
      while(strcmp(name1,p0->name)!=0&&p0!=NULL)
    p0=p0->next;
    if(p0==NULL)
  
     printf(" It is not exit in the addr-book!");
    else
        {  printf(" name:%s ",p0->name);
    printf(" addr:%s",p0->addr);
    printf(" phnum:%s",p0->phnum);
          }
  }
  ;
  ;
  ;
  void Input() /*向通讯录中输入一个人的信息*/
  { s=(linklist)malloc(sizeof(listnode));
       printf(" please input the sb's meg:");
        printf(" name:");
   scanf("%s",s->name);
   printf(" Addr:");
   scanf("%s",s->addr);
   printf(" phnum:");
   scanf("%s",s->phnum);
   if(head==NULL)
   head=s;
   else
   r->next=s;
   r=s;
  }
  ;
  ;
  ;
  void Alter()  /*改变一个人的信息*/
  {
   int j;
   printf(" Please input the name:");
       gets(name1); /*输入要人的姓名*/
   p3=head;
   while(strcmp(name1,p3->name)!=0&&p3!=NULL)
   p3=p3->next;
   if(p3==NULL)
   printf(" It is not exit in the addr-book!");
   else
       {  printf(" please input the new meg!"); /*输入要改人的新信息*/
   printf(" name:");  
   scanf("%s",name1);
   strcpy(p3->name,name1);
   printf(" Addr:");
   scanf("%s",name1);
   strcpy(p3->addr,name1);
   printf(" phnum:");
   scanf("%s",name1);
   strcpy(p3->phnum,name1);
        }
  }
  ;
  ;
  ;
  void Save()  /*保存信息*/
  { int j;
   fp=fopen("people.txt","w");
   for(p2=head,j=0;p2!=NULL;j++,p2=p2->next)/*将信息装出入结构体数组在出入链表中*/
   {          /*避免地址的出入,造成乱码文件*/
   strcpy(persons[j].name,p2->name);
   strcpy(persons[j].addr,p2->addr);
   strcpy(persons[j].phnum,p2->phnum);
   fwrite(&persons[j],sizeof(struct persons),1,fp);
   }
  }
  ;
  ;
  ;
  void main()
  { creat();
   do
      {  printf(" WELCOME TO USE Pan Weifeng's Address book");/*显示提示的信息*/
   printf(" Please make a choice below:");
   printf(" 1.Show all the meg");
   printf(" 2.Delete a piece of meg");
   printf(" 3.Find a piece of meg");
   printf(" 4.Insert a piece of meg");
   printf(" 5.Alter a piece of meg");
   printf(" 6.Save and Exit");
   printf(" ");
   printf(" Input Your Choice:");
   ch=getche();
   switch(ch)
         {   case '1':  Show(); /*用单条件多选择语句实现调用与循环*/
          break;
             case '2':  Delete();
          break;
             case '3':  Find();
          break;
  
       case '4':  Input();
          break;
      case '5':  Alter();
          break;
      case '6':  Save();
          fclose(fp);
          exit(0);
          break;
      default:
       printf(" ********************************* ");
       printf("      The num should 1-4!!!       ");
       printf(" **********************************");
       break;
   }
       }while(1);
       } 
  
精彩图集

赞助商链接