C++通讯录管理系统开发(数组+函数+指针+结构体) 📅 发布时间:2026/7/11 8:51:08 👁️ 浏览次数: 作者申明本文内容来自于黑马程序员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; }写到后面⭐如果本篇博文对你有帮助那就点赞 收藏一下吧
CS Demo Manager:终极CS比赛回放管理与分析工具完全指南 CS Demo Manager:终极CS比赛回放管理与分析工具完全指南 【免费下载链接】cs-demo-manager Companion application for your Counter-Strike demos. 项目地址: https://gitcode.com/gh_mirrors/cs/cs-demo-manager CS Demo Manager是一款专为Counter-Strike系… 2026/4/2 0:09:02
金蝶k3软件常用基础SQL数据表 金蝶软件常用基础SQL数据表SQL数据库 1、系统表 t_tabledescription2、字段表 t_fielddescription3、基础资料表(版本:10.3) t_item 其中fitemclassid值表示1-客户;2-部门;3-职员;4-商品;5-仓位… 2026/4/20 21:47:22
开发者问题解决能力差异与提升路径 1. 新手与老手的核心差异解析在我十多年的技术开发生涯中,带过无数新人,也合作过不少资深开发者。最深刻的体会就是:解决问题能力的差异,远比编码能力的差异更能区分开发者的水平层级。这种差异不是简单的经验积累,而是… 2026/4/2 0:08:04
【OpenAI认证工程师亲授】:免费用户如何用Prompt工程+会话重置+上下文压缩,突破90%的生成长度与逻辑深度限制 更多请点击: https://codechina.net 第一章:ChatGPT免费用户的核心功能限制全景图 ChatGPT 免费用户(即未订阅 ChatGPT Plus 的用户)在享受强大对话能力的同时,面临多项明确的功能边界。这些限制并非隐性策略&#x… 2026/7/11 8:47:49
解决UE4 4.25.1在Win7上CreateDXGIFactory2缺失的兼容性问题 1. 项目概述与问题背景 如果你还在用Windows 7系统做UE4开发,尤其是在升级到4.25.1版本后,大概率会碰到一个让人头疼的弹窗:“无法定位程序输入点CreateDXGIFactory2于动态链接库dxgi.dll上”。这可不是个小问题,它直接导致引擎编… 2026/7/11 8:47:49
戴尔G15终极散热解决方案:告别AWCC,拥抱开源轻量神器 戴尔G15终极散热解决方案:告别AWCC,拥抱开源轻量神器 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否厌倦了戴尔G15笔记本自带的… 2026/7/11 8:45:48
固定资产管理软件是什么?从功能到价值全文讲解 很多企业发展到一定规模,都会陷入同一个资产管理困境:公司设备、办公电脑、家具、厂房设备一大堆,账本上有记录,仓库里找不到、在用的对不上、报废的没注销。年底全员熬夜盘点、财务对账对到崩溃、闲置资产堆积浪费、资产流失无从… 2026/7/11 8:45:48
ChatGPT语音对话无法启动?97.3%的失败源于这4个隐藏配置项——工程师级排查清单(含终端日志诊断命令) 更多请点击: https://codechina.net 第一章:ChatGPT语音模式怎么开启 ChatGPT 官方 Web 端与移动 App(iOS/Android)已逐步支持语音输入与语音播报功能,但该能力依赖于平台版本、设备权限及地区可用性,并非… 2026/7/11 8:43:47
Unity Netcode局域网游戏同步优化实战:从卡顿到丝滑的60Hz竞技体验 1. 项目概述:从“卡顿”到“丝滑”的局域网游戏优化之路 做过多人在线游戏开发的同行,尤其是基于Unity的,大概都经历过这个阶段:在编辑器里跑得飞起,一到局域网联机测试,角色就开始“瞬移”、“鬼畜”&… 2026/7/11 8:41:47
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08