前言:我是在B站上看黑马的视频来学习的c++,看着这个项目还不错,就整理下来分享给大家了。所以说,原作者是黑马的老师。B站链接为:https://www.bilibili.com/video/BV1et411b73Z?t=6&p=82
通讯录管理系统
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;
}
如有错误大家积极指正