通讯录管理小程序

通讯录管理系统

是对c++基础语法的巩固,比较简单的一个小程序,重点在于养成良好的c++代码习惯
通讯录是一个可以记录亲人、好友信息的工具。

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

下面是一些需要实现的功能:

1. 添加联系人

  • 功能描述:实现添加联系人,人数上限为1000人

    信息包括(姓名、性别、年龄、联系电话、家庭住址)
  • 实现步骤:
    • 设计联系人结构体
    • 设计通讯录结构体
    • mian函数中创建通讯录
//设计联系人结构体
struct Person
{//姓名string m_name;//性别 1男0女int m_sex;//年龄int m_age;//联系电话string m_phonenum;//住址string m_address;
};//设计通讯录结构体
struct Addressbooks
{//通讯录中保存的联系人数组struct Person personArray[MAX];//通讯录当前保存的联系人个数int size;
};
  * 封装添加联系人函数
//1.添加联系人
void addPerson(Addressbooks *abs)
{//判断通讯录是否已经满了if (abs->size == MAX){cout <<"通讯录已满,无法添加联系人!" << endl;return;}else{//添加联系人//姓名string name;cout <<"请输入联系人姓名:" << endl;cin >> name;abs->personArray[abs->size].m_name = name;//性别int sex;cout <<"请输入性别:" << endl;cout <<"1---男" << endl;cout <<"0---女" << endl;while (true){cin >> sex;//如果不是0或1则输入形式错误if (sex==1||sex==0){abs->personArray[abs->size].m_sex=sex;break;}cout <<"输入有误,请重新输入:" << endl;}//年龄int age;cout <<"请输入年龄:" << endl;cin >> age;abs->personArray[abs->size].m_age = age;//联系电话string phonenum;cout <<"请输入联系方式:" << endl;cin >> phonenum;abs->personArray[abs->size].m_phonenum = phonenum;//地址string address;cout <<"请输入地址:" << endl;cin >> address;abs->personArray[abs->size].m_address = address;abs->size++;cout <<"添加成功!" << endl;system("pause");system("cls");}
}
  * 测试添加联系人功能

2. 显示联系人

* 功能描述:显示通讯录中已有联系人
* 实现步骤:* 封装显示联系人函数
//封装显示联系人函数
void showPerson(Addressbooks *abs)
{//判断通讯录是否为空if (abs->size == 0)cout <<"通讯录为空!"<< endl;else{for (int i = 0; i < abs->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_phonenum << "\t";cout <<"住址:"<< abs->personArray[i].m_address << endl;}system("pause");system("cls");}
}
    * 测试显示联系人功能

3. 查找联系人

* 功能描述:按照指定的姓名查找联系人
* 实现步骤:* 封装查找联系人函数
//检测联系人是否存在,如果存在就返回联系人在通讯录中的位置,否则就返回-1
int isEmpty(Addressbooks *abs,string name)
{for (int i = 0; i < abs->size; i++){if (abs->personArray[i].m_name == name)return i;}return -1;
}//4.查找联系人
void findPerson(Addressbooks *abs)
{cout <<"请输入要查找的联系人姓名:"<< endl;string name;cin >> name;int ret=isEmpty(abs,name);if (ret == -1)cout <<"查无此人!"<< endl;else{cout <<"姓名:"<< abs->personArray[ret].m_name << "\t";cout <<"性别:"<< (abs->personArray[ret].m_sex == 1 ? "男" : "女") << "\t";cout <<"年龄:"<< abs->personArray[ret].m_age << "\t";cout <<"联系电话:"<< abs->personArray[ret].m_phonenum << "\t";cout <<"住址:"<< abs->personArray[ret].m_address << endl;}
}
    * 测试查找联系人函数

4. 删除联系人

* 功能描述:根据姓名删除联系人
* 实现步骤:* 检测联系人是否存在* 封装删除联系人函数
//3.删除联系人
void deletePerson(Addressbooks *abs)
{cout <<"输入要删除的联系人姓名:"<< endl;string name;cin >> name;//ret=-1没查到、否则查到了int ret=isEmpty(abs,name);if (ret == -1)cout <<"查无此人!"<< endl;else{cout <<"查到此人!"<< endl;cout <<"是否删除 "<< abs->personArray[abs->size].m_name <<" 的相关信息"<< endl;cout <<"1---Yes"<< endl;cout <<"0---No"<< endl;int flag=0;cin >> flag;if (flag==1){//数据前移for (int i = ret; i < abs->size-1; i++)abs->personArray[i]=abs->personArray[i+1];abs->size--;//更新通讯录中的人数cout <<"操作成功!"<< endl;}}
}
    * 测试联系人函数功能

