c++通讯录操作系统

      实现功能

1、添加联系人
2、显示联系人 
3、删除联系人 
4、查找联系人 
5、修改联系人
6、清空联系人 
0、退出通讯录

//-封装函数显示该界面 如 void showmenu
//-在main函数中调用封装好的函数
#include<iostream>
#include<string>
#define max 1000
using namespace std;
struct person{//姓名string m_name;//性别   1 男  2 女 int m_sex;//年龄int m_age;//电话string m_phone;//住址string m_addr;
};//设计通讯里结构体
struct addressbooks{//通讯录中保存的联系人数组struct person personarray[max];//通讯录中记录当前联系人个数int m_size;
};
void addperson(addressbooks * abs){if(abs->m_size == max){cout<<"通讯录已满,无法添加!"<<endl;return;}else{//添加具体联系人//姓名string name;cout<<"请输入姓名:"<<endl;cin>>name;abs->personarray[abs->m_size].m_name = name;//性别cout<<"请输入性别"<<endl;cout<<"1 --- 男"<<endl;cout<<"2 --- 女"<<endl;int sex = 0;while(true){//如果输入的是 1 或者 2 可以退出循环,因为输入的是正确值//如果输入有误,重新输入cin>>sex;if(sex == 1 || sex == 2){abs->personarray[abs->m_size].m_sex = sex;break;}cout<<"输入有误,请重新输入!"<<endl;}//年龄cout<<"请输入年龄:"<<endl;int age = 0;cin>>age;abs->personarray[abs->m_size].m_age = age;//电话cout<<"请输入电话:"<<endl;string phone;cin>>phone;abs->personarray[abs->m_size].m_phone = phone;//住址cout<<"请输入地址:"<<endl;string address;cin>>address;abs->personarray[abs->m_size].m_addr = address;//更新通讯录里的人数abs->m_size++;cout<<"添加成功"<<endl;system("pause");//请按任意键继续system("cls");//清屏操作}
}
//2、显示联系人
void showperson(addressbooks * abs){//判断通讯录中人数是否为0,如果为0,提示信息为空//如果不为0,显示记录的联系人信息if(abs->m_size == 0){cout<<"当前记录为空"<<endl;}else{for(int i = 0;i<abs->m_size;i++){cout<<"姓名:"<<abs->personarray[i].m_name<<"\t";cout<<"性别:"<<(abs->personarray[i].m_sex == 1 ?"男":"女")<<"\t";cout<<"年龄:"<<abs->personarray[i].m_age<<"\t";cout<<"电话:"<<abs->personarray[i].m_phone<<"\t";cout<<"住址:"<<abs->personarray[i].m_addr<<endl;}}system("pause");//按任意键继续system("cls");//清屏
}
//检测联系人是否存在,如果存在,返回联系人所在数组中的位置,不存在返回-1
//参数1 通讯录 参数2 对比姓名
int isexist(addressbooks * abs,string name){for (int i = 0;i < abs->m_size;i++){//找到用户输入的姓名了if(abs->personarray[i].m_name == name){return i; //找到了,返回这个人在数组中的下标位置}}return -1;//如果遍历结束都没有找到,返回-1
}
//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->personarray[i] = abs->personarray[i+1];}abs->m_size--;cout<<"删除成功"<<endl;}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->personarray[ret].m_name<<"\t";cout<<"性别:"<<(abs->personarray[ret].m_sex == 1 ?"男":"女")<<"\t";cout<<"年龄:"<<abs->personarray[ret].m_age<<"\t";cout<<"电话:"<<abs->personarray[ret].m_phone<<"\t";cout<<"住址:"<<abs->personarray[ret].m_addr<<endl;}else//未找到联系人{cout<<"查无此人"<<endl;}//任意键按下后,清屏system("pause");system("cls");
}
//5、修改指定联系人信息
void modify(addressbooks * abs){cout<<"请输入您要修改的联系人"<<endl;string name;cin>>name;int ret = isexist(abs,name);if(ret != -1)//找到指定联系人{//姓名string name;cout<<"请输入姓名:"<<endl;cin>>name;abs->personarray[ret].m_name = name;//性别cout<<"请输入性别:"<<endl;cout<<"1 --- 男"<<endl;cout<<"2 --- 女"<<endl;int sex = 0;cin>>sex;while(true){if(sex == 1 || sex ==2){//输入正确 退出循环程序abs->personarray[ret].m_sex = sex;break;}cout<<"输入有误,请重新输入"<<endl;}//年龄cout<<"请输入年龄:"<<endl;int age = 0;cin>>age;abs->personarray[ret].m_age = age;//电话cout<<"请输入联系电话:"<<endl;string phone;cin>>phone;abs->personarray[ret].m_phone = phone;//地址cout<<"请输入家庭地址:"<<endl;string address;cin>>address;abs->personarray[ret].m_addr = address;}else//未找到联系人{cout<<"查无此人"<<endl;}system("pause");system("cls");
}
//6、清空所有联系人
void cleanperson(addressbooks * abs){abs->m_size = 0;//将当期记录联系人数量置为0,做逻辑清空操作cout<<"通讯录已清空"<<endl;system("pause");system("cls");
}
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()
{//创建通讯录结构体变量addressbooks abs;//初始化通讯录中当前人员个数abs.m_size = 0;//创建用户选择输入的变量int select = 0;	while(true){showmenu();cin>>select;switch(select){case 1://1、添加联系人addperson(&abs);//利用地址传递,可以修饰实参break;case 2://2、显示联系人showperson(&abs);break;case 3://3、删除联系人//{//	cout<<"请输入删除联系人姓名:"<<endl;//	string name;//	cin>>name;//	if(isexist(&abs,name) == -1){//		cout<<"查无此人"<<endl;//	}else{//		cout<<"找到此人"<<endl;//	}//}deleteperson(&abs);break;case 4://4、查找联系人findperson(&abs);break;case 5://5、修改联系人modify(&abs);break;	case 6://6、清空联系人cleanperson(&abs);break;case 0://0、退出通讯录cout<<"欢迎下次使用"<<endl;system("pause");return 0;default:break;		}}return 0;
}

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

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

相关文章

如何使用京东商品SKU API获取商品的保修信息?

一、背景介绍 京东商品SKU API是京东开放平台提供的一套API接口&#xff0c;用于获取京东商城的商品SKU信息。保修信息是商品SKU信息中的重要组成部分&#xff0c;通过该API可以获取到商品的保修政策、保修期限等详细信息。本文将介绍如何使用京东商品SKU API获取商品的保修信…

【ClickHouse】ClickHouse与MySQL之间实时同步数据(MySQL引擎),将MySQL数据实时同步到clickhouse

参考1:MySQL(通过该配置实现了实时同步) 参考2:experimental MaterializedMySQL 参考3:[experimental] MaterializedMySQL(包含设置 allow_experimental_database_materialized_mysql) MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中&#xff0c;并允许您对表进行I…

item_get_app_pro-根据ID取商品详情原数据接入参数和返回值说明

参数说明 pinduoduo.item_get_app_pro 公共参数 名称类型必须描述keyString是调用key&#xff08;申请调用免费测试&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cache…

JavaEE之多线程编程:1. 基础篇

文章目录 一、关于操作系统一、认识进程 process二、认识线程三、进程和线程的区别&#xff08;重点&#xff01;&#xff09;四、Java的线程和操作系统线程的关系五、第一个多线程编程 一、关于操作系统 【操作系统】 驱动程序&#xff1a; 如&#xff1a;我们知道JDBC的驱动程…

20 套监控平台统一成 1 套 Flashcat,国泰君安监控选型提效之路

author:宋庆羽-国泰君安期货 运维工作最重要的就是维护系统的稳定性&#xff0c;其中监控是保证系统稳定性很重要的一环。通过监控可以了解系统的运行状态&#xff0c;及时发现问题和系统隐患&#xff0c;有助于一线人员快速解决问题&#xff0c;提高业务系统的可用时长。 作为…

算法----K 和数对的最大数目

题目 给你一个整数数组 nums 和一个整数 k 。 每一步操作中&#xff0c;你需要从数组中选出和为 k 的两个整数&#xff0c;并将它们移出数组。 返回你可以对数组执行的最大操作数。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,4], k 5 输出&#xff1a;2 解释&…

C++联合体union

联合体 将多个类型合并到一起省空间 枚举与联合一起使用 匿名联合 类似于无作用域 &#xff23;11联合体定义非内建类型 C11 引入了能够在联合体中使用非内建类型的能力&#xff0c;这些类型包括具有自定义构造函数、析构函数、拷贝构造函数和拷贝赋值运算符的类。 关键特性…

程序员提高效率的 10 个方法

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 1. 早上不要开会 &#x1f4c5; 每个人一天是 24 小时&#xff0c;时间是均等的&#xff0c;但是时间的价值却不是均等的&#xff0c;早上 1 小时的价值…

【C语言快速学习基础篇】之二控制语句、循环语句

文章目录 一、控制语句1.1、if...else...单条件语句1.2、if...else if...else...多条件语句1.3、switch...case 二、循环语句2.1、for循环2.2、while循环2.3、注意&#xff1a;for循环和while循环使用上面等同2.4、do while循环2.4.1、while条件成立时2.4.2、while条件不成立时…

VMware虚机启动报dm0 internal error xfs_want_corrupted_goto at line 1727 报错,虚机进入救援模式

k8s虚机k8s-master01节点虚机开机启动进入救援模式&#xff0c;提示 internal error xfs_want_corrupted_goto at line 1727 报错 进入救援模式后无法执行其它命令&#xff0c;只能先查询相关报错&#xff0c;再进行修复 处理办法&#xff1a; 1、查看相关报错信息 # jour…

BluetoothDevice 序列化问题

文章目录 前言思考分析定位 前言 在做蓝牙设备通信时&#xff0c;遇到一个奇葩的问题&#xff0c;公司另一个部门开发的蓝牙组件库&#xff0c;把蓝牙设备BluetoothDevice进行了序列化&#xff0c;在连接时候又进行反序列化。但是当我去调试我的项目时&#xff0c;发现发序列化…

人大金仓证书过期问题

select count(*) from sys_stat_activity select GET_LICENSE_VALIDDAYS(); 试用企业版3个月到期后&#xff0c;改为专业版&#xff0c;有效期仍是3个月 1、在kingbase用户下执行sys_ctl -D data start时报错 ./sys_ctl -D /home/kingbase/KingbaseES/data start 等待服务器进…

P1160 队列安排

这很明显是一个链表的题目&#xff0c;考链表的基础知识 开始先定义了一个结构体节点&#xff0c;里面有一个val和一个指向node结构体的指针next 然后通过typedf将linkedlist表示为一个指向node的指针 insert代表右插入 push是左插入 #include <iostream> using nam…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-3燃烧卡路里-系统分析实例

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-3燃烧卡路里-系统分析实例 1. 数学模型2. 比例控制 Proprotional Control 1. 数学模型 2. 比例控制 Proprotional Control

建筑工程企业网站建设的效果如何

建筑工程团队也是市场重要的组成部分&#xff0c;尤其是建筑公司&#xff0c;往往更具品牌力&#xff0c;而在企业发展方面也面临多个痛点&#xff1a; 1、品牌宣传拓客难 建筑工程属于高价、长时间跟进的行业&#xff0c;因此无论需求者还是商家都非常看重企业品牌及业务纵深…

C++学习笔记(十三)

一、C对象模型和this指针 1.1 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象 #include <iostream>using namespace std;class a1 {};class a2 {int a; };class a3 {int a;static int b; };class …

基于ssm端游账号销售管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对端游账号销售信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

让你从此不再惧怕ANR

原文链接 让你从此不再惧怕ANR 这篇文章是基于官方的Diagnose and fix ANRs翻译而来&#xff0c;但也不是严格的翻译&#xff0c;原文的内容都在&#xff0c;又加上了自己的理解以及自己的经验&#xff0c;以译注的形式对原文的作一些补充。 当一个Android应用的UI线程被阻塞时…

[排序篇] 冒泡排序

目录 一、概念 二、冒泡排序 2.1 冒泡降序(从大到小排序) 2.2 冒泡升序(从小到大排序) 三、冒泡排序应用 总结 一、概念 冒泡排序核心思想&#xff1a;每次比较两个相邻的元素&#xff0c;如果它们不符合排序规则&#xff08;升序或降序&#xff09;则把它们交换过来。…

Linux内存管理(十七):percpu 机制(2)——动态分配

源码基于:Linux5.4 约定: 芯片架构:ARM64内存架构:UMACONFIG_ARM64_VA_BITS:39CONFIG_ARM64_PAGE_SHIFT:12CONFIG_PGTABLE_LEVELS :3关联博文: percpu机制(1)——框架实现 percpu机制(2)——动态分配 0. 前言 上一篇博文 我们剖析了 percpu 机制的整个框架,包括per…