源.cpp 9.8 KB

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