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是未知的,要对其进行宏常量定义define
int 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或者2
if (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或者2
if (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;
}
更多推荐
所有评论(0)