1、简介
最近在学习C++,通过观看黑马的教程进行学习,本文主要对通讯录管理系统的内容进行代码复现笔记,方便以后复习与使用,也方便大家复制使用,节约学习时间。
2、显示函数界面
2.1 函数框架
#include<iostream>
using namespace std;int main()
{system("pause"); return 0;
}
2.2 菜单显示界面
#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;
}
运行结果如下所示:
3 退出功能
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: //7.退出通讯录cout << "欢迎下次使用" << endl;system("pause");//按任意键return 0;//结束这个函数break;default:break;}}
4 添加联系人
实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)
添加联系人实现步骤:
- 设计联系人结构体
- 设计通讯录结构体
- main函数中创建通讯录
- 封装添加联系人函数
- 测试添加联系人功能
4.1 联系人结构体设计
#include <string>
//联系人结构体
struct Person
{string m_Name; //姓名int m_Sex; //性别:1男 2女int m_Age; //年龄string m_Phone; //电话string m_Addr; //住址
};
4.2 通讯录结构体
#define MAX 1000 //最大人数//通讯录结构体
struct Addressbooks
{struct Person personArray[MAX]; //通讯录中保存的联系人数组int m_Size; //通讯录中人员个数
};
4.3 main.c中创建通讯录
//创建通讯录的结构体变量(main)Addressbooks abs;//创建通讯录abs.m_Size = 0;//初始化通讯录中人数
4.4 封装添加联系人函数
//1、添加联系人信息
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;}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");//清屏}
}
4.5 测试添加联系人
选择界面中,如果选择1,代表添加联系人,可以测试下该功能
在switch case 语句中,case1里添加:
case 1: //添加联系人addPerson(&abs);//利用地址传递,修饰实参break;
测试效果如下:
5 显示联系人
功能描述:显示通讯录中已有的联系人信息
5.1 封装显示联系人函数
//2、显示所有联系人信息
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");}
5.2 测试显示联系人
在switch case语句中,case 2 里添加:
case 2: //显示联系人showPerson(&abs);break;
5.3 测试效果
6 删除联系人
功能描述:按照姓名进行删除指定联系人
删除联系人实现步骤:
- 封装检测联系人是否存在
- 封装删除联系人函数
- 测试删除联系人功能
6.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;}}return -1;
}
6.2 封装删除函数
根据用户输入的联系人判断该通讯录中是否有此人
查找到进行删除,并提示删除成功
查不到提示查无此人。
//3、删除指定联系人信息
void deletePerson(Addressbooks * abs)
{cout << "请输入您要删除的联系人" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret != -1){for (int i = ret; i < abs->m_Size; i++){abs->personArray[i] = abs->personArray[i + 1];}abs->m_Size--;cout << "删除成功" << endl;}else{cout << "查无此人" << endl;}system("pause");system("cls");
}
6.3 测试
在switch case 语句中,case3里添加:
case 3: //删除联系人deletePerson(&abs);break;
效果如下所示:
7 查找联系人
功能描述:按照姓名查看指定联系人信息
查找联系人实现步骤
- 封装查找联系人函数
- 测试查找指定联系人
7.1 封装查找函数
实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。
查找联系人代码:
//4、查找指定联系人信息
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");}
7.2 测试
在switch case 语句中,case4里添加:
case 4: //查找联系人findPerson(&abs);break;
测试效果如下所示:
8 修改联系人
功能描述:按照姓名重新修改指定联系人
修改联系人实现步骤
- 封装修改联系人函数
- 测试修改联系人功能
8.1 封装修改联系人
实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人
修改联系人代码:
//5、修改指定联系人信息
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");}
8.2 测试修改联系人功能
在switch case 语句中,case 5里添加:
case 5: //修改联系人modifyPerson(&abs);break;
测试效果如图:
查不到指定联系人情况:
查找到联系人,并修改成功:
再次查看通讯录,确认修改完毕
9、清空联系人
功能描述:清空通讯录中所有信息
清空联系人实现步骤
- 封装清空联系人函数
- 测试清空联系人
9.1 封装清空联系人函数
实现思路: 将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。
清空联系人代码:
//6、清空所有联系人
void cleanPerson(Addressbooks * abs)
{abs->m_Size = 0;cout << "通讯录已清空" << endl;system("pause");system("cls");
}
9.2 测试清空联系人
在switch case 语句中,case 6 里添加:
case 6: //清空联系人cleanPerson(&abs);break;
测试效果如图:
清空通讯录
再次查看信息,显示记录为空