• 用c语言实现静态通讯录


    思路:

    将代码分成三个模块,头文件contact.h:声明函数,定义结构体

                                        test.c测试类,contact.c用来实现通讯录中的函数功能

    1.打印菜单,让用户进行选择

    2.定义一个结构体PeoInfo,其中包含联系人的信息,如姓名等。将PeoInfo定义一个100大小的数组data,与count封装再同一结构体Contact中,可以这个count来记录data数组的增删查改,因为初始化为0后可以作为数组data的下标

    3.用Contact创建一个con成员,并初始化。但结构体数组,要想全部成员都进行初始化,需要用到

    void * memset ( void * ptr, int value, size_t num ) 函数。
    

    4.功能实现:添加成员后count++,删除成员后count--,访问成员时则以下循环就行for i in range(0,pc->count),当然,查找,删除,修改都需要用到查找函数。排序可以用库函数qsort来实现。

    5.代码如下:

    头文件:contact.h

    1. #pragma once
    2. #include
    3. #include
    4. #include
    5. #include
    6. #define MAX_CONTACTS 100
    7. //定义联系人
    8. typedef struct PenInfo {
    9. char name[20];
    10. int age;
    11. char sex[10];
    12. char tele[12];
    13. char addr[30];
    14. }PenInfo;
    15. //通讯录所包含内容
    16. typedef struct Contact {
    17. PenInfo data[MAX_CONTACTS];
    18. int count;
    19. }Contact;
    20. //初始化联系人列表
    21. void Initcontact(Contact *pc);
    22. //添加联系人
    23. void Addcontact(Contact *pc);
    24. //删除练习人
    25. void Delcontact(Contact* pc);
    26. //显示联系人
    27. void Showcontact(const Contact* pc);
    28. //查找联系人
    29. void Searchcontact(Contact* pc);
    30. //修改联系人
    31. void Modifycontact(Contact* pc);
    32. //排序
    33. void Sortcontact(Contact* pc);

     contact.c:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include "contact.h"
    3. void Initcontact(Contact* pc) {
    4. memset(pc->data, 0, sizeof(pc->data));
    5. pc->count = 0;
    6. }
    7. void Addcontact(Contact* pc){
    8. assert(pc);
    9. if (pc->count == 100) {
    10. printf("联系人已满,无法添加\n");
    11. return;
    12. }
    13. printf("请输入联系人名字:>");
    14. scanf("%s", pc->data[pc->count].name);
    15. printf("请输入联系人年龄:>");
    16. scanf("%d", &(pc->data[pc->count].age));
    17. printf("请输入联系人性别:>");
    18. scanf("%s", pc->data[pc->count].sex);
    19. printf("请输入联系人电话:>");
    20. scanf("%s", pc->data[pc->count].tele);
    21. printf("请输入联系人地址:>");
    22. scanf("%s", pc->data[pc->count].addr);
    23. pc->count++;
    24. printf("添加成功\n");
    25. }
    26. void Showcontact(const Contact* pc) {
    27. assert(pc);
    28. if (pc->count == 0) {
    29. printf("还没添加联系人\n");
    30. return;
    31. }
    32. printf("%-20s\t%-3s\t%-10s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    33. printf("-----------------------------------------------------------------------------\n");
    34. for (int i = 0; i < pc->count; i++) {
    35. printf("%-20s\t%-5d\t%-10s\t%-12s\t%-30s", pc->data[i].name,
    36. pc->data[i].age,
    37. pc->data[i].sex,
    38. pc->data[i].tele,
    39. pc->data[i].addr);
    40. printf("\n");
    41. printf("-----------------------------------------------------------------------------\n");
    42. }
    43. }
    44. //查找联系人
    45. static int Findcontact(Contact* pc, char* name) {
    46. assert(pc);
    47. for (int i = 0; i < pc->count; i++) {
    48. if (strcmp(name, pc->data[i].name) == 0) {
    49. return i;
    50. }
    51. }
    52. return -1;
    53. }
    54. void Delcontact(Contact* pc) {
    55. assert(pc);
    56. char name[20] = { 0 };
    57. printf("请输入要删除的联系人名字:>");
    58. scanf("%s", name);
    59. //查找
    60. int pos = Findcontact(pc, name);
    61. //删除
    62. if (pos == -1) {
    63. printf("没有该联系人\n");
    64. return;
    65. }
    66. for (int i = pos; i < pc->count + 1; i++) {
    67. pc->data[i] = pc->data[i + 1];
    68. }
    69. pc->count--;
    70. printf("删除成功\n");
    71. }
    72. void Searchcontact(Contact* pc) {
    73. assert(pc);
    74. char name[20] = { 0 };
    75. printf("请输入要查找的联系人名字:>");
    76. scanf("%s", name);
    77. //查找
    78. int pos = Findcontact(pc, name);
    79. //删除
    80. if (pos == -1) {
    81. printf("没有该联系人\n");
    82. return;
    83. }
    84. else {
    85. printf("找到了\n");
    86. printf("%-20s\t%-3s\t%-10s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
    87. printf("-----------------------------------------------------------------------------\n");
    88. printf("%-20s\t%-5d\t%-10s\t%-12s\t%-30s", pc->data[pos].name,
    89. pc->data[pos].age,
    90. pc->data[pos].sex,
    91. pc->data[pos].tele,
    92. pc->data[pos].addr);
    93. printf("\n");
    94. printf("-----------------------------------------------------------------------------\n");
    95. }
    96. }
    97. void Modifycontact(Contact* pc) {
    98. assert(pc);
    99. char name[20] = { 0 };
    100. printf("请输入要修改的联系人的名字:>");
    101. scanf("%s", name);
    102. //查找
    103. int pos = Findcontact(pc, name);
    104. //删除
    105. if (pos == -1) {
    106. printf("没有该联系人\n");
    107. return;
    108. }else {
    109. printf("修改后联系人名字:>");
    110. scanf("%s", pc->data[pos].name);
    111. printf("修改后联系人年龄:>");
    112. scanf("%d", &(pc->data[pos].age));
    113. printf("修改后联系人性别:>");
    114. scanf("%s", pc->data[pos].sex);
    115. printf("修改后联系人电话:>");
    116. scanf("%s", pc->data[pos].tele);
    117. printf("修改后联系人地址:>");
    118. scanf("%s", pc->data[pos].addr);
    119. printf("\n");
    120. printf("修改成功\n");
    121. }
    122. }
    123. //按姓名排序函数
    124. int Sort_by_name(const void* e1, const void* e2) {
    125. return strcmp(((PenInfo*)e1)->name, ((PenInfo*)e2)->name);
    126. }
    127. //按年龄排序
    128. int Sort_by_age(const void* e1, const void* e2) {
    129. if (((PenInfo*)e1)->age< ((PenInfo*)e2)->age){
    130. return -1;
    131. }
    132. if (((PenInfo*)e1)->age > ((PenInfo*)e2)->age) {
    133. return 1;
    134. }
    135. if (((PenInfo*)e1)->age == ((PenInfo*)e2)->age) {
    136. return 0;
    137. }
    138. }
    139. void Sortcontact(Contact* pc) {
    140. assert(pc);
    141. int chiose;
    142. printf("(1.按姓名排序 2.按年龄排序):>");
    143. scanf("%d", &chiose);
    144. if (chiose == 1) {
    145. qsort(pc->data,pc->count,sizeof(PenInfo), Sort_by_name);
    146. printf("排序成功\n");
    147. }
    148. else if (chiose == 2) {
    149. qsort(pc->data, pc->count, sizeof(PenInfo), Sort_by_age);
    150. printf("排序成功\n");
    151. }
    152. else {
    153. printf("无效输入\n");
    154. return;
    155. }
    156. }

    test.c:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include "contact.h"
    3. //创建菜单
    4. void menu() {
    5. printf("------------My ContactBook------------\n");
    6. printf("-----------1.Add linkman ------------\n");
    7. printf("-----------2.Del linkman ------------\n");
    8. printf("-----------3.Show linkman ------------\n");
    9. printf("-----------4.Search linkman ----------\n");
    10. printf("-----------5.Modify linkman ----------\n");
    11. printf("-----------6.Sort linkman -----------\n");
    12. printf("-----------0.Exit menu -------------\n");
    13. }
    14. int main() {
    15. int input = 0;
    16. //创建联系人
    17. Contact con;
    18. Initcontact(&con);
    19. do {
    20. menu();
    21. printf("请选择对应功能的编号:>");
    22. scanf("%d", &input);
    23. switch (input) {
    24. case 1:
    25. Addcontact(&con);
    26. break;
    27. case 2:
    28. Delcontact(&con);
    29. break;
    30. case 3:
    31. Showcontact(&con);
    32. break;
    33. case 4:
    34. Searchcontact(&con);
    35. break;
    36. case 5:
    37. Modifycontact(&con);
    38. break;
    39. case 6:
    40. Sortcontact(&con);
    41. break;
    42. case 0:
    43. printf("退出成功\n");
    44. break;
    45. default :
    46. printf("选择错误\n");
    47. break;
    48. }
    49. } while (input);
    50. return 0;
    51. }

    这是一个静态版本,还有许多功能尚未完善,等待后续开发。

  • 相关阅读:
    数学建模-2022年亚太赛C题(含思路过程和代码)
    python3读取yaml文件
    Java集合面试题
    开发知识点-前端-webpack
    4.整合第三方技术【整合JUnit】
    3max20版本安装的脚本问题
    集成学习(一):简述集成学习
    二叉排序树(BST)
    Stimulsoft Reports.WEB 2023.4.2 Crack
    【python学习】枚举算法案例分析
  • 原文地址:https://blog.csdn.net/qq_43112916/article/details/133715174