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

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

最核心的内容是结构体,结构体数组与指针

主要功能包括:添加联系人 ;显示联系人;删除联系人 ;查找联系人 ;修改联系人 ;清空联系人

1.主界面

2.添加联系人

3.显示联系人

4.删除联系人

5.查找联系人

6.修改联系人

7.清空联系人

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

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