经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++实现简易通讯录管理系统
来源:jb51  时间:2022/6/20 12:22:20  对本文有异议

本文实例为大家分享了C++实现简易通讯录管理系统的具体代码,供大家参考,具体内容如下

前言

建议收藏,亲手写一遍代码,感受指针神奇的魅力;
可以帮助你更好的巩固知识体系,熟悉指针,结构体与函数一起使用时的妙处

完成通讯录管理系统所需知识体系

1.结构体
2.指针
3.函数的封装
4.指针与函数的结合使用
5.指针与结构体的结合使用

结构体

联系人结构体

  1. struct person
  2. {
  3. ?? ?string name;//姓名
  4. ?? ?string sex; //性别
  5. ?? ?int age; ?//年龄
  6. ?? ?string phone;//手机号
  7. ?? ?string home;//地址
  8.  
  9. };

通讯录结构体

  1. struct addressbook
  2. {
  3. ?? ?struct person personArray[MAX]; //通讯录扩展到100;
  4. ?? ?int size=0; ?//当前联系人个数(后面就相当于i++)
  5. };

函数模块

  1. void menu();//菜单
  2. void putit(addressbook* add);//添加联系人
  3. void showperson(addressbook* add);// 显示联系人
  4. int if_include(addressbook* add, string name);//判断联系人
  5. void deleteperson(addressbook* add, int i);//删除联系人
  6. void findPerson( addressbook* add);//查找联系人
  7. void cleanperson(struct addressbook* add);//清空所有联系人

菜单

  1. void menu()
  2. {
  3. ?? ?cout << endl;
  4. ?? ?cout << "**********【主菜单】************" << endl;
  5. ?? ?cout << "---------1.添加联系人:----------" << endl;
  6. ?? ?cout << "---------2.显示联系人:---------" << endl;
  7. ?? ?cout << "---------3.删除联系人:---------" << endl;
  8. ?? ?cout << "---------4.查找联系人:---------" << endl;
  9. ?? ?cout << "---------5.修改联系人:---------" << endl;
  10. ?? ?cout << "---------6.清空联系人:---------" << endl;
  11. ?? ?cout << "---------0.退出通讯录:---------" << endl;
  12. ?? ?cout << "*******************************" << endl;
  13. }

添加联系人

  1. void putit(addressbook* add)//添加联系人功能
  2. {
  3. ?? ?if (add->size == MAX)
  4. ?? ??? ?cout << "通讯录已满" << endl;
  5. ?? ?else
  6. ?? ?{
  7. ?? ??? ?string name;
  8. ?? ??? ?string sex;
  9. ?? ??? ?int age;
  10. ?? ??? ?string phone;
  11. ?? ??? ?string home;
  12. ?? ??? ?cout << "请输入姓名" << endl;
  13. ?? ??? ?cin >> name;
  14. ?? ??? ?add->personArray[add->size].name = name;
  15. ?? ??? ?cout << "请输入姓别" << endl;
  16. ?? ??? ?cin >> sex;
  17. ?? ??? ?add->personArray[add->size].sex = sex;
  18. ?? ??? ?cout << "请输入年龄" << endl;
  19. ?? ??? ?cin >> age;
  20. ?? ??? ?add->personArray[add->size].age = age;
  21. ?? ??? ?cout << "请输入电话号码" << endl;
  22. ?? ??? ?cin >> phone;
  23. ?? ??? ?add->personArray[add->size].phone = phone;
  24. ?? ??? ?cout << "请输入家庭住址" << endl;
  25. ?? ??? ?cin >> home;
  26. ?? ??? ?add->personArray[add->size].home = home;
  27. ?? ??? ?add->size++;
  28. ?? ??? ?cout << "添加联系人成功" << endl;
  29. ?? ??? ?
  30. ?? ?}
  31. ?? ?system("pause");
  32. ?? ?system("cls");
  33. ?? ?menu();
  34. }

有人问添加联系人函数中为什么要使用指针?
因为值传递中形参无法改变实参;
而利用指针的地址传递可以通过函数中的形参改变实参;
具体原理可以参考博主之前的指针基础和指针进阶内容]

显示联系人

  1. void showperson(addressbook* add)
  2. {
  3. ?? ?for (int i = 0; i <add->size; i++)
  4. ?? ?{
  5. ?? ??? ?cout << "姓名: ?" << add->personArray[i].name;
  6. ?? ??? ?cout << "\t姓别: ?" << add->personArray[i].sex;
  7. ?? ??? ?cout << "\t年龄: ?" << add->personArray[i].age;
  8. ?? ??? ?cout << "\t电话号码: ?" << add->personArray[i].phone;
  9. ?? ??? ?cout << "\t家庭住址: ?" << add->personArray[i].home << endl;
  10. ?? ?}
  11. ?? ?system("pause");
  12. ?? ?system("cls");
  13. ?? ?menu();
  14. }

