近期自学c++,做了一个通讯录管理系统(1.添加联系人 2.显示联系人列表 3.删除联系人 4.查找找联系人 5.修改联系人 6.清空联系人 ),唯一不足之处是【修改联系人】处使用while内嵌switch,加了break还是不能跳出循环,无奈只能加go to来满足需求,还有其它更好的办法吗?
#include<iostream>
#define MAX 1000
using namespace std;
//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;
}
struct Person {
string name;
string sex;
int age;
string phone;
string address;
};
struct AddressBooks {
Person personArray[MAX]; //通讯录中保存的联系人数组
int size; //通讯录中保存联系人的个数
}ab;
/*
* 继续操作
*/
void goOn()
{
system("pause");
system("cls");
}
void addPerson(AddressBooks* ab)
{
if (ab->size>=MAX)
{
cout << "通讯录已满,请整理下通讯录再尝试添加!" << endl;
return;
}
//添加具体联系人
cout << "开始添加联系人..." << endl;
string name; //姓名
cout << "姓名:";
cin >> name;
ab->personArray[ab->size].name = name;
string sex; //性别
cout << "性别(男 / 女):";
while (true)
{
cin >> sex;
if (sex == "男" || sex == "女")
{
ab->personArray[ab->size].sex = sex;
break;
}
cout << "性别不合法,请重新输入" << "\n" << "性别:";
}
int age; //年龄
cout << "年龄(0 - 100岁):";
while (true)
{
cin >> age;
if (age >= 0 && age <= 100)
{
ab->personArray[ab->size].age = age;
break;
}
cout << "年龄不合法,请重新输入" << "\n" << "年龄:";
}
string phone; //电话
cout << "电话:";
cin >> phone;
ab->personArray[ab->size].phone = phone;
string address; //地址
cout << "地址:";
cin >> address;
ab->personArray[ab->size].address = address;
ab->size++; //更新通讯录中人数
cout << "联系人【" << name << "】添加成功!" << endl;
goOn();
}
/*
* 查看联系人列表
*/
void showPerson(AddressBooks* ab)
{
cout << "联系人列表..." << endl;
//cout << " 姓名 " << " " << "性别" << " " << "年龄" << " " << "电话" << " " << "地址" << endl;
cout << " 姓名 " << "\t" << " " << "性别" << "\t" << " " << "年龄" << "\t" << " " << "电话" << "\t" << " " << "地址" << "\t" << endl;
if (ab->size != 0)
{
for (int i = 0; i < ab->size; i++)
{
Person person = ab->personArray[i];
cout << person.name << "\t" << " " << person.sex << "\t" << " " << person.age << "\t" << " " << person.phone << "\t" << " " << person.address << "\t" << endl;
}
}
else
{
cout << "*********暂无数据!*********" << endl;
}
goOn();
}
/*
* 检测联系人是否存在,存在返回下标,不存在返回 - 1
*/
int isExist(AddressBooks* ab,string name)
{
for (int i = 0; i < ab->size; i++)
{
if (ab->personArray[i].name==name)
{
return i;
}
}
return -1;
}
/*
* 删除联系人
*/
void deletePerson(AddressBooks* ab)
{
cout << "请输入联系人姓名:";
string name;
cin >> name;
int num = isExist(ab, name);
if (num != -1)
{
for (int i = num; i < ab->size; i++)
{
ab->personArray[i] = ab->personArray[i + 1];
}
cout << "联系人【" << name << "】删除成功!" << endl;
ab->size--;
}
else
{
cout << "抱歉,查无此人!" << endl;
}
goOn();
}
/*
*查找联系人
*/
void findPerson(AddressBooks* ab)
{
cout << "请输入联系人姓名:";
string name;
cin >> name;
int num = isExist(ab, name);
if (num != -1)
{
Person person = ab->personArray[num];
cout << " 姓名 " << "\t" << " " << "性别" << "\t" << " " << "年龄" << "\t" << " " << "电话" << "\t" << " " << "地址" << "\t" << endl;
cout << person.name << "\t" << " " << person.sex << "\t" << " " << person.age << "\t" << " " << person.phone << "\t" << " " << person.address << "\t" << endl;
}
else
{
cout << "抱歉,查无此人!" << endl;
}
goOn();
}
/*
* 修改联系人
*/
void updatePerson(AddressBooks* ab)
{
cout << "请输入联系人姓名:";
string name;
cin >> name;
int n = isExist(ab, name);
if (n != -1)
{
while (true)
{
cout << "是否更换联系人姓名?(1.是 2.否):";
int num;
cin >> num;
switch (num)
{
case 1:
{
cout << "请输入联系人姓名:";
cin >> name;
ab->personArray[n].name = name;
goto updateSex;
break;
}
case 2:
goto updateSex;
break;
default:
cout << "你输入的序号不合法,请重新输入...";
}
}
while (true)
{
updateSex:
cout << "是否更换联系人性别?(1.是 2.否):";
int num;
cin >> num;
switch (num)
{
case 1:
{
cout << "请输入联系人性别:";
string sex; //性别
cout << "性别(男 / 女):";
while (true)
{
cin >> sex;
if (sex == "男" || sex == "女")
{
ab->personArray[n].sex = sex;
break;
}
cout << "性别不合法,请重新输入" << "\n" << "性别:";
}
goto updateAge;
break;
}
case 2:
goto updateAge;
break;
default:
cout << "你输入的序号不合法,请重新输入...";
}
}
while (true)
{
updateAge:
cout << "是否更换联系人年龄?(1.是 2.否):";
int num;
cin >> num;
switch (num)
{
case 1:
{
cout << "请输入联系人年龄:";
int age; //年龄
cout << "年龄(0 - 121岁):";
while (true)
{
cin >> age;
if (age >= 0 && age <= 121)
{
ab->personArray[n].age = age;
break;
}
cout << "年龄不合法,请重新输入" << "\n" << "年龄:";
}
goto updatePhone;
break;
}
case 2:
goto updatePhone;
break;
default:
cout << "你输入的序号不合法,请重新输入...";
}
}
while (true)
{
updatePhone:
cout << "是否更换联系人电话?(1.是 2.否):";
int num;
cin >> num;
switch (num)
{
case 1:
{
cout << "请输入联系人电话:";
string phone; //电话
cin >> phone;
ab->personArray[n].phone = phone;
goto updateAddress;
break;
}
case 2:
goto updateAddress;
break;
default:
cout << "你输入的序号不合法,请重新输入...";
}
}
while (true)
{
updateAddress:
cout << "是否更换联系人地址?(1.是 2.否):";
int num;
cin >> num;
switch (num)
{
case 1:
{
cout << "请输入联系人地址:";
string address; //地址
cin >> address;
ab->personArray[n].address = address;
goto over;
break;
}
case 2:
goto over;
break;
default:
cout << "你输入的序号不合法,请重新输入...";
}
}
over:
cout << "修改联系人信息成功!" << endl;
}
else
{
cout << "抱歉,查无此人!" << endl;
}
goOn();
}
void resetPerson(AddressBooks* ab)
{
cout << "您是否确定要清空联系人?(1.是 2.否)";
int num;
while (true)
{
cout << "请输入操作序号:";
cin >> num;
if (num == 1)
{
ab->size = 0;
cout << "清空联系人成功!" << endl;
goOn();
break;
}
else if (num == 2)
{
goOn();
break;
}
else
{
cout << "你输入的序号不合法,请重新输入..." << endl;
}
}
}
int main() {
//创建用户选择输入的变量
int select = 0;
while (true)
{
//调用菜单
showMenu();
cout << "请输入要操作的序号:";
cin >> select;
switch (select)
{
case 1: //1.添加联系人
addPerson(&ab);
break;
case 2: //2.显示联系人
showPerson(&ab);
break;
case 3: //3.删除联系人
deletePerson(&ab);
break;
case 4: //4.查找联系人
findPerson(&ab);
break;
case 5: //5.修改联系人
updatePerson(&ab);
break;
case 6: //6.清空联系人
resetPerson(&ab);
break;
case 0: //0.退出通讯录
cout << "欢迎下次使用" << endl;
return 0;
break;
default:
break;
}
}
return 0;
}