c/c++语言开发共享怎么用C语言实现一个通讯录?

实现一个通讯录 要求: 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息


实现一个通讯录

要求

通讯录可以用来存储1000个人的信息,每个人的信息包括:

姓名、性别、年龄、电话、住址

提供方法

1. 添加联系人信息

2. 删除指定联系人信息

3. 查找指定联系人信息

4. 修改指定联系人信息

5. 显示所有联系人信息

6. 清空所有联系人

7. 以免费精选名字大全排序所有联系人

思路

tdd(测试驱动开发)思想,模块化!

代码实现

头文件contact的实现

  #ifndef _contact_h__  #define _contact_h__    #define max_name 20  #define max_sex 5  #define max_phone 20  #define max_addr 30  #define max_peo 1000    enum option //通讯录的功能选项  {      exit, //退出      add, //添加联系人信息      delete, //删除指定联系人信息      search, //查找指定联系人信息      modify, //修改指定联系人信息      show, //显示所有联系人信息      empty, //清空所有联系人      sort, //以免费精选名字大全排序所有联系人  };    enum mod_list//修改联系人信息的选项  {      exitmodify,      name,      sex,      age,      phone,      address,  };    enum sort_list//排序方式的选项  {      exit_sort,      name_sort,      age_sort,      phone_sort,      address_sort,  };    typedef struct peoinfo  {      char name[max_name];//免费精选名字大全      char sex[max_sex];//性别      int age;//年龄      char phone[max_phone];//电话      char address[max_addr];//地址  }peoinfo;    typedef struct contact  {      peoinfo data[max_peo];//通讯录      int count;//通讯录人数  }contact,*pcontact;      void menu();  void initcontact(pcontact pc);//初始化通讯录函数  void addcontact(pcontact pc);//添加联系人信息函数  void deletecontact(pcontact pc);//删除指定联系人信息函数  void searchcontact(pcontact pc);//查找指定联系人信息函数  void modifycontact(pcontact pc);//修改指定联系人信息函数  void showcontact(pcontact pc);//显示所有联系人信息函数  void emptycontact(pcontact pc);//清空所有联系人函数  void sortcontact(pcontact pc);//排序所有联系人函数    #endif

头文件bubble_sort的实现

  #ifndef _bubble_sort_h__  #define _bubble_sort_h__    void bubble_sort(void *base, int sz, int width, int(*cmp)(const void *e1, const void *e2));  int cmp_name(const void* e1, const void* e2);  int cmp_age(const void* e1, const void* e2);  int cmp_phone(const void* e1, const void* e2);  int cmp_address(const void* e1, const void* e2);    #endif

