通讯录是一个可以记录亲人、好友信息的工具,本博客借助黑马程序员的项目进行修改,利用C++实现一个通讯录管理系统,旨在复习C++的语法。
系统需要实现的功能如下:
//菜单界面
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;
}
int main()
{
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;}}system("pause");return 0;
}
case 0://退出通讯录cout << "欢迎下次使用" << endl;system("pause");return 0;break;
添加联系人实现步骤
#include
using namespace std;//设计联系人结构体
struct Person
{//姓名string m_Name;//性别 1 男 2 女int m_Sex;//年龄int m_Age;//电话string m_Phone;//住址string m_Addr;
};system("pause");return 0;
}
#define MAX 1000//设计通讯录结构体
struct Addressbooks
{//通讯录中保存的联系人数组struct Person personArray[MAX];//通讯录中当前记录联系人个数int m_Size;};
//创建通讯录结构体变量Addressbooks abs;//初始化通讯录中当前人员个数abs.m_Size = 0;
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){//如果输入的是1 或者2可以退出训话,因为输入的是正确值//如果输入有误,重新输入cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_Size].m_Sex = sex;break;}cout << "输入有误,请重新输入" << endl;}//年龄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");//清屏操作}
}
判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息
//2、显示所有联系人
void showPerson(Addressbooks * abs)
{//判断通讯录中人数是否为0,如果为0,提示记录为空//如果不为0,显示记录的联系人信息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");//清屏
}
删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人因此我们可以把检测联系人是否存在封装成一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1
//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1 通讯录 参数2 对比姓名
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;//如果遍历结束都没有找到,返回-1
}
根据用户输入的联系人判断该通讯录中是否有此人查找到进行瑚除,并提示册除成功;查不到提示查无此人
//3、删除指定联系人
void deletePerson(Addressbooks* abs)
{cout << "请输入您要删除的联系人" << endl;string name;cin >> name;//ret == -1 未查到//ret != -1 查到了int ret = isExist(abs, name);if (ret != -1){//查找到人,要进行删除操作for (int i = 0; i < abs->m_Size; i++){//数据前移abs->personArray[i] = abs->personArray[i + 1];}abs->m_Size--;//更新通讯录中的人员数cout << "删除成功" << endl;}else{cout << "查无此人" << endl;}system("pause");system("cls");}
case 3://删除联系人{cout << "请输入删除联系人姓名:" << endl;string name;cin >> name;if (isExist(&abs, name) == -1){cout << "查无此人" << endl;}else{cout << "找到此人" << endl;}}
功能描述:按照姓名查看指定联系人信息
查找联系人实现步骤
判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人
//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");
}
功能描述:按照姓名重新修改指定联系人修改联系人实现步骤
封装修改联系人函数测试修改联系人功能
查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人
//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 << "输入有误,请重新输入" << endl;}//年龄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");
}
清空通讯录中所有信息清空联系人实现步骤
将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可
对用户清空前进行确认操作,确认则清空,否则返回上一级
//6、清空所有联系人
void cleanPerson(Addressbooks * abs)
{cout << "您确认要删除所有联系人吗?" << endl;cout << "1 --- 确认" << endl;cout << "2 --- 返回" << endl;int num = 0;cin >> num;if (num == 1){abs->m_Size = 0;//将当前记录联系人数量置为0,做逻辑清空操作cout << "通讯录已清空" << endl;//按任意键后清屏system("pause");system("cls");}else {system("cls");}
}
全部代码实现:
#include
using namespace std;
#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 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){//如果输入的是1 或者2可以退出训话,因为输入的是正确值//如果输入有误,重新输入cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_Size].m_Sex = sex;break;}cout << "输入有误,请重新输入" << endl;}//年龄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");//清屏操作}
}//2、显示所有联系人
void showPerson(Addressbooks * abs)
{//判断通讯录中人数是否为0,如果为0,提示记录为空//如果不为0,显示记录的联系人信息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");//清屏
}//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1 通讯录 参数2 对比姓名
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;//如果遍历结束都没有找到,返回-1
}//3、删除指定联系人
void deletePerson(Addressbooks* abs)
{cout << "请输入您要删除的联系人" << endl;string name;cin >> name;//ret == -1 未查到//ret != -1 查到了int ret = isExist(abs, name);if (ret != -1){//查找到人,要进行删除操作for (int i = 0; i < abs->m_Size; i++){//数据前移abs->personArray[i] = abs->personArray[i + 1];}abs->m_Size--;//更新通讯录中的人员数cout << "删除成功" << endl;}else{cout << "查无此人" << endl;}system("pause");system("cls");}//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");
}//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 << "输入有误,请重新输入" << endl;}//年龄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");
}//6、清空所有联系人
void cleanPerson(Addressbooks * abs)
{cout << "您确认要删除所有联系人吗?" << endl;cout << "1 --- 确认" << endl;cout << "2 --- 返回" << endl;int num = 0;cin >> num;if (num == 1){abs->m_Size = 0;//将当前记录联系人数量置为0,做逻辑清空操作cout << "通讯录已清空" << endl;//按任意键后清屏system("pause");system("cls");}else {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()
{//创建通讯录结构体变量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://删除联系人//{// cout << "请输入删除联系人姓名:" << endl;// string name;// cin >> name;// if (isExist(&abs, name) == -1)// {// cout << "查无此人" << endl;// }// else// {// cout << "找到此人" << endl;// }//}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;break;}}system("pause");return 0;
}
本次实践的通讯录管理系统熟悉了结构体和指针的使用,更加熟悉C++语法