前言:我是在B站上看黑马的视频来学习的c++,看着这个项目还不错,就整理下来分享给大家了。所以说,原作者是黑马的老师。B站链接为:https://www.bilibili.com/video/BV1et411b73Z?t=6&p=82

通讯录管理系统

  • 1、系统需求
  • 2、创建项目
  • 3、菜单显示(功能)
  • 4、设计联系人和通讯录结构体
  • 5、设计主函数
    • 5-1.创建通讯录结构体变量(abs)
    • 5-2.通过switch语句,搭建整体框架
    • 5-3.实现退出功能(case 0)
  • 6、添加联系人
  • 7、显示联系人
  • 8、删除联系人
    • 8-1.检测联系人是否存在
    • 8-2.删除指定联系人
  • 9、查找联系人
  • 10、修改联系人
  • 11、清空联系人
  • **整体代码**

1、系统需求

通讯录是一个可以记录亲人、好友信息的工具。
本教程主要利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:
添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
显示联系人:显示通讯录中所有联系人信息
删除联系人:按照姓名进行删除指定联系人
查找联系人:按照姓名查看指定联系人信息
修改联系人:按照姓名重新修改指定联系人
清空联系人:清空通讯录中所有信息
退出通讯录:退出当前使用的通讯录

2、创建项目

我相信大家都会创建一个c++项目,并且为他添加.cpp文件

3、菜单显示(功能)

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

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

//设计联系人结构体
struct Person
{//姓名string m_name;//性别 1.男 2.女int m_sex;//年龄int m_age;//手机号string m_phone;//家庭住址string m_add;
};
//设计通讯录结构体
struct Addressbooks
{//保存联系人的数组struct Person personArry[MAX];//通讯录中当前记录联系人个数int m_size;
};

5、设计主函数

5-1.创建通讯录结构体变量(abs)

5-2.通过switch语句,搭建整体框架

5-3.实现退出功能(case 0)

#include<iostream>
#include<string>
using namespace std;
#define MAX 1000
int main()
{//创建通讯录结构体变量struct Addressbooks abs;//初始化通讯录中当前人员个数abs.m_size=0;int select=0;while(true){//菜单调用showMenu();cin >>select;switch(select){case 1://1.添加联系人break;case 2://2.显示联系人break;case 3://3.删除联系人break;case 4://4.查找联系人break;case 5://5.修改联系人break;case 6://6.清空联系人break;case 0://0.退出通讯录cout<<"欢迎下次使用"<<endl;return 0;break;default:break;}}system("pause");return 0;
}

6、添加联系人

//1、添加联系人(函数实现)
void addPerson(struct Addressbooks *abs)
{//判断通讯录是否已满,如果满了就不再添加if(abs->m_size==MAX){cout<<"通讯录已满,无法添加"<<endl;return;}else{//姓名string name;cout<<"请输入姓名:"<<endl;cin>>name;abs->personArry[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->personArry[abs->m_size].m_sex=sex;break;}cout<<"输入错误,请重新输入"<<endl;}//年龄cout<<"请输入年龄:"<<endl;int age=0;cin>>age;abs->personArry[abs->m_size].m_age=age;//电话cout<<"请输入联系电话:"<<endl;string phone;cin>>phone;abs->personArry[abs->m_size].m_phone=phone;//住址cout <<"请输入家庭住址:"<<endl;string add;cin>>add;abs->personArry[abs->m_size].m_add=add;//更新通讯录人数abs->m_size++;cout<<"添加成功"<<endl;system("pause");//请按任意键继续system("cls");//清屏操作}
}

同时在main函数中调用该函数

 case 1://1.添加联系人addPerson(&abs);//利用地址传递,可以修饰实参break;

7、显示联系人

