课程设计--通讯录

来源:互联网 发布:华龙证券交易软件 编辑:程序博客网 时间:2024/04/27 08:40
/*     文件名称:main.cpp     作者: 孙子策    完成日期:2016.12.30    问题描述:个人通讯录管理系统 */ 

include "Contacts.h"  int main()  {      struct address_list *head=NULL;      char num[10];      printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");      printf("*=*               程序说明                *=*\n");      printf("*=*    请及时保存创建完毕的通讯录内容!    *=*\n");      printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");      while(1)      {          printf("******************************\n");          printf("***     1 创建通讯录      ****\n");          printf("***     2 按名字排序      ****\n");          printf("***     3 综合操作        ****\n");          printf("***     4 保存            ****\n");          printf("***     5 打开            ****\n");          printf("***     6 删除            ****\n");          printf("***     7 退出            ****\n");          printf("******************************\n");          printf("请输入您选择的操作:");          gets(num);          switch(*num)          {          case '1':              {                  system("cls");                  if(head==NULL)                  {                      head=creat();                                //创建                      print(head);                  }                  else                  {                      system("cls");                      head=shifang(head);                      head=creat();                                //重新创建                      print(head);                  }              }              break;          case '2':              {                  system("cls");                  head=paixu(head);                               //排序              }              break;          case '3':              {                  system("cls");                  head=menu(head);                              //综合操作              }              break;          case '4':              {                  system("cls");                  save(head);                                   //文件保存                  print(head);              }              break;          case '5':              {                  system("cls");                  head=load(head);                              //文件输出              }              break;          case '6':              {                  system("cls");                  head=delete_txl(head);                           //删除                  print(head);              }              break;          case '7':              system("cls");              head=shifang(head);              break;          default:              system("cls");              printf("操作错误,此项不存在!\n");              break;          }          if(strcmp(num,"7")==0)              break;      }      return 0;  }  


头文件:

#ifndef CONTACTS_H_INCLUDED  #define CONTACTS_H_INCLUDED  #include <stdio.h>  #include <malloc.h>  //得到指向大小为Size的内存区域的首字节的指针  #include <string.h>  #include <stdlib.h>  //标准库函数  #define NULL 0  #define LEN sizeof(struct address_list)  //计算字节  struct address_list  {      char name[30];     //名字      char work[30];     //职业      char handset[30];  //手机      char email[30];    //电子邮件      char address[30];  //通讯地址      struct address_list *next;  };  struct address_list *shifang(struct address_list *head); // 释放内存函数声明  struct address_list *creat(void);  void print(struct address_list *head);  struct address_list *insert(struct address_list *head);  struct address_list *delete_txl(struct address_list *head);  struct address_list *display(struct address_list *head);  struct address_list *paixu(struct address_list *head);  struct address_list *search(struct address_list *head);  struct address_list *shifang(struct address_list *head);  void save(struct address_list *head);  struct address_list *load(struct address_list *head);  struct address_list *menu(struct address_list *head);  


代码:

#include "Contacts.h"  int n;  //创建函数,不带头结点的链表  struct address_list *creat(void)  {      struct address_list *head,*p1,*p2;      char name[20];      n=0;      p1=(struct address_list *)malloc(LEN);      p2=p1;   //强制内存转换      printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");      printf("请输入姓名:");      gets(name);      if(strcmp(name,"0")!=0)      {          strcpy(p1->name,name);          printf("请输入职业:");     gets(p1->work);          printf("请输入手机:");     gets(p1->handset);          printf("请输入电子邮件:"); gets(p1->email);          printf("请输入通讯地址:");  gets(p1->address);          head=NULL;          while(1)          {              n=n+1;   //记录通讯录人数个数              if(n==1)                  head=p1;              else                  p2->next=p1;              p2=p1;              printf("请输入姓名:");              gets(name);              if(strcmp(name,"0")==0)              {                  break;              }              else              {                  p1=(struct address_list *)malloc(LEN);                  strcpy(p1->name,name);                  printf("请输入职业:"); gets(p1->work);                  printf("请输入手机:"); gets(p1->handset);                  printf("请输入电子邮件:"); gets(p1->email);                  printf("请输入通讯地址:");  gets(p1->address);              }          }          p2->next=NULL;          return head;      }      else          return 0;  }  //功能描述:输出函数  void print(struct address_list *head)  {      struct address_list *p;      if(head!=NULL)      {          p=head;          printf("本通讯录现在共有%d人:\n",n);          printf("---姓名-------职业--------手机-------Email-------通讯地址\n");          printf("==================================\n");          do          {              printf("== %s",p->name); printf("       ");              printf("%s",p->work); printf("       ");              printf("%s",p->handset); printf("       ");              printf("%s",p->email); printf("       ");              printf("%s",p->address); printf("       \n");              p=p->next;          }while(p!=NULL);          printf("==================================\n");      }      else          printf("通讯录为空,无法输出!\n");  }  //功能描述:增加函数  struct address_list *insert(struct address_list *head)  {      struct address_list *p0,*p1,*p2;      char name[20];      p1=head;      printf("请输入增加的内容:\n");      printf("请输入姓名:"); gets(name);      if(strcmp(name,"0")==0)      {          printf("姓名不能为0,增加失败!\n");          return(head);      }      else      {          p0=(struct address_list *)malloc(LEN);          strcpy(p0->name,name);          printf("请输入职业:"); gets(p0->work);          printf("请输入手机:"); gets(p0->handset);          printf("请输入电子邮件:"); gets(p0->email);          printf("请输入通讯地址:");  gets(p0->address);          n=n+1;          if(head==NULL)          {              head=p0;              p0->next=NULL;              return head;          }          else          {              while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL))              {                  p2=p1;                  p1=p1->next;              }              if(strcmp(p0->name,p1->name)<0 || strcmp(p0->name,p1->name)==0)              {                  if(head==p1)                  {                      head=p0;                  }                  else                  {                      p2->next=p0;                  }                  p0->next=p1;              }              else              {                  p1->next=p0;                  p0->next=NULL;              }              return head;          }      }  }  //功能描述:删除姓名  struct address_list* delete_txl(struct address_list *head)  {      struct address_list *p,*q;      char name[30];      if(head==NULL)      {          printf("通讯录为空,无法显示!\n");          return head;      }      p=head;      printf("请输入需要删除的人的姓名:");      gets(name);      if(strcmp(head->name,name)==0)      {          head=head->next;          free(p);          printf("删除操作成功!\n");          n--;          return head;      }      else      {          q=head,p=head->next;          while(p!=NULL)          {              if(strcmp(p->name,name)==0)              {                  q->next=p->next;                  free(p);                  printf("删除操作成功!\n");                  n--;                  return head;              }              p=p->next;              q=q->next;          }      }  }  //显示函数  struct address_list *display(struct address_list *head)  {      struct address_list *p1,*p2;      char name[30];      int m;      if(head==NULL)      {          printf("通讯录为空,无法显示!\n");          return head;      }      p1=head;      m=0;      printf("请输入需要显示人的姓名:");      gets(name);      while(p1!=NULL)      {          while((strcmp(p1->name,name))!=0 && p1->next!=NULL)          {              p2=p1;              p1=p1->next;          }          if(strcmp(p1->name,name)==0)          {              m++;              printf("%s的通讯内容如下:\n",name);              printf("---姓名--------职业--------手机-------Email------通讯地址\n");              printf("==================================\n");              printf("== %s",p1->name);printf("       ");              printf("%s",p1->work);printf("       ");              printf("%s",p1->handset);printf("       ");              printf("%s",p1->email);printf("       ");              printf("%s",p1->address); printf("       \n");              printf("==================================\n");          }          p1=p1->next;      }      if(m==0)      {          printf("此人未在本通讯录中!\n");      }      return(head);  }  //排序函数  struct address_list *paixu(struct address_list *head)  {      struct address_list *p1,*p2;      int i,j;      struct address_list1      {          char name[30];          char work[30];          char handset[30];          char email[30];          char address[30];      };      struct address_list1 px[200];      struct address_list1 temp;      if(head==NULL)      {          printf("通讯录为空,无法排序!\n");          return(head);      }      p1=head;      for(i=0;i<n,p1!=NULL;i++)      {          strcpy(px[i].name,p1->name);          strcpy(px[i].work,p1->work);          strcpy(px[i].handset,p1->handset);          strcpy(px[i].email,p1->email);          strcpy(px[i].address,p1->address);          p2=p1;          p1=p1->next;      }      head=shifang(head);      for(j=0;j<n-1;j++)      {          for(i=j+1;i<n;i++)          {              if(strcmp(px[i].name,px[j].name)<0)              {                  temp=px[i];                  px[i]=px[j];                  px[j]=temp;              }          }      }      p1=(struct address_list *)malloc(LEN);      p2=p1;      strcpy(p1->name,px[0].name);      strcpy(p1->work,px[0].work);      strcpy(p1->handset,px[0].handset);      strcpy(p1->email,px[0].email);      strcpy(p1->address,px[0].address);      head=p1;      for(i=1;i<n;i++)      {          p1=(struct address_list *)malloc(LEN);          strcpy(p1->name,px[i].name);          strcpy(p1->work,px[i].work);          strcpy(p1->handset,px[i].handset);          strcpy(p1->email,px[i].email);          strcpy(p1->address,px[i].address);          p2->next=p1;          p2=p1;      }      p2->next=NULL;      printf("按姓名排序后为:\n");      print(head);      return(head);  }  //姓名查找函数  struct address_list *search(struct address_list *head)  {      struct address_list *p1,*p2;      int m;      char name[30];      if(head==NULL)      {          printf("通讯录为空,无法分类查找!\n");          return(head);      }      p1=head;      printf("****************************\n");      printf("**  请输入需要查找的姓名  **\n");      printf("****************************\n");      m=0;      gets(name);      while(p1!=NULL)      {          while(strcmp(p1->name,name)!=0&&p1->next!=NULL)          {              p2=p1;              p1=p1->next;          }          if(strcmp(p1->name,name)==0)          {              m++;              printf("你查找的内容是:\n");              printf("+++++++++++++++++++++++++++++++++++\n");              printf("++ %s        %s       %s       %s        %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);              printf("+++++++++++++++++++++++++++++++++++\n");          }          p1=p1->next;            if(m==0)          {              printf("此人未在本通讯录中!\n");          }          break;      }      return(head);  }  //释放内存函数  struct address_list *shifang(struct address_list *head)  {      struct address_list *p1;      while(head!=NULL)      {          p1=head;          head=head->next;          free(p1);      }      return(head);  }  //文件写入函数  void save(struct address_list *head)  {      FILE *fp;      struct address_list *p1;      char tong[30];      if(head==NULL)      {          printf("通讯录为空,无法存储!\n");          return;      }      printf("请输入保存后的文件名:");      gets(tong);      fp=fopen(tong),"w");      if(fp==NULL)      {          printf("cannot open file\n");          return;      }      p1=head;      fprintf(fp,"姓名    职业      手机     Email     通讯地址\n");      for(;p1!=NULL;)      {          fprintf(fp,"%s       %s       %s        %s       %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);          p1=p1->next;      }      printf("保存完毕!\n");      fclose(fp);  }  //文件读出函数  struct address_list *load(struct address_list *head)  {      FILE *fp;      char tong[30];      struct address_list *p1,*p2;      printf("请输入要输出的文件名:");      gets(tong);      fp=fopen(tong,"r");      if(fp==NULL)      {          printf("此通讯录名不存在,无法输出!\n");          return(head);      }      else      {          head=shifang(head);      }      p1=(struct address_list *)malloc(LEN);      fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);      if(feof(fp)!=0)      {          printf("文件为空,无法打开!\n");          return(head);      }      else      {          rewind(fp);          p2=p1;          head=p1;          n=0;          while(feof(fp)==0)          {              fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);              if(feof(fp)!=0)                  break;              p2->next=p1;              p2=p1;              p1=(struct address_list *)malloc(LEN);              n=n+1;          }          p2->next=NULL;          p1=head;          head=head->next;          n=n-1;          free(p1);          print(head);          printf("打开完毕!\n");          return(head);      }      fclose(fp);  }  //综合操作函数  struct address_list *menu(struct address_list *head)  {      char num[10];      while(1)      {          printf("************************\n");          printf("*** 1 姓名查找      ****\n");          printf("*** 2 单个显示      ****\n");          printf("*** 3 增加          ****\n");          printf("*** 4 退出          ****\n");          printf("************************\n");          printf("请输入您选择的操作:");          gets(num);          switch(*num)          {          case '1':              {                  head=search(head);                          //姓名查找                  print(head);              }              break;          case '2':              {                  head=display(head);                          //显示              }              break;          case '3':              {                  head=insert(head);                           //增加                  print(head);              }              break;          case '4':              return head;          default:              printf("操作错误,此项不存在!\n");              break;          }          if(strcmp(num,"6")==0)              break;      }      return head;  }  








0 0
原创粉丝点击