【简单项目实战】用C++实现通讯录管理系统 | [普通实现]

news2024/9/29 11:40:25


目录

●功能介绍

●案例

●代码展示

●结果展示


●功能介绍

用C++设计一个程序,能够提供以下功能:

1.录入联系人的基本信息。包括姓名、性别、年龄、电话号和地址。

2.展示所有已录入联系人的基本信息。以姓名、性别、年龄、电话号和地址的方式按列表展示。

3.删除指定的联系人。通过姓名查询并删除。

4.查找指定的联系人。通过姓名查找。

5.修改联系人信息。可对其进行单一修改,也可以进行多修改。

6.清空联系人。

7.退出通讯录管理系统。


●案例

1.录入5个联系人的信息:

        ①张三 男 19 18945761432 山西省大同市

        ②李四 男 23 19045435721 吉林省沈阳市

        ③王五 女 21 16423763429 湖南省长沙市

        ④赵六 女 32 17781435240 河南省洛阳市

        ⑤孙七 男 29 18247190826 内蒙古包头市

2.展示该五个联系人的信息。

3.修改联系人信息,对王五的地址进行单一修改,修改为云南省昆明市。(若进行其他修改,按照提示指引修改即可)

4.查找指定联系人王五,查看其修改的信息是否同步。

5.因为张三的信息存在错误,我们用多修改的方式对其信息进行修改。(张三 男 34 18247189868 陕西省西安市)

6.由于孙七的信息录入错误,我们需要将他的信息全部删除。

7.查看此时所有的联系人信息。

8.清空所有联系人并且查看。

9.退出通讯录管理系统。


●代码展示

