目录

1. 功能分析与实现步骤

2. 代码编写

2.1 联系人和通讯录结构体设计

2.2 通讯录页面

2.3 添加联系人

2.4 显示所有联系人

2.5 检测联系人

2.6 删除指定联系人

2.7 查找指定联系人

2.8 更改指定联系人

2.9 清空所有联系人

3. 源码


黑马c++学习:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili

1. 功能分析与实现步骤

需要的功能:
    1.添加联系人:姓名,性别,年龄,联系电话,家庭住址(最多纪录1000人)
    2.显示联系人:显示通讯录中所有联系人信息
    3.删除联系人:按照姓名删除指定联系人
    4.查找联系人:按照姓名查看指定联系人信息
    5.修改联系人:按照姓名重新修改指定联系人
    6.清空联系人:清空通讯录中所有信息
    7.退出通讯录

步骤:
    1.菜单页面的制作
    2.对按键的判断
        2.1 退出的设计
        2.2 添加联系人
                设计联系人结构体
                设计通讯录结构体
                main函数中创建通讯录
                封装添加联系人函数
                测试添加联系人功能
        2.3 显示联系人
        2.4 删除联系人
                需要先实现找到指定联系人的功能
        2.5 查找联系人
        2.6 修改联系人
        2.7 清空通讯录
                删除所有联系人信息,只需要将通讯的联系人数量置为0,做逻辑清空即可

2. 代码编写

2.1 联系人和通讯录结构体设计

// 设计联系人结构体
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;
};

2.2 通讯录页面

// 1.菜单页面
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;
}

2.3 添加联系人

// 2.添加联系人
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 << "请输入性别(1:男  2:女):" << endl;int sex = 0;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_size].m_sex = sex;break;}cout << "输入有误,请重新输入" << endl;}// 年龄int age;cout << "请输入年龄:" << endl;while (true){cin >> age;if (age >= 0 && age <= 120){abs->personArray[abs->m_size].m_age = age;break;}cout << "输入有误,请重新输入" << endl;}// 电话string phone;cout << "请输入电话:" << endl;cin >> phone;abs->personArray[abs->m_size].m_Phone = phone;// 地址string address;cout << "请输入地址:" << endl;cin >> address;abs->personArray[abs->m_size].m_Addr = address;// 更新通讯录人数abs->m_size++;cout << "添加成功" << endl;system("pause");   // 按下任意键继续system("cls");      // 清屏}
}

2.4 显示所有联系人

