C/C++实现通讯录管理系统(附源码)
我想当程序y 人气:0首先是程序的功能,该程序主要可以实现以下功能:一)添加联系人 二)显示联系人 三)删除联系人 四)查找联系人 五)修改联系人 六)清空联系人 七)退出通讯录。
程序中用到的知识点主要有:结构体、结构体数组、指针、函数等。
程序部分功能展示
以下是部分程序功能演示:
各个功能的代码实现
菜单
我们首先制作一个程序的菜单,为后续功能的实现做铺垫。
我们先编写一个显示菜单的函数:
void showMenu(){ cout<<"1.添加联系人:"<<endl; cout<<"2.显示联系人:"<<endl; cout<<"3.删除联系人:"<<endl; cout<<"4.查找联系人"<<endl; cout<<"5.修改联系人"<<endl; cout<<"6.清空联系人"<<endl; cout<<"0.退出通讯录"<<endl; }
大家也可以在菜单显示时改变行距或者加入一些符号让它变的更美观~~~
然后,在主函数中定义一个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<<"通讯录已满,无法添加!"<<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(1){ 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");//清屏 }}
为了使程序更加的美观易读,在完成添加之后,执行清屏操作,这里调用了c++中的系统函数即system(”cls“)
显示联系人
显示联系人的函数
完整源码
以下是完整的源码
#include<iostream> using namespace std; #include<string> #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<<"通讯录已满,无法添加!"<<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(1){ 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");//清屏 } //显示菜单 void showMenu(){ cout<<"1.添加联系人:"<<endl; cout<<"2.显示联系人:"<<endl; cout<<"3.删除联系人:"<<endl; cout<<"4.查找联系人"<<endl; cout<<"5.修改联系人"<<endl; cout<<"6.清空联系人"<<endl; cout<<"0.退出通讯录"<<endl; } //3.检测联系人是否存在,如果存在,返回联系人在数组中的具体位置,不存在返回-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;//遍历结束仍然没有找到 } //3.删除指定联系人 void deletePerson(Addressbooks *abs ){ cout<<"请输入您要删除的联系人"<<endl; string name; cin>>name; int ret=isExist(abs,name);//if ret=-1.未查到该人 else 查到了 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"); } //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 ==1?"男":"女")<<"\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; //性别 int sex=0; cout<<"请输入性别:"<<endl; cout<<"1---男"<<endl<<"2---女"<<endl; while(1){ 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.清空联系人 //实现思路:只要将记录的联系人数重置为0,就可以实现逻辑情空 void cleanPerson(Addressbooks *abs){ abs->m_Size =0; cout<<"通讯录已清空"<<endl; system("pause"); system("cls"); } //主函数 int main(){ char qingkong; system ("color F1"); //创建通讯录结构体变量 Addressbooks abs; //初始化通讯录当中当前人员个数 //调用菜单 abs.m_Size=0; int select=0;//创建用户选择输入的变量 while(1){ showMenu(); cin>>select; switch(select) { case 1://添加联系人 addPerson(& abs); break;//添加联系人//功能:设置上限1000人 //步骤:设置联系人结构体和通讯录结构体 main函数中创建通讯录 封装添加联系人函数 测试添加联系人功能 case 2: showPerson (& abs);//地址传递,可以改变实参的值 break;//显示联系人 case 3://case语句如果很长的话最好用括号括起来形成一个代码段 /*{ cout<<"请输入删除联系人的姓名:"<<endl; string name; cin>>name; if(isExist ==-1)cout<<"查无此人"<<endl; else cout<<"找到此人"<<endl;}*/ //检测练习人是否存在 deletePerson(&abs); break;//删除联系人 1.判断联系人是否存在 2.删除联系人函数 case 4: findPerson (&abs); break;//查找联系人 case 5: modifyPerson (&abs); break;//修改联系人 按照姓名重新修改指定联系人 case 6: cout<<"你确定要清空通讯录吗?(Y or N)" <<endl; cin>>qingkong; if(qingkong=='Y'||qingkong=='y'){ cleanPerson (&abs);} else system("pause");//按任意键继续 system ("cls");//清屏 break;//清空联系人 case 0: //退出通讯录 cout<<"欢迎下次使用"<<endl; system ("pause");//暂停,等待用户输入 return 0; break; default: break; }}}
加载全部内容