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

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

实现功能

提示:这里可以添加本文要记录的大概内容:

通过c++语法的学习,实现一个简易的通讯录功能,具体实现功能如下:
添加联系人:向通讯录中添加联系人,信息包括(姓名、性别、年龄、联系电话、家庭住址),做多记录1000人
显示联系人:显示通讯录中所有联系人信息
删除联系人:按照姓名进行删除联系人
查找联系人:按照姓名进行查找联系人
修改联系人:根据姓名重新修改联系人
清空联系人:清空通讯录中所有信息
脱出通讯录:退出当前使用的通讯录

一、定义通讯录和通讯录人员结构体

定义通讯录和通讯录内人员信息的结构体,通讯录最多容纳1000人信息。
联系人结构体:

  1. //联系人结构体
  2. struct Person
  3. {
  4. ?? ?string m_Name;//姓名
  5. ?? ?int m_Sex;//1-男,2-女
  6. ?? ?int m_Age;//年龄
  7. ?? ?string m_Phone;//电话
  8. ?? ?string m_Afddar;//通讯地址
  9. };

通讯录结构体:

  1. struct AddaressBooks
  2. {
  3. ?? ?struct Person personArray[MAX];//通讯录中保存的人员数据
  4. ?? ?int m_Size;//记录当前记录数
  5. };

二、实现通讯录输入菜单

1.定义菜单函数:

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

2.主函数循环体中循环展示菜单信息

  1. int main() {
  2. ?? ?//创建通讯录结构体变量
  3. ?? ?AddaressBooks abs;
  4. ?? ?//初始化通讯录中当前人员个数
  5. ?? ?abs.m_Size = 0;
  6.  
  7. ?? ?int select = 0;//创建用户输入选择变量
  8. ?? ?while (true) {
  9. ?? ??? ?showMenu();
  10. ?? ??? ?cin >> select;
  11.  
  12. ?? ??? ?switch (select)
  13. ?? ??? ?{
  14. ?? ??? ?case 1: //1.添加联系人
  15. ?? ??? ??? ?addPerson(&abs);
  16. ?? ??? ??? ?break;
  17. ?? ??? ?case 2: //2.显示联系人
  18. ?? ??? ??? ?showPerson(&abs);
  19. ?? ??? ??? ?break;
  20. ?? ??? ?case 3: //3.删除联系人
  21. ?? ??? ??? ?deletePerson(&abs);
  22. ?? ??? ??? ?break;
  23. ?? ??? ?case 4: //4.查找联系人
  24. ?? ??? ??? ?selectPerson(&abs);
  25. ?? ??? ??? ?break;
  26. ?? ??? ?case 5: //5.修改联系人
  27. ?? ??? ??? ?editPerson(&abs);
  28. ?? ??? ??? ?break;
  29. ?? ??? ?case 6: //6.清空联系人
  30. ?? ??? ??? ?cleanPerson(&abs);
  31. ?? ??? ??? ?break;
  32. ?? ??? ?case 0: //0.退出通讯录?
  33. ?? ??? ??? ?cout << "欢迎下次使用" << endl;
  34. ?? ??? ??? ?system("pause");
  35. ?? ??? ??? ?return 0;
  36. ?? ??? ??? ?break;
  37.  
  38. ?? ??? ?default:
  39. ?? ??? ??? ?break;
  40. ?? ??? ?}
  41. ?? ?}
  42. ?? ?
  43. }

三、实现增删改查和清空通讯录功能

实现具体的通讯录增删改查功能:

