• 顺序表第三节(通讯录基础版)


    目录

    可以先看一遍第二节在看这个         顺序表(第二节)实现和解析-CSDN博客

    1.顺序表的头文件

    2.初始化通讯录

    3.添加通讯录

    特殊:查找对应姓名的通讯录的序号 

    4.删除通讯录

    5.展示通讯录

    6.查找通讯录

    7.修改通讯录

    8.销毁通讯录


    可以先看一遍第二节在看这个         顺序表(第二节)实现和解析-CSDN博客

    1.顺序表的头文件

    1. #pragma once
    2. #define NAME_MAX 100
    3. #define SEX_MAX 4
    4. #define TEL_MAX 11
    5. #define ADDR_MAX 100
    6. //前置声明
    7. typedef struct SeqList contact;
    8. //用户数据
    9. typedef struct PersonInfo
    10. {
    11. char name[NAME_MAX];
    12. char sex[SEX_MAX];
    13. char telenum[TEL_MAX];
    14. char adr[ADDR_MAX];
    15. }PeoInfo;
    16. //初始化通讯录
    17. void InitContact(contact* con);
    18. //添加通讯录数据
    19. void AddContact(contact* con);
    20. //删除通讯录数据
    21. void DelContact(contact* con);
    22. //展示通讯录数据
    23. void ShowContact(contact* con);
    24. //查找通讯录数据
    25. void FindContact(contact* con);
    26. //修改通讯录数据
    27. void ModifyContact(contact* con);
    28. //销毁通讯录数据
    29. void DestroyContact(contact* con);

     #pragma once 的意思是同一个头文件只能展开一次。

    下面define几个变量。

    第一个typedef 是把前面顺序表的结构体重命名为 contact。

    第二个typedef 是把你通讯录的结构体类型重命名为 peoinfo。

    下面则是每个方法的的接口名称。

    2.初始化通讯录

    1. void InitContact(contact* con)
    2. {
    3. SLInit(con);
    4. }

    很简单调用前面的顺序表的初始化接口即可。 

    3.添加通讯录

    1. void AddContact(contact* con)
    2. {
    3. PeoInfo info = {0};
    4. printf("请输入联系人姓名:\n");
    5. scanf("%s", info.name);
    6. printf("请输入联系人性别:\n");
    7. scanf("%s", info.sex);
    8. printf("请输入联系人电话号码:\n");
    9. scanf("%s", info.telenum);
    10. printf("请输入联系人地址:\n");
    11. scanf("%s", info.adr);
    12. SLPushBack(con, info);
    13. }

    让别人输入4个变量的值的过程,也很简单都是基础  !!!!!! 

    特殊:查找对应姓名的通讯录的序号 

    1. int FindByName(contact* con, char name[])
    2. {
    3. for (int i = 0; i < con->size; i++)
    4. {
    5. if (strcmp(con->a[i].name, name) == 0)
    6. {
    7. return i;
    8. }
    9. }
    10. return -1;
    11. }

    这个函数作为中间函数,可以不用写在头文件里,但对于后面几步的操作确实必不可少的。

    首先这个函数查找的是 用名字找位置(当然你也可以用其他的变量的值作为查找值)。

    传入两个参数第一个是要查找的通讯录的指针,第二个则是要查找的姓名。

    用遍历遍历每一个顺序表的表格中的内容,然后用strcmp函数来做比较,因为字符串比较用不了大小于符号。

    strcmp的用法就是对比两个字符串如果都相等则返回0,如果不相等则返回不是0的数。

    如果找到了就返回这个 i (这个 i 就是 相同名字在 通讯录的位置。)

    找不到就返回-1. 

    4.删除通讯录

    1. void DelContact(contact* con)
    2. {
    3. printf("请输入要删除的人的姓名:\n");
    4. char name[NAME_MAX];
    5. scanf("%s", name);
    6. int find = FindByName(con, name);
    7. if (find >= 0)
    8. {
    9. SLErase(con, find);
    10. }
    11. else
    12. {
    13. printf("要删除的联系人不存在。\n");
    14. return;
    15. }
    16. }

    传入通讯录的指针。

    然后让用户输入要查找的通讯录姓名,在用 int find 接收 函数返回值。

    如果返回的是 i 那就是大于0 的,反之为-1 (上面特殊函数的返回值)。

    如果大于0就代表找到了,利用顺序表删除的接口,删除这一格的通讯录信息。

    反之就是没找到,打印没找到并返回。 

    5.展示通讯录

    1. void ShowContact(contact* con)
    2. {
    3.     printf("%-4s %-4s %-11s %s\n", "姓名", "性别", "号码", "地址");
    4.     for (int i = 0; i < con->size; i++)
    5.     {
    6.         printf("%-4s %-4s %-11s %s\n", con->a[i].name, con->a[i].sex, con->a[i].telenum, con->a[i].adr);
    7.     }
    8. }

    展示通讯录就是把通讯录的内容打印出来即可。先做好表头就是把内容都打印好。
    然后再用for循环给通讯录的内容一一遍历并打印出来即可。

    6.查找通讯录

    1. void FindContact(contact* con)
    2. {
    3. char name[NAME_MAX];
    4. printf("你要查找的姓名:\n");
    5. scanf("%s", name);
    6. int find = FindByName(con, name);
    7. if (find < 0)
    8. {
    9. printf("你输入的姓名不存在!\n");
    10. return;
    11. }
    12. printf("%-4s %-4s %-11s %s\n", "姓名", "性别", "号码", "地址");
    13. printf("%-4s %-4s %-11s %s\n", con->a[find].name, con->a[find].sex, con->a[find].telenum, con->a[find].adr);
    14. }

    查找通讯录和删除的前提都是一样的,都是用 findbyname 函数找到对应位置的通讯录。

    然后找到了就打印出这一格的通讯录内容即可。 

    7.修改通讯录

    1. void ModifyContact(contact* con)
    2. {
    3. char name[NAME_MAX];
    4. printf("你要查找的姓名:\n");
    5. scanf("%s", name);
    6. int find = FindByName(con, name);
    7. if (find < 0)
    8. {
    9. printf("你输入的姓名不存在!\n");
    10. return;
    11. }
    12. printf("请输入修改后的姓名:\n");
    13. scanf("%s", con->a[find].name);
    14. printf("请输入修改后的性别:\n");
    15. scanf("%s", con->a[find].sex);
    16. printf("请输入修改后的电话:\n");
    17. scanf("%s", con->a[find].telenum);
    18. printf("请输入修改后的地址:\n");
    19. scanf("%s", con->a[find].adr);
    20. }

    更改联系人,和上面也一样先用到 findbyname 接口。

    然后在对通讯录里的内容进行更改就好。 

    8.销毁通讯录

    1. void DestroyContact(contact* con)
    2. {
    3. SLDestory(con);
    4. }

    销毁通讯录,就用到顺序表的销毁接口就好了。总之通讯录的实现是很快的。 

     9.优化界面(超简易版)

    1. #include"sql.h"
    2. #include"txl.h"
    3. void menu()
    4. {
    5. printf("***********************************\n");
    6. printf("*****1.添加联系人 2.删除联系人*****\n");
    7. printf("*****3.查找联系人 4.查看联系人*****\n");
    8. printf("*****5.修改联系人 0.退出通讯录*****\n");
    9. printf("***********************************\n");
    10. }
    11. int main()
    12. {
    13. contact con;
    14. InitContact(&con);
    15. int num = 0;
    16. do
    17. {
    18. menu();
    19. printf("输入操作数:\n");
    20. scanf("%d", &num);
    21. switch (num)
    22. {
    23. case 1:
    24. AddContact(&con);
    25. break;
    26. case 2:
    27. DelContact(&con);
    28. break;
    29. case 3:
    30. FindContact(&con);
    31. break;
    32. case 4:
    33. ShowContact(&con);
    34. break;
    35. case 5:
    36. ModifyContact(&con);
    37. break;
    38. case 0:
    39. printf("退出!\n");
    40. break;
    41. default:
    42. printf("输入的操作不存在!请重新输入\n");
    43. break;
    44. }
    45. } while (num);
    46. DestroyContact(&con);
    47. return 0;
    48. }

     最终结果:

  • 相关阅读:
    SSM+图书馆电子文件资源管理 毕业设计-附源码191614
    WebGL之使用着色器将颜色应用于 WebGL
    go语言学习之旅之go语言基础语法
    Mysql基础(三)——常用函数与聚合函数
    Libuv源码解析 - 主要数据结构
    智慧燃气系统建设方案:建设目标、建设方案、技术特征、应用价值
    pnpm凭什么这么快
    MySQL备份与恢复
    精准用户画像!商城用户分群2.0!⛵
    人工智能的未来以及人工智能如何影响教育、医学、营销领域
  • 原文地址:https://blog.csdn.net/a1275174052/article/details/133957589