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

C++编程案例讲解-基于结构体的控制台通讯录管理系统

基于结构体的控制台通讯录管理系统


通讯录是一个可以记录亲人、好友信息的工具,系统中需要实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  • 显示联系人:显示通讯录中所有的联系人信息
  • 删除联系人:按照姓名进行删除指定联系人信息
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有的信息
  • 退出通信录:退出当前使用的通讯录

使用结构体记录联系人信息,在控制台中展示所有的操作流程

系统代码结构
控制台通讯录管理系统文件结构

  • ad_book.h
#pragma once
#include <iostream>
#include "string"using namespace std;struct Address_Book;//添加联系人方法
void Add();//打印共有多少联系人方法
void Print_Info();//显示通讯录所有联系人信息
void Show();//显示目标Address_Book结构体中的联系人信息
void Show(Address_Book* address_book);//查找联系人信息
void Find();//根据联系人姓名查找联系人信息
int Find(string name);//删除联系人方法
void Delete();//清空联系人
void Clear();//修改联系人信息
void Update();//菜单展示
void Show_Menu();
  • ad_book.cpp
#include <iostream>
#include "string"
#include "ad_book.h"using namespace std;//联系人最大支持的数量定义
#define MAX_LEN 1000//通讯录记录信息的结构体
struct Address_Book
{//姓名string name;//性别string gender;//年龄int age = 0;//联系电话string phone;//家庭住址string address;};//联系人记录结构
static Address_Book address_book_array[MAX_LEN];//当前共有联系人数量
static int Now_Size = 0;//添加联系人方法
void Add()
{std::cout << "-------------------------------------------------------------------------------" << std::endl;Address_Book address_book;//打印输出添加各项信息的提示std::cout << "请输入您要添加的联系人姓名:" << std::endl;std::cin >> address_book.name;std::cout << "请输入您要添加的联系人性别:" << std::endl;std::cin >> address_book.gender;std::cout << "请输入您要添加的联系人年龄:" << std::endl;std::cin >> address_book.age;std::cout << "请输入您要添加的联系人联系电话:" << std::endl;std::cin >> address_book.phone;std::cout << "请输入您要添加的联系人家庭住址:" << std::endl;std::cin >> address_book.address;address_book_array[Now_Size++] = address_book;std::cout << "-------------------------------------------------------------------------------" << std::endl;Print_Info();
}//打印输出当前共有多少的联系人信息
void Print_Info()
{std::cout << "-------------------------------------------------------------------------------" << std::endl;std::cout << "当前共有:" << Now_Size << " 个联系人 " << std::endl;std::cout << "-------------------------------------------------------------------------------" << std::endl;
}//显示通讯录所有联系人信息
void Show()
{std::cout << "-------------------------------------------------------------------------------" << std::endl;for (int i = 0; i < Now_Size; i++){Show(&(address_book_array[i]));}std::cout << "-------------------------------------------------------------------------------" << std::endl;
}//显示目标Address_Book结构体中的联系人信息
void Show(Address_Book* address_book)
{std::cout << "姓名: " << address_book->name << " 性别: " << address_book->gender << " 年龄: " << address_book->age << " 联系电话: " << address_book->phone << "家庭住址: " << address_book->address << std::endl;
}//查找联系人信息
void Find()
{std::cout << "-------------------------------------------------------------------------------" << std::endl;std::cout << "请输入您要查找的目标联系人姓名:" << std::endl;string wait_find_name;std::cin >> wait_find_name;Find(wait_find_name);std::cout << "-------------------------------------------------------------------------------" << std::endl;
}//根据联系人姓名查找联系人信息
int Find(string name)
{for (int i = 0; i < Now_Size; i++){if (address_book_array[i].name == name){Show(&address_book_array[i]);return i;}}std::cout << "用户姓名:" << name << " 对应的联系人信息未查找到!" << std::endl;return -1;
}//删除联系人方法
void Delete()
{std::cout << "-------------------------------------------------------------------------------" << std::endl;std::cout << "请输入您要删除的目标联系人姓名:" << std::endl;string wait_delete_name;std::cin >> wait_delete_name;int wait_delete_index = Find(wait_delete_name);if (wait_delete_index >= 0){//把后面的内容交换到前面for (int i = wait_delete_index; i < Now_Size; i++){address_book_array[i] = address_book_array[i + 1];}}Now_Size--;std::cout << "-------------------------------------------------------------------------------" << std::endl;
}//清空联系人
void Clear()
{*address_book_array = {};Now_Size = 0;std::cout << "联系人清空完毕!" << std::endl;
}//修改联系人信息
void Update()
{std::cout << "-------------------------------------------------------------------------------" << std::endl;std::cout << "请输入您要修改的目标联系人姓名:" << std::endl;string wait_update_name;std::cin >> wait_update_name;int wait_update_index = Find(wait_update_name);if (wait_update_index >= 0){Address_Book address_book;std::cout << "请输入您要修改的联系人姓名:" << std::endl;std::cin >> address_book.name;std::cout << "请输入您要修改的联系人性别:" << std::endl;std::cin >> address_book.gender;std::cout << "请输入您要修改的联系人年龄:" << std::endl;std::cin >> address_book.age;std::cout << "请输入您要修改加的联系人联系电话:" << std::endl;std::cin >> address_book.phone;std::cout << "请输入您要修改的联系人家庭住址:" << std::endl;std::cin >> address_book.address;address_book_array[wait_update_index] = address_book;}std::cout << "-------------------------------------------------------------------------------" << std::endl;
}//菜单展示
void Show_Menu()
{while (true){std::cout << "-------------------------------------------------------------------------------" << std::endl;std::cout << "欢迎来到通讯录管理系统,当前通讯录共有 " << Now_Size << " 个联系人!" << std::endl;std::cout << "请选择您当前要进行的操作:" << std::endl;std::cout << "A:添加联系人" << std::endl;std::cout << "S:显示所有联系人" << std::endl;std::cout << "D:删除联系人" << std::endl;std::cout << "F:查找联系人" << std::endl;std::cout << "U:修改联系人" << std::endl;std::cout << "C:清空联系人" << std::endl;std::cout << "E:退出当前系统" << std::endl;char input;std::cin >> input;switch (input){case 'A': Add(); break;case 'S': Show(); break;case 'D': Delete(); break;case 'F': Find(); break;case 'U': Update(); break;case 'C': Clear(); break;case 'E': exit(0);}std::cout << "-------------------------------------------------------------------------------" << std::endl;}
}
  • Main.cpp
#include <iostream>
#include <ctime>#include "ad_book.h"int main()
{Show_Menu();
}

相关文章:

C++编程案例讲解-基于结构体的控制台通讯录管理系统

基于结构体的控制台通讯录管理系统 通讯录是一个可以记录亲人、好友信息的工具&#xff0c;系统中需要实现的功能如下&#xff1a; 添加联系人&#xff1a;向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名、性别、年龄、联系电话、家庭住址&#xff09;最多记录1000人…...

ASP.NETCore6开启文件服务允许通过url访问附件(图片)

需求背景 最近在做一个工作台的文件上传下载功能&#xff0c;主要想实现上传图片之后&#xff0c;可以通过url直接访问。由于url直接访问文件不安全&#xff0c;所以需要手动开启文件服务。 配置 文件路径如下&#xff0c;其中Files是存放文件的目录&#xff1a; 那么&…...

python爬取Web of science论文信息

一、python爬取WOS总体思路 (一)拟实现功能描述 wos里面&#xff0c;爬取论文的名称&#xff0c;作者名称&#xff0c;作者单位&#xff0c;引用数量 要求&#xff1a;英文论文、期刊无论好坏 检索关键词&#xff1a;zhejiang academy of agricultural sciences、 xianghu lab…...

本地域名 127.0.0.1 / localhost

所谓本地域名就是 只能在本机使用的域名 &#xff0c;一般在开发阶段使用。 编辑文件 C:\Windows\System32\drivers\etc\hosts。 127.0.0.1 www.baidu.com如果修改失败,可以修改该文件的权限。 原理&#xff1a; 在地址栏输入 域名 之后&#xff0c;浏览器会先进行 DNS…...

Python —— 不同类型的数据长度计算方式

在Python 中&#xff0c;不同类型的数据长度计算方式&#xff0c;有何不同&#x1f447; 字符串&#xff08;String&#xff09; my_string "Hello, World!" string_length len(my_string) print("字符串的长度是&#xff1a;", string_length) //输出…...

NowCoder | 环形链表的约瑟夫问题

NowCoder | 环形链表的约瑟夫问题 OJ链接 思路&#xff1a; 创建带环链表带环链表的删除节点 代码如下&#xff1a; #include<stdlib.h>typedef struct ListNode ListNode; ListNode* ListBuyNode(int x) {ListNode* node (ListNode*)malloc(sizeof(ListNode));node…...

华为政企数据中心网络交换机产品集

产品类型产品型号产品说明 核心/汇聚交换机CE8850-EI-B-B0BCloudEngine 8850-64CQ-EI 提供 64 x 100 GE QSFP28&#xff0c;CloudEngine 8800系列交换机是面向数据中心推出的新一代高性能、高密度、低时延灵活插卡以太网交换机&#xff0c;可以与华为CloudEngine系列数据中心…...

多门店自助点餐+外卖二合一小程序源码系统 带完整搭建教程

随着餐饮业的快速发展和互联网技术的不断进步&#xff0c;越来越多的餐厅开始采用自助点餐和外卖服务。市场上许多的外卖小程序APP应运而生。下面罗峰来给大家介绍一款多门店自助点餐外卖二合一小程序源码系统。该系统结合了自助点餐和外卖服务的优势&#xff0c;为餐厅提供了一…...

kafka可视化工具

Offset Explorer kafka可视化工具...

Excel 转 Json 、Node.js实现(应用场景:i18n国际化)

创作灵感来源于在线转换是按照换行符去转换excel内容换行符后很难处理 本文是按单元格转换 const xlsx require(node-xlsx) const fs require(fs) const xlsxData xlsx.parse(./demo.xlsx) // 需要转换的excel文件// 数据处理 方便粘贴复制 const data xlsxData[2].data …...

Redis7--基础篇2(Redis的十大数据类型及常用命令)

1. Redis的十大数据类型及常用命令 Redis是key-value键值对类型的数据库&#xff0c;我们所说的数据类型指的是value的数据类型&#xff0c;key的数据类型都是字符串。 1.1 字符串&#xff08;String&#xff09; string是redis最基本的类型&#xff0c;一个key对应一个val…...

1.HTML中网页介绍

1.网页 1.1 什么是网页 网站是指在因特网上根据一定的规则&#xff0c;使用HTML等制作的用于展示特定内容的相关的网页集合 网页是网站中的一“页”&#xff0c;通常是HTML格式文件&#xff0c;它要通过浏览器来阅读。 网页是构成网站的基本元素&#xff0c;它通常是有图片&am…...

执行sql报错only_full_group_by的解决方法

一、前言 最近老项目换新数据库&#xff08;都是mysql&#xff09;&#xff0c;有些在老数据库可以执行的sql&#xff0c;在新数据库执行就会报错sql_modeonly_full_group_by 意思是说数据库的模式是sql_modeonly_full_group_by&#xff0c;group by的字段必须和查询字段一致…...

不学51直接学stm32可以吗?学stm32需要哪些基础?

不学51直接学stm32可以吗&#xff1f;学stm32需要哪些基础&#xff1f; 不管那些大佬技术多么牛逼&#xff0c;大多数入门都是从51单片机开始。 最近有一些入门的小伙伴问我说看到同学都从直接从STM32开始干了。最近很多小伙伴找我&#xff0c;说想要一些stm32的资料&#xff…...

6.1二叉树的递归遍历(LC144,LC15,LC94)

什么是递归函数&#xff1f; 递归函数是一种函数调用自身的编程技巧。 在递归函数中&#xff0c;函数通过不断调用自身来解决一个问题&#xff0c;直到达到基本情况&#xff08;递归终止条件&#xff09;并返回结果。 递归函数在解决一些问题时非常有用&#xff0c;特别是那些…...

Spring基础(3):复习

为了让大家更容易接受我的一些观点&#xff0c;上一篇很多笔墨都用在了思路引导上&#xff0c;所以导致文章可能比较臃肿。 这一篇来总结一下&#xff0c;会稍微精简一些&#xff0c;但整体趣味性不如第二篇。 (上一篇说过了&#xff0c;目前介绍的2种注入方式的说法其实不够…...

Java-Hbase介绍

1.1. 概念 base 是分布式、面向列的开源数据库&#xff08;其实准确的说是面向列族&#xff09;。HDFS 为 Hbase 提供可靠的 底层数据存储服务&#xff0c;MapReduce 为 Hbase 提供高性能的计算能力&#xff0c;Zookeeper 为 Hbase 提供 稳定服务和 Failover 机制&#xff0c…...

【PHP】【Too few arguments to function Firebase\JWT\JWT::encode()。。。。。。。】

1.安装jwt composer require firebase/php-jwtuse Firebase\JWT\JWT;public function hello($name ThinkPHP5){$secret_key "YOUR_SECRET_KEY";$issuer_claim "THE_ISSUER";$audience_claim "THE_AUDIENCE";$issuedat_claim time(); // is…...

Centos系统上安装包(软件)时常用的命令wget、rpm、yum分别是什么意思和作用?

本文以在Centos上安装mysql-5.7.26的前三步为例&#xff0c;说明命令wget、rpm、yum的意思和作用。 安装mysql-5.7.26的步骤如下&#xff1a; 下载MySQL 5.7.26的RPM存储库文件&#xff1a; wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装R…...

虹科干货 | 旧电脑别急着扔,手把手教你搭建NAS系统存储照片

一、前期准备 我们的目的是让设备物尽其用&#xff0c;将旧电脑做成NAS存储系统后可以使用新电脑进行访问&#xff08;Windows / Linux / IOS系统都可以访问&#xff09;。在开始之前先来看看安装成功效果图吧&#xff01; 1.设备准备 &#xff08;1&#xff09;一台旧电脑&am…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...