判断联系人

  1. int if_include(addressbook* add, string name)
  2. {
  3. ?? ?for (int i = 0; i < add->size; i++)
  4. ?? ?{
  5. ?? ??? ?if (name == add->personArray[i].name)
  6. ?? ??? ?{
  7. ?? ??? ??? ?return i;
  8. ?? ??? ?}
  9. ?? ??? ?else
  10. ?? ??? ?{
  11. ?? ??? ??? ?return -1;
  12. ?? ??? ?}
  13. ?? ?}
  14.  
  15. }

删除联系人

  1. void deleteperson(addressbook* add, int i)
  2. {
  3. ?? ?for (; i < add->size; i++)
  4. ?? ?{
  5. ?? ??? ?add->personArray[i] = add->personArray[i + 1];
  6. ?? ?}
  7. ?? ?system("pause");
  8. ?? ?system("cls");
  9. }

查找联系人

  1. void findPerson( addressbook* add)
  2. {
  3. ?? ?cout << "请输入您想要查找的联系人:" << endl;
  4. ?? ?string name;
  5. ?? ?cin >> name;
  6. ?? ?int ret = if_include(add, name);
  7. ?? ?if (ret == -1)
  8. ?? ?{
  9. ?? ??? ?cout << "查无此人" << endl;
  10. ?? ?}
  11. ?? ?else
  12. ?? ?{ ? //查到此人,进行显示操作
  13. ?? ??? ?int i = ret;
  14. ?? ??? ?cout << "姓名:" << add->personArray[i].name << "\t";
  15. ?? ??? ?cout << "性别:" << add->personArray[i].sex << "\t";
  16. ?? ??? ?cout << "年龄:" << add->personArray[i].age << "\t";
  17. ?? ??? ?cout << "联系方式:" << add->personArray[i].phone << "\t";
  18. ?? ??? ?cout << "地址:" << add->personArray[i].home << endl;
  19. ?? ?}
  20. ?? ?//按任意键清屏
  21. ?? ?system("pause");
  22. ?? ?system("cls");
  23. }

清空所有联系人

  1. void cleanperson(struct addressbook* add)//清空所有联系人
  2. {
  3. ?? ?cout << "是否确认清空?" << endl;
  4. ?? ?cout << "1 --- 是" << endl;
  5. ?? ?cout << "2 --- 否" << endl;
  6. ?? ?int a;
  7. ?? ?cin >> a;
  8. ?? ?if (a == 1)
  9. ?? ?{
  10. ?? ??? ?add->size = 0;//将当前记录联系人数量置为0,做逻辑上的清空操作
  11. ?? ??? ?cout << "通讯录已清空" << endl;
  12. ?? ?}
  13. ?? ?system("pause");
  14. ?? ?system("cls");
  15. }

main函数

  1. int main()
  2. {
  3. ?? ?menu();
  4. ?? ?addressbook add;//定义一个通讯录
  5. ?? ?int choice=1;
  6. ?? ?while (choice != 0)
  7. ?? ?{
  8. ?? ??? ?cin >> choice;
  9. ?? ??? ?switch (choice)//选择
  10. ?? ??? ?{
  11. ?? ??? ?case 1: putit(&add);
  12. ?? ??? ??? ?break;
  13. ?? ??? ?case 2: showperson(&add);
  14. ?? ??? ??? ?break;
  15. ?? ??? ?case 3: {cout << "请输入你要删除的人的名字" << endl;
  16. ?? ??? ??? ?string aname;
  17. ?? ??? ??? ?cin >> aname;
  18. ?? ??? ??? ?if (if_include(&add, aname) == -1)
  19. ?? ??? ??? ?{
  20. ?? ??? ??? ??? ?cout << "查无此人" << endl;
  21. ?? ??? ??? ??? ?break;
  22. ?? ??? ??? ?}
  23. ?? ??? ??? ?if (if_include(&add, aname))
  24. ?? ??? ??? ?{
  25. ?? ??? ??? ??? ?deleteperson(&add, if_include(&add, aname));
  26. ?? ??? ??? ?}
  27. ?? ??? ?}
  28. ?? ??? ??? ?break;?
  29. ?? ??? ?case 4:
  30. ?? ??? ??? ?break;
  31. ?? ??? ?case 5:
  32. ?? ??? ??? ?break;
  33. ?? ??? ?case 6:
  34. ?? ??? ??? ?break;
  35. ?? ??? ?case 0: cout << "欢迎下次使用" << endl;
  36. ?? ??? ??? ?return 0;
  37. ?? ??? ??? ?break;
  38. ?? ??? ?default: {cout << "输入不合法,请重新输入" << endl;
  39. ?? ??? ??? ?break; }
  40. ?? ??? ?}
  41. ?? ?}
  42. }

