实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址

x33g5p2x  于2021-11-21 转载在 其他  
字(7.2k)|赞(0)|评价(0)|浏览(316)

实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址

提供方法:

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息
  6. 清空所有联系人
  7. 以名字排序所有联系人
  8. 保存联系人到文件
  9. 加载联系人

1.添加联系人信息

  1. void AddContact(pContact pc)//增加联系人
  2. {
  3. if (pc->sz==MAX)
  4. {
  5. printf("通讯录已满,无法增加新的联系人\n");
  6. return;
  7. }
  8. printf("请输入名字:>");
  9. scanf("%s", pc->data[pc->sz].name);
  10. printf("请输入年龄:>");
  11. scanf("%d", &pc->data[pc->sz].age);
  12. printf("请输入性别:>");
  13. scanf("%s", pc->data[pc->sz].sex);
  14. printf("请输入电话:>");
  15. scanf("%s", pc->data[pc->sz].tele);
  16. printf("请输入地址:>");
  17. scanf("%s", pc->data[pc->sz].addr);
  18. pc->sz++;
  19. }

2. 删除指定联系人信息

  1. void DelContact(pContact pc)//删除联系人
  2. {
  3. char name[NAME_MAX] = { 0 };
  4. int i = 0;
  5. int pos = 0;
  6. if (pc->sz == 0)
  7. {
  8. printf("通讯录为空,无法删除\n");
  9. return;
  10. }
  11. //1.找到要删除的人
  12. printf("请输入要删除人的名字:>");
  13. scanf("%s", name);
  14. pos = Find(pc, name);
  15. if (i == pc->sz)
  16. {
  17. printf("要删除的人不存在\n");
  18. }
  19. //2.删除
  20. for (pos = i; pos < pc->sz-1; pos++)
  21. {
  22. pc->data[pos] = pc->data[pos + 1];
  23. }
  24. pc->sz--;
  25. }

3. 查找指定联系人信息

  1. int SearchContact(pContact pc)//查找指定的联系人
  2. {
  3. int pos = 0;
  4. char name[NAME_MAX] = { 0 };
  5. printf("请输入要查找联系人的名字:>");
  6. scanf("%s", name);
  7. pos = Find(pc, name);
  8. if (pos == -1)
  9. {
  10. printf("查找的联系人不存在\n");
  11. return -1;
  12. }
  13. else
  14. {
  15. printf("%10s\t%5d\t%5s\t%12s\t%12s\t\n", pc->data[pos].name,
  16. pc->data[pos].age,
  17. pc->data[pos].sex,
  18. pc->data[pos].tele,
  19. pc->data[pos].addr);
  20. return pos;
  21. }
  22. }

4. 修改指定联系人信息

  1. void ModdifyContact(pContact pc)//修改联系人的信息
  2. {
  3. int ret = SearchContact(pc);
  4. if (ret != -1)
  5. {
  6. printf("请输入要修改联系人的信息:>");
  7. printf("请输入修改的名字:>");
  8. scanf("%s", pc->data[ret].name);
  9. printf("请输入修改的年龄:>");
  10. scanf("%d", &pc->data[ret].age);
  11. printf("请输入修改的性别:>");
  12. scanf("%s", pc->data[ret].sex);
  13. printf("请输入修改的电话:>");
  14. scanf("%s", pc->data[ret].tele);
  15. printf("请输入修改的地址:>");
  16. scanf("%s", pc->data[ret].addr);
  17. }
  18. else
  19. {
  20. printf("无法修改\n");
  21. }
  22. }

5. 显示所有联系人信息

  1. void ShowContact(pContact pc)//显示联系人信息
  2. {
  3. int i = 0;
  4. printf("%10s\t%5s\t%5s\t%12s\t%12s\t\n", "name", "age", "sex", "tele", "addr");
  5. for (i = 0; i < pc->sz; i++)
  6. {
  7. printf("%10s\t%5d\t%5s\t%12s\t%12s\t\n", pc->data[i].name,
  8. pc->data[i].age,
  9. pc->data[i].sex,
  10. pc->data[i].tele,
  11. pc->data[i].addr);
  12. }
  13. }

6. 清空所有联系人

  1. void ClearContact(pContact pc)// 清空所有联系人
  2. {
  3. pc->sz = 0;
  4. printf("已清空通讯录\n");
  5. }

