目录

系统需求

1、菜单功能

2、退出功能

3、添加联系人

(1)​​​​​​​设计联系人结构体

(2) 设计通讯录结构体

​​​​​​​(3)main函数中创建通讯录

(4)封装添加联系人函数

(5)测试

4、显示联系人

(1)封装显示联系人函数

(2)测试

5、删除联系人

(1)封装检测联系人是否存在

​​​​​​​(2)封装删除联系人函数

(3)测试

6、查找联系人

​​​​​​​(1)封装查找联系人函数

(2)测试

7、修改联系人

(1)封装修改联系人函数

(2)测试

8、清空联系人

(1)封装清空联系人函数

(2)测试


系统需求

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

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

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

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

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

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

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

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

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

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

1、菜单功能

功能描述: 用户选择功能的界面

菜单界面效果如下图:

步骤:

  • 封装函数显示该界面 如 void showMenu()

  • 在main函数中调用封装好的函数

代码:

#include<iostream>
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() {showMenu();system("pause");return 0;
}

2、退出功能

功能描述:退出通讯录系统

思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建;

当用户选择0时候,执行退出,选择其他先不做操作,也不会退出程序。

代码:

int main() {int select = 0;while (true){showMenu();cin >> select;switch (select){case 1:  //添加联系人break;case 2:  //显示联系人break;case 3:  //删除联系人break;case 4:  //查找联系人break;case 5:  //修改联系人break;case 6:  //清空联系人break;case 0:  //退出通讯录cout << "欢迎下次使用" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}

​​​​​​​3、添加联系人

功能描述:

实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)

添加联系人实现步骤:

  • 设计联系人结构体

  • 设计通讯录结构体

  • main函数中创建通讯录

  • 封装添加联系人函数

  • 测试添加联系人功能

代码:

(1)​​​​​​​设计联系人结构体

联系人信息包括:姓名、性别、年龄、联系电话、家庭住址

struct  Person {string m_Name; //姓名int m_Sex; //性别:1男 2女int m_Age; //年龄string m_Phone; //电话string m_Addr; //住址
};

(2) 设计通讯录结构体

设计时候可以在通讯录结构体中,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量

#define MAX 1000 //最大人数//通讯录结构体
struct Addressbooks
{struct Person personArray[MAX]; //通讯录中保存的联系人数组int m_Size; //通讯录中人员个数
};

​​​​​​​(3)main函数中创建通讯录

添加联系人函数封装好后,在main函数中创建一个通讯录变量,这个就是我们需要一直维护的通讯录

    //创建通讯录Addressbooks abs;//初始化通讯录中人数abs.m_Size = 0;

(4)封装添加联系人函数

思路:添加联系人前先判断通讯录是否已满,如果满了就不再添加,未满情况将新联系人信息逐个加入到通讯录

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");}
}

(5)测试

4、显示联系人

功能描述:显示通讯录中已有的联系人信息

显示联系人实现步骤:

  • 封装显示联系人函数

  • 测试显示联系人功能

(1)封装显示联系人函数

思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息

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");
}

(2)测试

5、删除联系人

功能描述:按照姓名进行删除指定联系人

删除联系人实现步骤:

  • 封装检测联系人是否存在

  • 封装删除联系人函数

  • 测试删除联系人功能

(1)封装检测联系人是否存在

设计思路:

删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人;

因此我们可以把检测联系人是否存在封装成一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1。

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;}}
}

​​​​​​​(2)封装删除联系人函数

根据用户输入的联系人判断该通讯录中是否有此人,查找到进行删除,并提示删除成功,查不到提示查无此人。

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");
}

(3)测试

6、查找联系人

功能描述:按照姓名查看指定联系人信息

查找联系人实现步骤

  • 封装查找联系人函数

  • 测试查找指定联系人

​​​​​​​(1)封装查找联系人函数

实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。

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");}

(2)测试

7、修改联系人

功能描述:按照姓名重新修改指定联系人

修改联系人实现步骤

  • 封装修改联系人函数

  • 测试修改联系人功能​​​​​​​

(1)封装修改联系人函数

实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人

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");}

(2)测试

8、清空联系人

功能描述:清空通讯录中所有信息

清空联系人实现步骤

  • 封装清空联系人函数

  • 测试清空联系人

(1)封装清空联系人函数

实现思路: 将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。

void cleanPerson(Addressbooks * abs)
{abs->m_Size = 0;cout << "通讯录已清空" << endl;system("pause");system("cls");
}

(2)测试

完成!!!

总体概览可见:[黑马程序员C++笔记]P72-P83通讯录管理系统总体概览_冲冲冲鸭鸭鸭~的博客-CSDN博客

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

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

    系统需求 通讯录是一个可以记录亲人.好友信息的工具. 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名.性别.年龄.联系电话.家 ...

  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. webpack插件机制
  2. 模型预测控制c语言程序_基于数据驱动的模型预测控制
  3. HDFS(一) HDFS设计目标
  4. 【Qt】QBoxLayout类详解
  5. Effective Java之考虑用序列化代理代理序列化实例(七十八)
  6. ***不是已知元素 原因可能是网站中存在编译错误
  7. ios 视频知识补充---分解LFLiveKit
  8. hdu 6086 Rikka with String(AC自动机+状压dp)
  9. 程序员你真的理解final关键字吗?
  10. WannaCry病毒阴魂不散:本田一家工厂受影响停产一天
  11. C语言经典面试题100道(校对详解版)
  12. python获取已打开的网页内容_用Python获取网页数据
  13. 数据库系统-实体-联系模型
  14. Firefox 浏览器更新以后出现书签丢失
  15. 计算机网口速率修改,win7系统修改无线网卡连接速率的操作方法
  16. ZBrush新手推荐使用这17个小技巧和常用快捷键、笔刷
  17. 新机器导致显示器发黄的问题
  18. 关于 git 的用法
  19. 《牧羊少年奇幻之旅》读后感
  20. 学习笔记(1):PR快速入门-认识界面

热门文章

  1. 2012年10月2日
  2. quot;虽千万人吾往矣quot;出处
  3. buuctf-Had a bad day(文件包含)
  4. ping: www.xxx.com: 未知的名称或服务
  5. 腾讯应用宝上架app, 空白包签名步骤
  6. 星起航:抖音小店项目值得投资吗?
  7. 发过离职申请流程的用户撤销流程后无法发短信
  8. 如何用MathType编辑化学等式
  9. 《红楼梦》中文分词以及绘制词云图
  10. 计算机专业课好学吗,计算机专业课程有哪些 学计算机难不难