#include <iostream>
#include <string>
#define maxsize 100 //通讯录人数
using namespace std;
struct person {
	string name;  //姓名
	string sex;  //性别
	int age;  //年龄
	string number;   //电话号
	string address;  //地址
};
typedef struct{
	struct person data[maxsize];
	int size;
}addressbook;
void addperson(addressbook* ab)
{
	cout << "————————————————————" << endl;
	if (ab->size == maxsize) {
		cout << "<<通讯录已满>>" << endl;
	}
	else {
		cout << "请输入姓名:" ;
		string name;cin >> name;
		ab->data[ab->size].name = name;

		cout << "请输入性别:" ;
		cout << "男——1" <<" " << "女——2" <<":";
		int sex;cin >> sex;
		if (sex == 1) { ab->data[ab->size].sex = "男"; }
		else if (sex == 2) { ab->data[ab->size].sex = "女"; }

		cout << "请输入年龄:" ;
		int age;cin >> age;
		ab->data[ab->size].age = age;

		cout << "请输入电话:" ;
		string number;cin >> number;
		ab->data[ab->size].number = number;

		cout << "请输入家庭地址:" ;
		string address;cin >> address;
		ab->data[ab->size].address = address;

		ab->size++;
	}
	cout << "————————————————————" << endl;
	cout << "<<添加成功>>" << endl;
	system("pause");
	system("cls");
}
void showperson(addressbook* ab)
{
	if (ab->size == 0) {
		cout << "<<当前数据为空>>" << endl;
	}
	else {
		for (int i = 0; i < ab->size; i++)
		{
			cout << "———————————————————————————————————" << endl;
			cout <<"| " << "姓名:" << ab->data[i].name << " "
				<< "性别:" << ab->data[i].sex<<" "
				<< "年龄:" << ab->data[i].age<<" "
				<< "电话:" << ab->data[i].number<<" "
				<< "地址:" << ab->data[i].address << " |" << endl;
		}
		cout << "———————————————————————————————————" << endl;
	}
	system("pause");
	system("cls");
}int isexist(addressbook* ab, string name)
{
	for (int k = 0; k < ab->size; k++)
	{
		if (ab->data[k].name == name)
			return k;
	}
	return -1;
}
void deleteperson(addressbook* ab)
{
	cout << "————————————————————" << endl;
	cout << "请输入您要删除的联系人:";
	string name;cin >> name;
	if (isexist(ab, name) == -1) {
		cout << "<<没有查找到此人>>" << endl;
	}
	else {
		cout << "<<找到此人>>" << endl;
		int ret = isexist(ab, name);
		for (int l = ret; l < ab->size; l++)
		{
			ab->data[l].name = ab->data[l + 1].name;
			ab->data[l].sex = ab->data[l + 1].sex;
			ab->data[l].age = ab->data[l + 1].age;
			ab->data[l].number = ab->data[l + 1].number;
			ab->data[l].address = ab->data[l + 1].address;
		}
		ab->size--;
		cout << "<<已删除此人信息>>" << endl;
	}
	cout << "————————————————————" << endl;
	system("pause");
	system("cls");
}
void searchperson(addressbook* ab)
{
	cout << "请输入您要查找的联系人:";
	string name;cin >> name;
	if (isexist(ab, name) == -1) {
		cout << "<<没有查找到此人>>" << endl;
	}
	else {
		int ret = isexist(ab, name);
			cout << "———————————————————————————————————" << endl;
			cout <<"| " << "姓名:" << ab->data[ret].name << " "
				<< "性别:" << ab->data[ret].sex<<" "
				<< "年龄:" << ab->data[ret].age<<" "
				<< "电话:" << ab->data[ret].number<<" "
				<< "地址:" << ab->data[ret].address <<" |" << endl;
		cout << "———————————————————————————————————" << endl;
	}
	system("pause");
	system("cls");
}
void singlealterperson(int ret,addressbook* ab)
{
	string name;
	string sex;
	int age;
	string number;
	string address;
	cout << "————————————————————" << endl;
	cout << "姓名-1" << "性别-2" << "年龄-3" << "电话-4" << "地址-5" << ":";
	int select; cin >> select;
	switch (select)
	{
	case 1:
		cout << "请输入要修改的姓名:";
		cin >> name;	ab->data[ret].name = name;
		break;
	case 2:
		cout << "请输入要修改的性别:";
		cin >> sex;		ab->data[ret].sex = sex;
		break;
	case 3:
		cout << "请输入要修改的年龄:";
		cin >> age;		ab->data[ret].age = age;
		break;
	case 4:
		cout << "请输入要修改的号码:";
		cin >> number;	ab->data[ret].number = number;
		break;
	case 5:
		cout << "请输入要修改的地址:";
		cin >> address;	ab->data[ret].address = address;
		break;
	}
	cout << "————————————————————" << endl;
}
void mostalterperson(int ret,addressbook* ab)
{
	string name;
	string sex;
	int age;
	string number;
	string address;
	cout << "————————————————————" << endl;
	cout << "请输入姓名:";
	cin >> name;	ab->data[ret].name = name;
	cout << "请输入性别:";
	cin >> sex;		ab->data[ret].sex = sex;
	cout << "请输入年龄:";
	cin >> age;		ab->data[ret].age = age;
	cout << "请输入电话:";
	cin >> number;	ab->data[ret].number = number;
	cout << "请输入地址:";
	cin >> address;	ab->data[ret].address = address;
	cout << "————————————————————" << endl;
}
void alterperson(addressbook* ab)
{
	cout << "请输入您要修改的联系人:";
	string name;cin >> name;
	if (isexist(ab, name) == -1){
		cout << "<<此人不存在>>" << endl;
	}
	else {
		cout << "<<此人存在>>" << endl;
		int ret = isexist(ab,name);
		cout << "单一修改-0" << "多数修改-1" << ":";
		int n; cin >> n;
		if (n == 0) {
			singlealterperson(ret,ab);
		}
		else {
			mostalterperson(ret,ab);
		}
			cout << "<<信息修改成功>>" << endl;
	}
	system("pause");
	system("cls");
}
void emptyperson(addressbook* ab)
{
	ab->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 << "*****7:退出通讯录******" << endl;
	cout << "***********************" << endl;
}
int text()
{
	addressbook AB;
	AB.size = 0;
	while (1)
	{
		showmenu();
		int n; cin >> n;
		switch (n)
		{
		case 1:
			addperson(&AB);
			break;
		case 2:
			showperson(&AB);
			break;
		case 3:
			deleteperson(&AB);
			break;
		case 4:
			searchperson(&AB);
			break;
		case 5:
			alterperson(&AB);
			break;
		case 6:
			emptyperson(&AB);
			break;
		case 7:
			cout << "<<退出通讯录>>" << endl;
			return 0;
			break;
		}
	}
}
int main()
{
	text();
}