contact定义函数的实现

  #define _crt_secure_no_warnings 1  #include   #include   #include   #include   #include "contact.h"  #include "bubble_sort.h"    void menu()//功能选择菜单  {      printf("*****************************************n");      printf("*********  1.add      2.delete  *********n");      printf("*********  3.search   4.modify  *********n");      printf("*********  5.show     6.empty   *********n");      printf("*********  7.sort     0.exit    *********n");      printf("*****************************************n");  }    void mod_list()//修改信息选择菜单  {      printf("*****************************************n");      printf("*********   1.name     2.sex    *********n");      printf("*********   3.age      4.phone  *********n");      printf("*********   5.address  0.exit  *********n");      printf("*****************************************n");  }    void sort_list()//排序方式选择菜单  {      printf("*****************************************n");      printf("*********   1.name   2.age     *********n");      printf("*********   3.phone  4.address *********n");      printf("*********        0.exit        *********n");      printf("*****************************************n");  }    int find_person(pcontact pc)//查找有无该联系人,若有,则返回该联系人下标;若无,返回-1  {      char person_name[max_name];      int i = 0;      assert(pc);      printf("请输入要查找人的姓名:");      assert(1 == scanf("%s", person_name));      for (i = 0; i < pc->count; i++)      {          if (strcmp(person_name, pc->data[i].name)==0)              return i;//所查找联系人存在      }      return -1;//不存在  }    void initcontact(pcontact pc)//初始化通讯录  {      assert(pc);      pc->count = 0;      memset(pc->data, 0, sizeof(pc->data));  }    void addcontact(pcontact pc)//添加联系人  {      assert(pc);      if (pc->count == max_peo)      {          printf("请注意,通讯录已满!n");          return;      }      printf("-----------------------------------------n");      printf("请输入免费精选名字大全:");      scanf("%s", pc->data[pc->count].name);      printf("请输入性别:");      scanf("%s", pc->data[pc->count].sex);      printf("请输入年龄:");      scanf("%d", &(pc->data[pc->count].age));      printf("请输入电话:");      scanf("%s", pc->data[pc->count].phone);      printf("请输入地址:");      scanf("%s", pc->data[pc->count].address);      pc->count++;      printf("-----------------------------------------n");  }    void deletecontact(pcontact pc)//删除联系人  {      assert(pc);      if (pc->count == 0)      {          printf("通讯录为空n");          return;      }      else      {          int ret = find_person(pc);//查找有无该联系人,若有,则返回该联系人下标;若无,返回-1。          if (ret == -1)          {              printf("无该联系人!n");              return;          }          else          {              int i = 0;              for (i = ret; i < pc->count; i++)//删除指定联系人后,将后续联系人往前移动              {                  pc->data[i] = pc->data[i + 1];              }              pc->count--;              printf("删除联系人成功!n");          }      }  }    void searchcontact(pcontact pc)//查找指定联系人  {      assert(pc);      if (pc->count == 0)      {          printf("通讯录为空n");          return;      }      int ret = find_person(pc);//查找有无该联系人,若有,则返回该联系人下标;若无,返回-1。      if (ret == -1)      {          printf("无该联系人!n");          return;      }      else      {          printf("-----------------------------------------n");          printf("该联系人信息:n");//打印该联系人信息          printf("免费精选名字大全: %sn性别: %sn年龄: %dn电话: %sn地址: %sn", pc->data[ret].name, pc->data[ret].sex,              pc->data[ret].age, pc->data[ret].phone, pc->data[ret].address);          printf("-----------------------------------------n");      }  }    void modifycontact(pcontact pc)//修改指定联系人信息  {      assert(pc);      if (pc->count == 0)      {          printf("通讯录为空n");          return;      }      int ret = find_person(pc);//查找有无该联系人,若有,则返回该联系人下标;若无,返回-1。      if (ret == -1)      {          printf("无该联系人!n");          return;      }      else      {          int input = 0;          mod_list();//修改联系人信息的选项          printf("请选择要修改的信息:");          assert(1 == scanf("%d", &input));          switch (input)          {          case name:              printf("请输入修改后的免费精选名字大全:");              scanf("%s", pc->data[ret].name);              break;          case sex:              printf("请输入修改后的性别:");              scanf("%s", pc->data[ret].sex);              break;          case age:              printf("请输入修改后的年龄:");              scanf("%s", pc->data[ret].age);              break;          case phone:              printf("请输入修改后的电话:");              scanf("%s", pc->data[ret].phone);              break;          case address:              printf("请输入修改后的地址:");              scanf("%s", pc->data[ret].address);              break;          default:              printf("选择错误,请重新选择n");              break;          }      }  }    void showcontact(pcontact pc)//显示  {      assert(pc);      int i = 0;      if (pc->count == 0)      {          printf("通讯录为空n");          return;      }      printf("-----------------------------------------n");      for (i = 0; i < pc->count; i++)      {          printf("免费精选名字大全: %sn性别: %sn年龄: %dn电话: %sn地址: %sn", pc->data[i].name, pc->data[i].sex,              pc->data[i].age, pc->data[i].phone, pc->data[i].address);      }      printf("-----------------------------------------n");  }    void emptycontact(pcontact pc)//清空  {      assert(pc);      pc->count = 0;      memset(pc->data, 0, sizeof(pc->data));//初始化函数      printf("清空通讯录成功!n");  }        void sortcontact(pcontact pc)//排序所有联系人函数  {      assert(pc);      if (pc->count == 0)      {          printf("通讯录为空n");          return;      }      int input = 0;      sort_list();//排序方式的选项      printf("请选择按什么方式排序:");      assert(1 == scanf("%d", &input));      switch (input)      {      case name_sort:          bubble_sort(pc->data, pc->count, sizeof(peoinfo), cmp_name);//以免费精选名字大全排序          break;      case age_sort:          bubble_sort(pc->data, pc->count, sizeof(peoinfo), cmp_age);//以年龄排序          break;      case phone_sort:          bubble_sort(pc->data, pc->count, sizeof(peoinfo), cmp_phone);//以电话排序          break;      case address_sort:          bubble_sort(pc->data, pc->count, sizeof(peoinfo), cmp_address);//以地址排序          break;      default:          printf("选择错误,请重新选择n");          break;      }      printf("通讯录排序成功!n");  }

bubble_sort定义函数的实现

  #define _crt_secure_no_warnings 1  #include   #include   #include   #include   #include "contact.h"  #include "bubble_sort.h"  int cmp_name(const void* e1, const void* e2)//比较免费精选名字大全  {      assert(e1&&e2);      return (strcmp(((peoinfo *)e1)->name, ((peoinfo *)e2)->name));  }    int cmp_age(const void* e1, const void* e2)//比较年龄  {      assert(e1&&e2);      return (*(peoinfo *)e1).age - (*(peoinfo *)e2).age;  }    int cmp_phone(const void* e1, const void* e2)//比较电话  {      assert(e1&&e2);      return (strcmp(((peoinfo *)e1)->phone, ((peoinfo *)e2)->phone));  }    int cmp_address(const void* e1, const void* e2)//比较地址  {      assert(e1&&e2);      return (strcmp(((peoinfo *)e1)->address, ((peoinfo *)e2)->address));  }    void swap(char *e1, char *e2, int width)//交换信息  {      int i = 0;      assert(e1&&e2);      for (i = 0; i < width; i++)      {          char tmp = *((char*)e1 + i);          *((char*)e1 + i) = *((char*)e2 + i);          *((char*)e2 + i) = tmp;      }  }  void bubble_sort(void *base, int sz, int width, int(*cmp)(const void *e1, const void *e2))//排序  {      int i = 0;      int j = 0;      assert(base&&cmp);      for (i = 0; i < sz - 1; i++)      {          for (j = 0; j < sz - 1 - i; j++)          {              if (cmp((char *)base + width*j, (char *)base + width*(j + 1))>0)                  swap((char *)base + width*j, (char *)base + width*(j + 1), width);          }      }  }

main函数的实现

  #define _crt_secure_no_warnings 1  #include   #include   #include   #include "contact.h"  #include "bubble_sort.h"    int main()  {      contact my_con;      void(*opion[8])(pcontact) = { 0, addcontact, deletecontact, searchcontact, modifycontact, showcontact, emptycontact, sortcontact };      int input = 0;      initcontact(&my_con);//初始化通讯录      do      {          menu();          printf("请选择操作功能:");          assert(1==scanf("%d", &input));          opion[input](&my_con);//使用函数指针数组选择功能,作用相当于switch选择语句      } while(input);      system("pause");      return 0;  }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607479.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