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

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

 本教程主要利用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.mzph.cn/bicheng/6797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android】Android应用性能优化总结

AndroidApp应用性能优化总结 最近大半年的时间里&#xff0c;大部分投在了某国内新能源汽车的某款AndroidApp开发上。 由于该App是该款车上&#xff0c;常用重点应用。所以车厂对应用性能的要求比较高。 主要包括&#xff1a; 应用冷启动达到***ms。应用热(温)启动达到***ms应…

RK3568笔记二十四:基于Flask的网页监控系统

若该文为原创文章&#xff0c;转载请注明原文出处。 此实验参考 《鲁班猫监控检测》&#xff0c;原代码有点BUG&#xff0c;已经下载不了。2. 鲁班猫监控检测 — [野火]嵌入式AI应用开发实战指南—基于LubanCat-RK系列板卡 文档 (embedfire.com) 一、简介 记录简单的摄像头监…

易语言IDE界面美化支持库

易语言IDE界面美化支持库 下载下来可以看到&#xff0c;是一个压缩包。 那么&#xff0c;怎么安装到易语言中呢&#xff1f; 解压之后&#xff0c;得到这两个文件。 直接将clr和lib丢到易语言安装目录中&#xff0c;这样子就安装完成了。 打开易语言&#xff0c;在支持库配置…

在营销的世界,你一定要记住:营满,则销

营销的世界中,有一个非常重要的一件事,这几个字一定要记住: 营满,则销;营未满,则不销。 你有没有把握,这是一个没办法可以复杂的东西,真得看营销人的直觉,营跟销是独立的两件事,营在营势,销是自然而然的。这里, 什么样的客户,看到什么样的产品。会有什么样的抗…

HCIP的学习(11)

OSPF的LSA详解 LSA头部信息 ​ [r2]display ospf lsdb router 1.1.1.1----查看OSPF某一条LSA的详细信息&#xff0c;类型以及LS ID参数。 链路状态老化时间 指一条LSA的老化时间&#xff0c;即存在了多长时间。当一条LSA被始发路由器产生时&#xff0c;该参数值被设定为0之后…

32 OpenCV Harris角点检测

文章目录 cornerHarris 算子示例 角点检测 cornerHarris 算子 void cv::cornerHarris ( InputArray src,OutputArray dst,int blockSize,int ksize,double K,int borderType BORDER_DEFAULT) src:待检测Harris角点的输入图像&#xff0c;图像必须是CV 8U或者CV 32F的单通道…

Ansible——lookup,过滤器

文章目录 Ansible——lookup,过滤器lookup读取文件lookup生成随机密码lookup读取环境变量lookup读取Linux命令的执行结果lookup读取template变量替换后的文件lookup读取配置文件lookup读取DNS解析的值 过滤器过滤器使用的位置过滤器对普通变量的操作过滤器对文件路径的操作过滤…

QSqlDatabase的数据库路径或名称问题

在Qt的数据库编程中&#xff0c;先是设置数据库的类型&#xff0c;然后是设置数据库文件的路径&#xff0c;或者数据库名称。若有数据库的用户名、密码&#xff0c;则分别调用setUserName(“”)、setPassword(“”)来设置用户名和密码&#xff1b;若没有&#xff0c;则省略用户…

Maven 在项目的 pom.xml 文件中 指定 阿里云的景象仓库

配置 在 项目的 pom.xml 文件中添加如下配置即可 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

【Unity】位图字体制作工具:蒲公英

一般来讲&#xff0c;如果需要制作位图字体&#xff0c;一般是使用 BMFont 这种第三方工具&#xff1a;BMFont - AngelCode.comhttp://www.angelcode.com/products/bmfont/ 然而这个工具对于非程序员来说&#xff0c;操作起来较为繁琐困难。每次美术修改了字体之后&…

解决git合并冲突

解决Git请求合并冲突通常涉及以下步骤&#xff1a; 了解冲突&#xff1a; 当Git在合并过程中无法自动解决文件差异时&#xff0c;它会产生冲突。 你可以通过查看Git的输出或检查冲突文件的特殊标记来识别冲突。 查看冲突文件&#xff1a; 打开Git告诉你存在冲突的文件。 你…