//2、显示所有联系人(函数实现)
void showPerson(struct Addressbooks *abs)
{if(abs->m_size==0){cout<<"当前记录为空"<<endl;}else{for(int i=0;i<abs->m_size;i++){cout<<"姓名:"<<abs->personArry[i].m_name<<"\t";cout<<"性别:"<<(abs->personArry[i].m_sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArry[i].m_age<<"\t";cout<<"联系方式:"<<abs->personArry[i].m_phone<<"\t";cout<<"家庭地址:"<<abs->personArry[i].m_add<<endl;}}system("pause");system("cls");
}

同时在main函数中调用该函数

 case 2://2.显示联系人showPerson(&abs);break;

8、删除联系人

8-1.检测联系人是否存在

//3-1、检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1  通讯录  参数2  对比姓名
int isExist(struct Addressbooks *abs,string name)
{for(int i=0;i<abs->m_size;i++){//找到用户输入的姓名了if(abs->personArry[i].m_name==name){return i;//找到了,返回这个人在数组中的下标编号}}return -1;//如果遍历结束都没有找到,返回-1
}

在这里我们测试该函数是否正确,在main函数中调用该函数,因为代码比较多,用{}括起来,以免出错。

 case 3://3.删除联系人{cout<<"请输入删除联系人的姓名:"<<endl;string name;cin>>name;if(isExist(&abs,name)==-1){cout<<"查无此人"<<endl;}else{cout<<"找到此人"<<endl;}}break;

测试完直接注释掉或者删除这个代码就可以,只做测试用。

8-2.删除指定联系人

void deletePerson(struct Addressbooks *abs)
{cout<<"请输入您要删除的联系人"<<endl;string name;cin>>name;//ret==-1 未查到//ret!=-1 查到了int ret=isExist(abs,name);//调用检验联系人是否存在函数,如果找到联系人就删除if(ret!=-1){for(int i=ret;i<abs->m_size;i++){//数据前移abs->personArry[i]=abs->personArry[i+1];}abs->m_size--;//更新通讯录中的人员数cout<<"删除成功"<<endl;//提示联系人删除成功}else{cout<<"查无此人"<<endl;}system("pause");system("cls");
}

同时在main函数中调用该函数

 case 3://3.删除联系人deletePerson(&abs);break;

9、查找联系人

//4、查找联系人
void findPerson(struct Addressbooks *abs)
{cout<<"请输入您要查找的联系人"<<endl;string name;cin>>name;int ret=isExist(abs,name);if(ret!=-1)//找到联系人{cout<<"姓名:"<<abs->personArry[ret].m_name<<"\t";cout<<"性别:"<<(abs->personArry[ret].m_sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArry[ret].m_age<<"\t";cout<<"联系方式:"<<abs->personArry[ret].m_phone<<"\t";cout<<"家庭地址:"<<abs->personArry[ret].m_add<<endl;}else//未找到{cout<<"查无此人"<<endl;}system("pause");system("cls");
}

同时在main函数中调用该函数

case 4://4.查找联系人findPerson(&abs);break;

10、修改联系人

//5、修改指定联系人信息
void modifyPerson(struct Addressbooks *abs)
{cout<<"请输入您要修改的联系人"<<endl;string name;cin>>name;int ret=isExist(abs,name);if(ret!=-1)//找到指定联系人{//姓名string name;cout<<"请输入姓名:"<<endl;cin>>name;abs->personArry[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->personArry[ret].m_sex=sex;break;}else{cout<<"输入有误,请重新输入"<<endl;}}//年龄cout<<"请输入年龄"<<endl;int age=0;cin>>age;abs->personArry[ret].m_age=age;//电话cout<<"请输入联系电话"<<endl;string phone;cin>>phone;abs->personArry[ret].m_phone=phone;//家庭住址cout<<"请输入家庭住址"<<endl;string add;cin>>add;abs->personArry[ret].m_add=add;cout<<"修改成功!"<<endl;}else//未找到联系人{cout<<"查无此人"<<endl;}system("pause");system("cls");
}

同时在main函数中调用该函数

 case 5://5.修改联系人modifyPerson(&abs);break;

11、清空联系人

//6、清空所有的联系人
void cleanPerson(struct Addressbooks *abs)
{abs->m_size=0;//将当前记录联系人数量置为0,做逻辑清空操作cout<<"通讯录已清空!"<<endl;system("pause");system("cls");
}

同时在main函数中调用该函数,并做一个提示功能

 case 6://6.清空联系人{cout<<"是否清空所有联系人"<<endl;//做一个提示功能cout<<"1---是"<<endl;cout<<"2---否"<<endl;int a;cin>>a;if(a==1)//确认删除cleanPerson(&abs);else//不删除,做清屏操作{system("pause");system("cls");}}break;

到这里,我们的通讯录管理系统的所有功能已经全部完成

整体代码

#include<iostream>
#include<string>
using namespace std;
#define MAX 1000
//设计联系人结构体
struct Person
{//姓名string m_name;//性别 1.男 2.女int m_sex;int m_age;string m_phone;string m_add;
};
//设计通讯录结构体
struct Addressbooks
{//保存联系人的数组struct Person personArry[MAX];//通讯录中当前记录联系人个数int m_size;
};
//1、添加联系人(函数实现)
void addPerson(struct Addressbooks *abs)
{//判断通讯录是否已满,如果满了就不再添加if(abs->m_size==MAX){cout<<"通讯录已满,无法添加"<<endl;return;}else{//姓名string name;cout<<"请输入姓名:"<<endl;cin>>name;abs->personArry[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->personArry[abs->m_size].m_sex=sex;break;}cout<<"输入错误,请重新输入"<<endl;}//年龄cout<<"请输入年龄:"<<endl;int age=0;cin>>age;abs->personArry[abs->m_size].m_age=age;//电话cout<<"请输入联系电话:"<<endl;string phone;cin>>phone;abs->personArry[abs->m_size].m_phone=phone;//住址cout <<"请输入家庭住址:"<<endl;string add;cin>>add;abs->personArry[abs->m_size].m_add=add;//更新通讯录人数abs->m_size++;cout<<"添加成功"<<endl;system("pause");//请按任意键继续system("cls");//清屏操作}
}
//2、显示所有联系人(函数实现)
void showPerson(struct Addressbooks *abs)
{if(abs->m_size==0){cout<<"当前记录为空"<<endl;}else{for(int i=0;i<abs->m_size;i++){cout<<"姓名:"<<abs->personArry[i].m_name<<"\t";cout<<"性别:"<<(abs->personArry[i].m_sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArry[i].m_age<<"\t";cout<<"联系方式:"<<abs->personArry[i].m_phone<<"\t";cout<<"家庭地址:"<<abs->personArry[i].m_add<<endl;}}system("pause");system("cls");
}
//3-1、检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1  通讯录  参数2  对比姓名
int isExist(struct Addressbooks *abs,string name)
{for(int i=0;i<abs->m_size;i++){//找到用户输入的姓名了if(abs->personArry[i].m_name==name){return i;//找到了,返回这个人在数组中的下标编号}}return -1;//如果遍历结束都没有找到,返回-1
}
//3-2、删除指定联系人
void deletePerson(struct Addressbooks *abs)
{cout<<"请输入您要删除的联系人"<<endl;string name;cin>>name;//ret==-1 未查到//ret!=-1 查到了int ret=isExist(abs,name);if(ret!=-1){for(int i=ret;i<abs->m_size;i++){//数据前移abs->personArry[i]=abs->personArry[i+1];}abs->m_size--;//更新通讯录中的人员数cout<<"删除成功"<<endl;}else{cout<<"查无此人"<<endl;}system("pause");system("cls");
}
//4、查找联系人
void findPerson(struct Addressbooks *abs)
{cout<<"请输入您要查找的联系人"<<endl;string name;cin>>name;int ret=isExist(abs,name);if(ret!=-1)//找到联系人{cout<<"姓名:"<<abs->personArry[ret].m_name<<"\t";cout<<"性别:"<<(abs->personArry[ret].m_sex==1?"男":"女")<<"\t";cout<<"年龄:"<<abs->personArry[ret].m_age<<"\t";cout<<"联系方式:"<<abs->personArry[ret].m_phone<<"\t";cout<<"家庭地址:"<<abs->personArry[ret].m_add<<endl;}else//未找到{cout<<"查无此人"<<endl;}system("pause");system("cls");
}
//5、修改指定联系人信息
void modifyPerson(struct Addressbooks *abs)
{cout<<"请输入您要修改的联系人"<<endl;string name;cin>>name;int ret=isExist(abs,name);if(ret!=-1)//找到指定联系人{//姓名string name;cout<<"请输入姓名:"<<endl;cin>>name;abs->personArry[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->personArry[ret].m_sex=sex;break;}else{cout<<"输入有误,请重新输入"<<endl;}}//年龄cout<<"请输入年龄"<<endl;int age=0;cin>>age;abs->personArry[ret].m_age=age;//电话cout<<"请输入联系电话"<<endl;string phone;cin>>phone;abs->personArry[ret].m_phone=phone;//家庭住址cout<<"请输入家庭住址"<<endl;string add;cin>>add;abs->personArry[ret].m_add=add;cout<<"修改成功!"<<endl;}else//未找到联系人{cout<<"查无此人"<<endl;}system("pause");system("cls");
}
//6、清空所有的联系人
void cleanPerson(struct Addressbooks *abs)
{abs->m_size=0;//将当前记录联系人数量置为0,做逻辑清空操作cout<<"通讯录已清空!"<<endl;system("pause");system("cls");
}//菜单界面
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()
{//创建通讯录结构体变量struct Addressbooks abs;//初始化通讯录中当前人员个数abs.m_size=0;int select=0;while(true){//菜单调用showMenu();cin >>select;switch(select){case 1://1.添加联系人addPerson(&abs);//利用地址传递,可以修饰实参break;case 2://2.显示联系人showPerson(&abs);break;case 3://3.删除联系人deletePerson(&abs);break;case 4://4.查找联系人findPerson(&abs);break;case 5://5.修改联系人modifyPerson(&abs);break;case 6://6.清空联系人{cout<<"是否清空所有联系人"<<endl;//做一个提示功能cout<<"1---是"<<endl;cout<<"2---否"<<endl;int a;cin>>a;if(a==1)//确认删除cleanPerson(&abs);else//不删除,做清屏操作{system("pause");system("cls");}}break;case 0://0.退出通讯录cout<<"欢迎下次使用"<<endl;return 0;break;default:break;}}system("pause");return 0;
}

如有错误大家积极指正

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. android 自定义扫地机器人地图,扫地机如何正确操作进行APP建图?
  2. python【力扣LeetCode算法题库】1160-拼写单词
  3. 能够提高开发效率的Eclipse实用操作
  4. c语言 linker error,[Linker error] undefined reference to `prinf'的问题!
  5. SPU、SKU、ARPU
  6. 利用ORB/AKAZE特征点进行图像配准
  7. 阿里研究院入选中国企业智库系统影响力榜
  8. 设置pandas显示行数_Pandas这样来设置,做数据分析舒适百倍
  9. LINUX编译mate-desktop/pluma-1.24.0文本编辑器
  10. 2015061906 - firebug安装和下载(2)
  11. 零基础入门学习的UG模具设计技巧
  12. 【螺钉和螺母问题】【算法分析与设计】假设我们有n个直径各不相同的螺钉以及n个相应的螺母...
  13. Capstone CS5218转接设计|DP转HDMI 4K 30HZ转接电路|Display to hdmi2.0b转接线电路
  14. ROS和ROS2.0到底该用哪个呢?
  15. 动物识别系统代码python_动物识别系统 代码
  16. “5G通达,AI赋能“ AI在网络规划中的应用实践(人工智能应用案例)
  17. 线性代数之 向量空间几何学(1)仿射
  18. Android百度地图的基本使用
  19. 2021年12月远程网络教育大学英语B统考题库复习真题(完整版)
  20. 关于AES:加密方式,让你的APK无懈可击,字节跳动Android面试全套真题解析在互联网火了

热门文章

  1. Acwing 3812.机器人走迷宫【全排列】
  2. 家用车,选择轿车还是SUV
  3. 关于《系统集成项目管理工程师》——建筑与建筑群综合布线工程中常见的术语和符号精华汇总
  4. 实时响应数据之短轮询和长轮询
  5. Oracle数据库密码过期,更改数据库密码180天限制
  6. 2019,篮球明星科比进军区块链?
  7. python kwargs
  8. HBase行键设计原则
  9. 热门智能手表!OPPO华为苹果强强对决,哪款值得买?
  10. 大讲台大数据运维尖刀班4期