当前位置: 首页 > news >正文

Day 07 C++入门 之实践例子-----通讯录管理系统的设计与构建

Day 07 C++入门 之实践例子-----通讯录管理系统的设计与构建

一、系统需求
  1. 添加联系人:向通讯录中添加新人,信息人(姓名、性别、年龄、联系电话、家庭住址),最多记录1000人;
  2. 显示联系人:显示通讯录中所有联系人的方式;若没有就显示当前记录为空
  3. 删除联系人:按照姓名进行删除指定方式,若没有这个人就会输出查无此人;
  4. 查找联系人:按照姓名查看指定联系人的信息,若没有这个人就会输出查无此人;
  5. 修改联系人:按照姓名重新修改信息,检索进行之后,对信息进行一次修改;
  6. 清空联系人:清空当前的联系人,操作之前添加一次提醒
  7. 退出通讯录:退出当前使用的通讯录

对每一个功能设置对饮的索引,输入索引时就进入对应的功能进行操作,结束后按任意键回到初始界面(相当于手机的首页),然后可以继续进行下一个功能的使用。

二、创建项目

创建新项目,添加文件

打开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;}
http://www.dtcms.com/a/516360.html

相关文章:

  • Linux系统服务器时区设置与网络时间同步
  • 【POST请求】POST请求——详解
  • 【Linux】fork函数详解
  • 泰安市做网站的公司wordpress git项目
  • ON1 Photo RAW MAX(照片后期处理软件)
  • 天河网站建设哪家强哈尔滨市建设网站
  • 梦幻联动!卡尔曼滤波结合LSTM,精度提高19%!
  • 网站开发的硬件环境展览设计网站有哪些
  • 网站维护升级访问中网站基站的建设方案
  • 【JDK、JRE、JVM】
  • 临沂网站维护公司做网站怎么收费多少
  • Qoder 上线提示词增强功能,将开发者从“提示词”的负担中解放出来
  • 中国山东网站建设网站编辑人才队伍建设
  • FreeRTOS队列消息查询
  • 医院数字IP广播系统:基于内部局域网的分布式数字化医院IP广播
  • 中山骏域网站建设专家西部网站邮箱登录
  • FFmpeg --14-视频解码:h264解码为yuv
  • PixelShuffle原理
  • 昆明做网站价格网站屏蔽省份
  • 创建网站需要学什么知识2017民非单位年检那个网站做
  • LABVIEW依赖关系显示文件删除、移动或重命名,每次打开都要指定很多路径【解决方案】
  • 东莞网站建设seo浙江住房和城乡建设厅网站首页
  • MLOps 的CI/CD VS DevOps 的CI/CD
  • spark组件-spark sql-读取数据
  • 网站开发大致需要哪些步骤可视化开发工具推荐
  • zabbix实现配置监控Windows设备、SNMP协议设备的全流程实操教程
  • 天津做网站找哪家公司好建设网站公司哪里好相关的热搜问题解决方案
  • 友情链接价格seo官网制作规划
  • 桦甸市城乡建设局网站技术外包网站
  • 英文网站设计网络广告策划方案怎么做