A-A+

C语言编写—通讯录(小项目)

2016年02月18日 站长资讯 暂无评论

C语言的练习—通讯录,该通讯录主要实现最大存储1000个人信息,对通讯录中的个人信息能够进行增、删、查、改等基本功能,通过用c语言编写,能够极大程度上锻炼编程能力。程序主要使用数组的知识,创建1000大小的静态数组,在极端情况下,通讯录中元素较少,对空间的使用率较低,使得空间浪费。该程序能够再次进行改进,可以通过动态开辟数组,减少空间的浪费,也可以通过链表来实现。

——下面程序主要是利用静态数组的方式,该程序有待改进。

  1. #define _CRT_SECURE_NO_WARNINGS 1  
  2. #include <stdio.h>   
  3. #include <string.h>  
  4. #include <stdlib.h>  
  5.    
  6. #define MAX 1000  
  7. #define MAX_NAME 10  
  8. #define MAX_SEX 3  
  9. #define MAX_TELEPHONE 20  
  10. #define MAX_ADR 20  
  11.    
  12. typedef struct people      //people信息  
  13. {  
  14.      char name[MAX_NAME];  
  15.      char sex[MAX_SEX];  
  16.      int age;  
  17.      char tele[MAX_TELEPHONE];  
  18.      char adr[MAX_ADR];  
  19. }people;  
  20.    
  21. typedef struct txl     //通讯录的存储  
  22. {  
  23.      people elem[MAX];  
  24.      int count;  
  25. }pdh, *por;  
  26.    
  27. void init(por L)       //初始化通讯录  
  28. {  
  29.      L->count = 0;  
  30. }  
  31.    
  32. //主菜单  
  33. void menu()  
  34. {  
  35.      printf("\t\t************************************\n");  
  36.      printf("\t\t*****   1.添加联系人信息       *****\n");  
  37.      printf("\t\t*****   2.删除指定联系人信息   *****\n");  
  38.      printf("\t\t*****   3.查找指定联系人信息   *****\n");  
  39.      printf("\t\t*****   4.修改指定联系人信息   *****\n");  
  40.      printf("\t\t*****   5.显示所有联系人信息   *****\n");  
  41.      printf("\t\t*****   6.清空所有联系人信息   *****\n");  
  42.      printf("\t\t*****   7.以名字排序所有联系人 *****\n");  
  43.      printf("\t\t*****   0.退出通讯录           *****\n");  
  44.      printf("\t\t************************************\n");  
  45.      printf("\n\t请选择:");  
  46. }  
  47.    
  48. //添加联系人  
  49. void _add(por L)  
  50. {  
  51.      if (L->count >= MAX)  
  52.      {  
  53.           printf("电话本已满,无法添加!");  
  54.           return;  
  55.       }  
  56.     
  57.      printf(">>请输入所要添加的联系人信息!\n");  
  58.      printf("\n  姓名:");  
  59.      fflush(stdin);  
  60.      gets(L->elem[L->count].name);  
  61.     
  62.      printf("\n  性别:");  
  63.      fflush(stdin);  
  64.      gets(L->elem[L->count].sex);  
  65.      
  66.      printf("\n  年龄:");  
  67.      scanf("%d", &L->elem[L->count].age);  
  68.         
  69.      printf("\n  电话:");  
  70.      fflush(stdin);  
  71.      gets(L->elem[L->count].tele);  
  72.    
  73.      printf("\n  住址:");  
  74.      fflush(stdin);  
  75.      gets(L->elem[L->count].adr);  
  76.      L->count++;  
  77.      printf("添加完成!\n");  
  78. }  
  79.    
  80. //查找联系人  
  81. static int search(por L, const char * dos)  
  82. {  
  83.      int i = 0;  
  84.      for (i = 0; i < L->count; i++)  
  85.      {  
  86.          if (strcmp(dos, L->elem[i].name) == 0)  
  87.          {  
  88.               return i;  
  89.           }  
  90.      }  
  91.       return -1;  
  92. }  
  93.    
  94. //删除指定联系人信息  
  95. void _delete(por L)  
  96. {  
  97.      char arr[MAX_NAME];  
  98.      int i = 0;  
  99.      int ret = 0;  
  100.      printf("请输入所要删除联系人的姓名:\n");  
  101.      fflush(stdin);    
  102.      gets(arr);  
  103.      ret = search(L, arr);  
  104.      if (ret == -1)  
  105.      {  
  106.          printf("通讯录中没有此联系人!\n");  
  107.          return;  
  108.       }  
  109.      else  
  110.      {  
  111.          for (i = ret; i < L->count - 1; i++)  
  112.          {  
  113.               L->elem[i] = L->elem[i + 1];  
  114.          }  
  115.          L->count--;  
  116.          printf("删除成功!\n");  
  117.      }  
  118. }  
  119.    
  120. //查找指定的联系人信息  
  121. void _find(por L)  
  122. {  
  123.      char ptr[MAX_NAME];  
  124.      int ret = 0;  
  125.      printf("请输入所要查找的联系人姓名:\n");  
  126.      fflush(stdin);  
  127.      gets(ptr);  
  128.      ret = search(L, ptr);  
  129.      if (ret == -1)  
  130.      {  
  131.          printf("查找失败,无此联系人!\n");  
  132.          return;  
  133.      }  
  134.      else  
  135.      {  
  136.          printf("查找成功!\n");  
  137.          printf("  姓名  性别  年龄  电话  地址  \n");  
  138.          printf("%s  %s  %d  %s  %s  \n",  
  139.          L->elem[ret].name,  
  140.          L->elem[ret].sex,  
  141.          L->elem[ret].age,  
  142.          L->elem[ret].tele,  
  143.          L->elem[ret].adr);  
  144.      }  
  145. }  
  146.    
  147. //修改指定联系人信息  
  148. void _alter(por L)  
  149. {  
  150.      char ptr[MAX_NAME];  
  151.      int ret = 0;  
  152.      int ter = 0;  
  153.      char a = 0;  
  154.      printf("请输入所要修改的联系人的姓名:\n");  
  155.      fflush(stdin);  
  156.      gets(ptr);  
  157.     
  158.      ret = search(L, ptr);  
  159.      if (ret == -1)  
  160.      {  
  161.           printf("通讯录中无此联系人!\n");  
  162.           return;  
  163.       }  
  164.      else  
  165.      {  
  166.           printf("1.修改姓名\n");  
  167.           printf("2.修改性别\n");  
  168.           printf("3.修改年龄\n");  
  169.           printf("4.修改电话\n");  
  170.           printf("5.修改住址\n");  
  171.           printf("\n请选择修改项:");  
  172.           scanf("%d", &ter);  
  173.           switch (ter)  
  174.           {  
  175.                case 1:  
  176.                      printf("修改姓名为:");  
  177.                      scanf("%s", L->elem[ret].name);  
  178.                      break;  
  179.                case 2:  
  180.                      printf("修改性别为:");  
  181.                      scanf("%s", L->elem[ret].sex);  
  182.                      break;  
  183.                case 3:  
  184.                      printf("修改年龄为:");  
  185.                      scanf("%d", L->elem[ret].age);  
  186.                      break;  
  187.                case 4:  
  188.                      printf("修改电话为:");  
  189.                      scanf("%s", L->elem[ret].tele);  
  190.                      break;  
  191.                case 5:  
  192.                      printf("修改地址为:");  
  193.                      scanf("%s", L->elem[ret].adr);  
  194.                      break;  
  195.                default:  
  196.                      break;  
  197.           }  
  198.           printf("修改成功!\n");  
  199.           printf("继续输入?Y/N");  
  200.           if ((a = getchar()) == 'Y')  
  201.           {  
  202.                 _alter(L);  
  203.           }  
  204.           else if ((a = getchar()) == 'N')  
  205.           {  
  206.                 return;  
  207.           }  
  208.      }  
  209. }  
  210.    
  211. //显示所有联系人  
  212. void _show(por L)  
  213. {  
  214.      int i = 0;  
  215.      if (L->count == 0)  
  216.      {  
  217.           printf("通讯录中还没有联系人!\n");  
  218.           return;  
  219.      }  
  220.      else  
  221.      {  
  222.           for (i = 0; i < L->count; i++)  
  223.           {  
  224.                printf("\n 姓名  性别   年龄  电话  地址 \n");  
  225.                printf("  %s   %s   %d   %s   %s\n", L->elem[i].name, L->elem[i].sex, L->elem[i].age, L->elem[i].tele, L->elem[i].adr);  
  226.           }  
  227.      }  
  228. }  
  229.    
  230. //删除所有联系人  
  231. void _delete_all(por L)  
  232. {  
  233.      L->count = 0;  
  234.      printf("清除成功!\n");  
  235. }  
  236.    
  237. //以姓名对通讯录进行冒泡排序  
  238. void _sort(por L)  
  239. {  
  240.      int i = 0;  
  241.      int j = 0;  
  242.      for (i = 0; i < L->count - 1; i++)  
  243.      {  
  244.          for (j = 0; j < L->count - i - 1; j++)  
  245.          {  
  246.               if (strcmp(L->elem[j].name, L->elem[j + 1].name) > 0)  
  247.               {  
  248.                   people temp = L->elem[j];  
  249.                   L->elem[j] = L->elem[j + 1];  
  250.                   L->elem[j + 1] = temp;  
  251.               }  
  252.          }  
  253.      }  
  254. }  
  255.    
  256. int main()  
  257. {  
  258.      pdh L;  
  259.      int num = 1;  
  260.      init(&L);  
  261.      while (num)  
  262.      {  
  263.          menu();  
  264.          scanf("%d", &num);  
  265.          switch (num)  
  266.          {  
  267.              case 0:  
  268.                   exit(EXIT_SUCCESS);  
  269.                   break;  
  270.              case 1:  
  271.                   _add(&L);  
  272.                   break;  
  273.              case 2:  
  274.                   _delete(&L);  
  275.                   break;  
  276.              case 3:  
  277.                   _find(&L);  
  278.                   break;  
  279.              case 4:  
  280.                   _alter(&L);  
  281.                   break;  
  282.              case 5:  
  283.                   _show(&L);  
  284.                   break;  
  285.              case 6:  
  286.                   _delete_all(&L);  
  287.                   break;  
  288.              case 7:  
  289.                   _sort(&L);  
  290.                   break;  
  291.              default:  
  292.                   break;  
  293.           }  
  294.      }  
  295.      system("pause");  
  296.      return 0;  
  297. }  
标签:

给我留言