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

news2024/11/29 11:45:22

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


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

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录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();
}

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

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

相关文章

BuhoCleaner for Mac:彻底改变您的Mac清理体验

BuhoCleaner for Mac是一款专为Mac用户打造的清理工具&#xff0c;它可以帮助您清理无用的文件、缓存、日志和其他垃圾&#xff0c;从而释放磁盘空间并提高系统性能。这款工具具有简单易用的界面和强大的清理功能&#xff0c;是Mac用户必备的清理工具之一。 特点 简单易用的界…

3D RPG Course | Core 学习日记四:鼠标控制人物移动

前言 前边我们做好了Navgation智能导航地图烘焙&#xff0c;并且设置好了Player的NavMeshAgent&#xff0c;现在我们可以开始实现鼠标控制人物的移动了。除了控制人物移动以外&#xff0c;我们还需要实现鼠标指针的变换。 实现要点 要实现鼠标控制人物移动&#xff0c;点击…

VHDL基础知识笔记(1)

1.实体&#xff1a;其电路意义相当于器件&#xff0c;它相当于电路原理图上的元器件符号。它给出了器件的输入输出引脚。实体又被称为模块。 2.结构体&#xff1a;这个部分会给出实体&#xff08;或者说模块&#xff09;的具体实现&#xff0c;指定输入和输出的行为。结构体的…

十分钟搭建自己的在线书库随时随地看小说,Kindle不再盖泡面!

Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01; 文章目录 Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01;1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

5K买的300集全套JAVA面试视频、10W+字文档成功上岸一线互联网大厂

前言&#xff1a; 今年这情况&#xff0c;真心建议所有 Java 后端不要随便被“行情差洗脑”&#xff01; 目前职友集上搜到的 java 岗位仍有22万&#xff0c;招聘需求相比其他行业不算少&#xff01; 大家最应该关注的是&#xff1a;自身技术硬度如何&#xff1f; 毕竟不管在…

Redis学习(十)RedisTemplate 对各种数据类型的支持

目录 一、SpringDataRedis 简介1.1 什么是 Redis&#xff1f;1.2 什么是 Jedis&#xff1f;1.3 什么是 Spring Data Redis&#xff1f; 二、RedisTemplate 中 API 使用2.1 pom.xml 依赖2.2 配置文件2.3 RedisTemplate 的直接方法2.4 String 类型相关操作2.5 Hash 类型相关操作2…

台灯选用什么类型好?双十一值得入手的护眼台灯推荐

如何给孩子挑选一盏能够护眼的台灯一直是许多家长都为之头痛的一大难题&#xff0c;主要是如今市面上的台灯实在太多了&#xff0c;而且迭代速度非常快&#xff0c;再加上这些产品中还混杂了许多不专业品牌、网红产品和低价劣质产品等等&#xff0c;想要挑选到一款好的台灯确实…

MVC模式和三层架构:

MVC模式&#xff1a; M&#xff1a;Model&#xff0c;业务模型&#xff0c;处理业务 V&#xff1a;View&#xff0c;视图&#xff0c;界面展示 C&#xff1a;Controller&#xff0c;控制器&#xff0c;处理请求&#xff0c;调用模型和视图 MVC优点&#xff1a; 职责单一&am…

C++ Lambda表达式 在竞赛中提高你的代码连贯性

本文中的lambda表达式使用方式应该在目前的所有比赛中&#xff08;C11及以上&#xff09;都是可以使用的&#xff0c;因为比较落后的蓝桥杯都更新到了C14。 当题目做的越来越多&#xff0c;难度越来越大&#xff0c;相应的代码就会越来越长&#xff0c;通常在100行左右。 在行…

你的GPU能跑Llama 2等大模型吗?用这个开源项目上手测一测

你的 GPU 内存够用吗&#xff1f;这有一个项目&#xff0c;可以提前帮你查看。 在算力为王的时代&#xff0c;你的 GPU 可以顺畅的运行大模型&#xff08;LLM&#xff09;吗&#xff1f; 对于这一问题&#xff0c;很多人都难以给出确切的回答&#xff0c;不知该如何计算 GPU 内…

云栖大会72小时沉浸式精彩回顾

