Day 07 C++入门 之实践例子-----通讯录管理系统的设计与构建
Day 07 C++入门 之实践例子-----通讯录管理系统的设计与构建
一、系统需求
- 添加联系人:向通讯录中添加新人,信息人(姓名、性别、年龄、联系电话、家庭住址),最多记录1000人;
- 显示联系人:显示通讯录中所有联系人的方式;若没有就显示当前记录为空
- 删除联系人:按照姓名进行删除指定方式,若没有这个人就会输出查无此人;
- 查找联系人:按照姓名查看指定联系人的信息,若没有这个人就会输出查无此人;
- 修改联系人:按照姓名重新修改信息,检索进行之后,对信息进行一次修改;
- 清空联系人:清空当前的联系人,操作之前添加一次提醒
- 退出通讯录:退出当前使用的通讯录
对每一个功能设置对饮的索引,输入索引时就进入对应的功能进行操作,结束后按任意键回到初始界面(相当于手机的首页),然后可以继续进行下一个功能的使用。
二、创建项目
创建新项目,添加文件
打开VS,创建新项目,添加文件,右键源文件,添加新建项
三、菜单功能
用户选择功能界面。有如下步骤:
封装函数显示该界面,在main函数中调用封装好的函数
在main函数中写好基本的框架
#include<iostream>
using namespace std;
#include <string>int main()
{system("pause");return 0;}
菜单界面函数
void showMenu()
{cout << "1. 添加联系人" << endl;cout << "2. 显示联系人" << endl;cout << "3. 删除联系人" << endl;cout << "4. 查找联系人" << endl;cout << "5. 修改联系人" << endl;cout << "6. 清空联系人" << endl;cout << "0. 退出通讯录" << endl;}
四、退出功能
退出通讯录系统。根据用户不同的选择,进入不同的功能,可以选择Switch分支结构进行搭建,用户选择0时,执行退出操作
int select = 7;//创建一个变量用来接收用户的选项输入。数字随意while (true)//想要他一直显示菜单,直到用户输入0才退出,所以放入循环{showMenu();//展示菜单cout << "请输入操作选项:" << endl;cin >> select;//接收用户输入的选项switch (select)//根据用户的输入进行功能的跳转{case 0: //0. 退出通讯录cout << "欢迎下次使用" << endl;system("pause");//表示输入任意键继续,退出系统return 0;break;case 1://1. 添加联系人break;case 2: //2. 显示联系人break;case 3: //3. 删除联系人break;case 4: // 4. 查找联系人break;case 5: //5. 修改联系人break;case 6: //6. 清空联系人break;}}
五、添加联系人
向通讯录中添加新人,信息人(姓名、性别、年龄、联系电话、家庭住址),最多记录1000人;步骤如下:
- 设计联系人结构体;
- 设计通讯录结构体;
- main函数中创建通讯录;
- 封装添加联系人函数;
- 测试添加功能。
1. 创建联系人结构体
struct Person
{string name;//姓名int sex;//性别,1表示女,2表示男int age;//年龄string phone;//电话string addr;//住址
};
2. 创建通讯录结构体
#define MAX 1000
struct Addressbooks
{struct Person A[MAX];//MAX是未知的,要对其进行宏常量定义defineint size;
};
3. 在main中创建通讯录
struct Addressbooks B;
B.size = 0;
4. 添加联系人的函数
void addPerson(struct Addressbooks* B)
{//判断通讯录是否已满,如果满了要删除才能添加if (B->size == MAX){cout << "通讯录人员已达上限,无法添加,若添加,请删除一些" << endl;return;}else{string name;cout << "请输入添加人员的姓名" << endl;cin >> name;B->A[B->size].name = name;int sex=0;cout << "请选择添加人员的性别" << endl;cout << "1表示女,2表示男" << endl; while (true){cin >> sex;//必须输入1或者2if (sex == 1 || sex == 2){B->A[B->size].sex = sex;break;}else{cout << "请输入正确是性别" << endl;}}int age=0;cout << "请输入添加人员的年龄" << endl;cin >> age;B->A[B->size].age = age;string phone;cout << "请输入添加人员的电话" << endl;cin >> phone;B->A[B->size].phone = phone;string addr;cout << "请输入添加人员的住址" << endl;cin >> addr;B->A[B->size].addr = addr;
//更新当前联系人的个数B->size++;cout << "添加成功" << endl;system("pause");//请按任意键继续system("cls");//清屏操作}
}
六、显示联系人
显示联系人的函数
void viewPerson(struct Addressbooks* B)
{//判断通讯录中有没有人if (B->size == 0){cout << "现在没有任何联系人" << endl;}else{for (int i = 0; i < B->size; i++){cout << "姓名:" << B->A[i].name << "\t";//这里不换行,用空格if (B->A[i].sex == 1){cout << "性别:女" << "\t";}else{cout << "性别:男" << "\t";}//三目运算符 B->A[i].sex == 1?"女":"男"cout << "年龄:" << B->A[i].age << "\t";cout << "电话:" << B->A[i].phone << "\t";cout << "地址:" << B->A[i].addr << endl;}}system("pause");system("cls");}
七、删除联系人
1. 判断联系人是否存在
int isExist(struct Addressbooks* B,string name)
{for (int i = 0; i < B->size; i++){if (B->A[i].name == name){return i;//找到}}return -1;//没有找到}
2. 删除联系人函数
void delPerson(struct Addressbooks* B)
{cout << "输入删除联系人姓名" << endl;string name;cin >> name;int ret = isExist(B, name);if (ret != -1){for (int i = ret; i < B->size; i++){B->A[i] = B->A[i + 1];}B->size--;cout << "删除成功" << endl;}else{cout << "没有这个人" << endl;}system("pause");system("cls");
}
八、查找联系人
查找人函数
void serchPerson(struct Addressbooks* B)
{cout << "输入要找的联系人姓名" << endl;string name;cin >> name;int ret = isExist(B, name);if (ret != -1){cout << "姓名:" << B->A[ret].name << "\t";//这里不换行,用空格if (B->A[ret].sex == 1){cout << "性别:女" << "\t";}else{cout << "性别:男" << "\t";}cout << "年龄:" << B->A[ret].age << "\t";cout << "电话:" << B->A[ret].phone << "\t";cout << "地址:" << B->A[ret].addr << endl;}else{cout << "没有这个人" << endl;}system("pause");system("cls");
}
九、修改联系人
修改联系人函数
void rePerson(struct Addressbooks* B)
{cout << "输入修改的联系人姓名" << endl;string name;cin >> name;int ret = isExist(B, name);if (ret != -1){string name;cout << "请输入修改后人员的姓名" << endl;cin >> name;B->A[ret].name = name;int sex = 0;cout << "请选择修改后人员的性别" << endl;cout << "1表示女,2表示男" << endl;while (true){cin >> sex;//必须输入1或者2if (sex == 1 || sex == 2){B->A[ret].sex = sex;break;}else{cout << "请输入正确是性别" << endl;}}int age = 0;cout << "请输入修改后人员的年龄" << endl;cin >> age;B->A[ret].age = age;string phone;cout << "请输入修改后人员的电话" << endl;cin >> phone;B->A[ret].phone = phone;string addr;cout << "请输入修改后人员的住址" << endl;cin >> addr;B->A[ret].addr = addr;cout << "修改成功" << endl;}else{cout << "没有这个人" << endl;}system("pause");system("cls");
}
十、清空联系人
清空联系人函数
void cleanPerson(struct Addressbooks* B)
{B->size = 0;//所有的访问都是通过size的ret进行访问的,所以将size=0,逻辑清空即可cout << "通讯录已清空" << endl;system("pause");system("cls");
}
所有的访问都是通过size的ret进行访问的,所以将size=0,逻辑清空即可
十一、主函数
int main()
{int select = 7;//创建通讯录的结构体变量struct Addressbooks B;B.size = 0;while (true){showMenu();cout << "请输入操作选项:" << endl;cin >> select;switch (select){case 0: //0. 退出通讯录cout << "欢迎下次使用" << endl;system("pause");//表示输入任意键继续return 0;break;case 1://1. 添加联系人addPerson(&B);//通讯录变量是一个变量,不是数组,所以要对其进行修改的话,一定要传地址break;case 2: //2. 显示联系人viewPerson(&B);break;case 3: //3. 删除联系人delPerson(&B);break;case 4: // 4. 查找联系人serchPerson(&B);break;case 5: //5. 修改联系人rePerson(&B);break;case 6: //6. 清空联系人cleanPerson(&B);break;}}system("pause");return 0;}