C/C++(通讯录管理系统)
前言
`通讯录管理系统的开发过程:
为了巩固和运用大一上学期对C/C++编程语言的学习,我选择通讯录管理系统作为大学第一个开发项目。
本项目会用C++语言实现通讯录管理系统,该系统可以储存若干联系人的信息包括:姓名、性别、年龄、联系电话、家庭住址。
该系统的功能包括:
1、添加联系人
2、显示联系人
3、删除联系人
4、查找联系人
5、修改联系人
6、清空联系人
这篇文章会一步步实现这些功能。
提示:以下是本篇文章正文内容。
一、通讯录管理系统的开发
1、开发该系统的前期准备
(1)菜单格式
开发一个通讯录系统,我们首先要做的就是系统的菜单界面,并引导用户学会去使用该系统,菜单还应该便于用户操作。
菜单代码如下:
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;
}
具体效果如下:
这里把菜单封装成一个函数,方便我们下面的操作,这样我们的菜单就做好了。
(2)联系人结构体的创建
这一步我们要把通讯录中联系人的信息功能给实现
代码如下(示例):
//联系人结构体
struct Person
{
//姓名
string m_Name;
//性别 1为男性 2为女性
int m_Sex;
//年龄
int m_Age;
//电话
string m_Phone;
//住址
string m_Addr;
};
此处要将联系人的各项信息存储在该结构体中。
( 3)通讯录结构体的创建
这一步和上一步操作基本一致,我们利用结构体来创建通讯录。
在创建结构体之前我们先定义一个常量MAX,方便以后更改通讯录存储人数。
#define MAX 1000
代码如下(示例):
//通讯录结构体
struct Addressbooks
{
//通讯录中保存的联系人数组
struct Person personArray[MAX];
//通讯录中当前记录联系人个数
int m_Size;
};
(4)实现main的基本功能
在main函数中我们要实现菜单及其选项功能,因此我选用switch语句。
代码如下(示例):
switch (select) //select 为用户选择的功能
{
case 1: //添加联系人
break;
case 2: //显示联系人
break;
case 3: //删除联系人
break;
case 4: //查找联系人
break;
case 5: //修改联系人
break;
case 6: //清空联系人
break;
case 0: //退出通讯录
break;
}
这个就是我们项目的主体。
为了方便用户使用菜单,我们让用户每次正确操作完成后再次显示菜单界面
代码如下(示例):
int main()
{
//创建通讯录结构体变量
Addressbooks abs;
//初始化通讯录当前的人个数
abs.m_Size =0;
int select=0;//创建用户选择输入的变量
while (true)
{
//菜单调用
showMenu();
cin>>select;
switch (select) //select 为用户选择的功能
{
case 1: //添加联系人
break;
case 2: //显示联系人
break;
case 3: //删除联系人
break;
case 4: //查找联系人
break;
case 5: //修改联系人
break;
case 6: //清空联系人
break;
case 0: //退出通讯录
break;
}
}
system("pause");
return 0;
}
2、通讯录中各个功能的实现
(1)退出功能
退出功能比较简单,我们把它实现。
我们的目的是当用户输入0的时候退出程序。
在case 0的下面加return 0;就可以实现。
代码如下(示例):
case 0: //退出通讯录
cout<<"欢迎下次使用"<<endl;
system("pause");
return 0;
break;
(2)添加联系人
实现添加联系人功能,联系人功能上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)。
这个功能是之后其它功能的基础。
实现这个功能我们要用到之前创建的联系人结构体和通讯录结构体,并利用指针来修改结构体中的数据。
①、首先判断通讯录是否有地方
②、输入各项数据
③、判断各项数据是否符合实际情况
代码如下(示例):
//添加联系人
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<<"输入有误,请重新输入"<<endl;
}
//年龄
cout<<"请输入年龄:"<<endl;
int age=0;
while(true)
{
cin>>age;
if(age>=0||age<=150)
{
abs->personArray[abs->m_Size].m_Age=age;
break;
}
cout<<"输入有误,请重新输入"<<endl;
}
//电话
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"); //实现清屏功能
}
}
如果操作过多,终端中的显示内容太繁琐,这时我们使用system(“cls”)来清屏。
(3)显示联系人
这个功能是将通讯录中所有联系人的信息打印在终端上。
我们存储联系人性别时用的是1和2,在这里要进行一步转化
①、首先要判断此时通讯录中是否有联系人
②、将联系人的信息打印
代码如下(示例):
//显示联系人
void showPerson(Addressbooks *abs)
{
//判断通讯录中人数是否为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");
}
样例如下:本文中出现的姓名,如有雷同,纯属虚构。
(4)删除联系人
这个功能我们用两个函数去实现
第一个函数
代码如下(示例):
int isExist(Addressbooks * abs,string name)
利用这个函数查找用户要删除的联系人是否存在,如果存在返回该联系人在通讯录结构体内的下标,如果不存在则返回-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;
}
第二个函数是我们要实现的删除函数
//删除联系人
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");
}
这里有个细节,当成功删除一个联系人时,通讯录中的人数要减一
样例如下:
(5)查找联系人
这个功能与显示联系人有点相似,不同的是这里只显示用户查找的联系人的信息
代码如下(示例):
//查找联系人
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");
}
(6)修改联系人
实现这个功能需要先使用查找函数,找到相应联系人在通讯录中的下标,然后通过指针对该联系人的信息进行修改
代码如下(示例):
//修改联系人
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<<"修改成功!";
}
else
{
cout<<"查无此人"<<endl;
}
system("pause");
system("cls");
}
(7)清空联系人
实现该功能非常简单,我们只需将通讯录中保存的人数修改为0,即可实现该功能。
代码如下(示例):
//清空联系人
void cleanPerson(Addressbooks *abs)
{
abs->m_Size=0;
cout<<"通讯录已清空"<<endl;
system("pause");
system("cls");
}
二、完整代码
#include <iostream>
#include <string>
#define MAX 1000
using namespace std;
//联系人结构体
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;
};
//添加联系人
void addPerson(Addressbooks *abs);
//显示所有联系人
void showPerson(Addressbooks * abs);
//检查联系人是否存在
int isExist(Addressbooks * abs,string name);
//删除指定联系人
void deletePerson(Addressbooks *abs);
//查找联系人
void findPerson(Addressbooks * abs);
//修改联系人
void modifyPerson(Addressbooks *abs);
//清空联系人
void cleanPerson(Addressbooks *abs);
//菜单
void showMenu();
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: //删除联系人
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;
}
//菜单
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;
}
//添加联系人
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<<"输入有误,请重新输入"<<endl;
}
//年龄
cout<<"请输入年龄:"<<endl;
int age=0;
while(true)
{
cin>>age;
if(age>=0||age<=150)
{
abs->personArray[abs->m_Size].m_Age=age;
break;
}
cout<<"输入有误,请重新输入"<<endl;
}
//电话
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");
}
}
//显示联系人
void showPerson(Addressbooks *abs)
{
//判断通讯录中人数是否为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");
}
//查找函数
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;
}
//删除联系人
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");
}
//查找联系人
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");
}
//修改联系人
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<<"修改成功!";
}
else
{
cout<<"查无此人"<<endl;
}
system("pause");
system("cls");
}
//清空联系人
void cleanPerson(Addressbooks *abs)
{
abs->m_Size=0;
cout<<"通讯录已清空"<<endl;
system("pause");
system("cls");
}
总结
这是我第一次写博客,如果有不合适的地方或者有问题请大家在评论区指出。希望大家能给个关注,点个赞。