【区块链】比特币架构

比特币架构 2009年1月&#xff0c;在比特币系统论文发表两个月之后&#xff0c;比特币系统正式运行并开放了源码&#xff0c;标志着比特币网络的正式诞生。通过其构建的一个公开透明、去中心化、防篡改的账本系统&#xff0c;比特币开展了一场规模空前的加密数字货币体验。在区…

C++手写协程项目(协程实现线程结构体、线程调度器定义,线程挂起、切换、恢复函数,模块测试)

协程结构体定义 之前我们使用linux下协程函数实现了线程切换&#xff0c;使用的是ucontext_t结构体&#xff0c;和基于这个结构体的四个函数。现在我们要用这些工具来实现我们自己的一个线程结构体&#xff0c;并实现线程调度和线程切换、挂起。 首先我们来实现以下线程结构体…

Linux常用软件安装(JDK、MySQL、Tomcat、Redis)

目录 一、上传与下载工具Filezilla1. filezilla官网 二、JDK安装1. 在opt中创建JDK目录2.上传JDK压缩文件到新建目录中3.卸载系统自代jdk4.安装JDK5.JDK环境变量配置6. 验证是否安装成功 三、安装MySQL1.创建mysql文件夹2.下载mysql安装压缩包3.上传到文件夹里面4. 卸载系统自带…

ThreeJS:光线投射与3D场景交互

光线投射Raycaster 光线投射详细介绍可参考&#xff1a;https://en.wikipedia.org/wiki/Ray_casting&#xff0c; ThreeJS中&#xff0c;提供了Raycaster类&#xff0c;用于进行鼠标拾取&#xff0c;即&#xff1a;当三维场景中鼠标移动时&#xff0c;利用光线投射&#xff0c;…

linux手动安装es

docker下载 docker pull elasticsearch:7.9.3 docker pull kibana:7.9.3检查安装目录下存在文件夹/data/elasticsearch/data &#xff0c;如果缺少&#xff0c;请创建目录并设置权限&#xff0c;否则会因为无权限访问而启动失败。 # 创建目录 mkdir /data/elasticsearch/data…

SpringCloudAlibaba:4.1云原生网关higress的搭建

概述 简介 Higress是基于阿里内部的Envoy Gateway实践沉淀、以开源Istio Envoy为核心构建的下一代云原生网关&#xff0c; 实现了流量网关 微服务网关 安全网关三合一的高集成能力&#xff0c;深度集成Dubbo、Nacos、Sentinel等微服务技术栈 定位 在虚拟化时期的微服务架构…

【DevOps】Jenkins 集成Docker

目录 1. 安装 Docker 和 Jenkins 2. 在 Jenkins 中安装 Docker 插件 3. 配置 Docker 连接 4. 创建 Jenkins Pipeline 5. 示例 Pipeline 脚本 6. 运行 Jenkins Job 7. 扩展功能 8、docker配置测试连接的时候报错处理 将 Docker 与 Jenkins 集成可以实现持续集成和持续交…

目标检测正负样本区分和平衡

1、正负样本定义 rpn和rcnn的正负样本定义都是基于MaxIoUAssigner&#xff0c;只不过定义阈值不一样而已。 MaxIoUAssigner的操作包括4个步骤&#xff1a; 首先初始化时候假设每个anchor的mask都是-1&#xff0c;表示都是忽略anchor 将每个anchor和所有gt的iou的最大Iou小于…

如何为 Nestjs 编写单元测试和 E2E 测试

前言 最近在给一个 nestjs 项目写单元测试&#xff08;Unit Testing&#xff09;和 e2e 测试&#xff08;End-to-End Testing&#xff0c;端到端测试&#xff0c;简称 e2e 测试&#xff09;&#xff0c;这是我第一次给后端项目写测试&#xff0c;发现和之前给前端项目写测试还…