A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 sunshine429 于 2016-1-25 02:21 编辑
  1. //
  2. //  main.c
  3. //  contacts
  4. // printf("**************************\n");
  5. // printf("****** 欢迎使用通讯录 ******\n");
  6. // printf("****** 1、添加联系人  ******\n");
  7. // printf("****** 2、删除联系人  ******\n");
  8. // printf("****** 3、修改联系人  ******\n");
  9. // printf("****** 4、查看所有联系人 ****\n");
  10. // printf("****** 5、搜索联系人  ******\n");
  11. // printf("****** 6、退出系统    ******\n");
  12. // printf("**************************\n\n");
  13. //  Created by Sunshine_yang on 1/24/16.
  14. //  Copyright (c) 2016 sunshine-429. All rights reserved.
  15. //

  16. #include <stdio.h>
  17. #include <string.h>
  18. // 声明函数
  19. int judge(int a);
  20. void doAdd();
  21. void doDelete();
  22. void doUpdate();
  23. void doList();
  24. void doSearch();
  25. int doQuit();
  26. void initContact();
  27. void writeFILE();

  28. // 1.定义变量
  29.     //宏定义
  30. #define NAMELEN 22
  31. #define TELLEN 12


  32.     // 定义联系人结构体
  33. typedef struct {
  34.    
  35.     char name[NAMELEN];
  36.     char tel[TELLEN];
  37.    
  38. }Person;
  39.     // 定义联系人结构体数组
  40. Person Contacts[100];
  41.     // 定义当前联系人总数
  42. int contactsNum;

  43. int main(int argc, const char * argv[]) {
  44.     // 初始化
  45.     initContact();
  46.     // 循环
  47.     while(1)
  48.     {
  49.         
  50.         printf("*****************分隔符******************\n");
  51.         
  52.         // 打印一边
  53.         printf("******************************\n");
  54.         printf("****** 欢迎使用通讯录     ******\n");
  55.         printf("****** 1、添加联系人      ******\n");
  56.         printf("****** 2、删除联系人      ******\n");
  57.         printf("****** 3、修改联系人      ******\n");
  58.         printf("****** 4、查看所有联系人  *******\n");
  59.         printf("****** 5、搜索联系人     *******\n");
  60.         printf("****** 6、退出系统      *******\n");
  61.         printf("*****************************\n\n");
  62.         
  63.         // 让用户输入
  64.         int control = 0;
  65.         printf("请输入要选择的项目:\n");
  66.         scanf("%d", &control);
  67.         // 判断用户输入是否合法
  68.         if(0 == judge(control))
  69.         {
  70.             printf("输入不合法请重新输入:\n");
  71.             continue;
  72.         }
  73.         switch(control)
  74.         {
  75.             case 1:
  76.                
  77.                 doAdd();
  78.                 break;
  79.                
  80.                
  81.             case 2:
  82.                 doDelete();
  83.                 break;
  84.                
  85.                
  86.             case 3:

  87.                 doUpdate();
  88.                 break;
  89.                
  90.             case 4:

  91.                 doList();
  92.                 break;
  93.                
  94.             case 5:

  95.                 doSearch();
  96.                 break;
  97.                
  98.             case 6:
  99.             {
  100.                 int m;
  101.                
  102.                     printf("您真的要退出吗,我舍不得你\n1.确认离开\t0.取消\n");
  103.                     scanf("%d", &m);
  104.                     if(1 == m)
  105.                     {
  106.                         printf("程序正在退出...\n");
  107.                         printf("程序已退出\n");
  108.                         return 0;
  109.                     }
  110.                     continue;
  111.                
  112.                
  113.                
  114.                 break;
  115.             }
  116.                
  117.         }
  118.         

  119.     }
  120.     return 0;
  121. }
  122. /**
  123. 初始化通讯录

  124. - returns: <#return value description#>
  125. */
  126. void initContact()
  127. {
  128.     // 定义文件指针,
  129.     FILE *fp = fopen("contacts.data", "rb");
  130.    
  131.     if(fp == NULL)
  132.     {
  133.         fp = fopen("contacts.data", "wb");
  134.         fwrite(&contactsNum,sizeof(contactsNum),1,fp);
  135.         printf("通讯录初始化成功\n");
  136.         
  137.     }else
  138.     {
  139.         // 写入联系人总数注意int类型,要写地址形式
  140.         fread(&contactsNum,sizeof(contactsNum),1,fp);
  141.         printf("导入%d个联系人成功\n", contactsNum);
  142.         
  143.         
  144.         for(int i = 0; i < contactsNum; i++)
  145.         {
  146.             // 修改
  147.             //读取联系人数据到联系人数组中
  148.             fread(&Contacts[i], sizeof(Person), 1, fp);
  149. //            fread(Contacts[i].name, sizeof(Person), 1, fp);
  150. //            fread(Contacts[i].tel, sizeof(Person), 1, fp);
  151.         }
  152.         
  153.    
  154.     }
  155.    
  156.     // 关闭文件
  157.     fclose(fp);

  158. }


  159. /**
  160. *  1.添加联系人
  161. */
  162. void doAdd()
  163. {
  164.     printf("请输入要添加的联系人姓名:(*不要出现空格)\n");
  165.     scanf("%s", Contacts[contactsNum].name);
  166.    
  167.    
  168.     printf("请输入要添加的联系人电话:(*不要出现空格)\n");
  169.     scanf("%s", Contacts[contactsNum].tel);
  170.     //等待用户确认
  171.     int flag;
  172.     printf("确认要添加吗:\n1.确认\t0.取消\n");
  173.     scanf("%d", &flag);
  174.     if(!flag)
  175.     {
  176.         return ;
  177.     }

  178.     contactsNum++;
  179.     writeFILE();
  180.     printf("添加成功\t选择4.查看\n");
  181. }
  182. /**
  183. *  2.删除联系人
  184. */
  185. void doDelete()
  186. {
  187.     doList();
  188.     int num;
  189.     printf("请输入要删除的联系人序列号:\n");
  190.     scanf("%d",&num);
  191.     //  判断编号是否合法
  192.     if (!judge(num)) {
  193.         return ;
  194.     }
  195.     //等待用户确认
  196.     int flag;
  197.     printf("确认要删除吗,删除后联系人将无法恢复:\n1.确认\t0.取消\n");
  198.     scanf("%d", &flag);
  199.     if(!flag)
  200.     {
  201.         return ;
  202.     }

  203.     // 删除的元素正好是数组的最后一个元素
  204.     if (num == contactsNum) {
  205.         contactsNum--;
  206.         writeFILE();
  207.         printf("删除成功\t选择4.查看\n");
  208.     }else{
  209.         for(int i = num-1; i < contactsNum; i++)
  210.         {
  211.             strcpy(Contacts[i].name,Contacts[i+1].name);
  212.             strcpy(Contacts[i].tel,Contacts[i+1].tel);
  213.             
  214.         }
  215.         contactsNum--;
  216.         writeFILE();
  217.         printf("删除成功\t选择4.查看\n");
  218.     }
  219. }
  220. /**
  221. *  3.修改联系人
  222. */
  223. void doUpdate()
  224. {
  225.     //列表所有的联系人
  226.     doList();
  227.    
  228.     int num;
  229.     printf("请输入要修改的联系人序列号:\n");
  230.     scanf("%d",&num);
  231.     //  判断编号是否合法
  232.     if (!judge(num)) {
  233.         return ;
  234.     }
  235.     //等待用户确认
  236.     int flag;
  237.     printf("确认要修改吗,修改后联系人将无法还原:\n1.确认\t0.取消\n");
  238.     scanf("%d", &flag);
  239.     if(!flag)
  240.     {
  241.         return ;
  242.     }
  243.    
  244.     char name_tel[contactsNum];
  245.     printf("请输入要新的联系人姓名:(*不要出现空格)\n");
  246.     scanf("%s", name_tel);
  247.     strcpy(Contacts[num-1].name,name_tel);
  248.    
  249.     printf("请输入要新的联系人电话:(*不要出现空格)\n");
  250.     scanf("%s", name_tel);
  251.     strcpy(Contacts[num-1].tel,name_tel);
  252.    
  253.     writeFILE();
  254.     printf("修改成功\t选择4.查看\n");
  255. }

  256. /**
  257. *  4.查看所有联系人
  258. */
  259. void doList()
  260. {
  261.    
  262.     //****这些多余了***
  263. //    // 定义文件指针,
  264. //    FILE *fp = fopen("contacts.data", "r");
  265. //   
  266. //    if(fp!=NULL)
  267. //    {
  268. //        // 读取数据
  269. //        fread(&contactsNum,sizeof(contactsNum),1,fp);
  270. //        
  271. //        
  272. //        
  273. //        for(int i = 0; i < contactsNum; i++)
  274. //        {
  275. //            fread(Contacts[i].name, sizeof(Person), 1, fp);
  276. //            fread(Contacts[i].tel, sizeof(Person), 1, fp);
  277. //        }
  278. //        
  279. //        printf("通讯录联系人如下:\n");
  280. //    }
  281. //   
  282. //    // 关闭文件
  283. //    fclose(fp);
  284.    
  285.     //判断通讯录是否为空
  286.     if(contactsNum == 0){
  287.         
  288.         printf("您的通讯录还没有小伙伴~请添加小伙伴!\n");
  289.         
  290.     }else{
  291.         printf("编号\t    姓名\t    电话\t\n");
  292.         for(int i = 0;i < contactsNum; i++)
  293.         {
  294.             printf("%d\t    %s\t    %s\t\n",i+1, Contacts[i].name, Contacts[i].tel);
  295.         }
  296.         printf("\n");
  297.     }
  298. }

  299. /**
  300. *  5.搜索联系人
  301. */
  302. void doSearch()
  303. {
  304.     char name[NAMELEN];
  305.     printf("请输入要搜索的联系人姓名:\n");
  306.     scanf("%s" , name);
  307.     for(int i = 0; i < contactsNum; i++)
  308.     {
  309.         if(!strcmp(Contacts[i].name,name))
  310.         {
  311.             printf("查找成功\t\t");
  312.             printf("联系人%s的电话是%s\n\n", Contacts[i].name,Contacts[i].tel);
  313.             return ;
  314.         }
  315.         
  316.         
  317.     }
  318.     int flag;
  319.     printf("查找失败\t你是否要添加:\n1.确认\t0.取消\n");
  320.     scanf("%d", &flag);
  321.     if(flag)
  322.     {
  323.         doAdd();
  324.     }
  325. }

  326. /**
  327. *  6.退出系统
  328. */
  329. int doQuit()
  330. {
  331.     return 0;

  332. }
  333. /**
  334. *  判断用户输入是否合法
  335. */
  336. int judge(int a)
  337. {
  338.     if(a > 6 || a <1)
  339.     {
  340.         
  341.         return 0;
  342.     }
  343.     return 1;
  344. }
  345. /**
  346. *  写入数据
  347. */
  348. void writeFILE()
  349. {
  350.     //写入数据
  351.     FILE *fp = fopen("contacts.data", "wb");
  352.     fwrite(&contactsNum,sizeof(contactsNum),1,fp);
  353.    
  354.     if(fp != NULL){
  355.         fwrite(&contactsNum, sizeof(contactsNum), 1, fp);
  356.         for(int i = 0; i < contactsNum; i++)
  357.         {
  358.             fwrite(&Contacts[i], sizeof(Person), 1, fp);
  359.         }
  360.    
  361.     }
  362.    
  363.    
  364.     // 注意fclose!!!!!!!!!!
  365.     fclose(fp);
  366. }
复制代码
更多图片 小图 大图
组图打开中,请稍候......

6 个回复

倒序浏览
好了,睡觉去了,,,
回复 使用道具 举报
学习了~~~~
回复 使用道具 举报
学习了~~~~~~~~
回复 使用道具 举报
这么多,我才刚开始看啊......
回复 使用道具 举报
不忘初心 方得始终.
回复 使用道具 举报
学习了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马