通讯录管理(C++入门练习)

 通讯录管理系统
 

系统需求:


通讯录是一个可以记录亲人、好友信息的工具。本文主要利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:


添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
显示联系人:显示通讯录中所有联系人信息
删除联系人:按照姓名进行删除指定联系人
查找联系人:按照姓名查看指定联系人信息
修改联系人:按照姓名重新修改指定联系人
清空联系人:清空通讯录中所有信息
退出通讯录:退出当前使用的通讯录

 

1.结构体定义

// 联系人结构体
struct Person
{string m_name;int m_sex;		// 1:男	2:女int m_age;string m_phone;string m_addr;
};// 通讯录的结构体
struct Addressbooks
{// 当前保存联系人的数组struct Person personArray[MAX];// 当前保存联系人的个数int m_size;
};

2.添加函数

// 1、添加联系人
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;// 性别int sex = 0;cout << "请输入联系人性别:" << endl;cout << "1 --- 男" << endl;cout << "2 --- 女" << endl;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_size].m_sex = sex;break;}else{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 addr;cin >> addr;abs->personArray[abs->m_size].m_addr = addr;// 更新通讯录人数abs->m_size++;cout << "添加成功!" << endl;system("pause");system("cls");}
}

3.显示函数

// 2、显示联系人
void showPerson(Addressbooks * abs)
{// 判空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");
}

4.删除函数

// 3、删除联系人// 检测联系人是否存在
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;
}void delatePerson(Addressbooks* abs)
{cout << "请输入删除联系人的姓名:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{for (int i = ret; i < abs->m_size; i++){abs->personArray[i] = abs->personArray[i + 1];}abs->m_size--;cout << "删除成功" << endl;}system("pause");system("cls");
}

5.查找函数

//4、查找联系人
void findPerson(Addressbooks* abs)
{cout << "请输入你要查找的联系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{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;}system("pause");system("cls");
}

6.修改函数

//5、修改联系人
void modifyPerson(Addressbooks* abs)
{cout << "请输入你要修改的联系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{// 姓名string name;cout << "请输入联系人姓名:" << endl;cin >> name;abs->personArray[ret].m_name = name;// 性别int sex = 0;cout << "请输入联系人性别:" << endl;cout << "1 --- 男" << endl;cout << "2 --- 女" << endl;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[ret].m_sex = sex;break;}else{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 addr;cin >> addr;abs->personArray[ret].m_addr = addr;cout << "修改成功!" << endl;}system("pause");system("cls");
}

7.主函数调用

