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

2016-02-19 21:37 4 1 收藏

今天图老师小编要跟大家分享通讯录的源代码(用链表实现),精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - 编程语言 】

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

来源:https://www.tulaoshi.com/n/20160219/1626688.html

延伸阅读
QQ通讯录如何将安卓通讯录导入iphone里 当手机行业高速发展,很多人都会从安卓手机换到苹果iphone手机,换手机最大的问题便是通讯录的问题,今天就和大家分享下安卓通讯录怎么导入iphone。 方法/步骤: 首先安卓手机和iphone手机都下载QQ通讯录,以下是安卓手机和iphone手机安卓QQ通讯录的截图。安装过程这里省略。 ...
网开云办公企业通讯录怎么用   企业分组查询 在企业通讯录中,点击企业组织架构目录,可查看该分组人员信息,点击,可查看该人员的详细通讯录信息。 导出企业通讯录 点击,可将企业通讯录的信息生成Excel格式的文件,并存放到指定位置。
标签: Web开发
一般情况下,如果要为网站提供一个通讯录程序,需要使用CGI结合后台数据库技术,这对WEB服务器的要求比较高,在很多不提供数据库功能的虚拟主机上甚至无法实现。当然,我们还可以采用TXT文本替代数据库,但TXT文本是比较难操作的,我们必须一行一行的读取判断,还要用分隔字符串实现字段分离,无法进行复杂运算。 现在,我们可以使用...
网开云办公个人通讯录怎么用   添加分组/联系人 在企业通讯录中,点击企业组织架构目录,可查看该分组人员信息,点击,可查看该人员的详细通讯录信息。 点击可将非企业成员的联系人信息添加到个人通讯录中。 导入/导出个人通讯录 点击可将非企业成员的联系人信息添加到个人通讯录中。 删除联系...
飞信(Fetion)通讯录 飞信通讯录是飞信为您提供的一个在线的,永不丢失的通讯录。通讯录信息保存在飞信系统的服务器上,您可以随时通过飞信PC客户端以及其他支持飞信通讯录的客户端更新通讯录。 登录飞信PC客户端后,点击通讯录页签,进入通讯录(图1)。 图1通讯录 通讯录联系人管理 通讯录联系人管理包括:新建联系...

经验教程

784

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部