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