hello,大家好!今天小冉给大家分享一个通讯录管理系统。如果要了解细节上的东西大家可以去b站搜索”黑马程序员“的c++课程,老师讲的非常清晰细致,程序大体结构都和课程中的相同,我自己做了一点小小的修改,如果大家在该程序的编程实现上出现什么问题都可以在评论区提问。
首先是程序的功能,该程序主要可以实现以下功能:一)添加联系人 二)显示联系人 三)删除联系人 四)查找联系人 五)修改联系人 六)清空联系人 七)退出通讯录。
程序中用到的知识点主要有:结构体、结构体数组、指针、函数等。
以下是部分程序功能演示:
我们首先制作一个程序的菜单,为后续功能的实现做铺垫。
我们先编写一个显示菜单的函数:
void showMenu(){
cout<<"1.添加联系人:"<
大家也可以在菜单显示时改变行距或者加入一些符号让它变的更美观~~~
然后,在主函数中定义一个int型的变量select,从键盘中输入select的值完成对于不同功能的选择,这里用switch case语句来实现。
int select=0;//创建用户选择输入的变量
while(1){
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: //退出通讯录
break;
default: break;
}}
主函数的主要框架就完成啦~!后续的功能我们慢慢添加补充。
实现该部分功能的步骤如下:
1.定义联系人结构体以及通讯录结构体
2.在主函数中创建通讯录
3.封装添加联系人函数
首先是定义联系人结构体和通讯录结构体
//设计联系人结构体(添加联系人)
struct Person{
string m_Name;//姓名
int m_Sex;//性别 男1 女2
int m_Age;//年龄
string m_Phone;//电话
string m_Addr;//住址
};
//设计通讯录结构体(添加联系人)
struct Addressbooks{
struct Person personArray[MAX];//通讯录中保存联系人数组
int m_Size;//记录当前联系人个数
};
联系人结构体中包含联系人的姓名、性别、年龄、电话和地址,这里不过多赘述。
通讯录结构体中包含了一个存储联系人信息的数组,以及记录当前联系人个数的变量。注意,数组的最大限度MAX也就是该通讯录能存储的联系人个数的最大值。这里为了方便,我们在程序前面加上 #define MAX 1000 ,方便修改MAX的值。
创建好结构体之后,我们需要在主函数中创建一个通讯录。即
Addressbooks abs;
好了,做完准备工作之后,我们就要开始编写添加联系人的函数了。注意,因为我们需要改变实参的 值,所以函数的参数需要为指针,进行地址传递。
该函数主要实现以下功能:判断通讯录是否已满,如果未满,添加联系人信息,如果已满,提醒用户,通讯录已满,无法添加!
以下是代码实现:
//1.添加联系人
void addPerson(Addressbooks * abs)
{
//判断通讯录是否已满
if(abs->m_Size==MAX){//参数中的一个项使用.,地址中的一个项使用->,这里的abs是一个地址,所以用->
//指针要用->
cout<<"通讯录已满,无法添加!"<> name;
abs->personArray[abs->m_Size].m_Name=name;
//性别
cout<<"请输入性别: "<> sex;
if(sex==1||sex==2){
abs->personArray[abs->m_Size].m_Sex=sex;
break;
}
cout<<"输入有误,请重新输入"<>age;
abs->personArray [abs->m_Size].m_Age =age;
//电话
cout<<"请输入联系电话: "<>phone;
abs->personArray [abs->m_Size ].m_Phone =phone;
//住址
cout<<"请输入地址:"<>address;
abs->personArray [abs->m_Size ].m_Addr =address ;
//信息录入成功,通讯录人数加一
abs->m_Size ++;
cout<<"添加成功!"<
为了使程序更加的美观易读,在完成添加之后,执行清屏操作,这里调用了c++中的系统函数即system(”cls“)
显示联系人的函数
以下是完整的源码,关于程序有任何的问题都可以在评论区提问~
#include
using namespace std;
#include
#define MAX 1000
//显示菜单界面
//设计联系人结构体(添加联系人)
struct Person{
string m_Name;//姓名
int m_Sex;//性别 男1 女2
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){//参数中的一个项使用.,地址中的一个项使用->,这里的abs是一个地址,所以用->
//指针要用->
cout<<"通讯录已满,无法添加!"<> name;
abs->personArray[abs->m_Size].m_Name=name;
//性别
cout<<"请输入性别: "<> sex;
if(sex==1||sex==2){
abs->personArray[abs->m_Size].m_Sex=sex;
break;
}
cout<<"输入有误,请重新输入"<>age;
abs->personArray [abs->m_Size].m_Age =age;
//电话
cout<<"请输入联系电话: "<>phone;
abs->personArray [abs->m_Size ].m_Phone =phone;
//住址
cout<<"请输入地址:"<>address;
abs->personArray [abs->m_Size ].m_Addr =address ;
//信息录入成功,通讯录人数加一
abs->m_Size ++;
cout<<"添加成功!"<m_Size==0)
{
cout<<"当前记录为空"<m_Size ;i++){
cout<<"姓名:"<personArray [i].m_Name <<"\t";
cout<<"性别:"<<(abs->personArray [i].m_Sex ==1?"男":"女")<<"\t";
cout<<"年龄:"<personArray [i].m_Age <<"\t";
cout<<"电话:"<personArray [i].m_Phone <<"\t";
cout<<"住址:"<personArray [i].m_Addr <m_Size ;i++){
if(abs->personArray [i].m_Name ==name)
{return i;}
}//寻找联系人
return -1;//遍历结束仍然没有找到
}
//3.删除指定联系人
void deletePerson(Addressbooks *abs ){
cout<<"请输入您要删除的联系人"<>name;
int ret=isExist(abs,name);//if ret=-1.未查到该人 else 查到了
if(ret!=-1){
//查到此人,要进行删除操作
for(int i=ret;im_Size;i++){
// 使数据前移,实现逻辑上的删除功能
abs->personArray [i]=abs->personArray [i+1];
}
abs->m_Size --;
cout<<"删除成功!"<>name;//判断指定的联系人是否存在于通讯录中
int ret= isExist(abs,name);
if(ret!=-1){//找到联系人
cout<<"姓名:"<personArray [ret ].m_Name <<"\t";
cout<<"性别:"<<(abs->personArray [ret ].m_Sex ==1?"男":"女")<<"\t";
cout<<"年龄:"<personArray [ret ].m_Age <<"\t";
cout<<"电话:"<personArray [ret ].m_Phone <<"\t";
cout<<"住址:"<personArray [ret ].m_Addr <>name;
int ret=isExist (abs,name);
if(ret!=-1){//找到了指定的联系人
//姓名
string name;
cout<<"请输入修改后的姓名: "<>name;
abs->personArray [ret].m_Name =name;
//性别
int sex=0;
cout<<"请输入性别:"<>sex;
if(sex==1||sex==2){
abs->personArray [ret].m_Sex =sex;
break;
}
cout<<"输入有误,请重新输入"<>age;
abs->personArray [ret ].m_Age =age;
//电话
cout<<"请输入联系电话:"<>phone;
abs->personArray [ret].m_Phone =phone;
//住址
cout<<"请输入住址:"<>address;
abs->personArray [ret].m_Addr =address;
cout<<"修改成功!"<m_Size =0;
cout<<"通讯录已清空"<>select;
switch(select)
{
case 1://添加联系人
addPerson(& abs);
break;//添加联系人//功能:设置上限1000人
//步骤:设置联系人结构体和通讯录结构体 main函数中创建通讯录 封装添加联系人函数 测试添加联系人功能
case 2:
showPerson (& abs);//地址传递,可以改变实参的值
break;//显示联系人
case 3://case语句如果很长的话最好用括号括起来形成一个代码段
/*{
cout<<"请输入删除联系人的姓名:"<>name;
if(isExist ==-1)cout<<"查无此人"<>qingkong;
if(qingkong=='Y'||qingkong=='y'){
cleanPerson (&abs);}
else system("pause");//按任意键继续
system ("cls");//清屏
break;//清空联系人
case 0: //退出通讯录
cout<<"欢迎下次使用"<