C++项目(通讯录管理系统)

news/2024/5/19 4:02:49

系统需求
 通讯录是一个可以记录亲人、好友信息的工具。

 本教程主要利用C++来实现一个通讯录管理系统

 系统中需要实现的功能如下:
·添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多   记录1000人

·显示联系人:显示通讯录中所有联系人信息
·删除联系人:按照姓名进行删除指定联系人

·查找联系人:按照姓名查看指定联系人信息

·修改联系人:按照姓名重新修改指定联系人

·清空联系人:清空通讯录中所有信息
·退出通讯录:退出当前使用的通讯录

 1.菜单功能

#include<iostream>
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();system("pause");return 0;
}

2.退出功能

int main() {int select = 0;while (1) {//菜单调用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;}}system("pause");return 0;
}

3.添加联系人

int main() {//创建通讯录结构体变量Addressbooks abs;//初始化通讯录当前个数abs.m_Size = 0;
case 1: //添加联系人addPerson(&abs);break;
#include<iostream>
using namespace std;
#include<string>
#define MAX 1000//设计联系人结构体
struct Person {string m_Name;int m_Sex;int m_Age;string m_Phone;string m_Addr;
};//设计通讯录结构体
struct Addressbooks {struct Person Array[MAX];int m_Size;
};//1.添加联系人
void addPerson(Addressbooks* abs) {// 判断通讯录是否已满if (abs->m_Size == MAX) {cout << "通讯录已满,无法添加联系人" << endl;return;}else {//添加具体联系人//姓名string name;cout << "请输入姓名:" << endl;cin >> name;abs->Array[abs->m_Size].m_Name = name;//性别cout << "请输入性别:" << endl;cout << "1-------->男" << endl;cout << "2-------->女" << endl;int sex = 0;while (1) {cin >> sex;if (sex == 1 || sex == 2) {abs->Array[abs->m_Size].m_Sex = sex;break;}else {cout << "输入有误,请重新输入" << endl;}}//年龄cout << "请输入年龄:" << endl;int age = 0;cin >> age;abs->Array[abs->m_Size].m_Age = age;//电话cout << "请输入联系电话:" << endl;string phone;cin >> phone;abs->Array[abs->m_Size].m_Phone = phone;//住址cout << "请输入住址:" << endl;string address;cin >> address;abs->Array[abs->m_Size].m_Addr = address;//更新通讯录人数abs->m_Size++;cout << "添加成功" << endl;system("pause");//输入任意键继续system("cls"); //清屏

4.显示联系人 

case 2: //显示联系人showPerson(&abs);break;
//2.显示联系人
void showPerson(Addressbooks *abs) {//判断通讯录是否为空if (abs->m_Size == 0) {cout << "当前通讯录为空" << endl;}//不空,则显示联系人信息else {for (int i = 0; i < abs->m_Size; i++) {cout << "姓名:" << abs->Array[i].m_Name << "\t";cout << "性别:" << (abs->Array[i].m_Sex == 1? "男":"女") << "\t";cout << "年龄:" << abs->Array[i].m_Age << "\t";cout << "电话:" << abs->Array[i].m_Phone << "\t";cout << "地址:" << abs->Array[i].m_Addr << "\t" << endl;}}system("pause");//输入任意键继续system("cls"); //清屏
}

 5.删除联系人

case 3: //删除联系人deletePerson(&abs);break;
//检测联系人是否存在
int isExist(Addressbooks* abs, string name) {for (int i = 0; i < abs->m_Size; i++) {//找到用户if (abs->Array[i].m_Name == name) {return i;}}//没有找到用户return -1;system("pause");//输入任意键继续system("cls"); //清屏
}//3.删除联系人
void deletePerson(Addressbooks* abs) {cout << "请输入您要删除的联系人" << endl;string name;cin >> name;//ret == -1 未查到此人//ret != -1 查到此人int ret = isExist(abs, name);if (ret != -1) {//删除操作for (int i = ret; i < abs->m_Size; i++) {//进行前移abs->Array[i] = abs->Array[i + 1];}//更新通讯录中的人数abs->m_Size--;}else {cout << "没有查询结果" << endl;}system("pause");//输入任意键继续system("cls"); //清屏
}

 6.查找联系人

case 4: //查找联系人findPerson(&abs);break;
//4.查找联系人
void findPerson(Addressbooks* abs) {cout << "请输入您要查找的联系人" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret != -1) {cout << abs->Array[ret].m_Name << "\t";cout << abs->Array[ret].m_Sex << "\t";cout << abs->Array[ret].m_Age << "\t";cout << abs->Array[ret].m_Phone << "\t";cout << abs->Array[ret].m_Addr << "\t" << endl;}	else {cout << "对不起,没有此联系人" << endl;}system("pause");//输入任意键继续system("cls"); //清屏
}

7.修改联系人

case 5: //修改联系人modifyPerson(&abs);break;
//5.修改联系人
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->Array[ret].m_Name = name;//性别cout << "请输入性别:" << endl;cout << "1-------->男" << endl;cout << "2-------->女" << endl;int sex = 0;while (1) {cin >> sex;if (sex == 1 || sex == 2) {abs->Array[ret].m_Sex = sex;break;}else {cout << "输入有误,请重新输入" << endl;}}//年龄cout << "请输入年龄:" << endl;int age = 0;cin >> age;abs->Array[ret].m_Age = age;//电话cout << "请输入联系电话:" << endl;string phone;cin >> phone;abs->Array[ret].m_Phone = phone;//住址cout << "请输入住址:" << endl;string address;cin >> address;abs->Array[ret].m_Addr = address;cout << "修改成功" << endl;}else {cout << "查无此人" << endl;}system("pause");//输入任意键继续system("cls"); //清屏
}

 8.清空联系人

case 6: //清空联系人clearPerson(&abs);break;
//6.清空联系人
void clearPerson(Addressbooks* abs) {abs->m_Size = 0;cout << "通讯录联系人已经清空" << endl;system("pause");//输入任意键继续system("cls"); //清屏
}

 全部代码

#include<iostream>
using namespace std;
#include<string>
#define MAX 1000//设计联系人结构体
struct Person {string m_Name;int m_Sex;int m_Age;string m_Phone;string m_Addr;
};//设计通讯录结构体
struct Addressbooks {struct Person Array[MAX];int m_Size;
};//1.添加联系人
void addPerson(Addressbooks* abs) {// 判断通讯录是否已满if (abs->m_Size == MAX) {cout << "通讯录已满,无法添加联系人" << endl;return;}else {//添加具体联系人//姓名string name;cout << "请输入姓名:" << endl;cin >> name;abs->Array[abs->m_Size].m_Name = name;//性别cout << "请输入性别:" << endl;cout << "1-------->男" << endl;cout << "2-------->女" << endl;int sex = 0;while (1) {cin >> sex;if (sex == 1 || sex == 2) {abs->Array[abs->m_Size].m_Sex = sex;break;}else {cout << "输入有误,请重新输入" << endl;}}//年龄cout << "请输入年龄:" << endl;int age = 0;cin >> age;abs->Array[abs->m_Size].m_Age = age;//电话cout << "请输入联系电话:" << endl;string phone;cin >> phone;abs->Array[abs->m_Size].m_Phone = phone;//住址cout << "请输入住址:" << endl;string address;cin >> address;abs->Array[abs->m_Size].m_Addr = address;//更新通讯录人数abs->m_Size++;cout << "添加成功" << endl;system("pause");//输入任意键继续system("cls"); //清屏}
}//2.显示联系人
void showPerson(Addressbooks *abs) {//判断通讯录是否为空if (abs->m_Size == 0) {cout << "当前通讯录为空" << endl;}//不空,则显示联系人信息else {for (int i = 0; i < abs->m_Size; i++) {cout << "姓名:" << abs->Array[i].m_Name << "\t";cout << "性别:" << (abs->Array[i].m_Sex == 1? "男":"女") << "\t";cout << "年龄:" << abs->Array[i].m_Age << "\t";cout << "电话:" << abs->Array[i].m_Phone << "\t";cout << "地址:" << abs->Array[i].m_Addr << "\t" << endl;}}system("pause");//输入任意键继续system("cls"); //清屏
}//检测联系人是否存在
int isExist(Addressbooks* abs, string name) {for (int i = 0; i < abs->m_Size; i++) {//找到用户if (abs->Array[i].m_Name == name) {return i; //返回的是数组中此联系人的下标}}//没有找到用户return -1;system("pause");//输入任意键继续system("cls"); //清屏
}//3.删除联系人
void deletePerson(Addressbooks* abs) {cout << "请输入您要删除的联系人" << endl;string name;cin >> name;//ret == -1 未查到此人//ret != -1 查到此人int ret = isExist(abs, name);if (ret != -1) {//删除操作for (int i = ret; i < abs->m_Size; i++) {//进行前移abs->Array[i] = abs->Array[i + 1];}//更新通讯录中的人数abs->m_Size--;}else {cout << "没有查询结果" << endl;}system("pause");//输入任意键继续system("cls"); //清屏
}//4.查找联系人
void findPerson(Addressbooks* abs) {cout << "请输入您要查找的联系人" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret != -1) {cout << abs->Array[ret].m_Name << "\t";cout << abs->Array[ret].m_Sex << "\t";cout << abs->Array[ret].m_Age << "\t";cout << abs->Array[ret].m_Phone << "\t";cout << abs->Array[ret].m_Addr << "\t" << endl;}	else {cout << "对不起,没有此联系人" << endl;}system("pause");//输入任意键继续system("cls"); //清屏
}//5.修改联系人
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->Array[ret].m_Name = name;//性别cout << "请输入性别:" << endl;cout << "1-------->男" << endl;cout << "2-------->女" << endl;int sex = 0;while (1) {cin >> sex;if (sex == 1 || sex == 2) {abs->Array[ret].m_Sex = sex;break;}else {cout << "输入有误,请重新输入" << endl;}}//年龄cout << "请输入年龄:" << endl;int age = 0;cin >> age;abs->Array[ret].m_Age = age;//电话cout << "请输入联系电话:" << endl;string phone;cin >> phone;abs->Array[ret].m_Phone = phone;//住址cout << "请输入住址:" << endl;string address;cin >> address;abs->Array[ret].m_Addr = address;cout << "修改成功" << endl;}else {cout << "查无此人" << endl;}system("pause");//输入任意键继续system("cls"); //清屏
}//6.清空联系人
void clearPerson(Addressbooks* abs) {abs->m_Size = 0;cout << "通讯录联系人已经清空" << endl;system("pause");//输入任意键继续system("cls"); //清屏
}//菜单界面
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() {//创建通讯录结构体变量Addressbooks abs;//初始化通讯录当前个数abs.m_Size = 0;//创建用户选择输入的变量int select = 0;while (1) {//菜单调用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: //清空联系人clearPerson(&abs);break;case 0: //退出通讯录cout << "欢迎下次使用,再见。" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}


http://www.mrgr.cn/p/30065773

相关文章

闲来装个虚拟机Ubuntu24.04和硬盘分区及挂载

简述 最近ubuntu出新版本了&#xff0c;ubuntu24.04&#xff0c; 俗称高贵食蚁兽。5年前进行Android或者linux开发基本是在windows下的虚拟机中进行。目前&#xff0c;虽然物质基础提高了&#xff0c;功能有独立进行编译、代码管理的服务器了。可以通过ssh登录&#xff0c;但是…

[转帖]长连接黑洞重现和分析

https://plantegg.github.io/2024/05/05/%E9%95%BF%E8%BF%9E%E6%8E%A5%E9%BB%91%E6%B4%9E%E9%87%8D%E7%8E%B0%E5%92%8C%E5%88%86%E6%9E%90/ 长连接黑洞重现和分析 这是一个存在多年,遍及各个不同的业务又反反复复地在集团内部出现的一个问题,本文先通过重现展示这个问题,然后…

Git系列:config 配置

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Rust 实战thiserror+自定义错误消息体

导航 一、背景二、实践1、导入thiserror2、自定义错误消息体&#xff08;1&#xff09;创建ErrMsg.rs和创建自定义结构体&#xff08;2&#xff09;lib.rs添加ErrMsg&#xff08;3&#xff09;main函数&#xff08;4&#xff09;完整代码 一、背景 开发中遇到需要通用、能够满…

Latex 编辑论文的一些坑

如何插入图片首先,要使用pdf作为图片的保存格式,这样图片可以以原始分辨率插入。但要实现高清图片,需要几个条件,请一定按照我说的步骤来1. 在ppt里编辑你想要的图片样子、排布、文字(真正标准的做法是在latex中用input写入文字)等2.将有效图片区域移动到ppt整个画布的左…

基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的旅游管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

【华为】路由综合实验(OSPF+BGP基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP&#xff0c;使AR4和AR3成为eBGP&#xff0c;AR4和AR5成为iBGP对等体…

ARM64_Ubuntu_Chrome_Python 镜像搭建最终版

ARM64_Ubuntu_Chrome_Python 镜像搭建最终版dockerfile FROM ubuntu:24.04 RUN apt-get update && apt-get install gnupg -y && apt-get clean RUN sh <<EOF cat > /etc/apt/sources.list <<EOS deb http://ftp.de.debian.org/debian sid mai…

[转帖]Linux内核版本升级,性能到底提升多少?

https://plantegg.github.io/2019/12/24/Linux%E5%86%85%E6%A0%B8%E7%89%88%E6%9C%AC%E5%8D%87%E7%BA%A7%EF%BC%8C%E6%80%A7%E8%83%BD%E5%88%B0%E5%BA%95%E6%8F%90%E5%8D%87%E5%A4%9A%E5%B0%91%EF%BC%9F%E6%8B%BF%E6%95%B0%E6%8D%AE%E8%AF%B4%E8%AF%9D/ 背景 X 产品在公有云售…

初识webpack项目

新建一个空的工程 -> % mkdir webpack-project 为了方便追踪执行每一个命令&#xff0c;最终产生了哪些变更&#xff0c;将这个空工程初始化成git项目 -> % cd webpack-project/-> % git init Initialized empty Git repository in /Users/lixiang/frontworkspace/…

WPF应用程序XAML

当WPF应用程序创建好后&#xff0c;系统会自动添加一个Grid控件到窗体上&#xff0c;通过Grid控件能够方便地对界面进行布局.下面代码中为Grid控件添加了两行两列&#xff0c;分别用RowDefinitions属性ColumnDefinitions属性表示行的集合和列的集合&#xff0c;集合中有RowDefi…

Blazor/Hybird 触屏下单程序调优笔记

环境 Blazor Net8.0 + FreeSql + Bootstrap Blazor 组件 以下都是自己瞎琢磨的和官网资料搬运,肯定有不少错漏和不合理的地方,非常希望各位大佬评论区给我建议和意见. 1. 组件化需要提升渲染性能的组件,例如触摸屏显示每个商品下单数量的商品列表 避免不必要地呈现组件子树, 执…

基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的房屋租赁管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

域控安全 ----> Ntds.dit文件抓取

大家还记得内网渗透的初衷吗&#xff1f;&#xff1f;&#xff1f; 找到域馆&#xff0c;拿下域控&#xff01;&#xff01; 拿下了域控就是拿下了整个域&#xff01;&#xff01; 但是大家知道拿下域环境之后应该怎么操作吗(灵魂拷问)&#xff1f;&#xff1f;&#xff1f; …

OpenLayers入门①(引入的是一个高德地图)

OpenLayers入门&#xff08;一&#xff09; - 知乎 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&qu…

9种单片机常用的软件架构

长文预警&#xff0c;加代码5000多字&#xff0c;写了4个多小时&#xff0c;盘软件架构&#xff0c;这篇文章就够了! 可能很多工程师&#xff0c;工作了很多年&#xff0c;都不会有软件架构的概念。 因为我在做研发工程师的第6年&#xff0c;才开始意识到这个东西&#xff0c;在…

《MySQL45讲》读书笔记

重建表 alter table t engine InnoDB&#xff08;也就是recreate&#xff09;&#xff0c;而optimize table t 等于recreateanalyze&#xff0c;让表大小变小 重建表的执行流程 建立一个临时文件&#xff0c;扫描表 t 主键的所有数据页&#xff1b;用数据页中表 t 的记录生…

前端HTML5学习2(新增多媒体标签,H5的兼容性处理)

前端HTML5学习2新增多媒体标签&#xff0c;H5的兼容性处理&#xff09; 分清标签和属性新增多媒体标签新增视频标签新增音频标签新增全局属性 H5的兼容性处理 分清标签和属性 标签&#xff08;HTML元素&#xff09;和属性&#xff0c;标签定义了内容的类型或结构&#xff0c;而…

Django后台项目开发实战二

我们的需求是开发职位管理系统 三个功能&#xff1a; 管理员发布职位候选人能浏览职位用户能投递职位 第二阶段 创建应用 jobs&#xff0c;实现职位数据的建模 python manage.py startapp jobs 然后再 setting .py 注册应用&#xff0c;只需添加应用名称到最后一行 INST…

探索设计模式的魅力:分布式模式让业务更高效、更安全、更稳定

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索分布式模式之旅✨ 在数字化时代&#xff0c;企业面临着前所未有的挑战和机遇。…