当前位置: 首页 > news >正文

【c++】通讯录管理系统

1.系统功能介绍及展示
2.创建项目
3.菜单实现
4.退出功能实现
5.添加联系人—结构体设计
6.添加联系人—功能实现
7.显示联系人
8.删除练习人—检测联系人是否存在
9.删除联系人—功能实现
10.查找联系人
11.修改联系人
12.清空通讯录

在这里插入图片描述

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;const int MAX = 1e3 + 10; // 最大人数struct Person
{string name;    // 姓名string sex;     // 性别int age;        // 年龄string phone;   // 电话号码string address; // 住址
};struct addressbook
{Person personarray[MAX]; // 通讯录中保存的联系人数组int size;                // 通讯录中人员个数
};void showMenu();
void addPerson(addressbook *abs);
void showPerson(const addressbook *abs);
int namefind(addressbook *abs);
int phonefind(addressbook *abs);
int addressfind(addressbook *abs);
void deletePerson(addressbook *abs);
void findPerson(addressbook *abs);
void modifyPerson(addressbook *abs);
void ofaddressbook(const addressbook *abs);
void ifaddressbook(addressbook *abs);
void cleanPerson(addressbook *abs);
void end();int main()
{int select;addressbook abs;abs.size = 0;while (true){showMenu(); // 菜单调用cin >> select;system("clear");switch (select){case 0: // 退出通讯录end();break;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: // 备份通讯录ofaddressbook(&abs);break;case 7: // 恢复通讯录ifaddressbook(&abs);break;case 8: // 清空通讯录cleanPerson(&abs);break;default:cout << "输入错误,请重新输入" << endl;cout << "请按任意键并回车继续" << endl; // MAC系统cin >> select;                          // MAC系统system("clear");                        // MAC系统// system("pause");WINDOWS系统// system("cls");WINDOWS系统continue;}cout << "请按任意键并回车继续" << endl; // MAC系统cin >> select;                          // MAC系统system("clear");                        // MAC系统// system("pause");WINDOWS系统// system("cls");WINDOWS系统}return 0;
}void showMenu()
{cout << "***********************" << endl<< "*****1、添加联系人*****" << endl<< "*****2、显示联系人*****" << endl<< "*****3、删除联系人*****" << endl<< "*****4、查找联系人*****" << endl<< "*****5、修改联系人*****" << endl<< "*****6、备份通讯录*****" << endl<< "*****7、恢复通讯录*****" << endl<< "*****8、清空通讯录*****" << endl<< "*****0、退出通讯录*****" << endl<< "***********************" << endl;
}void addPerson(addressbook *abs)
{if (abs->size == MAX) // 判断通讯录人数是否已满{cout << "通讯录人数已满" << endl;}else{cout << "请输入姓名:";cin >> abs->personarray[abs->size].name;cout << "请输入性别:";cin >> abs->personarray[abs->size].sex;cout << "请输入年龄:";cin >> abs->personarray[abs->size].age;cout << "请输入电话号码:";cin >> abs->personarray[abs->size].phone;cout << "请输入住址:";cin >> abs->personarray[abs->size].address;abs->size++;cout << "联系人添加成功" << endl;}
}void showPerson(const addressbook *abs)
{if (abs->size) // 判断人数是否为零{for (int i = 0; i < abs->size; i++){cout << "姓名:" << abs->personarray[i].name<< "\t性别:" << abs->personarray[i].sex<< "\t年龄:" << abs->personarray[i].age<< "\t电话号码:" << abs->personarray[i].phone<< "\t住址:" << abs->personarray[i].address<< endl;}}else{cout << "通讯录为空" << endl;}
}int namefind(addressbook *abs)
{string name;cout << "请输入您要查找联系人的姓名" << endl;cin >> name;for (int i = 0; i < abs->size; i++) // 查找输入的联系人{if (name.compare(abs->personarray[i].name) == 0){return i;}}return -1;
}int phonefind(addressbook *abs)
{string phone;cout << "请输入您要查找联系人的电话号码" << endl;cin >> phone;for (int i = 0; i < abs->size; i++) // 查找输入的联系人{if (phone.compare(abs->personarray[i].phone) == 0){return i;}}return -1;
}int addressfind(addressbook *abs)
{string address;cout << "请输入您要查找联系人住址" << endl;cin >> address;for (int i = 0; i < abs->size; i++) // 查找输入的联系人{if (address.compare(abs->personarray[i].address) == 0){return i;}}return -1;
}void deletePerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) // 选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){abs->personarray[n] = abs->personarray[abs->size - 1]; // 替换将删除的联系人abs->size--;                                           // 通讯录人数-1cout << "删除成功" << endl;}else{cout << "查无此人" << endl;}
}void findPerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) // 选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){cout << "姓名:" << abs->personarray[n].name<< "\t性别:" << abs->personarray[n].sex<< "\t年龄:" << abs->personarray[n].age<< "\t电话号码:" << abs->personarray[n].phone<< "\t住址:" << abs->personarray[n].address<< endl;}else{cout << "查无此人" << endl;}
}void modifyPerson(addressbook *abs)
{int n;cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;cin >> n;switch (n) // 选择查询方式{case 1:n = namefind(abs);break;case 2:n = phonefind(abs);break;case 3:n = addressfind(abs);break;default:cout << "您输入有误,请重新输入" << endl;}system("clear");if (n != -1){cout << "请输入修改后的姓名:";cin >> abs->personarray[n].name;cout << "请输入修改后的性别:";cin >> abs->personarray[n].sex;cout << "请输入修改后的年龄:";cin >> abs->personarray[n].age;cout << "请输入修改后的电话号码:";cin >> abs->personarray[n].phone;cout << "请输入修改后的住址:";cin >> abs->personarray[n].address;cout << "修改成功" << endl;}else{cout << "查无此人" << endl;}
}void ofaddressbook(const addressbook *abs)
{ofstream ofs;ofs.open("addressbook.txt", ios::out); // 打开文件ofs << "姓名\t性别\t年龄\t电话号码\t住址" << endl;for (int i = 0; i < abs->size; i++){ofs << abs->personarray[i].name<< "\t\t" << abs->personarray[i].sex<< "\t\t" << abs->personarray[i].age<< "\t\t" << abs->personarray[i].phone<< "\t\t" << abs->personarray[i].address<< endl;}ofs.close(); // 关闭文件cout << "备份成功" << endl;
}void ifaddressbook(addressbook *abs)
{string temp;ifstream ifs;ifs.open("addressbook.txt", ios::in); // 打开文件if (ifs.is_open()){getline(ifs, temp); // 将文件上方的标签输入到临时字符串while (ifs >> abs->personarray[abs->size].name >> abs->personarray[abs->size].sex >> abs->personarray[abs->size].age >> abs->personarray[abs->size].phone >> abs->personarray[abs->size].address){abs->size++; // 人数+1}ifs.close(); // 关闭文件cout << "恢复成功" << endl;}else{cout << "文件打开失败" << endl;}
}void cleanPerson(addressbook *abs)
{abs->size = 0; // 将通讯录清空cout << "通讯录已清空" << endl;
}void end()
{cout << "欢迎下次使用" << endl;exit(0); // 退出程序
}