●结果展示

1.

 

 

 

 

2.

3.

4.

5.

6.

7.

8.

 

9.


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

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

相关文章

链表的实际应用

1. 删除链表中等于给定值 val 的所有节点。 链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;Leetcode&#xff09; 假设&#xff1a;我们有这么个链表&#xff1a; 我们需要删除所有date域为key的结点。 假设key为4&#xff1a; 思路&#xff08;快慢指针&#xff09…

54、反射(reflection)

一、入门 反射机制的重要性在于&#xff1a;通过外部文件配置&#xff0c;在不修改源码情况下来控制程序&#xff0c;也符合设计模式的ocp原则&#xff08;开闭原则&#xff1a;不修改源码&#xff0c;扩容功能&#xff09; package hspedu.reflection_question;import hsped…

你知道的都不对!Python应该这样学

你们所说的什么要怎样数据分析、爬虫、Web 等&#xff0c;在我看来那不是精通 Python&#xff0c;而是精通某一领域&#xff0c;抛开 Python 换用另一门语言也可&#xff0c;在我看来&#xff0c;精通 Python 语言大约需要如下这些步骤&#xff08;你有你的学习方法&#xff09…

SpringBoot-TwoDay

thymeleaf常用配置 server:port: 8096 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3305/mybatis?useSSlfalseusername: rootpassword: rootthymeleaf:cache: false# 降低代码审查的严格度mode: LEGACYHTML5# 配置了前缀pref…

jsp+ssm计算机毕业设计宠物商店管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Docker笔记--搭建私有仓库、上传镜像、拉取镜像

目录 1--搭建私有仓库 2--将镜像上传到私有仓库 3--从私有仓库拉取镜像 4--补充测试 1--搭建私有仓库 ① 拉取私有仓库镜像 docker pull registry ② 启动私有仓库容器 docker run -id --nameregistry_test -p 5000:5000 registry ③ 打开浏览器&#xff0c;输入以下地址…

网络编程套接字 -- TCP/UDP

网络编程套接字 -- TCP/UDP一、网络编程1.1 什么是网络编程1.2 网络编程中的基本概念1.3 TCP和UDP二、UDP数据报套接字编程2.1 DatagramSocket API2.2 DatagramPacket API2.3 InetSocketAddress API2.4 回显程序 (UDP)2.5 翻译程序 (UDP)三、TCP流套接字编程3.1 ServerSocket A…

考研数学模拟卷经典题总结

考研数学模拟卷经典题总结1、李林四套卷的题目&#xff1a; 【23考研数学】李林老师四套卷两道二重积分计算题目分享——利用雅可比变换大大减少计算量与利用轮换对称性解题_哔哩哔哩_bilibili 上面两道题目都可以采用轮换对称性来做&#xff0c;第一道题目也可以使用雅可比行…

Java超市系统超市自提超市多商家系统源码超市自提网站

简介 Ssm多商家超市自提系统。用户注册申请开店成为商家&#xff0c;普通注册用户下单时选择离自己较近的自提点次日取货。管理员进行店铺审核、用户、分类管理等。 演示视频 https://www.bilibili.com/video/BV1hg411E77q/?share_sourcecopy_web&vd_sourceed0f04fbb7131…

Java老鸟5年压箱底面试真题资料+自学手册,秋招拿下阿里45k offer

背景 又逢“金三银四”&#xff0c;年轻的毕业生们满怀希望与忐忑&#xff0c;去寻找、竞争一个工作机会。已经在职的开发同学&#xff0c;也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。然而&#xff0c;面试人群众多&#xff0c;技术市场却相对冷淡&#xf…

