• 当前位置:首页>>C语言>>C语言编程实例>>通讯录的源代码(用链表实现)
  • 通讯录的源代码(用链表实现)
  • #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("\n\n\tname:%s\n",p1->name);
         printf("\n\n\taddr:%s",p1->addr);
         printf("\n\n\tphnum:%s",p1->phnum);
         p1=p1->next;
        }
     }
    ;
    ;
    ;
    void Delete() /*定义一个删除的函数*/
    { printf("\n\n\tplease 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("\n\n\tplease input the name:");
      p0=head;
      gets(name1); /*查找人的姓名输入*/
        while(strcmp(name1,p0->name)!=0&&p0!=NULL)
      p0=p0->next;
      if(p0==NULL)
      printf("\n\n\tIt is not exit in the addr-book!");
      else
          {  printf("\n\n\tname:%s\n",p0->name);
      printf("\n\n\taddr:%s",p0->addr);
      printf("\n\n\tphnum:%s",p0->phnum);
            }
    }
    ;
    ;
    ;
    void Input() /*向通讯录中输入一个人的信息*/
    { s=(linklist)malloc(sizeof(listnode));
         printf("\n\n\tplease input the sb's meg:");
          printf("\n\n\t\tname:");
     scanf("%s",s->name);
     printf("\n\n\t\tAddr:");
     scanf("%s",s->addr);
     printf("\n\n\t\tphnum:");
     scanf("%s",s->phnum);
     if(head==NULL)
     head=s;
     else
     r->next=s;
     r=s;
    }
    ;
    ;
    ;
    void Alter()  /*改变一个人的信息*/
    {
     int j;
     printf("\n\n\tPlease input the name:");
         gets(name1); /*输入要人的姓名*/
     p3=head;
     while(strcmp(name1,p3->name)!=0&&p3!=NULL)
     p3=p3->next;
     if(p3==NULL)
     printf("\n\n\tIt is not exit in the addr-book!");
     else
         {  printf("\n\n\tplease input the new meg!"); /*输入要改人的新信息*/
     printf("\n\n\t\tname:");  
     scanf("%s",name1);
     strcpy(p3->name,name1);
     printf("\n\n\t\tAddr:");
     scanf("%s",name1);
     strcpy(p3->addr,name1);
     printf("\n\n\t\tphnum:");
     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("\n\n\n\n\tWELCOME TO USE Pan Weifeng's Address book");/*显示提示的信息*/
     printf("\n\n\t\tPlease make a choice below:");
     printf("\n\t\t1.Show all the meg");
     printf("\n\t\t2.Delete a piece of meg");
     printf("\n\t\t3.Find a piece of meg");
     printf("\n\t\t4.Insert a piece of meg");
     printf("\n\t\t5.Alter a piece of meg");
     printf("\n\t\t6.Save and Exit");
     printf("\n\n\n");
     printf("\tInput 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("\n\t*********************************\n");
         printf("\n\t     The num should 1-4!!!       \n");
         printf("\n\t**********************************");
         break;
     }
         }while(1);
         }

    [1] [2] 下一页