相关文章:

【c++】通讯录管理系统

1.系统功能介绍及展示 2.创建项目 3.菜单实现 4.退出功能实现 5.添加联系人—结构体设计 6.添加联系人—功能实现 7.显示联系人 8.删除练习人—检测联系人是否存在 9.删除联系人—功能实现 10.查找联系人 11.修改联系人 12.清空通讯录 #include <iostream> #include <…...

Tomcat 架构

一、Http工作原理 HTTP协议是浏览器与服务器之间的数据传送协议。作为应用层协议&#xff0c;HTTP是基于TCP/IP协议来传递数据的&#xff08;HTML文件、图片、查询结果等&#xff09;&#xff0c;HTTP协议不涉及数据包&#xff08;Packet&#xff09;传输&#xff0c;主要规定了…...

Spring 整合mybatis

目录 1、梳理整合思路 2、整合实现 2.1 环境搭建 2.2 案例 1、梳理整合思路 将MyBatis的DataSource交给Spring IoC容器创建并管理&#xff0c;使用第三方数据库连接池(Druid&#xff0c;C3P0等)代替MyBatis内置的数据库连接池将MyBatis的SqlSessionFactory交给Spring IoC容…...

centos7升级openssl_3

1、查看当前openssl版本 openssl version #一般都是1.几的版本2、下载openssl_3的包 wget --no-check-certificate https://www.openssl.org/source/old/3.0/openssl-3.0.3.tar.gz#解压 tar zxf openssl-3.0.3.tar.gz#进入指定的目录 cd openssl-3.0.33、编译安装遇到问题缺…...

nvidia a100-pcie-40gb环境安装

1.conda create --name torch_li python3.8 2. conda install pytorch1.7.1 torchvision0.8.2 torchaudio0.7.2 cudatoolkit11.0 -c pytorch 环境测试&#xff1a;torch.cuda.is_available() 3.conda remove -n torch_li --all 4.pip install opencv-python-headless 5.pip ins…...