5. 修改联系人

* 功能描述:按照联系人姓名修改相关信息
* 实现步骤:* 封装修改联系人函数
//5.修改指定联系人
void modifyPerson(Addressbooks *abs)
{cout <<"请输入要修改的联系人姓名:"<< endl;string name;cin >> name;int ret=isEmpty(abs,name);if (ret == -1)cout <<"查无此人!"<< endl;else{string name;cout <<"请输入联系人姓名:" << endl;cin >> name;abs->personArray[ret].m_name = name;//修改性别int sex;cout <<"请输入性别:" << endl;cout <<"1---男" << endl;cout <<"0---女" << endl;while (true){cin >> sex;//如果不是0或1则输入形式错误if (sex==1||sex==0){abs->personArray[ret].m_sex=sex;break;}cout <<"输入有误,请重新输入:" << endl;}//修改年龄int age;cout <<"请输入年龄:" << endl;cin >> age;abs->personArray[ret].m_age = age;//修改联系电话string phonenum;cout <<"请输入联系方式:" << endl;cin >> phonenum;abs->personArray[ret].m_phonenum = phonenum;//修改地址string address;cout <<"请输入地址:" << endl;cin >> address;abs->personArray[ret].m_address = address;}system("pause");system("cls");
}
    * 测试修改联系人功能

6. 清空联系人

* 功能描述:将通讯录逻辑清空
* 将通讯录联系人数量清空即可
//清空通讯录
void cleanPerson(Addressbooks *abs)
{abs->size=0;cout <<"通讯录已清空!"<< endl;system("pause");system("cls");
}

7. 退出系统

8.源代码

源码上传到Gitee(contact_management_system)上了,需要的自取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15360.html

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

相关文章

jupyterLab插件开发

jupyter lab安装、配置&#xff1a; jupyter lab安装、配置教程_容器里装jupyterlab-CSDN博客 『Linux笔记』服务器搭建神器JupyterLab_linux_布衣小张-腾讯云开发者社区 Jupyter Lab | 安装、配置、插件推荐、多用户使用教程-腾讯云开发者社区-腾讯云 jupyterLab插件开发教…

使用LLaMA Factory踩坑记录

前置条件&#xff1a;电脑显卡RTX 4080 问题&#xff1a;LLaMA-Factory在运行的时候&#xff0c;弹出未检测到CUDA的报错信息 结论&#xff1a;出现了以上的报错&#xff0c;主要可以归结于以下两个方面&#xff1a; 1、没有安装GPU版本的pytorch&#xff0c;下载的是CPU版本…

『Apisix进阶篇』结合Consul作服务发现实战演练

文章目录 一、引言二、APISIX与Consul集成2.1 环境准备2.2 配置Consul服务发现2.2.1 修改APISIX配置文件2.2.2 重启APISIX 2.3 在路由中使用Consul服务发现2.3.1 创建路由2.3.2 验证路由 2.4 高级配置2.4.1 服务过滤2.4.2 多数据中心支持 三、总结 &#x1f4e3;读完这篇文章里…

SpringBoot速成(八)登录实战:未登录不能访问 P5-P8

1.登录 package com.itheima.springbootconfigfile.controller;import com.itheima.springbootconfigfile.pojo.Result; import com.itheima.springbootconfigfile.pojo.User; import com.itheima.springbootconfigfile.service.UserService;import com.itheima.springbootco…

对接DeepSeek

其实&#xff0c;整个对接过程很简单&#xff0c;就四步&#xff0c;获取key&#xff0c;找到接口文档&#xff0c;接口测试&#xff0c;代码对接。 获取 KEY https://platform.deepseek.com/transactions 直接付款就是了&#xff08;现在官网暂停充值2025年2月7日&#xff0…

ASP.NET Core JWT

目录 Session的缺点 JWT&#xff08;Json Web Token&#xff09; 优点&#xff1a; 登录流程 JWT的基本使用 生成JWT 解码JWT 用JwtSecurityTokenHandler对JWT解码 注意 Session的缺点 对于分布式集群环境&#xff0c;Session数据保存在服务器内存中就不合适了&#…

【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库

**前言&#xff1a;**本节内容介绍使用C/C访问数据库&#xff0c; 包括对数据库的增删查改操作。 主要是学习一些接口的调用&#xff0c; 废话不多说&#xff0c; 开始我们的学习吧&#xff01; ps:本节内容比较容易&#xff0c; 友友们放心观看哦&#xff01; 目录 准备mysql…

postgreSQL16.6源码安装

1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…

音频进阶学习十一——离散傅里叶级数DFS

文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1&#xff09;右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn​)的释义 ∑ n 0 N − 1 e…

【kafka系列】Topic 与 Partition

Kafka 的 Topic&#xff08;主题&#xff09; 和 Partition&#xff08;分区&#xff09; 是数据组织的核心概念&#xff0c;它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。以下是详细解析&#xff1a; 一、Topic 与 Partition 的映射关系 Top…

卷积神经网络CNN如何处理语音信号

卷积神经网络&#xff08;CNN&#xff09;在处理语音数据时通常不直接处理原始的一维波形信号&#xff0c;而是处理经过预处理的二维语音特征图。以下是CNN处理语音数据时的常见数据类型和步骤&#xff1a; 1. 语音信号预处理 语音信号通常是一维的时间序列&#xff08;波形信…

【MQ】Spring3 中 RabbitMQ 的使用与常见场景

一、初识 MQ 传统的单体架构&#xff0c;分布式架构的同步调用里&#xff0c;无论是方法调用&#xff0c;还是 OpenFeign 难免会有以下问题&#xff1a; 扩展性差&#xff08;高耦合&#xff0c;需要依赖对应的服务&#xff0c;同样的事件&#xff0c;不断有新需求&#xff0…

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览&#xff1a; 国家标准|GB/T 43698-2024 相关标准&#xff1a; &a…

Linux系统-centos防火墙firewalld详解

Linux系统-centos7.6 防火墙firewalld详解 1 firewalld了解 CentOS 7.6默认的防火墙管理工具是firewalld&#xff0c;它取代了之前的iptables防火墙。firewalld属于典型的包过滤防火墙或称之为网络层防火墙&#xff0c;与iptables一样&#xff0c;都是用来管理防火墙的工具&a…

Gitlab中如何进行仓库迁移

需求&#xff1a;之前有一个自己维护的新仓库A&#xff0c;现在需要将这个仓库提交并覆盖另一个旧的仓库B&#xff0c;需要保留A中所有的commit信息。 1.方法一&#xff1a;将原有仓库A导出后再导入到新的仓库B中 适用场景&#xff1a;新的仓库B是一个待建仓库&#xff0c;相当…

微信点餐系统小程序ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

01单片机上电后没有正常运行怎么办

单片机上电后没有运转, 首先要检查什么? 1、单片机供电是否正常? &电路焊接检查 如果连最基本的供电都没有,其它都是空谈啊!检查电路断路了没有?短路了没有?电源合适吗?有没有虚焊? 拿起万用表之前,预想一下测量哪里?供电电压应该是多少?对PCB上电压测量点要…

【Java基础】为什么不支持多重继承?方法重载和方法重写之间区别、Exception 和 Error 区别?

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Java基础面经 &#x1f4da;本系列文章为个…

c++ haru生成pdf输出饼图

#define PI 3.14159265358979323846 // 绘制饼图的函数 void draw_pie_chart(HPDF_Doc pdf, HPDF_Page page, float *data, int data_count, float x, float y, float radius) { float total 0; int i; // 计算数据总和 for (i 0; i < data_count; i) { tot…

Linux 创建进程 fork()、vfork() 与进程管理

Linux 创建进程 fork、vfork、进程管理 一、Linux的0号、1号、2号进程二、Linux的进程标识三、fork() 函数1、基本概念2、函数特点3、用法以及应用场景&#xff08;1&#xff09;父子进程执行不同的代码&#xff08;2&#xff09;进程执行另一个程序 4、工作原理 四、vfork() 函…