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

C++通讯录管理系统开发(数组+函数+指针+结构体)

作者申明:本文内容来自于黑马程序员C++视频教学课程,可作课程笔记参考。

写在前面:⭐如果本篇博文对你有帮助,那就点赞 + 收藏一下吧!

通讯录管理系统

1.系统需求

2.菜单功能

//菜单界面 void show_menu() { cout << "****************************" << endl; cout << "***** 1. 添加联系人 *****" << endl; cout << "***** 2. 显示联系人 *****" << endl; cout << "***** 3. 删除联系人 *****" << endl; cout << "***** 4. 查找联系人 *****" << endl; cout << "***** 5. 修改联系人 *****" << endl; cout << "***** 6. 清空联系人 *****" << endl; cout << "***** 0. 退出通讯录 *****" << endl; cout << "****************************" << endl; }

3.退出功能

int select = 0; //创建用户选择输入变量 bool flag = true; while (flag) { //菜单调用 show_menu(); cin >> select; switch (select) { case 1: //添加联系人 add_person(&abs); //利用地址传递可以修饰实参 break; case 2: //显示联系人 show_person(&abs); break; case 3: { //删除联系人 delete_person(&abs); break; } case 4: //查找联系人 find_person(&abs); break; case 5: //修改联系人 update_person(&abs); break; case 6: //清空联系人 clear_person(&abs); break; case 0: //退出通讯录 cout << "欢迎下次使用!" << endl; flag = false; break; default: cout << "输入有误,请重新输入!" << endl; break; } }

4.添加联系人

4.1设计联系人结构体
//设计联系人结构体 struct person { //姓名 string m_name; //性别 1男 2女 int m_sex; //年龄 int m_age; //电话 string m_phone; //住址 string m_addr; };
4.2设计通讯录结构体
//设计通讯录结构体 struct address_book { //联系人数组 struct person personArr[MAX]; //联系人个数 int m_size; };
4.3封装添加联系人函数
//1.添加联系人 void add_person(struct address_book *abs) { //判断通讯录是否已满,满了就不添加了 if (abs->m_size == MAX) { cout << "通讯录已满,无法添加!" << endl; return; }else { //添加联系人 // 姓名 string name; cout << "请输入联系人姓名:" << endl; cin >> name; abs->personArr[abs->m_size].m_name = name; //添加姓名,将新输入的联系人姓名,保存到通讯录数组的下一个空位置中。 //性别 cout << "请输入联系人性别:(1男,2女)" << endl; int sex = 0; while (true) { cin >> sex; if (sex == 1 || sex == 2) { abs->personArr[abs->m_size].m_sex = sex; break; } else { cout << "输入性别有误,请重新输入!" << endl; } } //年龄 cout << "请输入联系人年龄:" << endl; int age = 0; cin >> age; abs->personArr[abs->m_size].m_age = age; //添加年龄 //电话 cout << "请输入联系人电话:" << endl; string phone; cin >> phone; abs->personArr[abs->m_size].m_phone = phone; //住址 cout << "请输入联系人地址:" << endl; string addr; cin >> addr; abs->personArr[abs->m_size].m_addr = addr; //更新通讯录人数 abs->m_size++; cout << "添加联系人成功!" << endl; system("pause"); //请按任意键继续 system("cls"); //清屏操作 } }

5.显示联系人

5.1封装显示联系人函数

思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息.

//2.显示联系人 void show_person(struct address_book *abs) { //判断通讯录中人数是否为0,若为0则提示记录为空,若不为0则显示记录联系人信息 if (abs->m_size == 0) { cout << "通讯录为空!" << endl; }else { for (int i = 0; i < abs->m_size; i++) { cout << "姓名:" << abs->personArr[i].m_name << "\t"; cout << "性别:" << (abs->personArr[i].m_sex == 1?"男" : "女") << "\t"; cout << "年龄:" << abs->personArr[i].m_age << "\t"; cout << "电话:" << abs->personArr[i].m_phone << "\t"; cout << "地址:" << abs->personArr[i].m_addr << endl; } } system("pause"); system("cls"); }

6.删除联系人

