C++项目(通讯录管理系统)

系统需求
 通讯录是一个可以记录亲人、好友信息的工具。

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

 系统中需要实现的功能如下:
·添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多   记录1000人

·显示联系人:显示通讯录中所有联系人信息
·删除联系人:按照姓名进行删除指定联系人

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

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

·清空联系人:清空通讯录中所有信息
·退出通讯录:退出当前使用的通讯录

 1.菜单功能

#include<iostream>
using namespace std;

//菜单界面
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;
}

int main() {
	showMenu();
	system("pause");
	return 0;
}

2.退出功能

int main() {
	int select = 0;

	while (1) {
		//菜单调用
		showMenu();

		cin >> select;

		switch (select)
		{
		case 1: //添加联系人
			break;
		case 2: //显示联系人
			break;
		case 3: //删除联系人
			break;
		case 4: //查找联系人
			break;
		case 5: //修改联系人
			break;
		case 6: //清空联系人
			break;
		case 0: //退出通讯录
			cout << "欢迎下次使用,再见。" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}
	system("pause");
	return 0;
}

3.添加联系人

int main() {
	//创建通讯录结构体变量
	Addressbooks abs;
	//初始化通讯录当前个数
	abs.m_Size = 0;
case 1: //添加联系人
	addPerson(&abs);
	break;
#include<iostream>
using namespace std;
#include<string>
#define MAX 1000

//设计联系人结构体
struct Person {
	string m_Name;
	int m_Sex;
	int m_Age;
	string m_Phone;
	string m_Addr;
};

//设计通讯录结构体
struct Addressbooks {
	struct Person Array[MAX];
	int m_Size;
};

//1.添加联系人
void addPerson(Addressbooks* abs) {
	// 判断通讯录是否已满
	if (abs->m_Size == MAX) {
		cout << "通讯录已满,无法添加联系人" << endl;
		return;
	}
	else {
		//添加具体联系人
		//姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->Array[abs->m_Size].m_Name = name;

		//性别
		cout << "请输入性别:" << endl;
		cout << "1-------->男" << endl;
		cout << "2-------->女" << endl;
		int sex = 0;
		while (1) {
			cin >> sex;
			if (sex == 1 || sex == 2) {
				abs->Array[abs->m_Size].m_Sex = sex;
				break;
			}
			else {
				cout << "输入有误,请重新输入" << endl;
			}
		}

		//年龄
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age;
		abs->Array[abs->m_Size].m_Age = age;

		//电话
		cout << "请输入联系电话:" << endl;
		string phone;
		cin >> phone;
		abs->Array[abs->m_Size].m_Phone = phone;

		//住址
		cout << "请输入住址:" << endl;
		string address;
		cin >> address;
		abs->Array[abs->m_Size].m_Addr = address;

		//更新通讯录人数
		abs->m_Size++;

		cout << "添加成功" << endl;

		system("pause");//输入任意键继续
		system("cls"); //清屏

4.显示联系人 

case 2: //显示联系人
	showPerson(&abs);
	break;
//2.显示联系人
void showPerson(Addressbooks *abs) {
	//判断通讯录是否为空
	if (abs->m_Size == 0) {
		cout << "当前通讯录为空" << endl;
	}
	//不空,则显示联系人信息
	else {
		for (int i = 0; i < abs->m_Size; i++) {
			cout << "姓名:" << abs->Array[i].m_Name << "\t";
			cout << "性别:" << (abs->Array[i].m_Sex == 1? "男":"女") << "\t";
			cout << "年龄:" << abs->Array[i].m_Age << "\t";
			cout << "电话:" << abs->Array[i].m_Phone << "\t";
			cout << "地址:" << abs->Array[i].m_Addr << "\t" << endl;
		}
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

 5.删除联系人

case 3: //删除联系人
	deletePerson(&abs);
	break;
//检测联系人是否存在
int isExist(Addressbooks* abs, string name) {
	for (int i = 0; i < abs->m_Size; i++) {
		//找到用户
		if (abs->Array[i].m_Name == name) {
			return i;
		}
	}
	//没有找到用户
	return -1;
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

//3.删除联系人
void deletePerson(Addressbooks* abs) {
	cout << "请输入您要删除的联系人" << endl;
	string name;
	cin >> name;
	//ret == -1 未查到此人
	//ret != -1 查到此人
	int ret = isExist(abs, name);

	if (ret != -1) {
		//删除操作
		for (int i = ret; i < abs->m_Size; i++) {
			//进行前移
			abs->Array[i] = abs->Array[i + 1];
		}
		//更新通讯录中的人数
		abs->m_Size--;
	}
	else {
		cout << "没有查询结果" << endl;
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

 6.查找联系人

case 4: //查找联系人
	findPerson(&abs);
	break;
//4.查找联系人
void findPerson(Addressbooks* abs) {
	cout << "请输入您要查找的联系人" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret != -1) {
		cout << abs->Array[ret].m_Name << "\t";
		cout << abs->Array[ret].m_Sex << "\t";
		cout << abs->Array[ret].m_Age << "\t";
		cout << abs->Array[ret].m_Phone << "\t";
		cout << abs->Array[ret].m_Addr << "\t" << endl;
		}	
	else {
		cout << "对不起,没有此联系人" << endl;
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

7.修改联系人

case 5: //修改联系人
	modifyPerson(&abs);
	break;
//5.修改联系人
void modifyPerson(Addressbooks* abs) {
	cout << "请输入您要修改的联系人" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret != -1) {
		//姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->Array[ret].m_Name = name;

		//性别
		cout << "请输入性别:" << endl;
		cout << "1-------->男" << endl;
		cout << "2-------->女" << endl;
		int sex = 0;
		while (1) {
			cin >> sex;
			if (sex == 1 || sex == 2) {
				abs->Array[ret].m_Sex = sex;
				break;
			}
			else {
				cout << "输入有误,请重新输入" << endl;
			}
		}

		//年龄
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age;
		abs->Array[ret].m_Age = age;

		//电话
		cout << "请输入联系电话:" << endl;
		string phone;
		cin >> phone;
		abs->Array[ret].m_Phone = phone;

		//住址
		cout << "请输入住址:" << endl;
		string address;
		cin >> address;
		abs->Array[ret].m_Addr = address;
		cout << "修改成功" << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

 8.清空联系人

case 6: //清空联系人
	clearPerson(&abs);
	break;
//6.清空联系人
void clearPerson(Addressbooks* abs) {
	abs->m_Size = 0;
	cout << "通讯录联系人已经清空" << endl;
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

 全部代码

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

//设计联系人结构体
struct Person {
	string m_Name;
	int m_Sex;
	int m_Age;
	string m_Phone;
	string m_Addr;
};

//设计通讯录结构体
struct Addressbooks {
	struct Person Array[MAX];
	int m_Size;
};

//1.添加联系人
void addPerson(Addressbooks* abs) {
	// 判断通讯录是否已满
	if (abs->m_Size == MAX) {
		cout << "通讯录已满,无法添加联系人" << endl;
		return;
	}
	else {
		//添加具体联系人
		//姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->Array[abs->m_Size].m_Name = name;

		//性别
		cout << "请输入性别:" << endl;
		cout << "1-------->男" << endl;
		cout << "2-------->女" << endl;
		int sex = 0;
		while (1) {
			cin >> sex;
			if (sex == 1 || sex == 2) {
				abs->Array[abs->m_Size].m_Sex = sex;
				break;
			}
			else {
				cout << "输入有误,请重新输入" << endl;
			}
		}

		//年龄
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age;
		abs->Array[abs->m_Size].m_Age = age;

		//电话
		cout << "请输入联系电话:" << endl;
		string phone;
		cin >> phone;
		abs->Array[abs->m_Size].m_Phone = phone;

		//住址
		cout << "请输入住址:" << endl;
		string address;
		cin >> address;
		abs->Array[abs->m_Size].m_Addr = address;

		//更新通讯录人数
		abs->m_Size++;

		cout << "添加成功" << endl;

		system("pause");//输入任意键继续
		system("cls"); //清屏
	}
}

//2.显示联系人
void showPerson(Addressbooks *abs) {
	//判断通讯录是否为空
	if (abs->m_Size == 0) {
		cout << "当前通讯录为空" << endl;
	}
	//不空,则显示联系人信息
	else {
		for (int i = 0; i < abs->m_Size; i++) {
			cout << "姓名:" << abs->Array[i].m_Name << "\t";
			cout << "性别:" << (abs->Array[i].m_Sex == 1? "男":"女") << "\t";
			cout << "年龄:" << abs->Array[i].m_Age << "\t";
			cout << "电话:" << abs->Array[i].m_Phone << "\t";
			cout << "地址:" << abs->Array[i].m_Addr << "\t" << endl;
		}
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

//检测联系人是否存在
int isExist(Addressbooks* abs, string name) {
	for (int i = 0; i < abs->m_Size; i++) {
		//找到用户
		if (abs->Array[i].m_Name == name) {
			return i; //返回的是数组中此联系人的下标
		}
	}
	//没有找到用户
	return -1;
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

//3.删除联系人
void deletePerson(Addressbooks* abs) {
	cout << "请输入您要删除的联系人" << endl;
	string name;
	cin >> name;
	//ret == -1 未查到此人
	//ret != -1 查到此人
	int ret = isExist(abs, name);

	if (ret != -1) {
		//删除操作
		for (int i = ret; i < abs->m_Size; i++) {
			//进行前移
			abs->Array[i] = abs->Array[i + 1];
		}
		//更新通讯录中的人数
		abs->m_Size--;
	}
	else {
		cout << "没有查询结果" << endl;
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

//4.查找联系人
void findPerson(Addressbooks* abs) {
	cout << "请输入您要查找的联系人" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret != -1) {
		cout << abs->Array[ret].m_Name << "\t";
		cout << abs->Array[ret].m_Sex << "\t";
		cout << abs->Array[ret].m_Age << "\t";
		cout << abs->Array[ret].m_Phone << "\t";
		cout << abs->Array[ret].m_Addr << "\t" << endl;
		}	
	else {
		cout << "对不起,没有此联系人" << endl;
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}
  
//5.修改联系人
void modifyPerson(Addressbooks* abs) {
	cout << "请输入您要修改的联系人" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret != -1) {
		//姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->Array[ret].m_Name = name;

		//性别
		cout << "请输入性别:" << endl;
		cout << "1-------->男" << endl;
		cout << "2-------->女" << endl;
		int sex = 0;
		while (1) {
			cin >> sex;
			if (sex == 1 || sex == 2) {
				abs->Array[ret].m_Sex = sex;
				break;
			}
			else {
				cout << "输入有误,请重新输入" << endl;
			}
		}

		//年龄
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age;
		abs->Array[ret].m_Age = age;

		//电话
		cout << "请输入联系电话:" << endl;
		string phone;
		cin >> phone;
		abs->Array[ret].m_Phone = phone;

		//住址
		cout << "请输入住址:" << endl;
		string address;
		cin >> address;
		abs->Array[ret].m_Addr = address;
		cout << "修改成功" << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");//输入任意键继续
	system("cls"); //清屏
}

//6.清空联系人
void clearPerson(Addressbooks* abs) {
	abs->m_Size = 0;
	cout << "通讯录联系人已经清空" << endl;
	system("pause");//输入任意键继续
	system("cls"); //清屏
}


//菜单界面
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;
}

int main() {
	//创建通讯录结构体变量
	Addressbooks abs;
	//初始化通讯录当前个数
	abs.m_Size = 0;
	//创建用户选择输入的变量
	int select = 0;
	while (1) {
		//菜单调用
		showMenu();

		cin >> select;

		switch (select)
		{
		case 1: //添加联系人
			addPerson(&abs);
			break;
		case 2: //显示联系人
			showPerson(&abs);
			break;
		case 3: //删除联系人
			deletePerson(&abs);
			break;
		case 4: //查找联系人
			findPerson(&abs);
			break;
		case 5: //修改联系人
			modifyPerson(&abs);
			break;
		case 6: //清空联系人
			clearPerson(&abs);
			break;
		case 0: //退出通讯录
			cout << "欢迎下次使用,再见。" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}

	
	system("pause");
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网安笔记(纯兴趣,随缘更新)

对于千锋教育的网安课程的笔记 (一)虚拟机环境搭建 01虚拟机概述 传统运行模式:一台计算机同时只能运行一个操作系统 虚拟机运行架构: 1.寄生架构 &#xff08;实验环境、测试环境&#xff09; • 虚拟机作为应用软件安装在操作系统上 • 可以在此应用软件上安装多个操作系统…

Docker部署nginx并且实现https访问

实验环境&#xff1a; 在已有的docker环境和nginx镜像的基础上进行操作 1、生成私钥 &#xff08;1&#xff09;openssl genrsa -out key.pem 2048 生成证书签名请求 (CSR) 并自签证书: &#xff08;2&#xff09;openssl req -new -x509 -key key.pem -out cert.pem -day…

招了个牛逼的DBA,问题少了一半,老油条慌了...

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

带环链表和链表的复制,检验你链表的学习情况

前言&#xff1a;带环链表是链表中的经典问题&#xff0c;需要一定的数理思维&#xff0c;一定要掌握其来龙去脉&#xff0c;这样可以加深理解。本文主要讲解一下个人对带环链表的理解。 带环链关的OJ题 1.判断链表是否带环 题目&#xff1a; 141. 环形链表 给你一个链表的头…

并发-线程的 6 个状态(生命周期)

目录 状态解释 状态间的转化 状态解释 状态间的转化 根据Thread类中定义的枚举类型State值&#xff0c;可以看出有6种状态&#xff1a;可以通过 Thread.getState 方法获得线程的状态NEW&#xff08;新建&#xff09;New&#xff1a;新建了Thread类对象&#xff0c;但是没有启…

软设之进程资源图

进程资源图有两个要素&#xff0c;一个是P&#xff0c;也就是进程&#xff0c;一个是R&#xff0c;可以用R1或者R2等表示&#xff0c;表示资源。 R一般是一个矩形里面有几个圆圈&#xff0c;有几个圆圈就表示有几个资源 这里用R1表示资源&#xff0c;P表示进程 R1P 表示资源…

Tomcat启动闪退怎么解决(文末附终极解决方案)

AI是这么告诉我的 Tomcat启动时出现闪退问题可能由多种原因引起&#xff0c;以下是解决此类问题的一些通用方法&#xff1a; 检查环境变量&#xff1a; 确保已经正确设置了JAVA_HOME和JRE_HOME环境变量&#xff0c;并指向正确的Java安装路径。将Java的bin目录添加到系统的PATH…

频谱模拟器

频谱模拟器&#xff0c;特别是模拟频谱仪&#xff0c;是一种基于特定原理的频谱分析工具。以下是对其的详细介绍&#xff1a; 工作原理&#xff1a; 模拟频谱仪的工作原理主要基于频率转换原理&#xff0c;包括两个关键步骤&#xff1a;信号混频和滤波分析。 信号混频&#xf…

《Fundamentals of Power Electronics》——升压隔离型变换器、SEPIC隔离型变换器

以下是升压型隔离变换器的相关知识点&#xff1a; 升压型隔离变换器可以通过互换降压型隔离变换器的电源与负载的位置得到。升压型隔离变换器有许多种结构&#xff0c;此处简短的讨论两种情况。这些转换器主要使用在高压电源和低谐波整流器中。 图6.36所示是一种全桥型电路结…

【设计模式】13、template 模板模式

文章目录 十三、template 模板模式13.1 ppl13.1.1 目录层级13.1.2 ppl_test.go13.1.3 ppl.go13.1.4 llm_ppl.go13.1.5 ocr_ppl.go 十三、template 模板模式 https://refactoringguru.cn/design-patterns/template-method 如果是一套标准流程, 但有多种实现, 可以用 template …

PR2019软件下载教程

打开下载网址&#xff1a;rjctx.com 选择Premiere&#xff1a; 选择PR2019&#xff0c;并点击&#xff1a; 拉到最后&#xff0c;选择百度网盘下载&#xff1a; 下载到本地。 二&#xff0c;软件安装 解压缩后&#xff0c;双击set_up 选择位置后&#xff0c;进行安装&…

场景文本检测识别学习 day08(无监督的Loss Function、代理任务、特征金字塔)

无监督的Loss Function&#xff08;无监督的目标函数&#xff09; 根据有无标签&#xff0c;可以将模型的学习方法分为&#xff1a;无监督、有监督两种。而自监督是无监督的一种无监督的目标函数可以分为以下几种&#xff1a; 生成式网络的做法&#xff0c;衡量模型的输出和固…

Python爬虫-BeautifulSoup解析

1.简介 BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库。它提供了一种灵活且方便的方式来导航、搜索和修改树结构或标记文档。这个库非常适合网页抓取和数据提取任务&#xff0c;因为它允许你以非常直观的方式查询和操作文档内容。 2.安装 Beautiful Soup 终端输…

【与 Apollo 共创生态:展望自动驾驶全新未来】

1、引言 历经七年的不懈追求与创新&#xff0c;Apollo开放平台已陆续推出了13个版本&#xff0c;汇聚了来自全球170多个国家与地区的16万名开发者及220多家合作伙伴。随着Apollo开放平台的不断创新与发展&#xff0c;Apollo在2024年4月19日迎来了Apollo开放平台的七周年大会&a…

golang for经典练习 金字塔打印 示例 支持控制台输入要打印的层数

go语言中最经典的for练习程序 金字塔打印 &#xff0c;这也是其他语言中学习循环和条件算法最为经典的联系题。 其核心算法是如何控制内层循环变量j 每行打印的*号数量 j<i*2-1 和空格数量 j1 || j i*2-1 golang中实现实心金字塔 Solid Pyramid和空心金字塔 Hollow Pyram…

ruoyi漏洞总结

若依识别 黑若依 :icon hash"-1231872293 绿若依 :icon hash"706913071” body" 请通过前端地址访 " body" 认证失败&#xff0c;无法访问系统资源 " 如果页面访问显示不正常&#xff0c;可添加默认访问路径尝试是否显示正常 /login?redi…

20232937文兆宇 2023-2024-2 《网络攻防实践》实践八报告

20232937文兆宇 2023-2024-2 《网络攻防实践》实践八报告 1.实践内容 动手实践任务一 对提供的rada恶意代码样本&#xff0c;进行文件类型识别&#xff0c;脱壳与字符串提取&#xff0c;以获得rada恶意代码的编写作者&#xff0c;具体操作如下&#xff1a; &#xff08;1&am…

Deep Learning Part Eight--Attention 24.5.4

01.在翻译、语音识别等将一个时序数据转换为另一个时序数据的任务中&#xff0c;时序数据之间常常存在对应关系 02.Attention 从数据中学习两个时序数据之间的对应关系 03.Attention 使用向量内积&#xff08;方 法之一&#xff09;计算向量之间的相似度&#xff0c;并输出这个…

【C++题解】1658. 游乐设施

问题&#xff1a;1658. 游乐设施 类型&#xff1a;分支结构 题目描述&#xff1a; 游乐场引进了一个新的游乐设施&#xff0c;可以两人一组开动该设施&#xff0c;但设施设计上有一个缺陷&#xff0c;必须一个人的体重在 60 公斤以上&#xff08;包含 60 公斤&#xff09;&am…

CST保存项目时失败?如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…
最新文章