嵌入式 Linux 下的 LVGL 移植

目录 准备创建工程修改配置修改 lv_drv_conf.h修改 lv_conf.h修改 main.c修改 Makefile 编译运行更多内容 LVGL&#xff08;Light and Versatile Graphics Library&#xff09;是一个轻量化的、开源的、在嵌入式系统中广泛使用的图形库&#xff0c;它提供了一套丰富的控件和组件…...

js同步和异步请求

2023.3.2今天我学习了同步请求和异步请求的区别&#xff1a; 同步请求&#xff1a; 指代码按照顺序依次执行&#xff0c;每一行代码都要等待上一行代码执行完成后才能继续执行&#xff0c;比如你有两个接口&#xff0c;它会第一个接口请求完才去请求下一个接口。 异步请求&a…...

【Leetcode】2369. 检查数组是否存在有效划分

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums &#xff0c;你必须将数组划分为一个或多个 连续 子数组。 如果获得的这些子数组中每个都能满足下述条件 之一 &#xff0c;则可以称其为数组的一种 有效 划分&#xff1a; 子数组 恰 由 2 个…...

Laravel Octane 和 Swoole 协程的使用分析

之前在工作中使用 Laravel Octane 的 concurrently 处理并发时&#xff0c;发现在队列和定时任务中不会触发并发效果。经过分析&#xff0c;作了如下猜测&#xff1a;队列和定时任务都属于一个独立的进程&#xff0c;与 Octane 服务无关&#xff0c;而 Octane concurrently 恰恰…...

腾讯云又双叕降价,云服务器配置优惠价格表2024新版报价

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…...

【react native】css踩坑记录

1、IOS上面opacity重叠失效 在 iOS 上&#xff0c;当两个具有相同背景色的元素重叠时&#xff0c;不透明度&#xff08;opacity&#xff09;较低的元素会显示在较高的元素上方。 所以考虑使用rgba的形式。 // 对于下面这种写法&#xff0c;如果存在container和activeIndicat…...

ChatGPT学习第四周

&#x1f4d6; 学习目标 ChatGPT实践操作 通过实际操作和练习&#xff0c;加深对ChatGPT功能的理解。 项目&#xff1a;创建一个ChatGPT应用案例 设计一个基于ChatGPT的小项目&#xff0c;将理论应用于实践。 ✍️ 学习活动 学习资料 《万字干货&#xff01;ChatGPT 从零完…...

2D割草/吸血鬼游戏 性能优化——GPU Spine动画

视频中万人同屏方案(gpu动画、渲染、索敌、避障等功能)&#xff0c;可某宝搜店铺&#xff1a;【游戏开发资源商店】获取整套方案源码。 在过去的几年里&#xff0c;割草、类吸血鬼玩法的游戏频出爆款&#xff0c;其丰富的技能、满屏特效、刷怪清屏的解压畅快是此类游戏的核心&…...

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

引言劝退 VSCode&#xff0c;全称为Visual Studio Code&#xff0c;是由微软开发的一款轻量级&#xff0c;跨平台的代码编辑器。大家能来搜用VSCode配置c/c&#xff0c;想必也知道VSCode的强大&#xff0c;可以手握一个VSCode同时编写如C&#xff0c;C&#xff0c;C#&#xff…...

[渗透教程]-013-嗅探工具-wireshark操作

文章目录 tor下载wireshark抓包类型启动场景实战tor下载 tor下载链接 zlibary暗网地址 2681506@gmail.com YanErrol123@wireshark Wireshark是网络封包分析软件,可以抓包.可以 使用winpcap与网卡直接进行数据交换.作用: 网络管理员使用wireshark来检测网络问题,网络工程师使用…...

NLP Seq2Seq模型

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/mi…...

如何在 Linux 上使用 dmesg 命令

文章目录 1. Overview2.ring buffer怎样工作&#xff1f;3.dmesg命令4.移除sudo需求5. 强制彩色输出6.使用人性化的时间戳7.使用dmesg的人性化可读时间戳8.观察实时event9.检索最后10条消息10.搜索特定术语11.使用Log Levels12.使用Facility Categories13.Combining Facility a…...

WPF的DataGrid设置标题头

要设置DataGrid标题头的分割线、背景色和前景色等属性&#xff0c;您可以使用DataGrid的样式和模板来自定义标题头的外观。下面是详细解释以及示例代码&#xff1a; 分割线设置&#xff1a; 您可以使用DataGrid.ColumnHeaderStyle样式中的BorderThickness和BorderBrush属性来设…...

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点&#xff0c;然后把连接这些对象的链表示为图的弧&#xff0c;最后用对象发送和接收的消…...

