c++通讯录管理系统

近期自学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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值