6.1封装检测联系人是否存在

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1 int is_exist(struct address_book *abs, string name) { for (int i = 0; i < abs->m_size; i++) { if (abs->personArr[i].m_name == name) { return i; } } return -1; }
6.2封装删除联系人函数
//3.删除联系人 void delete_person(struct address_book *abs) { cout << "请输入要删除的联系人姓名:" << endl; string name; cin >> name; int ret = is_exist(abs, name); if (ret != -1) { //查到此人 ,要进行删除操作 for (int i = ret; i < abs->m_size; i++) { //数据前移 abs->personArr[i] = abs->personArr[i + 1]; } abs->m_size--; //更新通讯录人数 cout << "删除联系人成功!" << endl; }else { cout << "查无此人!" << endl; } system("pause"); system("cls"); }

7.查找联系人

7.1封装查找联系人函数

实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。

//4.查找联系人 void find_person(struct address_book *abs) { cout << "请输入要查找的姓名:" << endl; string name; cin >> name; int ret = is_exist(abs, name); if (ret != -1) { cout << "姓名:" << abs->personArr[ret].m_name << "\t"; cout << "性别:" << (abs->personArr[ret].m_sex == 1?"男" : "女") << "\t"; cout << "年龄:" << abs->personArr[ret].m_age << "\t"; cout << "电话:" << abs->personArr[ret].m_phone << "\t"; cout << "地址:" << abs->personArr[ret].m_addr << endl; } else { cout << "联系人不存在!" << endl; } system("pause"); system("cls"); }

8.修改联系人

8.1封装修改联系人函数

实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人。

//修改联系人 void update_person(struct address_book *abs) { cout << "请输入要修改的姓名:" << endl; string name; cin >> name; int ret = is_exist(abs, name); if (ret != -1) { //姓名 string name; cout << "请重新输入联系人姓名:" << endl; cin >> name; abs->personArr[ret].m_name = name; //性别 int sex = 0; cout << "请重新输入联系人性别:(1男,2女)" << endl; cin >> sex; while (true) { cin >> sex; if (sex == 1 || sex == 2) { abs->personArr[ret].m_sex = sex; break; } else { cout << "输入性别有误,请重新输入:" << endl; } } //年龄 int age = 0; cout << "请重新输入联系人年龄:" << endl; cin >> age; abs->personArr[ret].m_age = age; //电话 string phone; cout << "请重新输入联系人电话:" << endl; cin >> phone; abs->personArr[ret].m_phone = phone; //住址 string addr; cout << "请重新输入联系人地址:" << endl; cin >> addr; abs->personArr[ret].m_addr = addr; cout << "修改联系人成功!" << endl; }else { cout << "查无此人!" << endl; } system("pause"); system("cls"); }

9.清空联系人

9.1封装清空联系人函数

实现思路:将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数最置为0,做逻辑清空即可。

//清空联系人 void clear_person(struct address_book *abs) { cout << "是否清空所有联系人?1.是 0.否" << endl; int choice = 0; cin >> choice; if (choice == 1) { abs->m_size = 0; cout << "清空成功!" << endl; } system("pause"); system("cls"); }

10.全部实现代码

