c++通讯录管理系统

2023-11-19

系统需求

在这里插入图片描述

代码

#include<iostream>
#include<string>
#define MAX 1000
using namespace std;


//联系人的结构体
struct Person
{
	string m_name;
	int m_sex;//1男2女
	int m_age;
	string m_phone;
	string m_address;;
};


//通讯录的结构体
struct AddressBook {
	Person personArray[MAX];
	int currentNum;
};


//显示菜单的函数
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;
}


//添加联系人
void addPerson(AddressBook* p_book) {
	if (p_book->currentNum == MAX) {
		cout << "通讯录已存满,添加失败" << endl;
		return;
	}
	else {
		//添加姓名
		cout << "请输入联系人的姓名" << endl;
		cin >> p_book->personArray[p_book->currentNum].m_name;
		//性别
		int sex = 0;
		while (sex!=1 && sex!=2)
		{
			cout << "请输入联系人的性别(1:男/2:女)" << endl;
			cin >> sex;
		}
		p_book->personArray[p_book->currentNum].m_sex = sex;
		//年龄
		int age = 0;
		do
		{
			cout << "请输入联系人的年龄" << endl;
			cin >> age;
		} while (age<=0 || age>150);
		p_book->personArray[p_book->currentNum].m_age = age;
		//电话
		cout << "请输入联系人的电话" << endl;
		cin >> p_book->personArray[p_book->currentNum].m_phone;
		//地址
		cout << "请输入联系人的地址" << endl;
		cin >> p_book->personArray[p_book->currentNum].m_address;

		cout << "添加成功" << endl;
		p_book->currentNum++;
		system("pause");
		system("cls");
	}
}


//显示联系人
void showPerson(AddressBook* p_book) {
	if (p_book->currentNum == 0) {
		cout << "通讯录为空" << endl;
		system("pause");
		system("cls");
		return;
	}
	else {
		for (int i = 0; i < p_book->currentNum; i++) {
			cout << "姓名:" << p_book->personArray[i].m_name
				<< "\t性别:" << (p_book->personArray[i].m_sex==1?"男":"女")
				<< "\t年龄:" << p_book->personArray[i].m_age
				<< "\t电话:" << p_book->personArray[i].m_phone
				<< "\t住址:" << p_book->personArray[i].m_address << endl;
		}
		system("pause");
		system("cls");
	}
}


//检测联系人是否存在
int isExist(AddressBook* p_book, string name) {
	for (int i = 0; i < p_book->currentNum; i++) {
		if (p_book->personArray[i].m_name == name) {
			return i;
		}
	}
	return -1;
}


//删除联系人
void deletePerson(AddressBook* p_book) {
	string name;
	cout << "请输入要删除的联系人" << endl;
	cin >> name;
	int index = isExist(p_book, name);
	if (index == -1) {
		cout << "查无此人" << endl;
		system("pause");
		system("cls");
		return;
	}
	else {
		for (int i = index; i < p_book->currentNum; i++) {
			p_book->personArray[i] = p_book->personArray[i + 1];
		}
		p_book->currentNum--;
		cout << "删除成功" << endl;
		system("pause");
		system("cls");
	}
}


