C++项目实战之通讯录管理系统

通讯录管理系统

1. 系统需求

通讯录是一个可以记录亲人,好友信息的工具

本教程主要利用 C++ 来实现一个通讯录管理系统

系统中需要实现的功能如下:

  • 添加联系人:向通讯录添加新人,信息包括(姓名,性别,年龄,联系电话,家庭住址)最多记录100人
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按照姓名进行删除指定联系人
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有的信息
  • 退出通讯录:退出当前使用的通讯录

2. 菜单功能

功能描述:用户选择功能的界面

菜单界面效果如下图:

image-20210725233801883

步骤

  • 封装函数显示该界面 如 void showMenu()
  • 在 main 函数中调用封装好的函数

代码

#include <iostream>
using namespace std;

//显示菜单界面
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;
}

int main()
{
	//菜单的调用
	showMenu();
    
	system("pause");
	return 0;
}

3. 退出功能

功能描述:退出通讯录系统

思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个框架进行搭建

当用户选择 0 的时候,执行退出,选择其他先不做操作,也不会退出程序

代码

//封装函数显示该界面 如 void showMenu()
//在 main 函数中调用封装好的函数
#include <iostream>
using namespace std;

//显示菜单界面
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;
}

int main()
{
	int select = 0;  //创建用户选择输入的变量

	while (true)
	{
		//菜单的调用
		showMenu();

		cin >> select;   //用户输入变量

		switch (select)
		{
		case 1:				//1.添加联系人
			break;
		case 2:				//2.显示联系人
			break;
		case 3:				//3.删除联系人
			break;
		case 4:				//4.查找联系人
			break;
		case 5:				//5.修改联系人
			break;
		case 6:				//6.清空联系人
			break;
		case 0:				//0.退出通讯录
			cout << "欢迎下次使用" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}
	system("pause");
	return 0;
}

效果图

image-20210726001853038

4. 添加联系人

功能描述:

实现添加联系人功能,联系人上限为1000人,联系人包括(姓名,性别,年龄,联系电话,家庭住址)

添加联系人实现步骤:

  • 设计联系人结构体
  • 设计通讯录结构体
  • main函数中创建通讯录
  • 封装添加联系人函数
  • 测试添加联系人功能

4.1 设计联系人结构体

联系人信息包括:姓名,性别,年龄,联系电话,家庭住址

设计如下:

//定义联系人结构体
struct person
{
    string name;	//姓名
    sting sex;		//性别
    int age;		//年龄
    string phonenum;	//电话号码
    string addr;	//家庭地址
};

电话号码的定义为什么不用 int

  • 原因是 电话号码是11位已经超过了 int 能表达的范围了,所以我们改string 来存放
  • 实例:excel 表格中身份证号码单元格常常用文本类型来存放

4.2 设计通讯录结构体

设计时候可以在通讯录结构体中,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量

设计如下:

#define max 1000  //最大人数

//定义通讯录结构体
struct addressbooks
{
    struct person personarray[max];  //通讯录中保存的联系人数组
    int size;  //通讯录中人员个数
};

5. 显示联系人

功能描述:显示通讯录中已有的联系人信息

显示联系人实现步骤:

  • 封装显示联系人函数
  • 测试显示联系人功能

5.1 封装显示联系人函数

思路:判断如果当前通讯录没有人员,就提示记录为空,人数大于0,显示通讯录中的信息

显示联系人代码:

//显示联系人
void showperson(struct addressbooks * a)
{
	//判断通讯录中的人数是否为0,如果为0提示记录为空
	//如果不为0,显示记录的联系人信息
	if (a->size == 0)
	{
		cout << "目前通讯录中还没有联系人" << endl;
	}
	else
	{
		for (int i = 0; i < a->size; i++)
		{
			cout << "姓名:" << a->personarray[i].name << "\t";
			cout << "性别:" << (a->personarray[i].sex == 1 ? "男" : "女") << "\t";
			cout << "年龄:" << a->personarray[i].age << "\t";
			cout << "电话:" << a->personarray[i].phonenum << "\t";
			cout << "住址:" << a->personarray[i].addr << endl;
		}
	}
	system("pause");	//请按任意键继续
	system("cls");	//清屏
}

6. 删除联系人

功能描述:按照姓名进行删除指定联系人

删除联系人实现步骤:

  • 封装检测联系人是否存在
  • 封装删除联系人函数
  • 测试删除联系人功能

6.1 封装检测联系人是否存在

设计思路:

  • 删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人

  • 因此我们可以把检测联系人是否存在封装成一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1

检测联系人是否存在代码:

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1 通讯录  参数2 用户想查找联系人的名字
int isExist(addressbooks* a, string name)
{
	for (int i = 0; i < a->size; i++)
	{
		//找到用户输入的姓名了
		if (a->personarray[i].name == name)
		{
			return i; //找到了这个人,返回这个人所在的下标编号
		}
	}
	return -1;  //如果遍历结束都没找到这个人,返回-1
}

代码出现控制传输跳过的实例化是怎么回事呢?

  • 我们在使用switch 语句时,如果break前的代码行过长,则无法运行

解决方法:把长代码段再用一个大括号括起来

6.2 封装删除联系人函数

根据用户输入的联系人判断该通讯录中是否有此人

查找到进行删除,并提示删除成功

查找不到提示查无此人

删除操作图例:

image-20210728214944259
//删除指定联系人
void delper(addressbooks* a)
{
	cout << "请输入您要删除的联系人" << endl;
	string name;
	cin >> name;
	
	//如果ret == -1 说明没查到这个人,否则查到了
	int ret = isExist(a, name);  //用ret接收返回结果,也就是下标编号
	if (ret != -1)
	{
		//查到此人,进行删除操作
		for (int i = ret; i < a->size; i++)  //标记下标编号
		{
			//数据前移
			a->personarray[i] = a->personarray[i + 1];
		}
		a->size--;	//更新通讯录中的人员数量
		cout << "删除成功" << endl;
	}
	else
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

7. 查找联系人

功能描述:按照姓名查看指定联系人信息

查找联系人实现步骤:

  • 封装查找联系人函数
  • 测试查找指定联系人

7.1 封装查找联系人函数

实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人

查找联系人代码:

//查找联系人
void findper(addressbooks* a)
{
	cout << "请输入需要查找的联系人" << endl;
	string name;
	cin >> name;

	//判断指定联系人是否存在通讯录中
	int ret = isExist(a, name);
	if(ret != -1)		//找到联系人
	{
		cout << "姓名:" << a->personarray[ret].name << "\t";
		cout << "性别:" << (a->personarray[ret].sex == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << a->personarray[ret].age << "\t";
		cout << "电话:" << a->personarray[ret].phonenum << "\t";
		cout << "地址:" << a->personarray[ret].addr << endl;
	}
	else		//未找到联系人
	{
		cout << "查无此人" << endl;
	}
	//任意键按下后清屏
	system("pause");
	system("cls");
}

8. 修改联系人

功能描述:按照姓名重新修改指定联系人

修改联系人实现步骤

  • 封装修改联系人函数
  • 测试修改联系人功能

8.1 封装修改联系人函数

实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人

修改联系人代码:

//修改联系人
void modifyper(addressbooks* a)
{
	cout << "请输入要修改的联系人" << endl;
	string name;
	cin >> name;

	int ret = isExist(a, name);
	if (ret != -1)	//找到联系人
	{
		//修改姓名
		string name;
		cout << "请输入姓名" << endl;
		cin >> name;
		a->personarray[ret].name = name;

		//修改性别
		int sex = 0;
		cout << "请输入性别" << endl;
		while (true)
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				//输入正确,退出循环输入
				a->personarray[ret].sex = sex;
				break;
			}
			cout << "请重新输入性别" << endl;
		}

		//修改年龄
		int age =0;
		cout << "请输入年龄" << endl;
		cin >> age;
		a->personarray[ret].age = age;

		//修改电话
		string phonenum;
		cout << "请输入电话" << endl;
		cin >> phonenum;
		a->personarray[ret].phonenum = phonenum;

		//修改住址
		string addr;
		cout << "请输入住址" << endl;
		cin >> addr;
		a->personarray[ret].addr = addr;

		cout << "修改成功" << endl;
	}
	else	//未找到联系人
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

8.2 测试修改联系人功能

在switch case语句中,case 5里添加

case 5:				//5.修改联系人
		modifyper(&a);
		break;

9. 清空联系人

功能描述:清空通讯录中所有信息

清空联系人实现步骤

  • 封装清空联系人函数
  • 测试清空联系人

9.1 封装清空联系人函数

实现思路:将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量重置为0,做逻辑清空即可

清空联系人代码:

//清空联系人
void clean(addressbooks* a)
{
	a->size = 0;	//将当期记录联系人数量重置为0,做逻辑清空操作
	cout << "联系人已经清空" << endl;
	system("pause");
	system("cls");
}

至此完成通讯录的制作

通讯录管理系统的总代码:

//封装函数显示该界面 如 void showMenu()
//在 main 函数中调用封装好的函数
#include <iostream>
using namespace std;
#define max 1000

//设计联系人的结构体
struct person
{
	string name;	//姓名
	int sex;		//性别
	int age;		//年龄
	string phonenum;	//电话
	string addr;	//住址
};

//设计通讯录的结构体
struct addressbooks
{
	//通讯录中保存的联系人数组
	struct person personarray[max];

	//通讯录中当前记录联系人个数
	int size;
};

//添加联系人
void addperson(struct addressbooks * a)
{
	//判断通讯录是否已经满了,如果满了就不再添加
	if (a->size == max)
	{
		cout << "通讯录已经满了,无法添加" << endl;
		return;
	}
	else
	{
		//添加具体联系人
		
		//姓名
		string name;
		cout << "请输入姓名" << endl;
		cin >> name;
		a->personarray[a->size].name = name;	
		//指针a访问 数组personarray中的第size位中的name
		//并把cin的name赋值给 数组personarray中的第size位中的name

		//性别
		int sex = 0;
		cout << "请输入性别: 1----男 2-----女" << endl;
		while (true)
		{
			//如果输入的是1或2可以退出循环,如果输入其他数字则循环到输入正确数值为止
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				a->personarray[a->size].sex = sex;
				break;
			}
			cout << "请重新输入" << endl;
		}
		
		//年龄
		int age;
		cout << "请输入年龄" << endl;
		cin >> age;
		a->personarray[a->size].age = age;

		//电话
		string phonenum;
		cout << "请输入电话" << endl;
		cin >> phonenum;
		a->personarray[a->size].phonenum = phonenum;

		//住址
		string addr;
		cout << "请输入地址" << endl;
		cin >> addr;
		a->personarray[a->size].addr = addr;

		//更新通讯录的人数
		a->size++;
		cout << "添加成功" << endl;
		system("pause");  //请按任意键继续
		system("cls");	  //清屏
	}
}

//显示联系人
void showperson(struct addressbooks * a)
{
	//判断通讯录中的人数是否为0,如果为0提示记录为空
	//如果不为0,显示记录的联系人信息
	if (a->size == 0)
	{
		cout << "目前通讯录中还没有联系人" << endl;
	}
	else
	{
		for (int i = 0; i < a->size; i++)
		{
			cout << "姓名:" << a->personarray[i].name << "\t";
			cout << "性别:" << (a->personarray[i].sex == 1 ? "男" : "女") << "\t";
			cout << "年龄:" << a->personarray[i].age << "\t";
			cout << "电话:" << a->personarray[i].phonenum << "\t";
			cout << "住址:" << a->personarray[i].addr << endl;
		}
	}
	system("pause");
	system("cls");
}

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1 通讯录  参数2 用户想查找联系人的名字
int isExist(addressbooks* a, string name)
{
	for (int i = 0; i < a->size; i++)
	{
		//找到用户输入的姓名了
		if (a->personarray[i].name == name)
		{
			return i; //找到了这个人,返回这个所在的下标编号
		}
	}
	return -1;
}

//删除指定联系人
void delper(addressbooks* a)
{
	cout << "请输入您要删除的联系人" << endl;
	string name;
	cin >> name;
	
	//如果ret == -1 说明没查到这个人,否则查到了
	int ret = isExist(a, name);  //用ret接收返回结果,也就是下标编号
	if (ret != -1)
	{
		//查到此人,进行删除操作
		for (int i = ret; i < a->size; i++)  //标记下标编号
		{
			//数据前移
			a->personarray[i] = a->personarray[i + 1];
		}
		a->size--;	//更新通讯录中的人员数量
		cout << "删除成功" << endl;
	}
	else
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

//查找联系人
void findper(addressbooks* a)
{
	cout << "请输入需要查找的联系人" << endl;
	string name;
	cin >> name;

	//判断指定联系人是否存在通讯录中
	int ret = isExist(a, name);
	if(ret != -1)		//找到联系人
	{
		cout << "姓名:" << a->personarray[ret].name << "\t";
		cout << "性别:" << (a->personarray[ret].sex == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << a->personarray[ret].age << "\t";
		cout << "电话:" << a->personarray[ret].phonenum << "\t";
		cout << "地址:" << a->personarray[ret].addr << endl;
	}
	else		//未找到联系人
	{
		cout << "查无此人" << endl;
	}
	//任意键按下后清屏
	system("pause");
	system("cls");
}

//修改联系人
void modifyper(addressbooks* a)
{
	cout << "请输入要修改的联系人" << endl;
	string name;
	cin >> name;

	int ret = isExist(a, name);
	if (ret != -1)	//找到联系人
	{
		//修改姓名
		string name;
		cout << "请输入姓名" << endl;
		cin >> name;
		a->personarray[ret].name = name;

		//修改性别
		int sex = 0;
		cout << "请输入性别" << endl;
		while (true)
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				//输入正确,退出循环输入
				a->personarray[ret].sex = sex;
				break;
			}
			cout << "请重新输入性别" << endl;
		}

		//修改年龄
		int age =0;
		cout << "请输入年龄" << endl;
		cin >> age;
		a->personarray[ret].age = age;

		//修改电话
		string phonenum;
		cout << "请输入电话" << endl;
		cin >> phonenum;
		a->personarray[ret].phonenum = phonenum;

		//修改住址
		string addr;
		cout << "请输入住址" << endl;
		cin >> addr;
		a->personarray[ret].addr = addr;

		cout << "修改成功" << endl;
	}
	else	//未找到联系人
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}

//清空联系人
void clean(addressbooks* a)
{
	a->size = 0;	//将当期记录联系人数量重置为0,做逻辑清空操作
	cout << "联系人已经清空" << endl;
	system("pause");
	system("cls");
}

//显示菜单界面
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;
}