10.1主函数
int main() { system("chcp 65001 > nul"); //设置控制台为 UTF-8 编码 struct address_book abs; //创建通讯录结构体变量 abs.m_size = 0; //通讯录当前记录联系人个数 int select = 0; //创建用户选择输入变量 bool flag = true; while (flag) { //菜单调用 show_menu(); cin >> select; switch (select) { case 1: //添加联系人 add_person(&abs); //利用地址传递可以修饰实参 break; case 2: //显示联系人 show_person(&abs); break; case 3: { //删除联系人 delete_person(&abs); break; } case 4: //查找联系人 find_person(&abs); break; case 5: //修改联系人 update_person(&abs); break; case 6: //清空联系人 clear_person(&abs); break; case 0: //退出通讯录 cout << "欢迎下次使用!" << endl; flag = false; break; default: cout << "输入有误,请重新输入!" << endl; break; } } return 0; }
10.2整体代码
#include <iostream> using namespace std; #include <string> #define MAX 1000 //设计联系人结构体 struct person { //姓名 string m_name; //性别 1男 2女 int m_sex; //年龄 int m_age; //电话 string m_phone; //住址 string m_addr; }; //设计通讯录结构体 struct address_book { //联系人数组 struct person personArr[MAX]; //联系人个数 int m_size; }; //1.添加联系人 void add_person(struct address_book *abs) { //判断通讯录是否已满,满了就不添加了 if (abs->m_size == MAX) { cout << "通讯录已满,无法添加!" << endl; return; }else { //添加联系人 // 姓名 string name; cout << "请输入联系人姓名:" << endl; cin >> name; abs->personArr[abs->m_size].m_name = name; //添加姓名,将新输入的联系人姓名,保存到通讯录数组的下一个空位置中。 //性别 cout << "请输入联系人性别:(1男,2女)" << endl; int sex = 0; while (true) { cin >> sex; if (sex == 1 || sex == 2) { abs->personArr[abs->m_size].m_sex = sex; break; } else { cout << "输入性别有误,请重新输入!" << endl; } } //年龄 cout << "请输入联系人年龄:" << endl; int age = 0; cin >> age; abs->personArr[abs->m_size].m_age = age; //添加年龄 //电话 cout << "请输入联系人电话:" << endl; string phone; cin >> phone; abs->personArr[abs->m_size].m_phone = phone; //住址 cout << "请输入联系人地址:" << endl; string addr; cin >> addr; abs->personArr[abs->m_size].m_addr = addr; //更新通讯录人数 abs->m_size++; cout << "添加联系人成功!" << endl; system("pause"); //请按任意键继续 system("cls"); //清屏操作 } } //2.显示联系人 void show_person(struct address_book *abs) { //判断通讯录中人数是否为0,若为0则提示记录为空,若不为0则显示记录联系人信息 if (abs->m_size == 0) { cout << "通讯录为空!" << endl; }else { for (int i = 0; i < abs->m_size; i++) { cout << "姓名:" << abs->personArr[i].m_name << "\t"; cout << "性别:" << (abs->personArr[i].m_sex == 1?"男" : "女") << "\t"; cout << "年龄:" << abs->personArr[i].m_age << "\t"; cout << "电话:" << abs->personArr[i].m_phone << "\t"; cout << "地址:" << abs->personArr[i].m_addr << endl; } } system("pause"); system("cls"); } //检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1 int is_exist(struct address_book *abs, string name) { for (int i = 0; i < abs->m_size; i++) { if (abs->personArr[i].m_name == name) { return i; } } return -1; } //3.删除联系人 void delete_person(struct address_book *abs) { cout << "请输入要删除的联系人姓名:" << endl; string name; cin >> name; int ret = is_exist(abs, name); if (ret != -1) { //查到此人 ,要进行删除操作 for (int i = ret; i < abs->m_size; i++) { //数据前移 abs->personArr[i] = abs->personArr[i + 1]; } abs->m_size--; //更新通讯录人数 cout << "删除联系人成功!" << endl; }else { cout << "查无此人!" << endl; } system("pause"); system("cls"); } //4.查找联系人 void find_person(struct address_book *abs) { cout << "请输入要查找的姓名:" << endl; string name; cin >> name; int ret = is_exist(abs, name); if (ret != -1) { cout << "姓名:" << abs->personArr[ret].m_name << "\t"; cout << "性别:" << (abs->personArr[ret].m_sex == 1?"男" : "女") << "\t"; cout << "年龄:" << abs->personArr[ret].m_age << "\t"; cout << "电话:" << abs->personArr[ret].m_phone << "\t"; cout << "地址:" << abs->personArr[ret].m_addr << endl; } else { cout << "联系人不存在!" << endl; } system("pause"); system("cls"); } //修改联系人 void update_person(struct address_book *abs) { cout << "请输入要修改的姓名:" << endl; string name; cin >> name; int ret = is_exist(abs, name); if (ret != -1) { //姓名 string name; cout << "请重新输入联系人姓名:" << endl; cin >> name; abs->personArr[ret].m_name = name; //性别 int sex = 0; cout << "请重新输入联系人性别:(1男,2女)" << endl; cin >> sex; while (true) { cin >> sex; if (sex == 1 || sex == 2) { abs->personArr[ret].m_sex = sex; break; } else { cout << "输入性别有误,请重新输入:" << endl; } } //年龄 int age = 0; cout << "请重新输入联系人年龄:" << endl; cin >> age; abs->personArr[ret].m_age = age; //电话 string phone; cout << "请重新输入联系人电话:" << endl; cin >> phone; abs->personArr[ret].m_phone = phone; //住址 string addr; cout << "请重新输入联系人地址:" << endl; cin >> addr; abs->personArr[ret].m_addr = addr; cout << "修改联系人成功!" << endl; }else { cout << "查无此人!" << endl; } system("pause"); system("cls"); } //清空联系人 void clear_person(struct address_book *abs) { cout << "是否清空所有联系人?1.是 0.否" << endl; int choice = 0; cin >> choice; if (choice == 1) { abs->m_size = 0; cout << "清空成功!" << endl; } system("pause"); system("cls"); } //菜单界面 void show_menu() { cout << "****************************" << endl; cout << "***** 1. 添加联系人 *****" << endl; cout << "***** 2. 显示联系人 *****" << endl; cout << "***** 3. 删除联系人 *****" << endl; cout << "***** 4. 查找联系人 *****" << endl; cout << "***** 5. 修改联系人 *****" << endl; cout << "***** 6. 清空联系人 *****" << endl; cout << "***** 0. 退出通讯录 *****" << endl; cout << "****************************" << endl; } int main() { system("chcp 65001 > nul"); //设置控制台为 UTF-8 编码 struct address_book abs; //创建通讯录结构体变量 abs.m_size = 0; //通讯录当前记录联系人个数 int select = 0; //创建用户选择输入变量 bool flag = true; while (flag) { //菜单调用 show_menu(); cin >> select; switch (select) { case 1: //添加联系人 add_person(&abs); //利用地址传递可以修饰实参 break; case 2: //显示联系人 show_person(&abs); break; case 3: { //删除联系人 delete_person(&abs); break; } case 4: //查找联系人 find_person(&abs); break; case 5: //修改联系人 update_person(&abs); break; case 6: //清空联系人 clear_person(&abs); break; case 0: //退出通讯录 cout << "欢迎下次使用!" << endl; flag = false; break; default: cout << "输入有误,请重新输入!" << endl; break; } } return 0; }

写到后面:⭐如果本篇博文对你有帮助,那就点赞 + 收藏一下吧!

http://www.jsqmd.com/news/562878/

相关文章:

  • 深入解析MyBatisPlus批量插入性能瓶颈与优化实战
  • 深度拆解MySQL InnoDB存储引擎架构:从内存到磁盘的全链路解析
  • FLUX.1-dev像素艺术生成器效果:超分辨率重建前后对比分析
  • 分布式存储的监控与告警:从理论到实践
  • 2023年HCA-Security综合安防考试
  • 项目实训第一次讨论
  • 2026年护栏网应用白皮书畜牧养殖领域解析 - 优质品牌商家
  • Cojson:面向MCU的零分配JSON解析器
  • 220v转24v 32v电流300W电源方案
  • 宝塔面板异地备份数据全攻略:从本地到云端的安全守护
  • UWB(AOA)技术是如何应用在智慧工厂的
  • 7B小模型吊打GPT-5?CarePilot用Actor-Critic范式攻克医疗软件自动化
  • 万用自动连点点击器 v2.2.4解锁版-无需ROOT自动连点
  • CHORD-X效果实测:对比不同参数下生成报告的连贯性与深度
  • XLR8RC库:嵌入式RC信号高精度脉宽捕获方案
  • 金蝶k3软件常用基础SQL数据表
  • 在Ubuntu 20.04上搞定创龙T113 SDK编译:我踩过的那些Python和gdbus的坑
  • FastbootEnhance:Windows上最直观的Fastboot工具箱与Payload提取器
  • 2026镇海区空调及进口热水器维修行业白皮书 - 优质品牌商家
  • 告别PXE!用iPXE在CentOS 8.5上搭建一个能同时装Win11和Linux的万能网络启动盘
  • 2026年保温卷帘门公司权威推荐:成都卷帘门/电动保温卷帘门/电动卷帘门/车库保温卷帘门/车库卷帘门/选择指南 - 优质品牌商家
  • 告别串口接收烦恼!手把手配置华大HC32F460的UART超时中断(附RT-Thread驱动示例)
  • 【Frida Android】实战篇:Frida-Trace 进阶追踪——JNI 函数调用栈与参数解析
  • 崩溃体验馆:付费观赏系统死机的艺术
  • 如何通过FastbootEnhance实现Android设备快速刷机与分区管理
  • 概率预测实战 —— DeepAR 模型在电力负荷预测中的应用
  • 别再傻傻用相机了!用海康VisionMaster本地图片也能跑算法,附完整配置流程
  • 稳定的第三方软件库
  • GitHub Desktop 中文界面突破方案:告别语言障碍的效率革命
  • 三步搞定全网资源下载:揭秘智能嗅探工具如何让你轻松捕获视频与图片