C++项目:通讯录管理系统
本文记录如何从0开始使用C搭建通讯录管理系统通讯录是一个可以记录亲人、好友信息的工具。系统中需要实现的功能如下添加联系人向通讯录中添加新人信息包括姓名、性别、年龄、联系电话、家庭住址最多记录1000人显示联系人显示通讯录中所有联系人信息删除联系人按照姓名进行删除指定联系人查找联系人按照姓名查看指定联系人信息修改联系人按照姓名重新修改指定联系人清空联系人清空通讯录中所有信息退出通讯录退出当前使用的通讯录菜单功能功能描述用户选择功能的界面步骤封装函数显示该界面如void showMenu( )在main函数中调用封装好的函数#includeiostream using namespace std; //封装函数用于显示界面 void showMenu(){ 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(){ showMenu(); //显示界面 return 0; }退出功能功能描述退出通讯录系统思路根据用户不同的选择进入不同的功能可以选择switch分值结构将整个架构进行搭建用户选择0的时候执行退出荀泽其他先不做操作也不退出程序。int select 0; while(true){ showMenu(); //菜单调用 cin select; switch (select){ case 1: //添加联系人 break; case 2: //显示联系人 break; case 3: //删除联系人 break; case 4: //查找联系人 break; case 5: //修改联系人 break; case 6: //清空联系人 break; case 0: //退出通讯录 cout 欢迎下次使用 endl; system(pause); return 0; break; default: break; }添加联系人功能功能描述​实现添加联系人功能联系人上限为1000人联系人信息包括姓名、性别、年龄、联系电话、家庭住址。添加联系人实现步骤设计联系人结构体设计通讯录结构体main函数中创建通讯录封装添加联系人函数测试添加联系人功能//设计一下联系人的结构体 struct Person{ string m_Name; //姓名 int m_ Sex; //性别 1男 2女 int m_age; //年龄 string m_Phone; //电话 string m_Addr; //住址 }; //设计通讯录结构体 struct Addressbooks{ struct Person personArray[MAX]; //通讯录保存的联系人数组 int m_Size; //通讯录中的人员个数 };添加联系人函数void addPerson(Addressbooks * abs){ //判断通讯录是否已满如果满了就不要添加了 if (abs-m_Size MAX){ cout 通讯录已满无法添加 endl; return; } else{ //添加具体联系人 string name; cout 请输入姓名 endl; cin name; abs - personArray[abs-m_Size].m_Name name; cout 请输入性别 endl; cout 1---男 endl; cout 2---女 endl; int sex 0; while(true){ //如果输入的是1/2就可以退出循环否则继续输 cin sex; if (sex 1 || sex 2){ abs - personArray[abs-m_Size].m_Sex sex; break; } } cout 请输入年龄 endl; int age 0; cin age; abs-personArray[abs-m_Size].m_age age; cout 请输入联系电话 endl; string phone; cin phone; abs-personArray[abs-m_Size].m_Phone phone; cout 请输入家庭住址 endl; string address; cin address; abs-personArray[abs-m_Size].m_Addr address; abs-m_Size; cout 添加成功 endl; system(pause); //请按任意键继续 system(cls); //清屏操作 } }显示联系人功能描述显示通讯录中已有的联系人信息显示联系人实现的步骤封装显示联系人函数测试显示联系人功能思路判断如果当前通讯录中没有人员就提示记录为空人数大于0显示通讯录中信息void showPerson(Addressbooks *abs){ if(abs-m_Size 0){ cout 当前的记录为空 endl; } else{ for(int i 0;i abs-m_Size;i){ cout 姓名 abs-personArray[i].m_Name \t; cout 性别 (abs-personArray[i].m_Sex 1 ? 男 : 女) \t; cout 年龄 abs-personArray[i].m_age \t; cout 电话 abs-personArray[i].m_Phone \t; cout 住址 abs-personArray[i].m_Addr endl; } } system(pause); //请按任意键继续 system(cls); //清屏操作 }删除联系人功能描述按照姓名进行删除指定联系人删除联系人步骤封装检测联系人是否存在封装删除联系人函数测试删除联系人功能int isExist(Addressbooks *abs,string name){ for(int i 0;i abs-m_Size;i){ if(abs-personArray[i].m_Name name){ return i; //找到了返回位置 } } return -1; //找不到返回-1 } void deletePerson(Addressbooks *abs){ cout 请输入你要删除的联系人 endl; string name; cin name; int ret isExist(abs,name); //这个abs是delete的形参已经是指针了 if (ret ! -1){ for(int i ret;i abs-m_Size;i){ abs-personArray[i] abs-personArray[i1]; } abs-m_Size--; cout 删除成功 endl; } else{ cout 查无此人 endl; } }查找联系人功能描述按照姓名查找指定联系人信息查找联系人实现步骤封装查找联系人函数测试查找指定联系人void findPerson(Addressbooks *abs){ cout 请输入你要查找的联系人 endl; string name; cin name; int ret isExist(abs,name); if(ret ! -1){ cout 姓名 abs-personArray[ret].m_Name endl; cout 性别 (abs-personArray[ret].m_Sex 1 ? 男 : 女) \t; cout 年龄 abs-personArray[ret].m_age \t; cout 电话 abs-personArray[ret].m_Phone \t; cout 住址 abs-personArray[ret].m_Addr endl; } else{ cout 查无此人 endl; } system(pause); system(cls); }修改联系人功能描述按照姓名重新修改指定联系人修改联系人实现步骤封装修改联系人函数测试修改联系人功能void modifyPerson(Addressbooks *abs){ cout 请输入你要修改的联系人 endl; string name; cin name; int ret isExist(abs,name); if (ret ! -1){ string name; cout 请输入姓名 endl; cin name; abs - personArray[ret].m_Name name; cout 请输入性别 endl; cout 1---男 endl; cout 2---女 endl; int sex 0; while(true){ //如果输入的是1/2就可以退出循环否则继续输 cin sex; if (sex 1 || sex 2){ abs - personArray[ret].m_Sex sex; break; } } cout 请输入年龄 endl; int age 0; cin age; abs-personArray[ret].m_age age; cout 请输入联系电话 endl; string phone; cin phone; abs-personArray[ret].m_Phone phone; cout 请输入家庭住址 endl; string address; cin address; abs-personArray[ret].m_Addr address; cout 修改成功 endl; } else{ cout 查无此人 endl; } system(pause); system(cls); }清空联系人功能描述清空通讯录中的所有信息清空联系人实现步骤封装清空联系人函数测试清空联系人void cleanPerson(Addressbooks *abs){ abs-m_Size 0; cout 通讯录已清空 endl; system(pause); system(cls); }代码汇总#includeiostream using namespace std; #define MAX 1000 //封装函数用于显示界面 void showMenu(){ 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; } //设计一下联系人的结构体 struct Person{ string m_Name; //姓名 int m_Sex; //性别 1男 2女 int m_age; //年龄 string m_Phone; //电话 string m_Addr; //住址 }; //设计通讯录结构体 struct Addressbooks{ struct Person personArray[MAX]; //通讯录保存的联系人数组 int m_Size; //通讯录中的人员个数 }; void addPerson(Addressbooks * abs){ //判断通讯录是否已满如果满了就不要添加了 if (abs-m_Size MAX){ cout 通讯录已满无法添加 endl; return; } else{ //添加具体联系人 string name; cout 请输入姓名 endl; cin name; abs - personArray[abs-m_Size].m_Name name; cout 请输入性别 endl; cout 1---男 endl; cout 2---女 endl; int sex 0; while(true){ //如果输入的是1/2就可以退出循环否则继续输 cin sex; if (sex 1 || sex 2){ abs - personArray[abs-m_Size].m_Sex sex; break; } } cout 请输入年龄 endl; int age 0; cin age; abs-personArray[abs-m_Size].m_age age; cout 请输入联系电话 endl; string phone; cin phone; abs-personArray[abs-m_Size].m_Phone phone; cout 请输入家庭住址 endl; string address; cin address; abs-personArray[abs-m_Size].m_Addr address; abs-m_Size; cout 添加成功 endl; system(pause); //请按任意键继续 system(cls); //清屏操作 } } void showPerson(Addressbooks *abs){ if(abs-m_Size 0){ cout 当前的记录为空 endl; } else{ for(int i 0;i abs-m_Size;i){ cout 姓名 abs-personArray[i].m_Name \t; cout 性别 (abs-personArray[i].m_Sex 1 ? 男 : 女) \t; cout 年龄 abs-personArray[i].m_age \t; cout 电话 abs-personArray[i].m_Phone \t; cout 住址 abs-personArray[i].m_Addr endl; } } system(pause); //请按任意键继续 system(cls); //清屏操作 } int isExist(Addressbooks *abs,string name){ for(int i 0;i abs-m_Size;i){ if(abs-personArray[i].m_Name name){ return i; //找到了返回位置 } } return -1; //找不到返回-1 } void deletePerson(Addressbooks *abs){ cout 请输入你要删除的联系人 endl; string name; cin name; int ret isExist(abs,name); //这个abs是delete的形参已经是指针了 if (ret ! -1){ for(int i ret;i abs-m_Size;i){ abs-personArray[i] abs-personArray[i1]; } abs-m_Size--; cout 删除成功 endl; } else{ cout 查无此人 endl; } } void findPerson(Addressbooks *abs){ cout 请输入你要查找的联系人 endl; string name; cin name; int ret isExist(abs,name); if(ret ! -1){ cout 姓名 abs-personArray[ret].m_Name endl; cout 性别 (abs-personArray[ret].m_Sex 1 ? 男 : 女) \t; cout 年龄 abs-personArray[ret].m_age \t; cout 电话 abs-personArray[ret].m_Phone \t; cout 住址 abs-personArray[ret].m_Addr endl; } else{ cout 查无此人 endl; } system(pause); system(cls); } void modifyPerson(Addressbooks *abs){ cout 请输入你要修改的联系人 endl; string name; cin name; int ret isExist(abs,name); if (ret ! -1){ string name; cout 请输入姓名 endl; cin name; abs - personArray[ret].m_Name name; cout 请输入性别 endl; cout 1---男 endl; cout 2---女 endl; int sex 0; while(true){ //如果输入的是1/2就可以退出循环否则继续输 cin sex; if (sex 1 || sex 2){ abs - personArray[ret].m_Sex sex; break; } } cout 请输入年龄 endl; int age 0; cin age; abs-personArray[ret].m_age age; cout 请输入联系电话 endl; string phone; cin phone; abs-personArray[ret].m_Phone phone; cout 请输入家庭住址 endl; string address; cin address; abs-personArray[ret].m_Addr address; cout 修改成功 endl; } else{ cout 查无此人 endl; } system(pause); system(cls); } void cleanPerson(Addressbooks *abs){ abs-m_Size 0; cout 通讯录已清空 endl; system(pause); system(cls); } int main(){ //创建一个通讯录结构体变量 Addressbooks abs; //初始化通讯录中人员的个数 abs.m_Size 0; int select 0; while(true){ showMenu(); //菜单调用 cin select; switch (select){ case 1: //添加联系人 addPerson(abs); break; case 2: //显示联系人 showPerson(abs); break; case 3: //删除联系人 deletePerson(abs); break; case 4: //查找联系人 findPerson(abs); break; case 5: //修改联系人 modifyPerson(abs); break; case 6: //清空联系人 cleanPerson(abs); break; case 0: //退出通讯录 cout 欢迎下次使用 endl; system(pause); return 0; break; default: break; } } return 0; }