// 显示联系人
void showPerson(Addressbooks* abs)
{// 判断通讯录中人数是否为0if (abs->m_size == 0){cout << "通讯录为空" << endl;return;}else{for (int i = 0; i < abs->m_size; i++){cout << "姓名:" << abs->personArray[i].m_Name << "\t";cout << "性别(1:男  2:女):" << (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
int isExit(Addressbooks* abs, string name)
{for (int i = 0; i < abs->m_size; i++){if (abs->personArray[i].m_Name == name){return i;}}return -1;
}

2.6 删除指定联系人

// 删除指定联系人
void deletePerson(Addressbooks* abs)
{cout << "请输入删除联系人姓名:" << endl;string name;cin >> name;int judge;judge = isExit(abs, name);if(judge == -1){cout << "查无此人" << endl;}else{// 数据前移for (int i = judge; i < abs->m_size; i++){abs->personArray[i] = abs->personArray[i + 1];}abs->m_size--;cout << "删除成功" << endl;}system("pause");system("cls");
}

2.7 查找指定联系人

// 查找指定联系人
void findPerson(Addressbooks* abs)
{cout << "请输入查找的联系人姓名:" << endl;string name;cin >> name;int judge;judge = isExit(abs, name);if (judge == -1){cout << "查无此人" << endl;}else{cout << "姓名:" << abs->personArray[judge].m_Name << endl;cout << "性别(1:男  2:女):" << (abs->personArray[judge].m_sex == 1 ? "男" : "女") << endl;cout << "年龄:" << abs->personArray[judge].m_age << endl;cout << "电话:" << abs->personArray[judge].m_Phone << endl;cout << "地址" << abs->personArray[judge].m_Addr << endl;}system("pause");system("cls");
}

2.8 更改指定联系人

// 更改指定联系人
void modifyPerson(Addressbooks* abs)
{cout << "请输入更改的联系人姓名:" << endl;string name;cin >> name;int judge;judge = isExit(abs, name);if (judge == -1){cout << "查无此人" << endl;}else{while (true){cout << "姓名:" << abs->personArray[judge].m_Name << endl;cout << "性别(1:男  2:女):" << (abs->personArray[judge].m_sex == 1 ? "男" : "女") << endl;cout << "年龄:" << abs->personArray[judge].m_age << endl;cout << "电话:" << abs->personArray[judge].m_Phone << endl;cout << "地址" << abs->personArray[judge].m_Addr << "\n" << endl;cout << "请输入要修改的内容\n1:姓名\t2:性别\t3:年龄\t4:电话\t5:地址\t0:退出" << endl;int rev;cin >> rev;switch (rev){case 1:{cout << "请输入更改后的姓名" << endl;string new_name;cin >> new_name;abs->personArray[judge].m_Name = new_name;break;}case 2:{cout << "请输入更改后的性别" << endl;int new_sex;while (true){cin >> new_sex;if (new_sex == 1 || new_sex == 2){abs->personArray[judge].m_sex = new_sex;break;}cout << "输入有误,请重新输入" << endl;}break;}case 3:{int new_age;cout << "请输入更改后的年龄:" << endl;while (true){cin >> new_age;if (new_age >= 0 && new_age <= 120){abs->personArray[judge].m_age = new_age;break;}cout << "输入有误,请重新输入" << endl;}break;}case 4:{string new_phone;cout << "请输入更改后的电话:" << endl;cin >> new_phone;abs->personArray[judge].m_Phone = new_phone;break;}case 5:{// 地址string new_address;cout << "请输入地址:" << endl;cin >> new_address;abs->personArray[judge].m_Addr = new_address;break;}case 0:{cout << "修改完成" << endl;system("pause");system("cls");return;}default:break;}system("pause");system("cls");}}
}

2.9 清空所有联系人

// 清空所有联系人
void cleanPerson(Addressbooks* abs)
{cout << "是否确认清空,确认请按1,返回请按0" << endl;int nub;cin >> nub;while (true){if (nub == 1){abs->m_size = 0;cout << "所有联系人已清空" << endl;system("pause");system("cls");return;}else if (nub == 0){cout << "返回主菜单" << endl;system("pause");system("cls");return;}else{cout << "请重新输入,确认请按1,返回请按0" << endl;cin >> nub;}}
}

3. 源码

#include<iostream>
using namespace std;
#include<string>
#define MAX 1000// 设计联系人结构体
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;
};// 1.菜单页面
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;
}// 2.添加联系人
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 << "请输入性别(1:男  2:女):" << endl;int sex = 0;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_size].m_sex = sex;break;}cout << "输入有误,请重新输入" << endl;}// 年龄int age;cout << "请输入年龄:" << endl;while (true){cin >> age;if (age >= 0 && age <= 120){abs->personArray[abs->m_size].m_age = age;break;}cout << "输入有误,请重新输入" << endl;}// 电话string phone;cout << "请输入电话:" << endl;cin >> phone;abs->personArray[abs->m_size].m_Phone = phone;// 地址string address;cout << "请输入地址:" << endl;cin >> address;abs->personArray[abs->m_size].m_Addr = address;// 更新通讯录人数abs->m_size++;cout << "添加成功" << endl;system("pause");   // 按下任意键继续system("cls");      // 清屏}
}// 显示联系人
void showPerson(Addressbooks* abs)
{// 判断通讯录中人数是否为0if (abs->m_size == 0){cout << "通讯录为空" << endl;return;}else{for (int i = 0; i < abs->m_size; i++){cout << "姓名:" << abs->personArray[i].m_Name << "\t";cout << "性别(1:男  2:女):" << (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
int isExit(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 deletePerson(Addressbooks* abs)
{cout << "请输入删除联系人姓名:" << endl;string name;cin >> name;int judge;judge = isExit(abs, name);if(judge == -1){cout << "查无此人" << endl;}else{// 数据前移for (int i = judge; 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 judge;judge = isExit(abs, name);if (judge == -1){cout << "查无此人" << endl;}else{cout << "姓名:" << abs->personArray[judge].m_Name << endl;cout << "性别(1:男  2:女):" << (abs->personArray[judge].m_sex == 1 ? "男" : "女") << endl;cout << "年龄:" << abs->personArray[judge].m_age << endl;cout << "电话:" << abs->personArray[judge].m_Phone << endl;cout << "地址" << abs->personArray[judge].m_Addr << endl;}system("pause");system("cls");
}// 更改指定联系人
void modifyPerson(Addressbooks* abs)
{cout << "请输入更改的联系人姓名:" << endl;string name;cin >> name;int judge;judge = isExit(abs, name);if (judge == -1){cout << "查无此人" << endl;}else{while (true){cout << "姓名:" << abs->personArray[judge].m_Name << endl;cout << "性别(1:男  2:女):" << (abs->personArray[judge].m_sex == 1 ? "男" : "女") << endl;cout << "年龄:" << abs->personArray[judge].m_age << endl;cout << "电话:" << abs->personArray[judge].m_Phone << endl;cout << "地址" << abs->personArray[judge].m_Addr << "\n" << endl;cout << "请输入要修改的内容\n1:姓名\t2:性别\t3:年龄\t4:电话\t5:地址\t0:退出" << endl;int rev;cin >> rev;switch (rev){case 1:{cout << "请输入更改后的姓名" << endl;string new_name;cin >> new_name;abs->personArray[judge].m_Name = new_name;break;}case 2:{cout << "请输入更改后的性别" << endl;int new_sex;while (true){cin >> new_sex;if (new_sex == 1 || new_sex == 2){abs->personArray[judge].m_sex = new_sex;break;}cout << "输入有误,请重新输入" << endl;}break;}case 3:{int new_age;cout << "请输入更改后的年龄:" << endl;while (true){cin >> new_age;if (new_age >= 0 && new_age <= 120){abs->personArray[judge].m_age = new_age;break;}cout << "输入有误,请重新输入" << endl;}break;}case 4:{string new_phone;cout << "请输入更改后的电话:" << endl;cin >> new_phone;abs->personArray[judge].m_Phone = new_phone;break;}case 5:{// 地址string new_address;cout << "请输入地址:" << endl;cin >> new_address;abs->personArray[judge].m_Addr = new_address;break;}case 0:{cout << "修改完成" << endl;system("pause");system("cls");return;}default:break;}system("pause");system("cls");}}
}// 清空所有联系人
void cleanPerson(Addressbooks* abs)
{cout << "是否确认清空,确认请按1,返回请按0" << endl;int nub;cin >> nub;while (true){if (nub == 1){abs->m_size = 0;cout << "所有联系人已清空" << endl;system("pause");system("cls");return;}else if (nub == 0){cout << "返回主菜单" << endl;system("pause");system("cls");return;}else{cout << "请重新输入,确认请按1,返回请按0" << endl;cin >> nub;}}
}int main()
{// 创建通讯录结构体变量Addressbooks abs;// 初始化通讯录中当前人员个数abs.m_size = 0;int select = 0;     // 用户选择变量while (true){showMenu();cin >> select;switch (select){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:        // 清空联系人cleanPerson(&abs);break;case 0:     // 退出通讯录{cout << "欢迎下次使用" << endl;system("pause");return 0;}default:break;}}
}

通讯录管理系统(C++)相关推荐

  1. c语言个人通讯录管理系统实验报告_C语言实现个人通讯录管理系统

    如何用c语言制作简易的个人通讯录管理系统?想必这是每一位初步学习c语言的同学需要解决的一个大问题.如何将这些数据类型不完全相同的数据元素存储并访问呢?采用结构体便能轻松解决这个问题! #include ...

  2. c++小项目:通讯录管理系统

    该项目非常适合新手c++的同学来做(当然也包括我),先看一个通讯录管理系统需要写什么东西. 学习于:https://www.bilibili.com/video/BV1et411b73Z?p=75(自 ...

  3. 教你如何用python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了python实现学生通讯录管理系统的具 ...

  4. android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

  5. 单位员工通讯录管理系统(线性表的应用)

    [问题描述] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话.手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息的查询.修改.插入与删除.以及整个通讯录表的输出. ...

  6. 【黑马程序员 C++教程从0到1入门编程】【笔记2】通讯录管理系统

    黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难 文章目录 1.系统需求 2.创建项目 2.1 创建项目 3.菜单功能 4.退出功能 5.添加联系人 5.1 设计联系人结构体 5.2 设 ...

  7. c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

  8. python通讯录管理程序的用户可行性_通讯录管理系统项目可行性分析

    通讯录管理系统可行性 分析报告 一.可行性研究报告 .................................................................. 错 误!未定义 ...

  9. C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 01.系统需求 02.创建项目 2.1 创建项目 2.2 添加文件 03.菜单功能 04.退出功能 05.添加联系人 5.1 设 ...

  10. 一个很Low的通讯录管理系统(但是能用)C/C++单链表实现

    通讯录管理系统的设计 问题需求分析 在计算机还未普及之前通讯管理都是由联系人采用名片,通讯录往往采用的是笔录手工记帐的方式来操作的.现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程 ...

最新文章

  1. python使用函数的优点-Lambda表达式在Python中的优点和缺点
  2. OpenCV中利用cvConvertScale()将图像的数据类型由u8转化为64f...
  3. 告警系统的一些痛点思考
  4. IOS正则表达式的用法简介
  5. CSS-带尖角的对话框
  6. 使用码云中文乱码问题解决
  7. 在Java中给出的时间
  8. 具体解释Android中AsyncTask的使用
  9. 图像检索:一维直方图+欧几里得距离+flann+KNN
  10. 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
  11. HTML5期末大作业:家乡网站设计——石家庄(10页) HTML+CSS+JavaScrip 旅游网页html 家乡介绍html网页设计 dw旅游景点网页设计 web课程设计网页规划与设计
  12. STM32单片机定时器
  13. 一个菜鸟关于winrar密码无法秒破的研究结果
  14. Iexplore.exe[XXXX]中发生未处理的win32异常”解决办法
  15. adobe 免费素材库
  16. 蒲公英 · JELLY技术周刊 Vol.26: 请问您这个月要来点肝么?
  17. 世界杯吉祥物玩偶难产?俄罗斯人紧急求助这个杭州男人
  18. 没有学历没有工作经验的程序员怎么找工作
  19. 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
  20. 51单片机驱动无源蜂鸣器

热门文章

  1. 文字不换行、显示省略号
  2. c语言编程三角形面积计算,c语言计算三角形面积代码
  3. linux测试usb显示速率,linux 测试usb写入和读取速度
  4. 怎么把一个PDF文件拆分成多个?
  5. R语言:SVD分解求解线性方程组AX=b
  6. android qq聊天图片无法显示,QQ聊天时无法打开图片
  7. MySQL- where条件 in 条件优化
  8. 【模拟器】Android Studio模拟器运行自己的编译的Android源码镜像
  9. 黑马程序员2022新版python教程补充(P61)
  10. [Excel知识技能] Excel数据类型