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

通讯录的实现

一、目的:

使用C++实现通讯录

二、包含功能:

添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人

显示联系人:显示通讯录中所有联系人信息

删除联系人:按照姓名进行删除指定联系人

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

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

清空联系人:清空通讯录中所有信息

退出通讯录:退出当前使用的通讯录

三、代码部分

打印菜单

void showMenu()
{cout << "*******************************" << endl <<"*******  1、添加联系人  *******" << endl <<"*******  2、删除联系人  *******" << endl <<"*******  3、显示联系人  *******" << endl <<"*******  4、查找联系人  *******" << endl <<"*******  5、修改联系人  *******" << endl <<"*******  6、清空联系人  *******" << endl <<"*******  0、退出通讯录  *******" << endl<<"*******************************" << endl;cout << "请选择:" << endl;
}

首先,因为我们要选择1、2、3、4、5、6、0这些数字从而开启各项功能,所以这里我使用switch语句

同时,当我们选择1-6这些数字时,功能完成后我们并不直接退出程序,而是重新回到功能展示界面供我们选择功能,因此我们使用while循环,只有选择了功能0,才执行退出功能

    while (true){showMenu();int input = 0;cin >> input;switch (input){case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 0:cout << "退出程序!" << endl;return 0;break;default:break;}}

而在实现添加联系人、删除联系人等的功能之前,需要先有联系人才行,因此接下来我们先实现联系人的创建,这里使用2个结构体:联系人结构体/通讯录结构体

#define MAX 1000
struct person  // 定义联系人结构体
{string name;int sex;int age;string tel;string address;
};
struct Contact // 定义通讯录结构体
{struct person ContactArray[MAX]; // 创建联系人结构体数组int size;    // 确定当前通讯录数量,上限为MAX=1000
};

添加联系人