int main()
{// 创建通讯录结构体变量Addressbooks abs;// 初始化通讯录中人员个数abs.m_size = 0;int select = 0;while (true){showMenu();cout << "请选择你要实现的功能:" << endl;cin >> select;switch (select){case 1:		// 1、添加联系人addPerson(&abs);		// 地址传递可以修饰实参break;case 2:		// 2、显示联系人showPerson(&abs);break;case 3:		// 3、删除联系人delatePerson(&abs);break;case 4:		// 4、查找联系人findPerson(&abs);break;case 5:		// 5、修改联系人modifyPerson(&abs);break;case 6:		// 6、清空联系人clearPerson(&abs);break;case 0:		// 0、退出通讯录cout << "欢迎下次使用!" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}

总代码汇总:

#include<iostream>
using namespace std;
#include<string>
#define MAX 1000// 菜单界面
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;
}// 联系人结构体
struct Person
{string m_name;int m_sex;		// 1:男	2:女int m_age;string m_phone;string m_addr;
};// 通讯录的结构体
struct Addressbooks
{// 当前保存联系人的数组struct Person personArray[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->personArray[abs->m_size].m_name = name;// 性别int sex = 0;cout << "请输入联系人性别:" << endl;cout << "1 --- 男" << endl;cout << "2 --- 女" << endl;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_size].m_sex = sex;break;}else{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 addr;cin >> addr;abs->personArray[abs->m_size].m_addr = addr;// 更新通讯录人数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->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");
}// 3、删除联系人// 检测联系人是否存在
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;
}void delatePerson(Addressbooks* abs)
{cout << "请输入删除联系人的姓名:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{for (int i = ret; i < abs->m_size; i++){abs->personArray[i] = abs->personArray[i + 1];}abs->m_size--;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 << "查无此人" << endl;}else{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;}system("pause");system("cls");
}//5、修改联系人
void modifyPerson(Addressbooks* abs)
{cout << "请输入你要修改的联系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{// 姓名string name;cout << "请输入联系人姓名:" << endl;cin >> name;abs->personArray[ret].m_name = name;// 性别int sex = 0;cout << "请输入联系人性别:" << endl;cout << "1 --- 男" << endl;cout << "2 --- 女" << endl;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[ret].m_sex = sex;break;}else{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 addr;cin >> addr;abs->personArray[ret].m_addr = addr;cout << "修改成功!" << endl;}system("pause");system("cls");
}//6、清空联系人
void clearPerson(Addressbooks* abs)
{abs->m_size = 0;cout << "通讯录已清空" << endl;system("pause");system("cls");
}int main()
{// 创建通讯录结构体变量Addressbooks abs;// 初始化通讯录中人员个数abs.m_size = 0;int select = 0;while (true){showMenu();cout << "请选择你要实现的功能:" << endl;cin >> select;switch (select){case 1:		// 1、添加联系人addPerson(&abs);		// 地址传递可以修饰实参break;case 2:		// 2、显示联系人showPerson(&abs);break;case 3:		// 3、删除联系人delatePerson(&abs);break;case 4:		// 4、查找联系人findPerson(&abs);break;case 5:		// 5、修改联系人modifyPerson(&abs);break;case 6:		// 6、清空联系人clearPerson(&abs);break;case 0:		// 0、退出通讯录cout << "欢迎下次使用!" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}

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

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

相关文章

昇思25天学习打卡营第21天|DCGAN生成漫画头像

DCGAN原理 DCGAN&#xff08;深度卷积对抗生成网络&#xff0c;Deep Convolutional Generative Adversarial Networks&#xff09;是GAN的直接扩展。不同之处在于&#xff0c;DCGAN会分别在判别器和生成器中使用卷积和转置卷积层。 它最早由Radford等人在论文Unsupervised Re…

数据结构历年考研真题对应知识点(哈夫曼树和哈夫曼编码)

目录 5.5.1哈夫曼树和哈夫曼编码 1.哈夫曼树的定义 2.哈夫曼树的构造 【分析哈夫曼树的路径上权值序列的合法性&#xff08;2010&#xff09;】 【哈夫曼树的性质&#xff08;2010、2019&#xff09;】 3.哈夫曼编码 【根据哈夫曼编码对编码序列进行译码&#xff08;201…

【AMBA】AXI总线中的AXLEN、AXSIZE、AXBURST和4K边界

文章目录 AXI传输层级概念AXLEN[7:0]定义突发传输长度AXSIZE[2:0]定义突发传输transfer的位宽AXBURST[1:0]定义突发传输类型4K边界 AXI传输层级概念 在手册的术语表中&#xff0c;与 AXI 传输相关的有三个概念&#xff0c;分别是 transfer(beat)、burst、transaction。用一句话…

树莓派关机

文件 shutdown.sh #!/usr/bin/bash sudo shutdown -r nowpython 文件开头添加 #!/usr/bin/python3

C字符串和内存函数介绍(三)——其他的字符串函数

在#include<string.h>的这个头文件里面&#xff0c;除了前面给大家介绍的两大类——长度固定的字符串函数和长度不固定的字符串函数。还有一些函数以其独特的用途占据一席之地。 今天要给大家介绍的是下面这三个字符串函数&#xff1a;strstr&#xff0c;strtok&#xf…

前端web性能统计

前端web性能统计 1. 背景2. 业界方案2.1 腾讯2.2 蚂蚁金服2.3 字节跳动2.4 美团 3. 相关观念3.1 RAIL模型3.2 性能指标3.3 真实用户监控3.4 performance 4. 性能监控工具介绍5. 推荐采用方案 1. 背景 在如今的数字时代&#xff0c;网站和应用程序的性能对用户体验至关重要。用…

STM32MP135裸机编程:唯一ID(UID)、设备标识号、设备版本

0 资料准备 1.STM32MP13xx参考手册1 唯一ID&#xff08;UID&#xff09;、设备标识号、设备版本 1.1 寄存器说明 &#xff08;1&#xff09;唯一ID 唯一ID可以用于生成USB序列号或者为其它应用所使用&#xff08;例如程序加密&#xff09;。 &#xff08;2&#xff09;设备…

Git代码管理工具 — 3 Git基本操作指令详解

目录 1 获取本地仓库 2 基础操作指令 2.1 基础操作指令框架 2.2 git status查看修改的状态 2.3 git add添加工作区到暂存区 2.4 提交暂存区到本地仓库 2.5 git log查看提交日志 2.6 git reflog查看已经删除的记录 2.7 git reset版本回退 2.8 添加文件至忽略列表 1 获…

0.单片机工作原理

文章目录 最小系统 单片机芯片 时钟电路 复位电路 电源 最小系统 单片机芯片 本次51单片机的芯片为&#xff1a;STC89C52 Flash(闪存)程序存储器&#xff1a;存储程序的空间 SRAM&#xff1a;数据存储器&#xff0c;可用于存放程序执行的中间结果和过程数据 DPTR&#xff1a;…

2024-07-14 Unity插件 Odin Inspector2 —— Essential Attributes

文章目录 1 说明2 重要特性2.1 AssetsOnly / SceneObjectsOnly2.2 CustomValueDrawer2.3 OnValueChanged2.4 DetailedInfoBox2.5 EnableGUI2.6 GUIColor2.7 HideLabel2.8 PropertyOrder2.9 PropertySpace2.10 ReadOnly2.11 Required2.12 RequiredIn&#xff08;*&#xff09;2.…

机器人相关工科专业课程体系

机器人相关工科专业课程体系 前言传统工科专业机械工程自动化/控制工程计算机科学与技术 新兴工科专业智能制造人工智能机器人工程 总结Reference: 前言 机器人工程专业是一个多领域交叉的前沿学科&#xff0c;涉及自然科学、工程技术、社会科学、人文科学等相关学科的理论、方…

Linux编程(三)—makefile快速编译

起因 linux环境下&#xff0c;编译c程序很麻烦&#xff0c;后面g -o demo demo.cpp ……往往跟了许多许多东西&#xff0c;这些每次编译的时候都要书写&#xff0c;所以就产生了makefile快速编译方式&#xff0c;具体操作如下。 怎么用makefile? 第一步&#xff1a;下载 m…

WPF学习(2) -- 样式基础

一、代码 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/2008&…

MySQL 聚簇索引和非聚簇索引有什么区别?

聚簇索引&#xff08;主键索引&#xff09;、非聚簇索引&#xff08;二级索引&#xff09;。 这两者之间的最主要的区别是 B 树的叶子节点存放的内容不同&#xff1a; 聚簇索引的 B 树叶子节点存放的是主键值完整的记录&#xff1b;非聚簇索引的 B 树叶子节点存放的是索引值主…

【面试八股总结】C++内存管理:内存分区、内存泄漏、new和delete、malloc和free

参考资料&#xff1a;代码随想录、阿秀 一、内存分区 &#xff08;1&#xff09;栈区 在执行函数时&#xff0c;函数内部局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很高&am…

Postman下载及使用说明

Postman使用说明 Postman是什么&#xff1f; ​ Postman是一款接口对接工具【接口测试工具】 接口&#xff08;前端接口&#xff09;是什么&#xff1f; ​ 前端发送的请求普遍被称为接口 ​ 通常有网页的uri参数格式json/key-value请求方式post/get响应请求的格式json 接…

关闭Ubuntu烦人的apport

先来看让人绷不住的&#xff08;恼&#xff09; 我查半天apport是啥玩意发现就一错误报告弹窗&#xff0c;十秒钟给我弹一次一天给我内存弹爆了 就算我程序就算真的不停崩溃&#xff0c;也没你这傻比apport杀伤性强啊&#xff1f;&#xff1f;&#xff1f; 原则上是不建议关闭…

牛客周赛 Round 51 解题报告 | 珂学家

前言 题解 典题场&#xff0c; EF都有很多种解法 A. 小红的同余 性质: 相邻两数互质 x ( m 1 ) / 2 x (m1)/2 x(m1)/2 m int(input())print ((m 1) // 2)B. 小红的三倍数 性质: 各个位数之和是3的倍数&#xff0c;可被3整除 和数的组合顺序无关 n int(input()) arr…

MySQL高级面试点

Explain语句结果中各个字段分别代表什么 id&#xff1a;查询语句没出现一个select关键字&#xff0c;MySQL就会给他分配一个唯一id select_type&#xff1a; select关键字对应哪个查询的类型 simple&#xff1a;简单的查询 不包含任何子查询 primary&#xff1a;查询中如果…

网络安全设备——EDR

网络安全中的EDR&#xff08;Endpoint Detection and Response&#xff0c;端点检测与响应&#xff09;是一种主动式的端点安全解决方案&#xff0c;它专注于监控、检测和响应计算机和终端设备上的安全威胁。以下是EDR的详细解释&#xff1a; 一、定义与功能 EDR是一种网络安…