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

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

系统中需要实现的功能如下:

添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人

显示联系人:显示通讯录中所有联系人信息

删除联系人:按照姓名进行删除指定联系人

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

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

清空联系人:清空通讯录中所有信息

退出通讯录:退出当前使用的通讯录

#include<iostream>
using namespace std;
#include <string>  //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; //通讯录中人员个数
};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) {cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_Size].m_Sex = sex;break;}//else {cout << "输入有误,请重新输入";//}}//年龄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");}
}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");
}int isExist(Addressbooks* abs, string name) {for (int i = 0; i < abs->m_Size; i++) {if (abs->personArray[i].m_Name == name) {return i;}else {return -1;}}
}void delPerson(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");
}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 << "\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");}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->personArray[ret].m_Name = name;cout << "请输入性别:" << endl;cout << "1 -- 男" << endl;cout << "2 -- 女" << endl;//性别int sex = 0;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[ret].m_Sex = sex;break;}cout << "输入有误,请重新输入";}//年龄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;cout << "修改成功" << endl;}else{cout << "查无此人" << endl;}system("pause");system("cls");}void cleanPerson(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();cin >> select;switch (select) {case 0://退出通讯录cout << "欢迎下次使用" << endl;system("pause");return 0;break;case 1://添加联系人addPerson(&abs);break;case 2://显示联系人showPerson(&abs);break;case 3://删除联系人delPerson(&abs);break;case 4://查找联系人findPerson(&abs);break;case 5://修改联系人modifyPerson(&abs);break;case 6://清空联系人cleanPerson(&abs);break;default:break;}}system("pause");return 0;
}

各部分功能讲解见:[黑马程序员C++笔记]P72-P83通讯录管理系统_冲冲冲鸭鸭鸭~的博客-CSDN博客

[黑马程序员C++笔记]P72-P83通讯录管理系统总体概览相关推荐

  1. [黑马程序员C++笔记]P72-P83通讯录管理系统

    目录 系统需求 1.菜单功能 2.退出功能 3.添加联系人 (1)​​​​​​​设计联系人结构体 (2) 设计通讯录结构体 ​​​​​​​(3)main函数中创建通讯录 (4)封装添加联系人函数 (5 ...

  2. 黑马程序员jvm笔记总集

    黑马程序员jvm笔记(一)–程序计数器 虚拟机栈 堆 黑马程序员jvm笔记(二)–方法区 串池 直接内存 黑马程序员jvm笔记(三)–垃圾回收部分心得 黑马程序员jvm笔记(四)–字节码部分心得 黑马 ...

  3. 黑马程序员C++笔记

    C++ 课程链接: 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 一.C++基础语法 1.变量和常量数据 1.1第一个C++程序 编写一个C++程序总共分 ...

  4. SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...

    @SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...

  5. [黑马程序员C++笔记]P99-P104类和对象-封装

    视频地址:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 目录 P99类和对象-封装-属性和行为作为整体 P100类和对象-封装-案例-设计学生类 P101 ...

  6. 黑马程序员_MongoDB笔记

    根据黑马程序员的课程资料整理所得,仅用于学习使用,如有侵权,请联系删除 1.MongoDB简单介绍 1.1 MongoDB应用场景 应对三高需求 High performance - 对数据库高并发读 ...

  7. 黑马程序员SSM_MybatisPlus笔记(自用)

    MP_1_MybatisPlus简介 1.入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发.提供效率. 开发方式:基于SpringBoot使用M ...

  8. 黑马程序员SSM_Spring笔记(自用)

    根据黑马程序员的课程资料整理所得,仅用于学习使用,如有侵权,请联系删除 目录 Spring Framework(以下简称Spring) Spring的系统架构 Spring_核心概念及入门案例 1.I ...

  9. 零基础学C++——黑马程序员课程笔记(C++核心编程篇)

    封面来自互联网侵删 视频地址:点击访问 (我这里开发工具选用VSstudio) 此笔记有三个系列: C++基础语法入门篇 点击查看 C++核心编程篇 C++提高编程篇 本阶段主要针对C++面向对象编程 ...

最新文章

  1. 人工智能:决胜未来之道培训课程大纲
  2. eclipse javaw.exe in your current path问题
  3. AIML元素详细说明
  4. (八)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训
  5. 【java学习之路】(java框架)011.SpringMVC入门
  6. WGS84经纬度坐标转化成UTM坐标
  7. 关于知云文献翻译出现乱码
  8. java面试题--java基础--迈达斯篇
  9. 解决ES只能查询10000条数据的问题
  10. 【ORBSLAM2点线融合】空间直线参数化
  11. Win11U盘拒绝访问怎么办?Win11U盘拒绝访问的有效解决方法
  12. ValueError: Cannot have number of splits n_splits=3 greater than the number of samples: 1
  13. ForgivingExceptionHandler: An unexpected connection driver error occured (Exception message: Socket
  14. 头歌 初识Redis
  15. Oracle 考试题 原题
  16. 即时通讯 SDK 一对一通讯技术
  17. 高效办公小妙招(三)——15个鲜为人知的的小众网站
  18. 微信浏览器字体调整 PHP,如何针对微信浏览器的调整字体大小功能进行适配?...
  19. Download Oracle Forms 6i
  20. 8086系列(22):中断响铃

热门文章

  1. CentOS7(Linux)源码安装MySQL5.7.35
  2. D类音频功放NTP8849可完美替代TI的TAS5805
  3. quot;虽千万人吾往矣quot;出处
  4. 用python获取本地的ip地址
  5. 微同商城小程序体验感
  6. 硬核看球,数据分析足坛转会窗口各队表现
  7. DT科技评论第40期:“影子经纪人”发布漏洞订阅服务,下一次的全球安全事件会在近期接踵而至吗?...
  8. 中国人民公安大学计算机考研,中国人民公安大学考研难吗?
  9. [音乐] 《犬夜叉》主题曲 Misses beyond time - 穿越时空的思念
  10. 主网已经上线的币有哪些_浅谈上线主网后的虚拟币行情