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