//查找联系人
void searchPerson(AddressBook* p_book) {
	string name;
	cout << "请输入待查找的联系人的姓名" << endl;
	cin >> name;
	int index = isExist(p_book, name);
	if (index != -1) {
		cout << "查找成功" << endl;
		cout << "姓名:" << p_book->personArray[index].m_name
			<< "\t性别:" << (p_book->personArray[index].m_sex == 1 ? "男" : "女")
			<< "\t年龄:" << p_book->personArray[index].m_age
			<< "\t电话:" << p_book->personArray[index].m_phone
			<< "\t住址:" << p_book->personArray[index].m_address << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}


//修改联系人
void modifyPerson(AddressBook* p_book) {
	string name;
	cout << "请输入待修改的联系人的姓名" << endl;
	cin >> name;
	int index = isExist(p_book, name);

	if (index != -1) {
		cout << "请输入修改后联系人的姓名" << endl;
		cin >> p_book->personArray[index].m_name;
		cout << "请输入修改后联系人的性别(1男2女)" << endl;
		int sex = 0;
		while (true) {
			cin >> sex;
			if (sex == 1 || sex == 2) {
				p_book->personArray[index].m_sex = sex;
				break;
			}
			cout << "请输入正确的性别" << endl;
		}
		cout << "请输入修改后联系人的年龄" << endl;
		cin >> p_book->personArray[index].m_age;
		cout << "请输入修改后联系人的电话" << endl;
		cin >> p_book->personArray[index].m_phone;
		cout << "请输入修改后联系人地址" << endl;
		cin >> p_book->personArray[index].m_address;

		cout << "修改成功" << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}


//清空联系人
void cleanPerson(AddressBook* p_book) {
	cout << "是否确认清空(y/n)" << endl;
	char select;
	cin >> select;

	if (select == 'y') {
		p_book->currentNum = 0;
		cout << "清空成功" << endl;
	}
	else if (select == 'n') {
		cout << "退出清空界面" << endl;
		system("pause");
		system("cls");
		return;
	}
	else {
		cout << "输入错误,请重新输入" << endl;
	}
	system("pause");
	system("cls");
}


int main() {
	int select = 0;
	AddressBook book;
	book.currentNum = 0;

	while (true) {
		ShowMenu();
		cin >> select;
		switch (select)
		{
		case 1://1.添加联系人
			addPerson(&book);
			break;
		case 2://2.显示联系人
			showPerson(&book);
			break;
		case 3://3.删除联系人
			deletePerson(&book);
			break;
		case 4://4.查找联系人
			searchPerson(&book);
			break;
		case 5://5.修改联系人
			modifyPerson(&book);
			break;
		case 6://6.清空联系人
			cleanPerson(&book);
			break;
		case 0://0.退出通讯录
			cout << "欢迎下次使用" << endl;
			system("pause");
			return 0;
		default:
			break;
		}
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++通讯录管理系统 的相关文章

  • 函数“sum”的隐式声明在 C99 中无效

    我一直在寻找解决方案 但没有找到任何有帮助的东西 我收到以下错误 Implicit declaration of function sum is invalid in C99 Implicit declaration of function
  • 为什么模板类的静态成员不唯一

    看一下下面的代码 include
  • 如何从对Web服务发出的请求中获取客户端IP地址

    我的 IIS 中托管有一个 Web 服务 当客户端直接使用我的服务时 我需要找出客户端 IP 地址 like http MyIpAddress MyApplication MyWebServiceClass asmx http MyIpAd
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • 如何准备sql语句并绑定参数?

    不幸的是 文档 http www sqlite org完全缺乏示例 这真的很奇怪 就好像它假设所有读者都是优秀的程序员一样 然而 我对C 并且无法真正从文档中弄清楚如何真正准备和执行语句 我喜欢它的实施方式PDO for PHP 通常 我只
  • C++ 中可以使用匿名类作为返回类型吗?

    有没有办法在 C 中使用匿名类作为返回类型 我用谷歌搜索这可能有效 struct Test fun 但是这段代码无法编译 错误信息是 新类型不能在返回类型中定义 其实代码没有任何意义 我只是想弄清楚匿名类是否可以用作C 中的返回类型 这是我
  • 在 T4 代码生成中,如何从引用的程序集中获取类型?

    由于 T4 在项目上下文之外运行 因此我无权访问当前程序集或其他程序集 如何注册对引用程序集的访问 然后从中获取类型 我猜您想访问项目中建筑物的程序集 我在下面的示例代码中所做的是将一个名为 TestLib 的项目添加到我的解决方案中 我将
  • C 中的双重否定:是否保证返回 0/1?

    Is x 标准保证返回0 1 请注意 我是not询问 C 其中定义了 bool 类型 是的 在 C99 中 请参阅 6 5 3 3 4 逻辑非运算符的结果 是0如果其操作数的值比较 不等于0 1如果其操作数的值比较等于 0 结果具有类型in
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • VS C# 中的依赖地狱,找不到依赖项

    我创建了一个图表 C 库 我们称之为chartlibrary 它本身依赖于多个第三方 dll 文件 在另一个可执行项目中 我们称之为chartuser 我参考了chartlibrary项目 两个项目位于 Visual Studio 中的同一
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • 我应该使用 Helgrind 还是 DRD 进行线程错误检测?

    好像Valgrind http valgrind org docs manual manual html有两个工具都可以进行线程错误检测 Helgrind http valgrind org docs manual hg manual ht
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • 从 cin 读取整数序列并将它们存储在向量中

    这就是我读取整数的方法std cin并将它们存储在向量中 int number vector
  • 什么是 C++11 扩展 [-Wc++11-extensions]

    我需要一些帮助来了解此错误发生的位置 警告 非静态数据成员的类内初始化是 C 11 扩展 Wc 11 extensions 这是它来自的代码部分 typedef struct Hand bool straight false bool fl
  • 在 C++ 中什么时候首选传递指针而不是引用传递?

    我可以想象一种情况 其中输入参数可以为 NULL 以便首选传递指针而不是传递引用 有人可以添加更多案例吗 在传递的对象实际上将被修改的情况下 有些人更喜欢传递指针 当对象通过引用传递时 它们使用 pass by const referenc
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐

  • Mysql主从复制

    Mysql主从复制原理 1 主库开始二进制日志 binlog 2 从库执行change master 执行主库 此时主库会创建一个dump线程 用于向从库发送二进制日志 3 从库执行 start slave 开启IO SQL线程 IO线程
  • 搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了

    点击上方 视学算法 选择加 星标 或 置顶 重磅干货 第一时间送达 作者丨科技猛兽 编辑丨极市平台 Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型 现在比较火热的 Bert 也是基于 Trans
  • QFileInfo主要函数详解

    部分内容来自 https blog csdn net Amnes1a article details 65444966 QFileInfo主要函数详解 QFileInfo简介 扩展 文件名和路径类 文件访问权限类 文件所有者类 文件相关日期
  • 将XML格式文件转换JSON文件格式

    XMl文件转JSON字符串 1 1Maven引入依赖
  • 光栅尺的相关知识

    光栅尺的相关知识 1 光栅尺的原理 2 光栅尺的精度 3 光栅尺的制造 4 增量式光栅尺和绝对式光栅尺的区别 5 光栅尺的选择 6 光栅尺与编码器 1 光栅尺的原理 我们可以类比普通卷尺 尺子上面有刻度 以这些刻度作为基准 你只需要把要测的
  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • [机缘参悟-86]:清心寡欲,世外修行 ?负剑下山,闯荡江湖?

    天地者 万物之逆旅也 光阴者 百代之过客也 而浮生若梦 为欢几何
  • Android Fragment 真正的完全解析(下)

    本篇将介绍上篇博客提到的 如何管理Fragment回退栈 Fragment如何与Activity交互 Fragment与Activity交互的最佳实践 没有视图的Fragment的用处 使用Fragment创建对话框 如何与ActionBa
  • 5月10日 ksjsb抓包教程,小黄鸟无需ROOT抓包

    1 先下载抓包工具 小黄鸟 自己搜索 注意 这里下载完小黄鸟app后 安装打开时 该下载的安全证书下载 手机root权限该给的都给 2 打开小黄鸟工具 添加目标应用 快手极速版 3 启动小黄鸟 然后退出让它后台运行 打开快手极速版到菜单栏找
  • Windows下PP-Tracking多目标跟踪数据训练

    PP Tracking之手把手玩转多目标跟踪 飞桨AI Studio 人工智能学习与实训社区PP Tracking之手把手玩转多目标跟踪 飞桨AI Studio 人工智能学习与实训社区https aistudio baidu com ais
  • IDEA2023.1.3自带插件禁用,减少内存占用

    前言 前两个星期安装了idea2023 1 3 之前用的一直是idea2020 3版本 我发现新版界面确实更好看一些 而且启动速度也非常快 打开多个项目也一样很快 都是秒开 但是吧 它的内存占用比idea2020 3版高了很多 刚打开的时候
  • TensorRT Samples: GoogleNet

    关于TensorRT的介绍可以参考 http blog csdn net fengbingchun article details 78469551 以下是参考TensorRT 2 1 2中的sampleGoogleNet cpp文件改写的
  • 【前端面经】instanceof相关知识

    原理 instanceof是javascript语言中的一个运算符 用于检测一个对象是否是一个类或者构造函数的实例 它的语法是boject instanceof constructor 其中object是要检测的对象 constructor
  • JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现

    JS常见加密 AES DES RSA MD5 SHAI HMAC Base64 Python JS实现 文章目录 JS常见加密 AES DES RSA MD5 SHAI HMAC Base64 Python JS实现 前言 一 编码 加密
  • 数据结构(C语言)——双链表

    有了单链表的编写经验 双链表变得格外容易 点击看前一篇 单链表 下面是代码 include
  • 三类XML文件的解析方法

    XML文件的解析 mybatis的学习当中 配置的加载传统的是通过解析用户配置的文件 获取到数据库连接与对象实体映射关系的 书中有描述到DOM SAX StAX 几种方案 一方面是夯实基础 一方面是了解三种方法的优缺点 今天就学习一下XML
  • 创建类似软键盘的无焦点对话框程序

    如果想创建一个类似windows里的屏幕键盘式的程序 由于需要将模拟键盘的输入发送到原来处于活动状态的程序 因此 我们的程序应该不改变原来的焦点 在vc6和vc 中可以通过以下方式实现 1 VC6 0中 在对话框的OnInitDialog
  • MQ如何保证消息的顺序一致性问题?

    产生原因 MQ服务器集群化或MQ采用分区模型架构来存放消息 每个分区对于一个消费者消费消息 解决消息一致性问题 核心思想 消息一定要投递到同一个MQ 且是同一个分区模型且被用一个消费者消费 可以根据消息key对分区模型总数取余来实现 1 大
  • 【云原生•监控】基于Prometheus的云原生集群监控(理论+实践)-03

    云原生 监控 基于Prometheus的云原生集群监控 理论 实践 03 k8s服务组件指标 kubernetes云原生集群作为大规模多节点容器调度平台 在交付和部署上的巨大优势逐渐让其称为一种技术趋势 如基于工作负载快速进行扩 缩容 故障
  • c++通讯录管理系统

    系统需求 代码 include