C++通讯录实现
- 通讯录功能介绍:
- C++案例:通讯录管理系统
- 步骤一:创建新项目,添加源文件文件
- 步骤二:菜单功能实现
- 步骤三:退出功能
- 步骤四:添加联系人功能
- 每次添加联系人后进行任意键清屏操作:
- 步骤五:显示所有已存的联系人信息
- 步骤六:删除联系人
- 步骤七:查找指定联系人实现
- 步骤八:修改指定联系人实现
- 步骤九:清空通讯录所有联系人
- 其他:
通讯录功能介绍:
通讯录是一个可以记录亲人、好友信息的工具。
- 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址,最多记录1000个联系人)
- 显示联系人:显示通讯录中所有联系人信息。
- 删除联系人:按照姓名进行删除指定联系人。
- 查找联系人:按照姓名查看指定联系人信息。
- 修改联系人: 按照姓名重新修改指定联系人。
- 清空联系人: 清空通讯录中所有信息。
- 退出通讯录 : 退出当前使用的通讯录。
C++案例:通讯录管理系统
步骤一:创建新项目,添加源文件文件
步骤二:菜单功能实现
封装在函数showmeau种,在main函数中进行调用
步骤三:退出功能
相对简单
使用多选择的分支结构
//(1)菜单调用
showMeau();
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;//结束main函数,退出程序
break;
default:
break;
}
为了能使用户可以进行多轮操作,可以使用一个循环while(true):
while (true)
{
//(1)菜单调用
showMeau();
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;//结束main函数
break;
default:
break;
}
}
步骤四:添加联系人功能
联系人上限使1000人,包含信息有:姓名,性别,年龄,电话,家庭住址
(1)设置联系人结构体
//人结构体
struct person
{
string name;//联系人姓名
int sex;//性别:1 男 2 女
int age;
string phone;
string addr;
};
(2)设置通讯录结构体,存放联系人(用结构体数组存放)和当前通讯录的人数:
//通讯录结构体
struct addrbooks
{
struct person personarr[MAX];//定义一个结构体数组,用于存放联系人
int size;
};
(3)main函数创建一个真实的通讯录
//创建一个通讯录的结构体变量
struct addrbooks txl;
//初始化当前通讯录中的人员个数为0
txl.size = 0;
(4)封装添加联系人的函数实现
添加联系人函数要先进行判断通讯录中存放的人数是否已经达到上限,判断之后再进行逻辑添加联系人的信息:
void addperson(struct addrbooks *txl)
{
//判断通讯录是否已经满了
if (txl->size==MAX)
{
cout << "通讯录已满,无法添加" << endl;
return;
}
else
{
//添加具体的联系人
//姓名
cout << "请输入一个姓名:"<<endl;
string name;
cin >> name;
txl->personarr[txl->size].name = name;
//性别
cout << "请输入性别:" << endl;
cout <<"1------男" << endl;
cout << "2------女" << endl;
int sex = 0;//
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
txl->personarr[txl->size].sex = sex;
break;//如果输入的是1/2(输入正确),可以退出循环,有误,重新输入
}
cout << "输入有误,请重新输入:" << endl;
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
while (true)
{
//如果输入的比0小或者比150大,重新输入
cin >> age;
if (age > 0 && age<150)
{
txl->personarr[txl->size].age = age;
break;
}
cout << "输入有误,请检查重新输入年龄:" << endl;
}
//电话
cout << "请输入一个电话号码: " << endl;
string phone;
cin >> phone;
txl->personarr[txl->size].phone = phone;
//家庭住址
cout << "请输入家庭住址:" << endl;
string address;
cin >> address;
txl->personarr[txl->size].addr = address;
}
}
(5)测试
每次添加联系人后进行任意键清屏操作:
system(“pause”);按任意键继续
system(“cls”);//清屏
步骤五:显示所有已存的联系人信息
(1)封装一个函数,显示联系人信息:
判断通讯录有没有人,人数大于0,显示所有人的信息
void showperson(struct addrbooks* txl)
{
//先进行判断通讯录中是否有人
if (txl->size == 0)
{
cout << "当前通讯录为空!" << endl;
}
else
{
for (int i = 0; i < txl->size; i++)
{
cout << "姓名:" << txl->personarr[i].name<<'\t';
cout << "性别:" << (txl->personarr[i].sex == 1? "男":"女") << '\t';//使用一个三木运算符进行实现
cout << "年龄:" << txl->personarr[i].age<<'\t';
cout << "电话:" << txl->personarr[i].phone<<"\t";
cout << "住址:" << txl->personarr[i].addr<< endl;
}
}
system("pause");
system("cls");
}
(2)测试
步骤六:删除联系人
(1)封装先检测联系人是否存在函数:多个功能要根据联系人姓名来进行操作:如果存在,返回联系人在通讯录所处的位置:
int isExist(struct addrbooks* txl,string name)//参数1是通讯录,和要查找的人名
{
for (int i = 0; i < txl->size; i++)
{
if (txl->personarr[i].name == name)
{
//找到用户输入的姓名了,返回一个具体的位置
return i;
}
}
return -1;//遍历结束都没有找到
}
使用代码检测测试这个函数:
{
cout << "请输入要删除联系人的姓名:" << endl;
string name;
cin >> name;
if (isExist(&txl, name) == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "存在这个联系人" << endl;
}
}
(2)封装删除联系人函数:
先判断通讯录中是否有这个人,有就删除并提示删除成功,否则就是找不到
void deletePerson(struct addrbooks* txl)
{
cout << "请输入你要删除的联系人姓名:" << endl;
string name;
cin >> name;
int ret = isExist(txl, name);
//ret==-1:没有找到
//ret==1:找到了
if(ret==-1)
{
cout << "查无此人" << endl;
}
else
{
//找到了这个人,进行删除(逻辑上的删除,这个人后的数据逐个往前覆盖,并且通讯录中的人数最后减去1)
for (int i = ret; i < txl->size; i++)
{
//数据前移操作
txl->personarr[i] = txl->personarr[i + 1];
}
//通讯录人数更新
txl->size--;
cout << "删除成功" << endl;
}
system("pause");
system("cls");
}
(3)测试
步骤七:查找指定联系人实现
根据姓名查找指定联系人
(1)封装查找指定联系人函数:
判断用户输入的指定联系人是否存在,如果存在,就显示这名联系人的信息,否则打印查无此人:
void findPerson(struct addrbooks* txl)
{
cout << "请输入要查找的联系人姓名:" << endl;
//结构用户的输入
string name;
cin >> name;
int ret = isExist(txl, name);
if (ret != -1)//找到了这个人
{
cout << "姓名:" << txl->personarr[ret].name << '\t';
cout << "性别:" << (txl->personarr[ret].sex == 1 ? "男" : "女") << '\t';//使用一个三木运算符进行实现
cout << "年龄:" << txl->personarr[ret].age << '\t';
cout << "电话:" << txl->personarr[ret].phone << "\t";
cout << "住址:" << txl->personarr[ret].addr << endl;
}
else
{
cout << "查无此人!";
}
system("pause");
system("cls");//清屏
}
(2)测试
步骤八:修改指定联系人实现
(1)封装修改联系人函数:
查找用户输入的来向你人,查找成功就进行修改操作,查找失败打印查无此人
void updatePerson(struct addrbooks* txl)
{
cout << "输入要修改的联系人姓名:" << endl;
string name;//接受用户输入的姓名
cin >> name;
int ret = isExist(txl, name);
if (ret != -1)
{
//找到了这个人
//更新姓名
string name;
cout << "输入新的姓名:" << endl;
cin >> name;
txl->personarr[ret].name = name;
//更新性别
cout << "请输入性别:" << endl;
cout << "1----男" << endl;
cout << "2-----女" << endl;
while (true)
{
int sex = 0;
cin >> sex;
if (sex == 1 || sex == 2)
{
txl->personarr[ret].sex = sex;
break;//输入正确,才退出循环
}
cout << "输入错误,请重新输入性别:" << endl;
}
//更新年龄
cout << "请输入年龄:" << endl;
int age;
cin >> age;
while (true)
{
if (age > 0 && age < 150)
{
txl->personarr[ret].age = age;//输入正确,更新年龄并退出循环
break;
}
cout << "输入错误,请重新输入年龄:" << endl;
}
//更新联系电话
cout << "请输入新的联系电话:" << endl;
string newphone;
cin>>newphone;
txl->personarr[ret].phone = newphone;
//更新家庭住址
cout << "请输入新的家庭住址:" << endl;
string newadd;
cin >> newadd;
txl->personarr[ret].addr = newadd;
cout << "修改成功" << endl;
}
else//不存在这个人
{
cout << "查无此人!" << endl;
}
system("pause");
system("cls");
}
(2)测试
步骤九:清空通讯录所有联系人
(1)封装清空联系人函数:
逻辑清空(将通讯录中的人员数组个数置为0)
实际存在,但是访问不到
void clean(struct addrbooks* txl)
{
cout << "确定要清空通讯录吗?" << endl;
cout << "1------确定" << endl;
cout << "2-------取消" << endl;
int ret;
cin >> ret;
if (ret==1)//确定清除
{
txl->size = 0;//将当前通讯录中的人数置为0,逻辑上的清空
cout << "通讯录已经清空" << endl;
}
else//误触
{
system("pause");
system("cls");
return;
}
system("pause");
system("cls");
}
(2)测试
其他:
(1)定义宏常量时候后买你不需要添加分号
(2)case语句中如果语句比较长的时候,使用括号括起来