源代码

  1. #include<iostream>
  2. using namespace std;
  3. #include<string>
  4. #define MAX 100
  5.  
  6. struct person
  7. {
  8. ?? ?string name;//姓名
  9. ?? ?string sex; //性别
  10. ?? ?int age; ?//年龄
  11. ?? ?string phone;//手机号
  12. ?? ?string home;//地址
  13.  
  14. };
  15. struct addressbook
  16. {
  17. ?? ?struct person personArray[MAX]; //通讯录扩展到100;
  18. ?? ?int size=0; ?//当前联系人个数(后面就相当于i++)
  19. };
  20. void menu();//菜单
  21. void putit(addressbook* add);
  22. void showperson(addressbook* add);?
  23. int if_include(addressbook* add, string name);
  24. void deleteperson(addressbook* add, int i);
  25. void findPerson(struct addressbooks* add);//查找联系人
  26. void cleanperson(struct addressbook* add);//清空所有联系人
  27. int main()
  28. {
  29. ?? ?menu();
  30. ?? ?addressbook add;
  31. ?? ?int choice=1;
  32. ?? ?while (choice != 0)
  33. ?? ?{
  34. ?? ??? ?cin >> choice;
  35. ?? ??? ?switch (choice)
  36. ?? ??? ?{
  37. ?? ??? ?case 1: putit(&add);
  38. ?? ??? ??? ?break;
  39. ?? ??? ?case 2: showperson(&add);
  40. ?? ??? ??? ?break;
  41. ?? ??? ?case 3: {
  42. ?? ??? ??? ?cout << "请输入你要删除的人的名字" << endl;
  43. ?? ??? ??? ?string aname;
  44. ?? ??? ??? ?cin >> aname;
  45. ?? ??? ??? ?if (if_include(&add, aname) == -1)
  46. ?? ??? ??? ?{
  47. ?? ??? ??? ??? ?cout << "查无此人" << endl;
  48. ?? ??? ??? ??? ?break;
  49. ?? ??? ??? ?}
  50. ?? ??? ??? ?if (if_include(&add, aname))
  51. ?? ??? ??? ?{
  52. ?? ??? ??? ??? ?deleteperson(&add, if_include(&add, aname));
  53. ?? ??? ??? ?}
  54. ?? ??? ?}
  55. ?? ??? ??? ?break;?
  56. ?? ??? ?case 4:
  57. ?? ??? ??? ?break;
  58. ?? ??? ?case 5:
  59. ?? ??? ??? ?break;
  60. ?? ??? ?case 6:
  61. ?? ??? ??? ?break;
  62. ?? ??? ?case 0: cout << "欢迎下次使用" << endl;
  63. ?? ??? ??? ?return 0;
  64. ?? ??? ??? ?break;
  65. ?? ??? ?default: {cout << "输入不合法,请重新输入" << endl;
  66. ?? ??? ??? ?break; }
  67. ?? ??? ?}
  68. ?? ?}
  69. }
  70. void menu()
  71. {
  72. ?? ?cout << endl;
  73. ?? ?cout << "***********【主菜单】***********" << endl;
  74. ?? ?cout << "---------1.添加联系人:----------" << endl;
  75. ?? ?cout << "---------2.显示联系人:---------" << endl;
  76. ?? ?cout << "---------3.删除联系人:---------" << endl;
  77. ?? ?cout << "---------4.查找联系人:---------" << endl;
  78. ?? ?cout << "---------5.修改联系人:---------" << endl;
  79. ?? ?cout << "---------6.清空联系人:---------" << endl;
  80. ?? ?cout << "---------0.退出通讯录:---------" << endl;
  81. ?? ?cout << "********************************" << endl;
  82. }
  83. void putit(addressbook* add)//添加联系人功能
  84. {
  85. ?? ?if (add->size == MAX)
  86. ?? ??? ?cout << "通讯录已满" << endl;
  87. ?? ?else
  88. ?? ?{
  89. ?? ??? ?string name;
  90. ?? ??? ?string sex;
  91. ?? ??? ?int age;
  92. ?? ??? ?string phone;
  93. ?? ??? ?string home;
  94. ?? ??? ?cout << "请输入姓名" << endl;
  95. ?? ??? ?cin >> name;
  96. ?? ??? ?add->personArray[add->size].name = name;
  97. ?? ??? ?cout << "请输入姓别" << endl;
  98. ?? ??? ?cin >> sex;
  99. ?? ??? ?add->personArray[add->size].sex = sex;
  100. ?? ??? ?cout << "请输入年龄" << endl;
  101. ?? ??? ?cin >> age;
  102. ?? ??? ?add->personArray[add->size].age = age;
  103. ?? ??? ?cout << "请输入电话号码" << endl;
  104. ?? ??? ?cin >> phone;
  105. ?? ??? ?add->personArray[add->size].phone = phone;
  106. ?? ??? ?cout << "请输入家庭住址" << endl;
  107. ?? ??? ?cin >> home;
  108. ?? ??? ?add->personArray[add->size].home = home;
  109. ?? ??? ?add->size++;
  110. ?? ??? ?cout << "添加联系人成功" << endl;
  111. ?? ??? ?
  112. ?? ?}
  113. ?? ?system("pause");
  114. ?? ?system("cls");
  115. ?? ?menu();
  116. }
  117. void showperson(addressbook* add)
  118. {
  119. ?? ?for (int i = 0; i <add->size; i++)
  120. ?? ?{
  121. ?? ??? ?cout << "姓名: ?" << add->personArray[i].name;
  122. ?? ??? ?cout << "\t姓别: ?" << add->personArray[i].sex;
  123. ?? ??? ?cout << "\t年龄: ?" << add->personArray[i].age;
  124. ?? ??? ?cout << "\t电话号码: ?" << add->personArray[i].phone;
  125. ?? ??? ?cout << "\t家庭住址: ?" << add->personArray[i].home << endl;
  126. ?? ?}
  127. ?? ?system("pause");
  128. ?? ?system("cls");
  129. ?? ?menu();
  130. }
  131. int if_include(addressbook* add, string name)
  132. {
  133. ?? ?for (int i = 0; i < add->size; i++)
  134. ?? ?{
  135. ?? ??? ?if (name == add->personArray[i].name)
  136. ?? ??? ?{
  137. ?? ??? ??? ?return i;
  138. ?? ??? ?}
  139. ?? ??? ?else
  140. ?? ??? ?{
  141. ?? ??? ??? ?return -1;
  142. ?? ??? ?}
  143. ?? ?}
  144.  
  145. }
  146. void deleteperson(addressbook* add, int i)
  147. {
  148. ?? ?for (; i < add->size; i++)
  149. ?? ?{
  150. ?? ??? ?add->personArray[i] = add->personArray[i + 1];
  151. ?? ?}
  152. ?? ?system("pause");
  153. ?? ?system("cls");
  154. }
  155.  
  156. void findPerson( addressbook* add)
  157. {
  158. ?? ?cout << "请输入您想要查找的联系人:" << endl;
  159. ?? ?string name;
  160. ?? ?cin >> name;
  161. ?? ?int ret = if_include(add, name);
  162. ?? ?if (ret == -1)
  163. ?? ?{
  164. ?? ??? ?cout << "查无此人" << endl;
  165. ?? ?}
  166. ?? ?else
  167. ?? ?{ ? //查到此人,进行显示操作
  168. ?? ??? ?int i = ret;
  169. ?? ??? ?cout << "姓名:" << add->personArray[i].name << "\t";
  170. ?? ??? ?cout << "性别:" << add->personArray[i].sex << "\t";
  171. ?? ??? ?cout << "年龄:" << add->personArray[i].age << "\t";
  172. ?? ??? ?cout << "联系方式:" << add->personArray[i].phone << "\t";
  173. ?? ??? ?cout << "地址:" << add->personArray[i].home << endl;
  174. ?? ?}
  175. ?? ?//按任意键清屏
  176. ?? ?system("pause");
  177. ?? ?system("cls");
  178. }
  179. void cleanperson(struct addressbook* add)//清空所有联系人
  180. {
  181. ?? ?cout << "是否确认清空?" << endl;
  182. ?? ?cout << "1 --- 是" << endl;
  183. ?? ?cout << "2 --- 否" << endl;
  184. ?? ?int a;
  185. ?? ?cin >> a;
  186. ?? ?if (a == 1)
  187. ?? ?{
  188. ?? ??? ?add->size = 0;//将当前记录联系人数量置为0,做逻辑上的清空操作
  189. ?? ??? ?cout << "通讯录已清空" << endl;
  190. ?? ?}
  191. ?? ?system("pause");
  192. ?? ?system("cls");
  193. }

由于代码量过大,建议大家可以试着分文件编写代码,也可以方便查看

运行结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号