void Add(Contact* Con)
{if (Con->size == MAX){cout << "通讯录已满,无法添加!" << endl;return;}else{cout << "请输入姓名:" << endl;cin >> Con->ContactArray[Con->size].name;int sex = 0;while (true){cout << "请输入性别:" << endl;cout << "男 - 1" << "  " << "女 - 2" << endl;cin >> sex;if (sex == 1 || sex == 2){Con->ContactArray[Con->size].sex = sex;break;}cout << "输入错误,请重新输入!" << endl;}int age = 0;while (true){cout << "请输入年龄:" << endl;cin >> age;if (age > 0 && age < 110){Con->ContactArray[Con->size].sex = age;break;}cout << "输入错误,请重新输入!" << endl;}cout << "请输入电话:" << endl;cin >> Con->ContactArray[Con->size].tel;cout << "请输入住址:" << endl;cin >> Con->ContactArray[Con->size].address;Con->size++; // 数量+1cout << "添加成功!" << endl;system("pause"); // 请按任意键继续}system("cls"); // 清屏
}

显示联系人

void Show(Contact* Con)
{if (Con->size == 0){cout << "通讯录为空!" << endl;}else{for (int i = 0; i < Con->size; i++){cout << "序号:" << i+1 << "\t";cout << "姓名:" << Con->ContactArray[i].name << "\t";cout << "性别:" << (Con->ContactArray[i].sex == 1 ? "男" : "女") << "\t";// 1则返回男,否则是女cout << "年龄:" << Con->ContactArray[i].age << "\t";cout << "电话:" << Con->ContactArray[i].tel << "\t";cout << "住址:" << Con->ContactArray[i].address << "\t";cout << endl;}system("pause"); // 请按任意键继续}system("cls"); // 清屏
}

判断联系人是否存在

int Exist(Contact* Con,string name)
{for (int i = 0; i <= Con->size; i++){if (Con->ContactArray[i].name == name)return i;elsereturn -1;}
}

查找联系人

void Find(Contact* Con)
{cout << "请输入要查找人的名字:" << endl;string name;cin >> name;int ret = Exist(Con, name);if (ret == -1){cout << "查无此人!" << endl;}else{cout << "序号:" << ret + 1 << "\t";cout << "姓名:" << Con->ContactArray[ret].name << "\t";cout << "性别:" << (Con->ContactArray[ret].sex == 1 ? "男" : "女") << "\t";// 1则返回男,否则是女cout << "年龄:" << Con->ContactArray[ret].age << "\t";cout << "电话:" << Con->ContactArray[ret].tel << "\t";cout << "住址:" << Con->ContactArray[ret].address << "\t";cout << endl;}system("pause");system("cls"); // 清屏
}

删除指定联系人

void Del(Contact* Con)
{cout << "请输入要删除人的名字:" << endl;string name;cin >> name;int ret = Exist(Con,name);if (ret == -1){cout << "查无此人!" << endl;}else{for (; ret < Con->size; ret++){// 数据前移Con->ContactArray[ret] = Con->ContactArray[ret + 1];}Con->size--;cout << "删除成功!" << endl;}system("pause");system("cls");
}

修改指定联系人

void Mod(Contact* Con)
{cout << "请输入要修改人的名字:" << endl;string name;cin >> name;int ret = Exist(Con, name);if (ret == -1){cout << "查无此人!" << endl;}else{cout << "请输入姓名:" << endl;cin >> Con->ContactArray[ret].name;int sex = 0;while (true){cout << "请输入性别:" << endl;cout << "男 - 1" << "  " << "女 - 2" << endl;cin >> sex;if (sex == 1 || sex == 2){Con->ContactArray[Con->size].sex = sex;break;}cout << "输入错误,请重新输入!" << endl;}int age = 0;while (true){cout << "请输入年龄:" << endl;cin >> age;if (age > 0 && age < 110){Con->ContactArray[Con->size].age = age;break;}cout << "输入错误,请重新输入!" << endl;}cout << "请输入电话:" << endl;cin >> Con->ContactArray[ret].tel;cout << "请输入住址:" << endl;cin >> Con->ContactArray[ret].address;cout << "修改成功!" << endl;}system("pause");system("cls"); // 清屏
}

清空联系人

void Des(Contact* Con)
{char input;cout << "请确认是否要清空联系人?" << endl<< " 确认输入Y ,否则输入N" << endl;cin >> input;if (input == 'Y'){Con->size = 0;cout << "已清空通讯录!" << endl;}system("pause");system("cls"); // 清屏
}

主函数

int main()
{Contact Con;Con.size = 0;while (true){showMenu();int input = 0;cin >> input;switch (input){case 1:Add(&Con);break;case 2:Del(&Con);break;case 3:Show(&Con);break;case 4:Find(&Con);break;case 5:Mod(&Con);break;case 6:Des(&Con);break;case 0:cout << "退出程序!" << endl;return 0;break;default:break;}}return 0;
}

相关文章:

通讯录的实现

一、目的&#xff1a;使用C实现通讯录二、包含功能&#xff1a;添加联系人:向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名、性别、年龄、联系电话、家庭住址&#xff09;最多记录1000人显示联系人:显示通讯录中所有联系人信息删除联系人:按照姓名进行删除指定联系人…...

Urho3D导航

Urho3D通过使用Recast和Detour库实现导航网格生成和路径查找。 导航功能通过NavigationMesh和Navigable组件公开。 NavigationMesh从已使用Navigable组件标记的子节点收集几何体。默认情况下&#xff0c;可导航组件的行为是递归的&#xff1a;除非禁用递归&#xff0c;否则也…...

【学习总结】激光雷达与相机外参标定:代码(cam_lidar_calibration)

前段时间尝试了一款激光雷达和相机标定的代码&#xff0c;总结了博客&#xff1a; 【学习总结】激光雷达与相机外参标定&#xff1a;原理与代码 但总觉得那个代码太差劲&#xff0c;而且精度不行&#xff0c;于是又找了些新的代码&#xff0c;体验比之前的好很多&#xff0c;在…...

车载技术开发—{Android CarFrameWork}

Android Automotive平台 Android Automotive是通过Android的通用框架&#xff0c;语言和API来实现的一个全栈&#xff0c;开源&#xff0c;高度可定制的平台。 Android Automotive与整个Android生态系统的关系 Android Automotive是Android的一部分。 Android Automotive不是…...

多城市二手车买卖发布管理小程序开发

多城市二手车买卖发布管理小程序开发 功能特性: 为你介绍二手车微信小程序的功能特性。 车辆分类搜索&#xff0c;支持按品牌、售价、年龄、上牌时间、排量等筛选。 车源发布&#xff0c;支持用户一键发布二手车&#xff0c;平台审核上线&#xff0c;发布可编辑、删除等操作。…...

企业级信息系统开发学习笔记1.2 初探Spring——利用组件注解符精简Spring配置文件

文章目录零、本讲学习目标一、课程引入二、打开项目 - SpringDemo三、利用组件注解符精简Spring配置文件&#xff08;一&#xff09;创建新包&#xff08;二&#xff09;复制四个类&#xff08;三&#xff09;修改杀龙任务类&#xff08;四&#xff09;修改救美任务类&#xff…...

37、基于51单片机乒乓球比赛系统设计

摘要 乒乓球游戏电路是一个对输入信号、输入时机正确与否的8个LED表示乒乓球球台和乒乓球&#xff0c;用数码管模拟显示器&#xff0c;显示比赛局数比分和每局玩家得分的电路。电路并不复杂&#xff0c;整体分为两个模块&#xff1a;一&#xff0c;游戏主模块&#xff1b;二&a…...

VMware虚拟机安装Win11最详细过程以及遇到的这台电脑无法运行Windows11的问题

准备工作 在使用VMware虚拟机安装Win11之前我们先把准备工作做好&#xff0c;以免后续思绪混乱导致出错。 1. 到VMware官网或点击链接下载正版VMware Workstation 16 Pro。 2. 双击打开安装包&#xff0c;点击下一步。 3. 阅读用户许可协议&#xff0c;勾选我接受许可协议中的…...

centos误删python2后怎么重新安装

此教程为离线安装 一. 先查询系统版本 cat /proc/version Linux version 3.10.0-1127.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020 二. 安装python2.7.5(已知原python版…...

Qt 开发使用VSCode 笔记2

在之前有写过使用VSCode开发QT的笔记 Qt 开发使用VSCode 在以前的基础上继续学习记录写下《Qt 开发使用VSCode 笔记2》 该笔记相比之前的Qt 开发使用VSCode新加了如下内容&#xff1a; 工作区的使用使用Natvis进行Qt感知对象可视化通过vscode创建QT Quick项目 工作区的使用 …...

查找算法复习

先序在了解查找算法之前&#xff0c;需要熟悉几个概念&#xff0c;不然后面容易产生理解错误。查找表&#xff1a;即被查找的对象&#xff0c;通常由几个关键字组成。关键字&#xff1a;就是数据项、字段的意思。关键字有主次之分&#xff0c;其中主关键字取值是唯一的。查找长…...

腾讯前端必会面试题(必备)

如何提取高度嵌套的对象里的指定属性&#xff1f; 有时会遇到一些嵌套程度非常深的对象&#xff1a; const school {classes: {stu: {name: Bob,age: 24,}} }像此处的 name 这个变量&#xff0c;嵌套了四层&#xff0c;此时如果仍然尝试老方法来提取它&#xff1a; const {…...

探访上汽通用武汉奥特能超级工厂

上汽通用汽车在电动化和智能网联化新技术领域投入了700亿大洋&#xff0c;武汉奥特能超级工厂就是其中一个重点项目。这个工厂已经投产&#xff0c;将成为上汽通用汽车的新能源生产基地&#xff0c;加速奥特能平台车型的推出。 最近别克推出了Electra E5&#xff0c;它是别克第…...

【Linux】线程函数和线程同步详细整理(金针菇般细)

目录 一&#xff0c;线程函数 1.获取当前线程ID 2.创建线程 3.退出线程 4.阻塞线程 5.分离线程 6.取消线程 7.线程比较 8.测试代码&#xff08;线程函数总结&#xff09; 二&#xff0c;线程同步 1.互斥锁 2.读写锁 3.条件变量 4.信号量 一&#xff0c;线程函数 …...

Python学习笔记6:抽象

抽象 函数 判断某个对象是否可调用&#xff0c;可使用内置函数callable >>> import math >>> x 1 >>> y math.sqrt >>> callable(x) False >>> callable(y) True斐波那契数组 def fibs(num): result [0, 1] for i i…...

自己手写一个redux

提起 Redux 我们想到最多的应该就是 React-redux 这个库&#xff0c;可是实际上 Redux 和 React-redux 并不是同一个东西, Redux 是一种架构模式&#xff0c;源于 Flux。 React-redux 是 Redux 思想与 React 结合的一种具体实现。 在我们使用 React 的时候&#xff0c;常常会遇…...

mysql调优参数

my.conf [client] port 端口 socket sokcet位置 [mysqld] basedir mysql位置 port 3306 socket sokcet位置 datadir data目录 pid_file mysqld.pid位置 bind_address 0.0.0.0 lower_case…...

JavaEE简单示例——再插入的同时获取插入的主键列

简单介绍&#xff1a; 在某些时候&#xff0c;我们在插入完成一条语句之后&#xff0c;我们会想要返回之前插入的这条语句的主键列的数据&#xff0c;进行下一步的展示或者修改&#xff0c;我们就可以使用MyBatis的主键回写功能&#xff0c;帮助我们获取插入成功的一条数据的主…...

sql语句练习

一、现有以下两张表&#xff1a;第一张表名为cust&#xff0c;其表结构如下&#xff1a;第二张表名为mark&#xff0c;其表结构如下:1) [5分]请写出计算 所有学生的英语平均成绩的sq|语句。2) [5分]现有五 个学生,其学号假定分别为11,22,33,44,55;请用一条SQL语句实现列出这五个…...

广州蓝景—结合chatGPT下的教育模式变化

最近爆火的人工智能AI聊天工具ChatGPT&#xff0c;不仅在互联网&#xff0c;更是在各行各业中&#xff0c;得到了广泛的传播&#xff0c;应该没有哪一个不知道它的存在&#xff0c;但其实你又是否知道&#xff0c;其实ChatGPT是一类模型的统称&#xff0c;随着人工智能的快速发…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...