完整源码如下:

  1. //封装函数显示通讯录界面 void showMenu()
  2. //在main中调用封装好的函数
  3.  
  4. #include<iostream>
  5. #include<string>
  6. using namespace std;
  7.  
  8. #define MAX 1000 //最大人数
  9.  
  10. //联系人结构体
  11. struct Person
  12. {
  13. ?? ?string m_Name;//姓名
  14. ?? ?int m_Sex;//1-男,2-女
  15. ?? ?int m_Age;//年龄
  16. ?? ?string m_Phone;//电话
  17. ?? ?string m_Afddar;//通讯地址
  18. };
  19.  
  20. struct AddaressBooks
  21. {
  22. ?? ?struct Person personArray[MAX];//通讯录中保存的人员数据
  23. ?? ?int m_Size;//记录当前记录数
  24. };
  25.  
  26. //菜单界面
  27. void showMenu() {
  28. ?? ?cout << "***************************" << endl;
  29. ?? ?cout << "*****?? ?1.添加联系人 ?*****" << endl;
  30. ?? ?cout << "*****?? ?2.显示联系人 ?*****" << endl;
  31. ?? ?cout << "*****?? ?3.删除联系人 ?*****" << endl;
  32. ?? ?cout << "*****?? ?4.查找联系人 ?*****" << endl;
  33. ?? ?cout << "*****?? ?5.修改联系人 ?*****" << endl;
  34. ?? ?cout << "*****?? ?6.清空联系人 ?*****" << endl;
  35. ?? ?cout << "*****?? ?0.退出通讯录 ?*****" << endl;
  36. ?? ?cout << "***************************" << endl;
  37. }
  38.  
  39.  
  40. //1.添加联系人
  41. void addPerson(AddaressBooks* abs) {
  42. ?? ?//通讯录是否满了,如果满了就不能在添加
  43. ?? ?if (abs->m_Size == MAX) {
  44. ?? ??? ?cout << "通讯录记录已满,无法添加!" << endl;
  45. ?? ??? ?return;
  46. ?? ?}
  47. ?? ?else {
  48. ?? ??? ?//添加具体联系人
  49. ?? ??? ?//姓名
  50. ?? ??? ?string name;
  51. ?? ??? ?cout << "请输入姓名:" << endl;
  52. ?? ??? ?cin >> name;
  53. ?? ??? ?abs->personArray[abs->m_Size].m_Name = name;
  54.  
  55. ?? ??? ?//性别
  56. ?? ??? ?int sex = 0;
  57. ?? ??? ?cout << "请输入性别:" << endl;
  58. ?? ??? ?cout << "1 --- 男" << endl;
  59. ?? ??? ?cout << "2 --- 女" << endl;
  60. ?? ??? ?while (true) {
  61. ?? ??? ??? ?// 如果输入1或者2退出循环,如果有误,则重新输入
  62. ?? ??? ??? ?cin >> sex;
  63. ?? ??? ??? ?if (sex == 1 || sex == 2) {
  64. ?? ??? ??? ??? ?abs->personArray[abs->m_Size].m_Sex = sex;
  65. ?? ??? ??? ??? ?break;
  66. ?? ??? ??? ?}
  67. ?? ??? ??? ?cout << "输入性别有误,请重新输入!" << endl;
  68. ?? ??? ?}
  69. ?? ??? ?
  70. ?? ??? ?//年龄
  71. ?? ??? ?int age;
  72. ?? ??? ?cout << "请输入年龄:" << endl;
  73. ?? ??? ?cin >> age;
  74. ?? ??? ?abs->personArray[abs->m_Size].m_Age = age;
  75. ?? ??? ?//电话
  76. ?? ??? ?string phone;
  77. ?? ??? ?cout << "请输入联系电话:" << endl;
  78. ?? ??? ?cin >> phone;
  79. ?? ??? ?abs->personArray[abs->m_Size].m_Phone = phone;
  80. ?? ??? ?//住址
  81. ?? ??? ?string addres;
  82. ?? ??? ?cout << "请输入家庭住址:" << endl;
  83. ?? ??? ?cin >> addres;
  84. ?? ??? ?abs->personArray[abs->m_Size].m_Afddar = addres;
  85. ?? ??? ?//更新通讯录人数
  86. ?? ??? ?abs->m_Size++;
  87.  
  88. ?? ??? ?cout << "添加成功!" << endl;
  89.  
  90. ?? ??? ?system("pause");//请按任意键继续
  91. ?? ??? ?system("cls");//清屏
  92. ?? ?}
  93. }
  94. //显示联系人
  95. void showPerson(AddaressBooks* abs) {
  96. ?? ?//判断通讯录中记录是否为0,如果不为0进行显示
  97. ?? ?if (abs->m_Size <= 0) {
  98. ?? ??? ?cout << "通讯录记录为空!" << endl;
  99. ?? ?}
  100. ?? ?else {
  101. ?? ??? ?for (int i = 0; i < abs->m_Size; i++) {
  102. ?? ??? ??? ?cout << "姓名:" << abs->personArray[i].m_Name << "\t";
  103. ?? ??? ??? ?cout << "性别:" << ((abs->personArray[i].m_Sex == 1) ? "男" : "女" )<< "\t";
  104. ?? ??? ??? ?cout << "年龄:" << abs->personArray[i].m_Age << "\t";
  105. ?? ??? ??? ?cout << "电话:" << abs->personArray[i].m_Phone << "\t";
  106. ?? ??? ??? ?cout << "住址:" << abs->personArray[i].m_Afddar << endl;
  107. ?? ??? ?}
  108. ?? ?}
  109. ?? ?system("pause");//请按任意键继续
  110. ?? ?system("cls");//清屏
  111. }
  112.  
  113. //检测联系人是否存在,如果存在返回联系人所在数组的位置,不存在返回-1
  114. int isExist(AddaressBooks* abs,string name) {
  115. ?? ?for (int i = 0; i < abs->m_Size; i++) {
  116. ?? ??? ?if (abs->personArray[i].m_Name == name) {
  117. ?? ??? ??? ?return i;
  118. ?? ??? ?}
  119. ?? ?}
  120. ?? ?//没有找到返回-1
  121. ?? ?return -1;
  122. }
  123.  
  124. //删除联系人
  125. void deletePerson(AddaressBooks* abs) {
  126. ?? ?cout << "请输入要删除的联系人姓名:" << endl;
  127. ?? ?string name;
  128. ?? ?cin >> name;
  129.  
  130. ?? ?int ret = isExist(abs, name);
  131. ?? ?if (ret != -1) {
  132. ?? ??? ?//找到此人,进行删除操作
  133. ?? ??? ?for (int i = 0; i < abs->m_Size; i++) {
  134. ?? ??? ??? ?//数据前移
  135. ?? ??? ??? ?abs->personArray[i] = abs->personArray[i + 1];
  136. ?? ??? ?}
  137. ?? ??? ?abs->m_Size--;//更新通讯录中数量
  138. ?? ??? ?cout << "删除成功!" << endl;
  139. ?? ?}
  140. ?? ?else {
  141. ?? ??? ?cout << "查无此人!" << endl;
  142. ?? ?}
  143.  
  144. ?? ?system("pause");//请按任意键继续
  145. ?? ?system("cls");//清屏
  146. }
  147. //查找联系人
  148. void selectPerson(AddaressBooks* abs) {
  149. ?? ?cout << "请输入要查找的联系人姓名:" << endl;
  150. ?? ?string name;
  151. ?? ?cin >> name;
  152.  
  153. ?? ?int ret = isExist(abs, name);
  154. ?? ?if (ret != -1) {
  155. ?? ??? ?cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
  156. ?? ??? ?cout << "性别:" << ((abs->personArray[ret].m_Sex == 1) ? "男" : "女") << "\t";
  157. ?? ??? ?cout << "年龄:" << abs->personArray[ret].m_Age << "\t";
  158. ?? ??? ?cout << "电话:" << abs->personArray[ret].m_Phone << "\t";
  159. ?? ??? ?cout << "住址:" << abs->personArray[ret].m_Afddar << endl;
  160. ?? ?}
  161. ?? ?else {
  162. ?? ??? ?cout << "查无此人!" << endl;
  163. ?? ?}
  164. ?? ?system("pause");//请按任意键继续
  165. ?? ?system("cls");//清屏
  166. }
  167. //修改联系人
  168. void editPerson(AddaressBooks* abs) {
  169. ?? ?cout << "请输入要修改的联系人姓名:" << endl;
  170. ?? ?string name;
  171. ?? ?cin >> name;
  172.  
  173. ?? ?int ret = isExist(abs, name);
  174. ?? ?if (ret != -1) {
  175. ?? ??? ?string name;
  176. ?? ??? ?cout << "请输入姓名:" << endl;
  177. ?? ??? ?cin >> name;
  178. ?? ??? ?abs->personArray[ret].m_Name = name;
  179.  
  180. ?? ??? ?//性别
  181. ?? ??? ?int sex = 0;
  182. ?? ??? ?cout << "请输入性别:" << endl;
  183. ?? ??? ?cout << "1 --- 男" << endl;
  184. ?? ??? ?cout << "2 --- 女" << endl;
  185. ?? ??? ?while (true) {
  186. ?? ??? ??? ?// 如果输入1或者2退出循环,如果有误,则重新输入
  187. ?? ??? ??? ?cin >> sex;
  188. ?? ??? ??? ?if (sex == 1 || sex == 2) {
  189. ?? ??? ??? ??? ?abs->personArray[ret].m_Sex = sex;
  190. ?? ??? ??? ??? ?break;
  191. ?? ??? ??? ?}
  192. ?? ??? ??? ?cout << "输入性别有误,请重新输入!" << endl;
  193. ?? ??? ?}
  194.  
  195. ?? ??? ?//年龄
  196. ?? ??? ?int age;
  197. ?? ??? ?cout << "请输入年龄:" << endl;
  198. ?? ??? ?cin >> age;
  199. ?? ??? ?abs->personArray[ret].m_Age = age;
  200. ?? ??? ?//电话
  201. ?? ??? ?string phone;
  202. ?? ??? ?cout << "请输入联系电话:" << endl;
  203. ?? ??? ?cin >> phone;
  204. ?? ??? ?abs->personArray[ret].m_Phone = phone;
  205. ?? ??? ?//住址
  206. ?? ??? ?string addres;
  207. ?? ??? ?cout << "请输入家庭住址:" << endl;
  208. ?? ??? ?cin >> addres;
  209. ?? ??? ?abs->personArray[ret].m_Afddar = addres;
  210. ?? ??? ?cout << "修改成功!" << endl;
  211. ?? ?}
  212. ?? ?else {
  213. ?? ??? ?cout << "查无此人!" << endl;
  214. ?? ?}
  215. ?? ?system("pause");//请按任意键继续
  216. ?? ?system("cls");//清屏
  217. }
  218. //清空联系人
  219. void cleanPerson(AddaressBooks* abs) {
  220. ?? ?abs->m_Size = 0;//当前记录的联系人数量置为0,做逻辑上清空
  221. ?? ?cout << "通讯录已清空!:" << endl;
  222. ?? ?system("pause");//请按任意键继续
  223. ?? ?system("cls");//清屏
  224. }
  225. int main() {
  226. ?? ?//创建通讯录结构体变量
  227. ?? ?AddaressBooks abs;
  228. ?? ?//初始化通讯录中当前人员个数
  229. ?? ?abs.m_Size = 0;
  230.  
  231. ?? ?int select = 0;//创建用户输入选择变量
  232. ?? ?while (true) {
  233. ?? ??? ?showMenu();
  234. ?? ??? ?cin >> select;
  235.  
  236. ?? ??? ?switch (select)
  237. ?? ??? ?{
  238. ?? ??? ?case 1: //1.添加联系人
  239. ?? ??? ??? ?addPerson(&abs);
  240. ?? ??? ??? ?break;
  241. ?? ??? ?case 2: //2.显示联系人
  242. ?? ??? ??? ?showPerson(&abs);
  243. ?? ??? ??? ?break;
  244. ?? ??? ?case 3: //3.删除联系人
  245. ?? ??? ??? ?deletePerson(&abs);
  246. ?? ??? ??? ?break;
  247. ?? ??? ?case 4: //4.查找联系人
  248. ?? ??? ??? ?selectPerson(&abs);
  249. ?? ??? ??? ?break;
  250. ?? ??? ?case 5: //5.修改联系人
  251. ?? ??? ??? ?editPerson(&abs);
  252. ?? ??? ??? ?break;
  253. ?? ??? ?case 6: //6.清空联系人
  254. ?? ??? ??? ?cleanPerson(&abs);
  255. ?? ??? ??? ?break;
  256. ?? ??? ?case 0: //0.退出通讯录?
  257. ?? ??? ??? ?cout << "欢迎下次使用" << endl;
  258. ?? ??? ??? ?system("pause");
  259. ?? ??? ??? ?return 0;
  260. ?? ??? ??? ?break;
  261.  
  262. ?? ??? ?default:
  263. ?? ??? ??? ?break;
  264. ?? ??? ?}
  265. ?? ?}
  266. ?? ?
  267. }

四、运行截图展示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持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号