计算&#xff0c;为了无法计算的价值 2023 杭州云栖大会震撼落幕 自2015年&#xff0c;云计算支撑着移动互联网创新 AI时代&#xff0c;继续支撑所有开发者的创新与梦想 当大会主题再次回归 让我们也打开时空隧道 一起回顾72小时云栖之旅 打造一朵AI时代最开放的云 随着…

SpringBoot单元测试报错“Error creating bean with name ‘serverEndpointExporter‘ ”

问题场景 在SpringBoot中使用单元测试时&#xff0c;出现以下报错&#xff0c;意思是创建名为‘serverEndpointExporter’的bean时出错。 org.springframework.beans.factory.BeanCreationException: Error creating bean with name serverEndpointExporter defined in class…

折叠旗舰新战局:华为先行,OPPO接棒

乌云中的曙光&#xff0c;总能带给人希望。 全球智能手机出货量已经连续八个季度下滑&#xff0c;行业里的乌云挥之不散。不过&#xff0c;也能看到高端市场逆势上涨&#xff0c;散发光亮。个中逻辑在于&#xff0c;当前换机周期已经达到了34个月&#xff0c;只有创新产品才能…

使用R语言构建HTTP爬虫:IP管理与策略

目录 摘要 一、HTTP爬虫与IP管理概述 二、使用R语言进行IP管理 三、爬虫的伦理与合规性 四、注意事项 结论 摘要 本文深入探讨了使用R语言构建HTTP爬虫时如何有效管理IP地址。由于网络爬虫高频、大量的请求可能导致IP被封禁&#xff0c;因此合理的IP管理策略显得尤为重要…

简单的nvm语法

文章目录 导文常用的nvm语法 导文 nvm&#xff08;Node Version Manager&#xff09;是一个用于管理Node.js版本的工具&#xff0c;它提供了一些简单的命令来操作Node.js的安装、切换和管理。 常用的nvm语法 这些命令可以在终端中执行&#xff0c;以方便地进行Node.js版本的管…

汇编-DUP操作符

DUP操作符使用整数表达式作为计数器&#xff0c; 为多个数据项分配存储空间。 在为字符串或数组分配存储空间时&#xff0c;这个操作符尤其有用&#xff0c;并且可以使用初始化或非初始化数据&#xff1a; .data BYTE 20 DUP(0) ;20个字节&#xff0c;都等于0 BYTE 20 …

C++入门学习(2)缺省参数

前言 继上回我们学习了命名空间和在C里面的输入输出之后&#xff0c;我们知道了命名空间可以解决C语言命名冲突的问题&#xff0c;也简单掌握了命名空间的使用&#xff0c;我们已经可以写出简单的C代码&#xff0c;所以大家还是要继续练习敲代码&#xff0c;提高语感。 #includ…

再谈Android重要组件——Handler(Native篇)

前言 最近工作比较忙&#xff0c;没怎么记录东西了。Android的Handler重要性不必赘述&#xff0c;之前也写过几篇关于hanlder的文章了&#xff1a; Handler有多深&#xff1f;连环二十七问Android多线程&#xff1a;深入分析 Handler机制源码&#xff08;二&#xff09; And…

构建金融新核心生态!金融级数字底座“源启”与易捷行云可进化数字原生平台完成互认证

近日&#xff0c;金融级数字底座“源启”顺利与易捷行云可进化数字原生云平台V6完成互认证。易捷行云云平台V6可支持金融机构核心应用实现高速响应、秒级扩容&#xff0c;并切实保障银行核心系统安全稳定&#xff0c;符合“源启”金融级数字底座&#xff08;2.0版&#xff09;技…

开源Open JDK哪家强?Oracle JDK替代解决方案盘点

开源Open JDK哪家强&#xff1f;Oracle JDK替代解决方案盘点 1.1 引言1.2 Open JDK 版本分支1.3 Open JDK 选择推荐1.3.1 Liberica JDK 是什么&#xff1f;1.3.2 Oracle JDK、 OpenJDK 和Liberica JDK 之间有什么区别&#xff1f;1.3.2 OpenJDK 和 Liberica JDK 一样吗&#xf…