为什么ChatGPT预训练能非常好地捕捉语言的普遍特征和模式

ChatGPT能够非常好地捕捉语言的普遍特征和模式&#xff0c;主要得益于以下几个方面的原因&#xff1a; 大规模语料库&#xff1a;ChatGPT的预训练是在大规模文本语料库上进行的&#xff0c;这些语料库涵盖了来自互联网、书籍、文章、对话记录等多种来源的丰富数据。这种大规模的…...

如何用Python的NLTK库玩转FrameNet语义分析(附代码示例)

如何用Python的NLTK库玩转FrameNet语义分析&#xff08;附代码示例&#xff09; 自然语言处理&#xff08;NLP&#xff09;领域的一个核心挑战是如何让机器真正理解人类语言背后的含义。传统的关键词匹配或语法分析往往停留在表面&#xff0c;而FrameNet提供的框架语义学方法&a…...

awesome-design-systems 中的电子商务设计系统:Shopify Polaris到Magento的案例

awesome-design-systems 中的电子商务设计系统&#xff1a;Shopify Polaris到Magento的案例 【免费下载链接】awesome-design-systems &#x1f485;&#x1f3fb; ⚒ A collection of awesome design systems 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-des…...

30分钟快速掌握SpeechBrain:从零开始构建智能语音系统的终极指南

30分钟快速掌握SpeechBrain&#xff1a;从零开始构建智能语音系统的终极指南 【免费下载链接】speechbrain A PyTorch-based Speech Toolkit 项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain SpeechBrain是一个基于PyTorch的全功能语音工具包&#xff0c…...

开关电源噪声的成因分析与高效抑制策略

1. 开关电源噪声的物理成因 第一次拆解开关电源时&#xff0c;我被电路板上那些看似杂乱的波形吓到了。示波器上跳动的尖峰就像心电图失常的病人&#xff0c;这些就是让工程师们头疼的电源噪声。要解决它&#xff0c;我们得先搞明白这些"电子心电图异常"是怎么产生的…...

VOICEVOX完全指南:免费开源日语语音合成软件的5大核心功能详解

VOICEVOX完全指南&#xff1a;免费开源日语语音合成软件的5大核心功能详解 【免费下载链接】voicevox 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのエディター 项目地址: https://gitcode.com/gh_mirrors/vo/voicevox VOICEVOX是一款免费开源的中品质…...

边缘计算与软件开发:新职业场景——软件测试从业者的转型指南

一、边缘计算重构软件测试疆域随着物联网设备突破300亿大关&#xff08;2025年数据&#xff09;&#xff0c;边缘计算以28.3%的年复合增长率重塑IT架构。到2026年&#xff0c;75%的新建企业系统将采用“云-边-端”三级协同架构&#xff0c;这对软件测试领域带来根本性变革&…...

2026奇点智能技术大会核心成果(视觉导航Agent工业级部署白皮书首曝)

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AIAgent视觉导航 2026奇点智能技术大会(https://ml-summit.org) 核心突破&#xff1a;端到端视觉-动作联合建模 本届大会首次公开部署的AIAgent视觉导航系统&#xff0c;摒弃传统SLAM路径规划分层架构&#xff0c;采用统一…...

Qt 树模型(Tree Model)的增删改查实战解析

1. Qt树模型基础概念解析 第一次接触Qt的树模型时&#xff0c;我完全被那些抽象概念绕晕了。直到做了几个实际项目后才明白&#xff0c;Tree Model本质上就是个数据管家&#xff0c;它帮我们管理树形结构的数据&#xff0c;并让这些数据能通过Qt的视图组件&#xff08;比如QTre…...

gh_mirrors/code/code消息总线详解:构建松耦合的事件驱动系统

gh_mirrors/code/code消息总线详解&#xff1a;构建松耦合的事件驱动系统 【免费下载链接】code Example application code for the python architecture book 项目地址: https://gitcode.com/gh_mirrors/code/code 在现代软件开发中&#xff0c;构建灵活、可扩展的系统…...

如何用Tomodoro网页番茄钟打破分心魔咒:专业级时间管理工具全解析

如何用Tomodoro网页番茄钟打破分心魔咒&#xff1a;专业级时间管理工具全解析 【免费下载链接】tomodoro A pomodoro web app with PIP mode, white noise generation, tasks and more! 项目地址: https://gitcode.com/gh_mirrors/to/tomodoro 你是否曾陷入这样的困境&a…...