7. 以名字排序所有联系人

  1. void sort_contact(pContact pc)//以名字排序所有联系人
  2. {
  3. int i = 0;
  4. int j = 0;
  5. for (i = 0; i < pc->sz; i++)//冒泡法排序
  6. {
  7. for (j = 0; j < pc->sz -1 - i; j++)
  8. {
  9. if (strcmp(pc->data[j].name, pc->data[j+1].name)>0)
  10. {
  11. PeoInfo tmp = pc->data[j];
  12. pc->data[j] = pc->data[j+1];
  13. pc->data[j+1] = tmp;
  14. }
  15. }
  16. }
  17. }

8.总代码

头文件

  1. //Contact.h
  2. #ifndef __CONTACT_H__
  3. #define __CONTACT_H__
  4. #define MAX 1000
  5. #define NAME_MAX 20
  6. #define SEX_MAX 10
  7. #define TELE_MAX 12
  8. #define ADDR_MAX 20
  9. enum Option
  10. {
  11. EXIT,
  12. ADD,
  13. DEL,
  14. SEARCH,
  15. MODIFY,
  16. SHOW,
  17. CLEAR,
  18. SORT,
  19. SAVE
  20. };
  21. typedef struct PeoInfo
  22. {
  23. char name[NAME_MAX];
  24. int age;
  25. char sex[SEX_MAX];
  26. char tele[TELE_MAX];
  27. char addr[ADDR_MAX];
  28. }PeoInfo;
  29. typedef struct Contact
  30. {
  31. struct PeoInfo data[MAX];//存放人的信息
  32. int sz;//记录有效个数
  33. }Contact,* pContact;
  34. void InitContact(pContact pc);
  35. void AddContact(pContact pc);
  36. void ShowContact(pContact pc);
  37. void DelContact(pContact pc);
  38. int SearchContact(pContact pc);
  39. void sort_contact(pContact pc);
  40. void ModdifyContact(pContact pc);
  41. void ClearContact(pContact pc);

