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

赶时间的可以看改进版的通讯录管理系统

通讯录管理系统

1. 系统需求

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

本教程主要利用 cpp 来实现一个最简单的通讯录管理系统

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

  • 添加联系人:向通讯录添加新人,信息包括(姓名,性别,年龄,联系电话,家庭住址)最多记录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;
}

通讯录管理系统改进版

上面的代码是我三年前做的笔记了,那个时候初学C++,好多地方都是不怎么规范的写法,而且都是照着视频敲代码,不是自己独立完成的

今天心血来潮想考验一下自己能不能在两年没学的情况下不借助任何参考敲出来,结论是还不错哈哈哈(大佬勿喷),用的语法也不是很高级,很多地方可以用STL和容器来优化,但是考虑到这是我初学C++时写的,那个时候还没学后面的高级语法,所以就用最基本的语法来完成这个小项目

对比了一下之前的代码,现在感叹 “少时不知函数好,错把main函数当块宝”,函数解决了代码复用的问题。比如下面的这四个函数,很多地方都能用的到,就可以直接提出
来单独作为一个函数,体验还是很不错的

//计算长度
int bookSize(const ContactsBook* con)

//判断通讯录是否为满
bool isFull(const ContactsBook* con)

//判断通讯录是否为空
bool isEmpty(const ContactsBook* con)

//判断性别
std::string ifGender(const ContactsBook* con, int locate)
#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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值