int main()
{
	struct addressbooks a;	//创建通讯录结构体变量
	a.size = 0;	//初始化通讯录中当前的人员个数
	int select = 0;  //创建用户选择输入的变量

	while (true)
	{
		showMenu();		 //菜单的调用
		cin >> select;   //用户输入变量

		switch (select)
		{
		case 1:				//1.添加联系人
			addperson(&a);	//利用地址传递,可以修饰形参
			break;
		case 2:				//2.显示联系人
			showperson(&a);
			break;
		case 3:				//3.删除联系人
			delper(&a);
		/*{
			cout << "请输入想要删除的联系人姓名" << endl;
			string name;
			cin >> name;
			if (isExist(&a, name) == -1)
			{
				cout << "查无此人" << endl;
			}
			else
			{
				cout << "找到此人了" << endl;
			}
		}*/ //测试代码
			break;
		case 4:				//4.查找联系人
			findper(&a);
			break;
		case 5:				//5.修改联系人
			modifyper(&a);
			break;
		case 6:				//6.清空联系人
			clean(&a);
			break;
		case 0:				//0.退出通讯录
			cout << "欢迎下次使用" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}
	system("pause");
	return 0;
}

通讯录管理系统改进版

#include <iostream>
#define MAXSIZE 1000

//联系人结构体
struct Contacts
{
	std::string m_contactName;
	int m_contactGender;
	int m_contactAge;
	std::string m_contactPhoNum;
	std::string m_contactAddr;
};

//通讯录结构体
struct ContactsBook
{
	Contacts* contactArray;
	int m_bookSize;
};

//计算长度
int bookSize(const ContactsBook* con)
{
	return con->m_bookSize;
}

//判断通讯录是否为满
bool isFull(const ContactsBook* con)
{
	if (bookSize(con) == MAXSIZE)
	{
		std::cout << "通讯录已满,无法添加联系人" << std::endl;
		system("pause");
		system("cls");
		return true;
	}
	return false;
}

//判断通讯录是否为空
bool isEmpty(const ContactsBook* con)
{
	if (bookSize(con) == 0)
	{
		std::cout << "通讯录为空,无法删除联系人" << std::endl;
		system("pause");
		system("cls");
		return true;
	}
	return false;
}

//判断性别
std::string ifGender(const ContactsBook* con, int locate)
{
	int gender = con->contactArray[locate].m_contactGender;
	if (gender == 1)
	{
		return "男";
	}
	return "女";
}

//显示菜单界面
void showMenu()
{
	std::cout << "==========================" << std::endl;
	std::cout << "====== 1.添加联系人:======" << std::endl;
	std::cout << "====== 2.显示联系人:======" << std::endl;
	std::cout << "====== 3.删除联系人:======" << std::endl;
	std::cout << "====== 4.查找联系人:======" << std::endl;
	std::cout << "====== 5.修改联系人:======" << std::endl;
	std::cout << "====== 6.清空联系人:======" << std::endl;
	std::cout << "====== 0.退出通讯录:======" << std::endl;
	std::cout << "==========================" << std::endl;
}

//添加联系人函数
void addContacts(ContactsBook* con)
{
	int size = bookSize(con);
	if (isFull(con))
	{
		return;
	}

	//姓名
	std::string name;
	std::cout << "请输入姓名: ";
	std::cin >> name;
	con->contactArray[size].m_contactName = name;

	//性别
	int gender;
	std::cout << "请输入性别(输入1代表男,输入2代表女): ";
	std::cin >> gender;
	while (gender != 1 && gender != 2)
	{
		std::cout << "您输入的数字不符合要求(输入1代表男,输入2代表女): ";
		std::cin >> gender;
	}
	con->contactArray[size].m_contactGender = gender;

	//年龄
	int age;
	std::cout << "请输入年龄(1~100): ";
	std::cin >> age;
	while (age <= 0 || age >= 100)
	{
		std::cout << "您输入的数字不符合要求,年龄应在1~100之间: ";
		std::cin >> age;
	}
	con->contactArray[size].m_contactAge = age;

	//联系电话
	std::string phoNum;
	std::cout << "请输入联系电话: ";
	std::cin >> phoNum;
	con->contactArray[size].m_contactPhoNum = phoNum;

	//家庭住址
	std::string addr;
	std::cout << "请输入家庭住址: ";
	std::cin >> addr;
	con->contactArray[size].m_contactAddr = addr;

	con->m_bookSize++;
	std::cout << "添加成功" << std::endl;

	system("pause");
	system("cls");
}

//显示联系人
void printContacts(const ContactsBook* con)
{
	int size = bookSize(con);

	std::cout
		<< " 姓名 \t" << " 性别 \t" << " 年龄 \t"
		<< " 联系电话 \t" << " 家庭住址" << std::endl;
	for (int i = 0; i < size; i++)
	{
		std::cout
			<< " " << con->contactArray[i].m_contactName << "\t"
			<< " " << ifGender(con, i) << "\t"
			<< " " << con->contactArray[i].m_contactAge << "\t"
			<< " " << con->contactArray[i].m_contactPhoNum << "\t"
			<< " " << con->contactArray[i].m_contactAddr
			<< " " << std::endl;
	}

	system("pause");
	system("cls");
}

//查找对应的人
int isContact(const ContactsBook* con)
{
	std::string name;
	std::cout << "请输入你需要查找的名字: ";
	std::cin >> name;

	for (int i = 0; i < bookSize(con); i++)
	{
		if (name == con->contactArray[i].m_contactName)
		{
			std::cout
				<< " 姓名 \t" << " 性别 \t" << " 年龄 \t"
				<< " 联系电话 \t" << " 家庭住址" << std::endl;
			std::cout
				<< " " << con->contactArray[i].m_contactName << "\t"
				<< " " << ifGender(con, i) << "\t"
				<< " " << con->contactArray[i].m_contactAge << "\t"
				<< " " << con->contactArray[i].m_contactPhoNum << "\t"
				<< " " << con->contactArray[i].m_contactAddr
				<< " " << std::endl;

			system("pause");
			system("cls");
			return i;
		}
	}

	std::cout << "===未找到名字为 " << name << " 的联系人===" << std::endl;
	system("pause");
	system("cls");
	return -1;
}

//删除联系人
void deleteContacts(ContactsBook* con)
{
	if (isEmpty(con))
	{
		return;
	}

	int result = isContact(con);
	if (result == -1)
	{
		return;
	}

	int select = 2;
	std::cout << "要删除这个联系人吗?(1.要, 2.不要)" << std::endl;
	std::cin >> select;
	if (select == 1)
	{
		for (int i = result; i < bookSize(con); i++)
		{
			con->contactArray[i] = con->contactArray[i + 1];
		}
		std::cout << "删除成功" << std::endl;
		con->m_bookSize--;
	}
	
	system("pause");
	system("cls");
}

//修改联系人
void modifyContacts(ContactsBook* con)
{
	int result = isContact(con);
	if (result)
	{
		return;
	}

	int select = 2;
	std::cout << "要修改这个联系人吗?(1.要, 2.不要)" << std::endl;
	std::cin >> select;
	if (select == 1)
	{
		//姓名
		std::string name;
		std::cout << "请输入姓名: ";
		std::cin >> name;
		con->contactArray[result].m_contactName = name;

		//性别
		int gender;
		std::cout << "请输入性别(输入1代表男,输入2代表女): ";
		std::cin >> gender;
		while (gender != 1 && gender != 2)
		{
			std::cout << "您输入的数字不符合要求(输入1代表男,输入2代表女): ";
			std::cin >> gender;
		}
		con->contactArray[result].m_contactGender = gender;

		//年龄
		int age;
		std::cout << "请输入年龄(1~100): ";
		std::cin >> age;
		while (age <= 0 || age >= 100)
		{
			std::cout << "您输入的数字不符合要求,年龄应在1~100之间: ";
			std::cin >> age;
		}
		con->contactArray[result].m_contactAge = age;

		//联系电话
		std::string phoNum;
		std::cout << "请输入联系电话: ";
		std::cin >> phoNum;
		con->contactArray[result].m_contactPhoNum = phoNum;

		//家庭住址
		std::string addr;
		std::cout << "请输入家庭住址: ";
		std::cin >> addr;
		con->contactArray[result].m_contactAddr = addr;

		std::cout << "修改成功" << std::endl;

		system("pause");
		system("cls");
		return;
	}
}

//清空联系人
void clearContacts(ContactsBook* con)
{
	//释放空间
	int select = 2;
	std::cout << "要清空联系人吗?(1.要, 2.不要)" << std::endl;
	std::cin >> select;
	if (select == 1)
	{
		con->m_bookSize = 0;
	}

	system("pause");
	system("cls");
	return;
}

int main()
{
	//创建通讯录,动态分配空间
	ContactsBook con;
	con.contactArray = new Contacts[MAXSIZE];
	con.m_bookSize = 0;

	//自己的选项
	int choose = 0;
	while (true)
	{
		showMenu();
		std::cin >> choose;

		switch (choose)
		{
		case 1:
			addContacts(&con);
			break;
		case 2:
			printContacts(&con);
			break;
		case 3:
			deleteContacts(&con);
			break;
		case 4:
			isContact(&con);
			break;
		case 5:
			modifyContacts(&con);
			break;
		case 6:
			clearContacts(&con);
			break;
		case 0:
			std::cout << "~~~~欢迎下次使用~~~~" << std::endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}

	return 0;
}
posted @ 2023-08-03 21:45  sarexpine  阅读(245)  评论(0编辑  收藏  举报