相关新闻

计算机毕业设计springboot基于JavaWeb的校园点餐平台 基于SpringBoot框架的高校智慧餐饮服务平台开发与实现 SpringBoot+Vue技术栈的校园在线订餐系统构建

计算机毕业设计springboot基于JavaWeb的校园点餐平台 基于SpringBoot框架的高校智慧餐饮服务平台开发与实现 SpringBoot+Vue技术栈的校园在线订餐系统构建

计算机毕业设计springboot基于JavaWeb的校园点餐平台(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展和智能手机的全面普及,人们的生活方式正…

2026/7/4 19:55:20 阅读更多 →
莫凡电视:地方台聚合直播 稳定流畅新版

莫凡电视:地方台聚合直播 稳定流畅新版

莫凡电视专注全国地方台资源整合,频道覆盖全面,适配智能电视、机顶盒等多终端,播放稳定、使用便捷。系统采用多源信号聚合与智能线路择优技术,实时检测并切换高质量通道,大幅减少卡顿与加载等待。支持H.265 硬解加速与…

2026/7/3 0:14:06 阅读更多 →
安装jdk+tomcat+ID教学

安装jdk+tomcat+ID教学

Windows 安装 JDK8 Tomcat9 一、官方下载地址1. JDK 1.8 下载官网:https://www.oracle.com/java/technologies/downloads/#java8 选择:Windows x64 → jdk-8uxxx-windows-x64.exe根据自己电脑是32位或者64位选择安装文件一般安装成功后在安装目录中会出…

2026/7/5 22:56:09 阅读更多 →

最新新闻

FinalBurn Neo:打造完美复古街机游戏体验的终极指南

FinalBurn Neo:打造完美复古街机游戏体验的终极指南

FinalBurn Neo:打造完美复古街机游戏体验的终极指南 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo(简称FBNeo)是一款开源的街机游戏模拟器&#xff0…

2026/7/6 4:44:23 阅读更多 →
3个关键问题:如何通过WSC API安全管理Windows Defender?

3个关键问题:如何通过WSC API安全管理Windows Defender?

3个关键问题:如何通过WSC API安全管理Windows Defender? 【免费下载链接】no-defender A slightly more fun way to disable windows defender firewall. (through the WSC api) 项目地址: https://gitcode.com/GitHub_Trending/no/no-defender …

2026/7/6 4:44:23 阅读更多 →
珀斯与袋鼠岛之旅:波浪岩与野生海鲜市场探访

珀斯与袋鼠岛之旅:波浪岩与野生海鲜市场探访

珀斯与袋鼠岛之旅:波浪岩与野生海鲜市场探访从西澳大利亚州的首府珀斯出发,向东驱车约340公里,可抵达海登附近的波浪岩。这块巨大的花岗岩体高约15米,长度约110米,其岩石表面因长期的风化与水蚀作用,形成了…

2026/7/6 4:42:23 阅读更多 →
叶兴阳双语音标,英语发音工具断层级天花板

叶兴阳双语音标,英语发音工具断层级天花板

功能向实测评价:叶兴阳双语音标,英语发音工具断层级天花板 深耕英语学习多年,试过市面各类音标教辅、发音软件、双语读物,唯有叶兴阳双语音标在功能性上做到全方位无短板,每一项核心功能都精准戳中自学、教学、精读全场…

2026/7/6 4:38:22 阅读更多 →
Python+OpenCV 4.8 与 Tesseract OCR 5.3 车牌识别方案对比评测

Python+OpenCV 4.8 与 Tesseract OCR 5.3 车牌识别方案对比评测

PythonOpenCV 4.8 与 Tesseract OCR 5.3 车牌识别方案深度评测车牌识别技术作为计算机视觉领域的重要应用,在智能交通、停车场管理等领域发挥着关键作用。本文将深入对比两种主流车牌识别方案:基于OpenCV 4.8的传统图像处理方案和基于Tesseract OCR 5.3的…

2026/7/6 4:38:22 阅读更多 →
3分钟掌握免费Android投屏神器:scrcpy终极使用指南

3分钟掌握免费Android投屏神器:scrcpy终极使用指南

3分钟掌握免费Android投屏神器:scrcpy终极使用指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 还在为手机屏幕太小而烦恼?想要在电脑大屏幕上操作手机应用&…

2026/7/6 4:36:22 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