+ -
当前位置:首页 → 问答吧 → 通讯录信息管理系统

通讯录信息管理系统

时间:2010-07-29

来源:互联网

本帖最后由 sohu2000000 于 2010-07-29 22:25 编辑

想帮自己申请个精华帖,不知道可不可以,不多说了,直接看代码吧,有用的话就请帮忙顶一下吧,申ing....
  1. /*
  2. * ContractManager.cc
  3. *
  4. *  Created on: 2010-7-29
  5. *      Author: LiuFeng
  6. */

  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>

  10. #define INPUT_LINK_LENGTH   40
  11. #define BUFSIZE             16
  12. #define DBSIZE                                100

  13. typedef struct
  14. {
  15.     int  ID;
  16.     char name[BUFSIZE];
  17.     char workPlace[BUFSIZE];
  18.     char teleOff[BUFSIZE];
  19.     char teleHome[BUFSIZE];
  20. }*ADDRP, ADDRESS;

  21. ADDRESS addrTmp[DBSIZE], adTmp;

  22. int cntAddr = 0;
  23. const char * strFmt = "\n%d\t%s\t%s\t%s\t%s\n";
  24. const char * fstrFmt = "%d %s %s %s %s \n";

  25. // ------------------------------------------------------------------------------------------
  26. // Utilities
  27. void inputItem(ADDRP itp)
  28. {
  29.     printf("请输入ID:\n");       scanf("%d", &(itp->ID));
  30.     printf("请输入姓名:\n");     scanf("%s", itp->name);
  31.     printf("请输入工作单位:\n"); scanf("%s", itp->workPlace);
  32.     printf("请输入办公电话:\n"); scanf("%s", itp->teleOff);
  33.     printf("请输入家庭电话:\n"); scanf("%s", itp->teleHome);
  34. };

  35. void outputItem(ADDRP itemp)
  36. {
  37.     printf(strFmt, itemp->ID, itemp->name, itemp->workPlace, itemp->teleOff,itemp->teleHome);
  38. };

  39. void list(ADDRESS addr[], int length)
  40. {
  41.     for (int i = 0; i < length; ++i)
  42.         outputItem(&addr[i]);
  43. }

  44. // ------------------------------------------------------------------------------------------
  45. // Sorted Display
  46. void idsort(ADDRESS addr[])
  47. {
  48.     for (int i = 0; i < cntAddr; ++i)
  49.         addrTmp[i] = addr[i];

  50.     for (int i = 0; i < cntAddr - 1; ++i)
  51.         for (int j = i + 1; j < cntAddr; ++j)
  52.             if (addrTmp[i].ID > addrTmp[j].ID)
  53.             {
  54.                 adTmp = addrTmp[i];
  55.                 addrTmp[i] = addrTmp[j];
  56.                 addrTmp[j] = adTmp;
  57.             }
  58.     list(addrTmp, cntAddr);
  59. };

  60. void namesort(ADDRESS addr[], int length)
  61. {
  62.     for (int i = 0; i < length; ++i)
  63.         addrTmp[i] = addr[i];

  64.     for (int i = 0; i < length - 1; ++i)
  65.         for (int j = i + 1; j < length; ++j)
  66.             if (strcmp(addrTmp[i].name, addrTmp[j].name) > 0)
  67.             {
  68.                 adTmp = addrTmp[i];
  69.                 addrTmp[i] = addrTmp[j];
  70.                 addrTmp[j] = adTmp;
  71.             }
  72.     list(addrTmp, length);
  73. };

  74. void unitssort(ADDRESS addr[], int length)
  75. {
  76.     for (int i = 0; i < length; ++i)
  77.         addrTmp[i] = addr[i];

  78.     for (int i = 0; i < length - 1; ++i)
  79.         for (int j = i + 1; j < length; ++j)
  80.             if (strcmp(addrTmp[i].workPlace, addrTmp[j].workPlace) > 0)
  81.             {
  82.                 adTmp = addrTmp[i];
  83.                 addrTmp[i] = addrTmp[j];
  84.                 addrTmp[j] = adTmp;
  85.             }
  86.     list(addrTmp, length);
  87. };

  88. // ------------------------------------------------------------------------------------------
  89. // Search
  90. void namesearch(ADDRESS adr[], int length)
  91. {
  92.     char in[BUFSIZE];
  93.     printf("请输入姓名:\n");
  94.     scanf("%s", in);

  95.     for (int i = 0; i < length; ++i)
  96.         if (strcmp(adr[i].name, in) == 0)
  97.             outputItem(&adr[i]);
  98. };

  99. void unitssearch(ADDRESS adr[], int length)
  100. {
  101.     char in[BUFSIZE];
  102.     printf("请输入工作单位:\n");
  103.     scanf("%s", in);

  104.     for (int i = 0; i < length; ++i)
  105.         if (strcmp(adr[i].workPlace, in) == 0)
  106.             outputItem(&adr[i]);
  107. };

  108. void officenumbersearch(ADDRESS adr[], int length)
  109. {
  110.     char in[BUFSIZE];
  111.     printf("请输入办公电话:\n");
  112.     scanf("%s", in);

  113.     for (int i = 0; i < length; ++i)
  114.         if (strcmp(adr[i].teleOff, in) == 0)
  115.             outputItem(&adr[i]);
  116. };

  117. void homenumbersearch(ADDRESS adr[], int length)
  118. {
  119.     char in[BUFSIZE];
  120.     printf("请输入家庭电话:\n");
  121.     scanf("%s", in);

  122.     for (int i = 0; i < length; ++i)
  123.         if (strcmp(adr[i].teleHome, in) == 0)
  124.             outputItem(&adr[i]);
  125. };

  126. // ------------------------------------------------------------------------------------------
  127. // Delete
  128. int delet(ADDRESS adr[], int length)
  129. {
  130.     int j;
  131.     printf("要修改第几条记录:\n");
  132.     scanf("%d", &j); --j;

  133.     for (int i = j; i < length - 1; ++i)
  134.         adr[i] = adr[i + 1];
  135.     return --cntAddr;
  136. };

  137. // ------------------------------------------------------------------------------------------
  138. // Modify
  139. void rewrite(ADDRESS adr[])
  140. {
  141.     int j;
  142.     printf("要修改第几条记录:\n");
  143.     scanf("%d", &j);

  144.     inputItem(&adr[j]);
  145. };

  146. // ------------------------------------------------------------------------------------------
  147. // Add
  148. int add(ADDRESS adr[], int last)
  149. {
  150.     inputItem(&adr[++cntAddr]);
  151.     return cntAddr;
  152. };

  153. int enter(ADDRESS adr[])
  154. {
  155.     while (1)
  156.     {
  157.         inputItem(&adr[cntAddr++]);

  158.         printf("\n输入下一条?Y/N:");
  159.         fflush( stdin);
  160.         char quitChar = getchar();
  161.         if ('N' == quitChar || 'n' == quitChar) break;
  162.     }
  163.     return cntAddr;
  164. };

  165. // ------------------------------------------------------------------------------------------
  166. // file I/O
  167. int load(ADDRESS adr[])
  168. {
  169.     FILE *fp;
  170.     if ((fp = fopen("D:\\ConData.dat", "r+")) != NULL)
  171.     {
  172.         cntAddr = 0;
  173.         while (!feof(fp))
  174.         {
  175.             fscanf(fp, fstrFmt, &(adr[cntAddr].ID), adr[cntAddr].name,adr[cntAddr].workPlace, adr[cntAddr].teleOff,adr[cntAddr].teleHome);
  176.             ++cntAddr;
  177.         }
  178.     }
  179.     fclose(fp);
  180.     return cntAddr;
  181. };

  182. void display(ADDRESS* addr)
  183. {
  184.     list(addr, cntAddr);
  185. };

  186. void save(ADDRESS adr[], int length)
  187. {
  188.     FILE *fp = fopen("D:\\ConData.dat", "w+");
  189.     for (int i = 0; i < cntAddr; ++i)
  190.         fprintf(fp, fstrFmt, adr[i].ID, adr[i].name, adr[i].workPlace,adr[i].teleOff, adr[i].teleHome);
  191.     fclose(fp);
  192. };

  193. void copy(void)
  194. {
  195.     char in[BUFSIZE];
  196.     FILE *fp, *fc;
  197.     printf("请输入新文件名(路径中的反斜杠用\\表示)\n");
  198.     scanf("%s", in);

  199.     if ((fp = fopen("D:\\ConData.dat", "r+")) != NULL)
  200.     {
  201.         fc = fopen(in, "w");
  202.         while (!feof(fp))
  203.         {
  204.             fscanf(fp,  fstrFmt, &(adTmp.ID), adTmp.name, adTmp.workPlace,adTmp.teleOff, adTmp.teleHome);
  205.             fprintf(fc, fstrFmt,   adTmp.ID,  adTmp.name, adTmp.workPlace,adTmp.teleOff, adTmp.teleHome);
  206.         }
  207.         fclose(fc);
  208.     }
  209.     fclose(fp);
  210. };

  211. // ------------------------------------------------------------------------------------------
  212. // Menu
  213. void showpaixu(ADDRESS adr[], int length)
  214. {
  215.     int choice;
  216. menu1:
  217.     system("cls");
  218.     printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  219.     printf(" 1. 全部显示通讯录信息\n\n");
  220.     printf(" 2. 按序号显示通讯录信息\n\n");
  221.     printf(" 3. 按姓名排序\n\n");
  222.     printf(" 4. 按工作单位排序\n\n");
  223.     printf(" 0. 返回上一级菜单\n\n");
  224.     printf(" ********************************************************************\n");
  225.     printf(" 请选择(0~4)\n ");

  226.     scanf("%d", &choice);

  227.     switch (choice)
  228.     {
  229.     case 1:
  230.         display(adr);
  231.         system("pause");
  232.         break;
  233.     case 2:
  234.         idsort(adr);
  235.         system("pause");
  236.         break;
  237.     case 3:
  238.         namesort(adr, length);
  239.         system("pause");
  240.         break;
  241.     case 4:
  242.         unitssort(adr, length);
  243.         system("pause");
  244.         break;
  245.     case 0:
  246.         return;
  247.     default:
  248.         printf("输入选项有误,请重新输入(0-4):");
  249.         system("pause");
  250.         break;
  251.     }
  252.     goto menu1;
  253. };

  254. void chazhao(ADDRESS adr[], int length)
  255. {
  256.     int choice;
  257. menu2:
  258.     system("cls");
  259.     printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  260.     printf(" 1. 通过姓名查找\n\n");
  261.     printf(" 2. 通过工作单位查找\n\n");
  262.     printf(" 3. 通过办公电话查找\n\n");
  263.     printf(" 4. 通过家庭电话查找\n\n");
  264.     printf(" 0. 返回上一级菜单\n\n");
  265.     printf(" ********************************************************************\n");
  266.     printf(" 请选择(0~4)\n ");
  267.     scanf("%d", &choice);
  268.     switch (choice)
  269.     {
  270.     case 1:
  271.         namesearch(adr, length);
  272.         system("pause");
  273.         break;
  274.     case 2:
  275.         unitssearch(adr, length);
  276.         system("pause");
  277.         break;
  278.     case 3:
  279.         officenumbersearch(adr, length);
  280.         system("pause");
  281.         break;
  282.     case 4:
  283.         homenumbersearch(adr, length);
  284.         system("pause");
  285.         break;
  286.     case 0:
  287.         return;
  288.     default:
  289.         printf("输入选项有误,请重新输入(0-4):");
  290.         system("pause");
  291.         break;
  292.     }
  293.     goto menu2;
  294. };

  295. void biangeng(ADDRESS adr[], int length)
  296. {
  297.     int choice;
  298. menu3:
  299.     system("cls");
  300.     printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  301.     printf(" 1. 删除记录\n\n");
  302.     printf(" 2. 修改记录\n\n");
  303.     printf(" 3. 添加记录\n\n");
  304.     printf(" 0. 返回上一级菜单\n\n");
  305.     printf(" ********************************************************************\n");
  306.     printf(" 请选择(0~3)\n ");
  307.     scanf("%d", &choice);
  308.     switch (choice)
  309.     {
  310.     case 1:
  311.         length = delet(adr, length);
  312.         save(adr, length);
  313.         getchar();
  314.         break;
  315.     case 2:
  316.         rewrite(adr);
  317.         save(adr, length);
  318.         break;
  319.     case 3:
  320.         length = add(adr, length);
  321.         save(adr, length);
  322.         getchar();
  323.         break;
  324.     case 0:
  325.         return;
  326.     default:
  327.         printf("输入选项有误,请重新输入(0-3):");
  328.         system("pause");
  329.         break;
  330.     }
  331.     goto menu3;
  332. };

  333. int wenjian(ADDRESS adr[], int length)
  334. {
  335.     int choice;
  336. menu4:
  337.     system("cls");
  338.     printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  339.     printf(" 1. 导入通讯录到内存\n\n");
  340.     printf(" 2. 把当前文件复制到新文件上\n\n");
  341.     printf(" 0. 返回上一级菜单\n\n");
  342.     printf(" ********************************************************************\n");
  343.     printf(" 请选择(0~2)\n ");
  344.     scanf("%d", &choice);
  345.     switch (choice)
  346.     {
  347.     case 1:
  348.         length = load(adr);
  349.         printf("您已经成功的导入通讯录文件到内存!\n");
  350.         system("pause");
  351.         break;
  352.     case 2:
  353.         copy();
  354.         printf("复制成功!\n");
  355.         system("pause");
  356.         break;
  357.     case 0:
  358.         return length;
  359.     default:
  360.         printf("输入选项有误,请重新输入(0-2):");
  361.         system("pause");
  362.         break;
  363.     }
  364.     goto menu4;
  365. };

  366. void about()
  367. {
  368.     system("color 87");
  369.     system("cls");
  370.     printf("\n\n\n\n 《通讯录信息管理系统》\n\n\n");
  371.     printf(" *****************************************\n\n\n");
  372.     printf(" 版权所有(C) 2010-2011 \n\n\n");
  373.     printf(" 制作人:\n\n\n");
  374.     printf(" *****************************************\n\n\n");
  375.     system("pause");
  376. };

  377. int main(void)
  378. {
  379.     int choice;
  380.     int length = 0;
  381.     ADDRESS adr[DBSIZE];

  382.     length = load(adr);

  383. menu:
  384.     system("color f9");
  385.     system("cls");
  386.     printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
  387.     printf(" 请选择以下通讯录管理功能:\n\n");
  388.     printf(" 1. 通讯录信息输入\n\n");
  389.     printf(" 2. 通讯录信息浏览及排序\n\n");
  390.     printf(" 3. 通讯录信息查询\n\n");
  391.     printf(" 4. 通讯录信息更改\n\n");
  392.     printf(" 5. 通讯录及文件操作\n\n");
  393.     printf(" 6. 关于通讯录信息管理系统\n\n");
  394.     printf(" 0. 退出通讯录信息管理系统\n\n");
  395.     printf(" ********************************************************************\n");
  396.     printf(" 请选择(0~6)\n ");
  397.     scanf("%d", &choice);
  398.     switch (choice)
  399.     {
  400.     case 1:
  401.         length += enter(adr);
  402.         save(adr, length);
  403.         system("pause");
  404.         break;
  405.     case 2:
  406.         showpaixu(adr, length);
  407.         break;
  408.     case 3:
  409.         chazhao(adr, length);
  410.         break;
  411.     case 4:
  412.         biangeng(adr, length);
  413.         break;
  414.     case 5:
  415.         length = wenjian(adr, length);
  416.         break;
  417.     case 6:
  418.         about();
  419.         break;
  420.     case 0:
  421.         return 0;
  422.     default:
  423.         printf("输入选项有误,请重新输入(0-6):");
  424.         system("pause");
  425.         break;
  426.     }
  427.     goto menu;

  428.     return 0;
  429. };
复制代码
运行如下:

下载 (41.89 KB)
2010-07-29 22:19

下载 (58.21 KB)
2010-07-29 22:19

下载 (42.19 KB)
2010-07-29 22:19

作者: sohu2000000   发布时间: 2010-07-29

up

作者: efolzl   发布时间: 2010-07-29

好怀念这样的界面这样的程序

作者: xinglp   发布时间: 2010-07-29

为什么不弄个GUI呢

作者: chinesedragon   发布时间: 2010-07-29

相关阅读 更多

热门下载

更多