源文件(执行命令代码)

  1. //Contact.c
  2. #define _CRT_SECURE_NO_WARNINGS 1
  3. #include <stdio.h>
  4. #include "Contact.h"
  5. #include <string.h>
  6. void ShowContact(pContact pc)//显示联系人信息
  7. {
  8. int i = 0;
  9. printf("%10s\t%5s\t%5s\t%12s\t%12s\t\n", "name", "age", "sex", "tele", "addr");
  10. for (i = 0; i < pc->sz; i++)
  11. {
  12. printf("%10s\t%5d\t%5s\t%12s\t%12s\t\n", pc->data[i].name,
  13. pc->data[i].age,
  14. pc->data[i].sex,
  15. pc->data[i].tele,
  16. pc->data[i].addr);
  17. }
  18. }
  19. void InitContact(pContact pc)//初始化通讯录
  20. {
  21. pc->sz = 0;
  22. memset(pc->data, 0, sizeof(pc->data));//设置内存内容
  23. }
  24. void AddContact(pContact pc)//增加联系人
  25. {
  26. if (pc->sz==MAX)
  27. {
  28. printf("通讯录已满,无法增加新的联系人\n");
  29. return;
  30. }
  31. printf("请输入名字:>");
  32. scanf("%s", pc->data[pc->sz].name);
  33. printf("请输入年龄:>");
  34. scanf("%d", &pc->data[pc->sz].age);
  35. printf("请输入性别:>");
  36. scanf("%s", pc->data[pc->sz].sex);
  37. printf("请输入电话:>");
  38. scanf("%s", pc->data[pc->sz].tele);
  39. printf("请输入地址:>");
  40. scanf("%s", pc->data[pc->sz].addr);
  41. pc->sz++;
  42. }
  43. int Find(pContact pc, char name[])//查找
  44. {
  45. int i = 0;
  46. for (i = 0; i < pc->sz; i++)
  47. {
  48. if (strcmp(pc->data[i].name, name) == 0)
  49. {
  50. return i;
  51. }
  52. }
  53. return -1;
  54. }
  55. void DelContact(pContact pc)//删除联系人
  56. {
  57. char name[NAME_MAX] = { 0 };
  58. int i = 0;
  59. int pos = 0;
  60. if (pc->sz == 0)
  61. {
  62. printf("通讯录为空,无法删除\n");
  63. return;
  64. }
  65. //1.找到要删除的人
  66. printf("请输入要删除人的名字:>");
  67. scanf("%s", name);
  68. pos = Find(pc, name);
  69. if (i == pc->sz)
  70. {
  71. printf("要删除的人不存在\n");
  72. }
  73. //2.删除
  74. for (pos = i; pos < pc->sz-1; pos++)
  75. {
  76. pc->data[pos] = pc->data[pos + 1];
  77. }
  78. pc->sz--;
  79. }
  80. int SearchContact(pContact pc)//查找指定的联系人
  81. {
  82. int pos = 0;
  83. char name[NAME_MAX] = { 0 };
  84. printf("请输入要查找联系人的名字:>");
  85. scanf("%s", name);
  86. pos = Find(pc, name);
  87. if (pos == -1)
  88. {
  89. printf("查找的联系人不存在\n");
  90. return -1;
  91. }
  92. else
  93. {
  94. printf("%10s\t%5d\t%5s\t%12s\t%12s\t\n", pc->data[pos].name,
  95. pc->data[pos].age,
  96. pc->data[pos].sex,
  97. pc->data[pos].tele,
  98. pc->data[pos].addr);
  99. return pos;
  100. }
  101. }
  102. void ModdifyContact(pContact pc)//修改联系人的信息
  103. {
  104. int ret = SearchContact(pc);
  105. if (ret != -1)
  106. {
  107. printf("请输入要修改联系人的信息:>");
  108. printf("请输入修改的名字:>");
  109. scanf("%s", pc->data[ret].name);
  110. printf("请输入修改的年龄:>");
  111. scanf("%d", &pc->data[ret].age);
  112. printf("请输入修改的性别:>");
  113. scanf("%s", pc->data[ret].sex);
  114. printf("请输入修改的电话:>");
  115. scanf("%s", pc->data[ret].tele);
  116. printf("请输入修改的地址:>");
  117. scanf("%s", pc->data[ret].addr);
  118. }
  119. else
  120. {
  121. printf("无法修改\n");
  122. }
  123. }
  124. void sort_contact(pContact pc)//以名字排序所有联系人
  125. {
  126. int i = 0;
  127. int j = 0;
  128. for (i = 0; i < pc->sz; i++)//冒泡法排序
  129. {
  130. for (j = 0; j < pc->sz -1 - i; j++)
  131. {
  132. if (strcmp(pc->data[j].name, pc->data[j+1].name)>0)
  133. {
  134. PeoInfo tmp = pc->data[j];
  135. pc->data[j] = pc->data[j+1];
  136. pc->data[j+1] = tmp;
  137. }
  138. }
  139. }
  140. }
  141. void ClearContact(pContact pc)// 清空所有联系人
  142. {
  143. pc->sz = 0;
  144. printf("已清空通讯录\n");
  145. }

源文件(打印菜单代码)

  1. //test.c
  2. #define _CRT_SECURE_NO_WARNINGS 1
  3. #include "Contact.h"
  4. #include <stdio.h>
  5. void menu()
  6. {
  7. printf("****************************\n");
  8. printf("*** 1.ADD 2.DEL ***\n");
  9. printf("*** 3.SEARCH 4.MODIFY***\n");
  10. printf("*** 5.SHOW 6.CLEAR ***\n");
  11. printf("*** 7.SORT 0.EXIT ***\n");
  12. printf("*** 8.SAVE ***\n");
  13. printf("****************************\n");
  14. }
  15. void test()
  16. {
  17. int input = 0;
  18. char name[NAME_MAX] = { 0 };
  19. struct Contact con;
  20. InitContact(&con);//初始化通讯录
  21. do
  22. {
  23. menu();
  24. printf("请选择:>");
  25. scanf("%d", &input);
  26. switch (input)
  27. {
  28. case ADD:
  29. AddContact(&con);
  30. break;
  31. case DEL:
  32. DelContact(&con);
  33. break;
  34. case SEARCH:
  35. SearchContact(&con);
  36. break;
  37. case MODIFY:
  38. ModdifyContact(&con);
  39. break;
  40. case SHOW:
  41. ShowContact(&con);
  42. break;
  43. case CLEAR:
  44. ClearContact(&con);
  45. case SORT:
  46. sort_contact(&con);
  47. default:
  48. break;
  49. }
  50. } while (input);
  51. }
  52. int main()
  53. {
  54. test();
  55. system("pause");
  56. return 0;
  57. }

如果仍然有不懂的地方,可以私信向作者提问,此篇文章有帮助的话,麻烦点个赞支持下谢谢!

相关文章