前几天刷题,因为我选择用 C++语言来刷题,比较接近底层,但是又不像 C 那样我需要自己造轮子,可以很深入的了解算法的内部结构。但是,我 C++学的并不精通!!这我就很尴尬了,所以我找了 B 站上黑马程序员的课程,然后肝了两天基础语法。
遗憾的是!!!我在刷题过程中遇到的问题,在 C++提高编程部分。基础语法没有,但是我们不能白刷,刷了题那就做一下练习,正好课程里有通讯录管理系统,咱就研究研究,搞一下。
IDE 用的 JetBrains 公司的 Clion,因为之前正好申请了学生免费,再加上 Xcode 学习成本对我来说有点高。话不多说,回归正题。
首先,我们要做一个系统,肯定要首先知道系统需求,因为不是实际的项目,所以不需要过于精细,只需要知道大概需要完成的模块以及功能即可。
系统需求
通讯录是一个可以记录亲人、好友信息的工具。
主要利用 C++来实现一个通讯录管理系统
系统中主要实现以下功能:
- 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址),最多记录 1000 人
- 显示联系人:显示通讯录中所有联系人信息
- 删除联系人:按照姓名进行删除指定联系人
- 查找联系人:按照姓名查看指定联系人信息
- 修改联系人:按照姓名重新修改指定联系人
- 清空联系人:清空通讯录中所有信息
- 推出通讯录:退出当前使用的通讯录
显示菜单
首先我们要有个菜单显示界面,来满足人机交互的需求。
封装 showMenu 函数如下:
1 2 3 4 5 6 7 8 9 10
| void showMenu() { string menu_item[] = {"1.添加联系人", "2.显示联系人", "3.删除联系人", "4.查找联系人", "5.修改联系人", "6.清空联系人", "0.退出通讯录"}; cout << "*****************************" << endl; for (auto &i : menu_item) { cout << "***** " << i << " *****" << endl; } cout << "*****************************" << endl; }
|
之后根据用户交互输入的内容依次完成其他功能。
添加联系人
添加联系人(addPerson)代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| void addPerson(AddressBooks *abs) { if (abs->m_Size == MAX) { cout << "通讯录已满,无法继续添加" << endl; return; } else { string name; cout << "请输入姓名:"; cin >> name; abs->personArray[abs->m_Size].m_Name = name; int sex = 0; cout << "请输入性别:" << endl; while (true) { cout << "1---男" << "\t2---女" << endl; cout << "您的性别是:";
cin >> sex; if (cin.fail()) { cin.clear(); cin.ignore(); } if (sex == 1 || sex == 2) { abs->personArray[abs->m_Size].m_Sex = sex; break; } cout << "输入有误,请重新输入。" << endl; } int age = 0; cout << "请输入年龄:"; while (true) { cin >> age; if (age >= 1 && age <= 150) { abs->personArray[abs->m_Size].m_Age = age; break; } cout << "输入有误,请重新输入。" << endl; } string phone; cout << "请输入电话:"; cin >> phone; abs->personArray[abs->m_Size].m_Phone = phone; string address; cout << "请输入家庭住址:"; cin >> address; abs->personArray[abs->m_Size].m_Addr = address; abs->m_Size++; cout << "添加成功!" << endl; } }
|
显示联系人
显示联系人(showPerson)函数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void showPerson(AddressBooks *abs) { if (abs->m_Size == 0) cout << "当前通讯录为空!" << endl; else { cout << "当前通讯录有:" << abs->m_Size << " 人" << endl; for (int i = 0; i < abs->m_Size; ++i) { cout << "姓名:" << abs->personArray[i].m_Name << "\t"; cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t"; cout << "年龄:" << abs->personArray[i].m_Age << "\t"; cout << "电话:" << abs->personArray[i].m_Phone << "\t"; cout << "住址:" << abs->personArray[i].m_Addr << endl; } } }
|
检测联系人
在删除、查找、修改联系人之前,我们有一个公共步骤,就是检查联系人是否存在。
所以编写公共函数检测联系人(isExist):
1 2 3 4 5 6 7 8 9 10 11
| int isExist(AddressBooks *abs, const string &name) { for (int i = 0; i < abs->m_Size; ++i) { if (abs->personArray[i].m_Name == name) { return i; } } return -1; }
|
删除联系人
删除联系人(deletePerson)函数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void deletePerson(AddressBooks *abs) { cout << "请输入删除联系人姓名:" << endl; string name; cin >> name; int ret = isExist(abs, name); if (ret != -1) { for (int i = ret; i < abs->m_Size; ++i) { abs->personArray[i] = abs->personArray[i + 1]; } abs->m_Size--; cout << "删除成功" << endl; } else cout << "查无此人!" << endl; }
|
查找联系人
查找联系人(findPerson)函数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void findPerson(AddressBooks *abs) { cout << "请输入您要查找的联系人:"; string name; cin >> name;
int ret = isExist(abs, name); if (ret != -1) { cout << "姓名:" << abs->personArray[ret].m_Name << "\t"; cout << "性别:" << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t"; cout << "年龄:" << abs->personArray[ret].m_Age << "\t"; cout << "电话:" << abs->personArray[ret].m_Phone << "\t"; cout << "住址:" << abs->personArray[ret].m_Addr << endl; } else cout << "查无此人!" << endl; }
|
修改联系人
修改联系人(modifyPerson)函数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| void modifyPerson(AddressBooks *abs) { cout << "请输入您要修改的联系人:"; string name; cin >> name;
int ret = isExist(abs, name); if (ret != -1) { cout << "当前信息为:" << "\t"; cout << "姓名:" << abs->personArray[ret].m_Name << "\t"; cout << "性别:" << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t"; cout << "年龄:" << abs->personArray[ret].m_Age << "\t"; cout << "电话:" << abs->personArray[ret].m_Phone << "\t"; cout << "住址:" << abs->personArray[ret].m_Addr << endl; cout << "修改信息:" << "\t"; string newName; cout << "请输入姓名:"; cin >> newName; abs->personArray[ret].m_Name = newName; int newSex = 0; cout << "请输入性别:" << endl; while (true) { cout << "1---男" << "\t2---女" << endl; cout << "您的性别是:";
cin >> newSex; if (newSex == 1 || newSex == 2) { abs->personArray[ret].m_Sex = newSex; break; } cout << "输入有误,请重新输入。" << endl; } int newAge = 0; cout << "请输入年龄:"; while (true) { cin >> newAge; if (newAge >= 1 && newAge <= 150) { abs->personArray[ret].m_Age = newAge; break; } cout << "输入有误,请重新输入。" << endl; } string newPhone; cout << "请输入电话:"; cin >> newPhone; abs->personArray[ret].m_Phone = newPhone; string newAddress; cout << "请输入家庭住址:"; cin >> newAddress; abs->personArray[ret].m_Addr = newAddress; cout << "修改成功!" << endl; } else cout << "查无此人!" << endl; }
|
清空联系人
清空联系人(clearPerson)函数如下:
1 2 3 4 5 6 7 8 9 10 11 12
| void clearPerson(AddressBooks *abs) { cout << "您将要清空通讯录!请您再次确认!" << endl; cout << "输入 y 回车确认:"; char makeSure; cin >> makeSure;
if (makeSure == 'y') { abs->m_Size = 0; cout << "通讯录已经清空!" << endl; } else cout << "通讯录完好!" << endl; }
|
退出通讯录
退出通讯录功能,通过 return 0 来实现,在人际交互过程中,采用 cin int 变量来实现用户输入,所以采用 switch-case 的方式更合理,在用户输入 0 的时候,return 0 即可退出通讯录。
在 win 系统 Visual Studio 中,还可以使用 system 相关命令,可以使得整个系统界面更加美观。