【C++】案例01_通讯录管理系统
1. 菜单展示
system("pause"); 输入任意键继续
system("cls"); 清屏操作
2. 人、通讯录结构体创建
通讯录结构体中,m_Size; // 存储当前通讯录结构体中,记录的人员数量。对应前多少个位置存储着信息
(abs->personArray[i].m_Sex == 1? "男": "女") ,性别,1男2女,通过三目运算符进行输除对应的中文字符
3. 【增】添加联系人,向通讯录中
新加人员信息,要利用地址传递
4. 打印联系人,从通讯录中
首先要判空,没有信息时,拒绝操作。
5. 【查】按名称,查找联系人,从通讯录中
首先要判空,没有信息时,拒绝操作。
6. 【删】按名称,删除联系人,从通讯录中,之后的信息依次向前覆盖
首先要判空,没有信息时,拒绝操作。
1 #include<iostream> 2 using namespace std; 3 #include<string> 4 # define MAX 1000 // 通讯录结构体中,最大存储的数量 5 6 struct Person 7 { 8 string m_Name; 9 int m_Sex; // 1 男,2 女 ; 三目运算符实现输出 10 int m_Age; 11 string m_Phone; 12 string m_Addr; 13 }; 14 15 struct Addressbooks 16 { 17 struct Person personArray[MAX]; 18 int m_Size; // 存储当前通讯录结构体中,记录的人员数量。对应前多少个位置存储着信息 19 }; 20 21 int panKong(int len, string str) 22 { 23 if (len == 0) 24 { 25 cout << "\t通讯录为空,无法进行 " << str << " 操作,请先添加人员信息。" << endl; 26 return -1; 27 } 28 return 0; 29 } 30 31 32 // 1. 添加联系人 33 void addPerson(struct Addressbooks * abs) 34 { 35 // 判断是否达到最大人员个数 36 if (abs->m_Size == MAX) 37 { 38 cout << "通讯录已满,无法继续添加" << endl; 39 return; 40 } 41 else 42 { 43 // 添加具体联系人 44 // 姓名 45 string name; 46 cout << "请输入姓名:" << endl; 47 cin >> name; 48 abs->personArray[abs->m_Size].m_Name = name; 49 50 // 性别 51 int sex; 52 cout << "请输入性别:" << endl; 53 cout << "1 --- 男 " << endl; 54 cout << "2 --- 女 " << endl; 55 // 要预防输入不在指定范围内 56 while (true) 57 { 58 cin >> sex; 59 if (sex == 1 || sex == 2) 60 { 61 abs->personArray[abs->m_Size].m_Sex = sex; 62 break; 63 } 64 cout << "输入有误,请重新输入" << endl; 65 } 66 67 // 年龄 68 int age = 0; 69 cout << "请输入年龄:" << endl; 70 cin >> age; 71 abs->personArray[abs->m_Size].m_Age = age; 72 73 // 电话 74 string phone; 75 cout << "请输入电话: " << endl; 76 cin >> phone; 77 abs->personArray[abs->m_Size].m_Phone = phone; 78 79 // 家庭住址 80 string addr; 81 cout << "请输入家庭住址:" << endl; 82 cin >> addr; 83 abs->personArray[abs->m_Size].m_Addr = addr; 84 85 abs->m_Size++; 86 } 87 } 88 89 // 2. 显示联系人 90 void printPerson(struct Addressbooks * abs) 91 { 92 if (abs->m_Size == 0) 93 { 94 cout << "\t通讯录为空,暂未记录信息" << endl; 95 } 96 for (int i = 0; i < abs->m_Size; i++) 97 { 98 cout << "姓名:" << abs->personArray[i].m_Name << "\t" 99 << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t" 100 << "年龄:" << abs->personArray[i].m_Age << "\t" 101 << "电话:" << abs->personArray[i].m_Phone << "\t" 102 << "家庭住址:" << abs->personArray[i].m_Addr << "\t" << endl; 103 } 104 105 } 106 void printPerson_index(struct Addressbooks * abs,int index) 107 { 108 cout << "姓名:" << abs->personArray[index].m_Name << "\t" 109 << "性别:" << (abs->personArray[index].m_Sex == 1 ? "男" : "女") << "\t" 110 << "年龄:" << abs->personArray[index].m_Age << "\t" 111 << "电话:" << abs->personArray[index].m_Phone << "\t" 112 << "家庭住址:" << abs->personArray[index].m_Addr << "\t" << endl; 113 114 } 115 116 // 4. 按名称查找联系人 117 int findPerson(struct Addressbooks* abs, string name) 118 { 119 for (int i = 0; i < abs->m_Size; i++) 120 { 121 if (abs->personArray[i].m_Name == name) 122 { 123 return i; 124 } 125 } 126 return -1;//没有找到 127 } 128 129 // 3. 删除联系人 130 void delPerson(struct Addressbooks * abs, string name) 131 { 132 // 从已有记录中查找指定人的姓名 133 int index = findPerson(abs, name); 134 if (index == -1) 135 { 136 cout << "\t没有查到名称为 " << name << " 的人员信息,无法删除。" << endl; 137 return; 138 } 139 140 cout << "所要删除的人的索引: " << index << endl; 141 // 指定索引开始,后一个人的信息依次向前覆盖 142 for (int i = index; i < abs->m_Size; i++) 143 { 144 abs->personArray[i] = abs->personArray[i+1]; 145 } 146 // 通信录中,元素个数减一 147 abs->m_Size--; 148 } 149 150 // 5. 修改联系人 151 void changePerson_index(struct Addressbooks* abs, int index) 152 { 153 cout << "原信息:" << "姓名:" << abs->personArray[index].m_Name << "\t" 154 << "性别:" << (abs->personArray[index].m_Sex == 1 ? "男" : "女") << "\t" 155 << "年龄:" << abs->personArray[index].m_Age << "\t" 156 << "电话:" << abs->personArray[index].m_Phone << "\t" 157 << "家庭住址:" << abs->personArray[index].m_Addr << "\t" << endl; 158 159 // 姓名 160 string name; 161 cout << "请输入姓名:" << endl; 162 cin >> name; 163 abs->personArray[index].m_Name = name; 164 165 // 性别 166 int sex; 167 cout << "请输入性别:" << endl; 168 cout << "1 --- 男 " << endl; 169 cout << "2 --- 女 " << endl; 170 // 要预防输入不在指定范围内 171 while (true) 172 { 173 cin >> sex; 174 if (sex == 1 || sex == 2) 175 { 176 abs->personArray[index].m_Sex = sex; 177 break; 178 } 179 cout << "输入有误,请重新输入" << endl; 180 } 181 182 // 年龄 183 int age = 0; 184 cout << "请输入年龄:" << endl; 185 cin >> age; 186 abs->personArray[index].m_Age = age; 187 188 // 电话 189 string phone; 190 cout << "请输入电话: " << endl; 191 cin >> phone; 192 abs->personArray[index].m_Phone = phone; 193 194 // 家庭住址 195 string addr; 196 cout << "请输入家庭住址:" << endl; 197 cin >> addr; 198 abs->personArray[index].m_Addr = addr; 199 } 200 201 void showMenu() 202 { 203 cout << "***************************" << endl; 204 cout << "***** 1. 添加联系人 *****" << endl; 205 cout << "***** 2. 显示联系人 *****" << endl; 206 cout << "***** 3. 删除联系人 *****" << endl; 207 cout << "***** 4. 查找联系人 *****" << endl; 208 cout << "***** 5. 修改联系人 *****" << endl; 209 cout << "***** 6. 清空联系人 *****" << endl; 210 cout << "***** 0. 退出通讯录 *****" << endl; 211 cout << "***************************" << endl; 212 }; 213 214 int main() { 215 // 1. 菜单展示 216 // 2. 人、通讯录结构体创建 217 // 3. 【增】添加联系人,向通讯录中 218 // 4. 打印联系人,从通讯录中 219 // 5. 【查】按名称,查找联系人,从通讯录中 220 // 6. 【删】按名称,删除联系人,从通讯录中,之后的信息依次向前覆盖 221 222 // 创建通讯录结构体变量 223 Addressbooks abs; 224 // 初始化通讯录中,当前的人员数量 225 abs.m_Size = 0; 226 227 // 创建 用户选择的选项。 228 int select = 0; 229 while (true) 230 { 231 showMenu(); 232 cin >> select; 233 //cout << "您输入的选项为:" << select << endl; 234 235 switch (select) 236 { 237 case 1: 238 { 239 cout << "1. 添加联系人" << endl; 240 // 使用地址传递,才能够修改通讯录结构体中的内容 241 addPerson(&abs); 242 break; 243 } 244 case 2: 245 { 246 if (panKong(abs.m_Size, " 显示 ") == -1) 247 { 248 break; 249 } 250 cout << "2. 显示联系人" << endl; 251 printPerson(&abs); 252 break; 253 } 254 case 3: 255 { 256 if (panKong(abs.m_Size, " 删除 ") == -1) 257 { 258 break; 259 } 260 cout << "3. 删除联系人" << endl; 261 cout << "请输入所要删除的联系人的姓名:"; 262 string name; 263 cin >> name; 264 // 删除操作 265 delPerson(&abs, name); 266 break; 267 } 268 case 4: 269 { 270 if (panKong(abs.m_Size, " 查找 ") == -1) 271 { 272 break; 273 } 274 cout << "4. 查找联系人" << endl; 275 cout << "请输入所查人员姓名:"; 276 string name; 277 cin >> name; 278 int index = findPerson(&abs, name); 279 if (index == -1) 280 { 281 cout << "没有找到姓名为 " << name << " 的人员信息。" << endl; 282 break; 283 } 284 printPerson_index(&abs, index); 285 break; 286 } 287 case 5: 288 { 289 if (panKong(abs.m_Size, " 修改 ") == -1) 290 { 291 break; 292 } 293 cout << "5. 修改联系人" << endl; 294 cout << "请输入所要修改的联系人的姓名:" << endl; 295 string name; 296 cin >> name; 297 int index = findPerson(&abs, name); 298 changePerson_index(&abs, index); 299 break; 300 } 301 case 6: 302 { 303 abs.m_Size = 0; 304 cout << "\t通讯录已清空" << endl; 305 break; 306 } 307 case 0: 308 { 309 cout << "系统已退出,欢迎下次使用。" << endl; 310 system("pause"); 311 return 0; 312 } 313 default: 314 break; 315 }; 316 system("pause"); 317 system("cls"); 318 }; 319 320 system("pause"); 321 return 0; 322 }