轻量日志收集系统loki

1.Loki简介 Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展&#xff0c;高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益&#xff0c;并且易于操作。使用标签来作为索引&#xff0c;而不是对全文进行检索&#xff0c;也就是说&a…

基于帝国主义竞争算法(ICA)求解旅行商问题(TSP)(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维…

如何用Python破解邻居家的WIFI?

Hallo&#xff0c;各位小伙伴们大家好&#xff0c;这篇文章我们来干一件大事&#xff0c;如标题所示——用Python破解邻居家的WiFi。这是偶然间在码云上看到的一个项目&#xff0c;感觉蛮有趣的&#xff0c;分享给大家。文中用到的语料库和源码博主也会在文章最后贴给大家&…

Nginx教程(2)

文章目录2.1 Nginx解决跨域问题2.2 Nginx解决静态资源防盗链问题2.3 Nginx的模块化体系2.4 Nginx集群负载均衡2.5 四层负载均衡和七层负载均衡2.6 使用Nginx构建Tomcat集群2.1 Nginx解决跨域问题 所谓的跨域问题是指&#xff0c;比如我们现在我们访问域名www.imooc.com&#xf…

Linux从入门到进阶学习(Ⅳ):Linux实用操作

目录 1 实用技巧 2 软件安装 2.1 CentOs系统 2.2 Ubuntu系统 3 systemctl控制软件 4 软链接 5 日期和时区 5.1 查看日期 5.2 修改时区 5.3 时间校准 6 IP地址和主机名 6.1 IP地址与主机名 6.2 域名解析 7 固定IP地址 8 网络请求和下载 8.1 ping 8.2 wget 8.3…

2022 软件测试填空判断题【太原理工大学】

期末复习汇总&#xff0c;点这里&#xff01;https://blog.csdn.net/m0_52861684/category_12095266.html?spm1001.2014.3001.5482 目录 二、填空题 三、判断题 二、填空题 全是课本原话&#xff0c;不一定只填红色部分&#xff0c;可能下次就换了这句话的其它地方&#xff…

高比例风电电力系统储能运行及配置研究(pythonMatlab实现)

目录 1 概述 2 案例 3 Matlab实现 3.1 题目及分析 3.2 Matlab代码 4 七个题全部代码&#xff08;值得学习&#xff09; 1 概述 “碳中和”目标驱动下未来电力系统必将是高比例可再生能源电力系统&#xff0c;可再生能源输出功率强随机波动性导致系统运行中功率实时平…

比较器和浅谈深浅拷贝

比较器和浅谈深浅拷贝 文章目录比较器和浅谈深浅拷贝前言一.比较器方法一方法二二.深浅拷贝2.1 浅拷贝2.2 深拷贝2.3 总结前言 我们学习完接口以后&#xff0c;我在这里会介绍一个比较器的接口&#xff0c;至于他是来干嘛的&#xff0c;比较器顾名思义就是来比较的&#xff0c…

【安卓学习之常见问题】百度地图卫星地图精度不够

█ 【安卓学习之常见问题】百度地图卫星地图精度不够 █ 系列文章目录 提示&#xff1a;这里是收集了和文件分享有关的文章 【安卓学习之常见问题】android路径及文件问题 【安卓学习之常见问题】文件分享–文件不存在 【安卓学习之常见问题】自定义组件-刷新后跳到第一行 【…

修复 IDEA 使用 Gradle 构建出错时的乱码问题(maven项目转Gradle后乱码,并报“错误,找不到符号”)

在迁移一个基于 Maven 构建项目到基于 Gradle 进行构建, 迁移的过程中发现编译失败了, IDEA 的 Gradle build output 面板出现了许多方块型的乱码. 这样子&#xff1a; 解决步骤1&#xff1a; Step 1: 点击 IDEA 顶部菜单栏中的 HelpStep 2: 点击 Edit Custom VM OptionsStep…