黑马程序员C++通讯录管理系统

1、系统需求

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

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

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

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

完整代码:

#include 
#include 	// string头文件,用于字符串操作

#define MAX 1000	// 定义最大联系人数量,宏定义有助于后期维护,例如将1000改为其他数字时,只需修改这里即可
using namespace std;

/*
* 第一步,实现菜单系统
* 步骤:
* 1.定义一个结构体,存储联系人信息封装函数显示菜单图形界面:void showMenu()
* 2.在main函数中调用封装好的函数
*/ 
// 菜单界面
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;
}

/*
* 第二步,实现退出功能
* 思路:根据用户不同选择进入不同功能,可以选择switch分支结构将整个架构搭建
* 当用户选择0的时候,执行退出,选择其他先不做操作,也不会退出程序9后续补充其他数字实现的功能)
*/

/*
* 第三步:添加联系人
* 添加联系人步骤:
* 1.设计联系人结构体	
* 2.设计通讯录结构体	// 一个联系人无法组成通讯录,需要设计一个通讯录结构体存储多个联系人,以及记录当前通讯录中有多少联系人,不能超过1000人
* 3.main函数中创建通讯录	
* 4.封装添加联系人函数
* 5.测试添加联系人功能
*/
// 设计联系人结构体
struct Person {
	string m_Name;
	int m_Sex; // 性别 0-女 1-男
	int m_Age; // 年龄
	string m_Phone; // 电话号码
	string m_Addr; // 家庭住址
};
// 设计通讯录结构体
struct Contact {
	struct Person personArray[MAX]; // 定义一个数组存储联系人信息
	int m_Size; // 记录当前通讯录中有多少联系人
};

//1.添加联系人
void addPerson(Contact* abs) {
	//判断通讯录是否已满,如果满了就不再添加联系人
	if(abs -> m_Size == MAX) {
		cout << "通讯录已满,无法添加!" << endl;
		return; // 结束函数
	}
	else {
		// 添加具体联系人

		//姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name; // 输入姓名
		abs->personArray[abs->m_Size].m_Name = name;

		//性别
		cout << "请输入性别" << endl;
		cout << "0----女" << endl;
		cout << "1----男" << endl;
		int sex = 0;

		// 实现循环展示菜单
		while (true) {
			cin >> sex;
			if (sex == 0 || sex == 1) {
				abs->personArray[abs->m_Size].m_Sex = sex; // 将性别存储到通讯录中
				break; // 跳出循环
			}
			else {
				cout << "输入有误,请重新输入性别" << endl;
				cout << "0----女" << endl;
				cout << "1----男" << endl;
			}
		}
		
		//年龄
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age; // 输入年龄
		abs->personArray[abs->m_Size].m_Age = age; // 将年龄存储到通讯录中

		//电话
		cout << "请输入电话号码:" << endl;
		string phone;
		cin >> phone; // 输入电话号码
		abs->personArray[abs->m_Size].m_Phone = phone; // 将电话号码存储到通讯录中

		//住址
		cout << "请输入家庭住址:" << endl;
		string addr;
		cin >> addr; // 输入家庭住址
		abs->personArray[abs->m_Size].m_Addr = addr; // 将家庭住址存储到通讯录中

		// 添加成功后,更新通讯录人数
		abs->m_Size += 1; // 通讯录人数加1=
		cout << "添加联系人成功!" << endl;

		system("pause");	// 请按任意键继续
		system("cls");		//清屏
	}
}

// 2.显示联系人
// 步骤:
// 封装显示联系人函数
void showPerson(Contact* abs) {
	// 判断通讯录中人数是否为0,如果为0则不显示联系人
	// 如果不为0,显示联系人信息
	if (abs->m_Size == 0) {
		cout << "当前通讯录中没有联系人" << endl;
	}
	else {
		for (int i = 0; i < abs->m_Size; i++) {
			cout << "姓名:" << abs->personArray[i].m_Name << " ";
			cout << "性别:" << ( abs->personArray[i].m_Sex == 0 ? "女" : "男" ) << " ";
			cout << "年龄:" << abs->personArray[i].m_Age << " ";
			cout << "电话:" << abs->personArray[i].m_Phone << " ";
			cout << "住址:" << abs->personArray[i].m_Addr << endl;
			cout << "--------------------------------" << endl; // 分隔线
		}
	}
	system("pause"); // 暂停系统,等待用户按任意键继续
	system("cls"); // 清屏
}
// 测试显示联系人功能

// 3.删除联系人功能
// 步骤:
// 3.1封装检测联系人是否存在函数
// 3.2封装删除联系人函数
// 3.3测试删除联系人功能

// 3.1设计思路:删除联系人前,先判断联系人是否存在,存在则删除,不存在则提示用户
// 因此可以把检测联系人是否存在的函数单独封装出来,如果存在则返回在通讯录中的位置,如果不存在则返回-1
int isExist(Contact* abs, string name) {
	// 如果通讯录中没有联系人,则直接返回-1
	if (abs->m_Size == 0) {
		return -1;
	}
	// 通讯录不为空则遍历通讯录中的联系人
	else {
		for(int i = 0; i < abs->m_Size; i++) {
			if (abs->personArray[i].m_Name == name) { // 如果找到了联系人
				return i; // 返回联系人在通讯录中的位置
			}
		}
		// 如果遍历完通讯录都没有找到联系人,则返回-1
		return -1;
	}
}

//3.2封装删除联系人函数
// 根据用户输入的联系人判断通讯录中是否有此人,
// 如果有则删除此人,并提示删除成功;如果没有则提示查无此人
void deletePerson(Contact* abs) {
	cout << "请输入要删除的联系人姓名:" << endl;

	string name;
	cin >> name; // 输入要删除的联系人姓名

	// ret=-1表示联系人不存在, ret>=0表示联系人存在
	int ret = isExist(abs, name); // 调用检测联系人是否存在函数
	if(ret == -1)
		cout << "查无此人!" << endl; // 如果返回-1,说明联系人不存在
	else {
		// 查找到人,要进行删除操作
		for (int i = ret; i < abs->m_Size - 1; i++) {
			abs->personArray[i] = abs->personArray[i + 1]; // 将后面的联系人前移一位
		}
		// 最后一步,更新通讯录人数
		abs->m_Size--; // 通讯录人数减1
		cout << "删除联系人成功!" << endl;
	}

}


// 4.查找联系人功能
// 步骤:
// 4.1封装查找联系人函数
// 测试查找联系人功能
void findPerson(Contact* abs) {
	cout << "请输入要查找的联系人姓名:" << endl;
	string name;
	cin >> name; // 输入要查找的联系人姓名
	// 调用检测联系人是否存在函数
	int ret = isExist(abs, name);
	if (ret == -1) {
		cout << "查无此人!" << endl; // 如果返回-1,说明联系人不存在
	}
	else {
		// 查找到人,输出联系人信息
		cout << "姓名:" << abs->personArray[ret].m_Name << " ";
		cout << "性别:" << (abs->personArray[ret].m_Sex == 0 ? "女" : "男") << " ";
		cout << "年龄:" << abs->personArray[ret].m_Age << " ";
		cout << "电话:" << abs->personArray[ret].m_Phone << " ";
		cout << "住址:" << abs->personArray[ret].m_Addr << endl;
	}
	// 任意键按下后清屏
	system("pause"); // 暂停系统,等待用户按任意键继续
	system("cls"); // 清屏
}

// 5.修改联系人功能
// 步骤:
// 5.1封装修改联系人函数
// 测试修改联系人功能

// 思路:查找用户输入联系人,查找成功进行修改操作,查找失败提示查无此人
void modifyPerson(Contact* abs) {
	cout << "请输入要修改的联系人姓名:" << endl;
	string name;
	cin >> name; // 输入要修改的联系人姓名
	// 调用检测联系人是否存在函数
	int ret = isExist(abs, name);
	if (ret == -1) {
		cout << "查无此人!" << endl; // 如果返回-1,说明联系人不存在
	}
	else {	// 找到则要修改全部信息
		// 姓名
		cout << "请输入新的姓名:" << endl;
		string newName;
		cin >> newName; // 输入新的姓名
		abs->personArray[ret].m_Name = newName; // 修改姓名

		// 性别
		cout << "请输入新的性别" << endl;
		cout << "0----女" << endl;
		cout << "1----男" << endl;
		int newSex = 0;
		// 实现循环展示菜单,只能输入0或1,如果输入其他则提示重新输入
		while (true) {
			cin >> newSex; // 输入新的性别
			if (newSex == 0 || newSex == 1) {
				abs->personArray[ret].m_Sex = newSex; // 修改性别
				break; // 跳出循环
			}
			else {
				cout << "输入有误,请重新输入" << endl;
				cout << "0----女" << endl;
				cout << "1----男" << endl;
			}
		}
		

		// 年龄
		cout << "请输入新的年龄:" << endl;
		int newAge = 0;
		cin >> newAge; // 输入新的年龄
		abs->personArray[ret].m_Age = newAge; // 修改年龄

		// 电话
		cout << "请输入新的电话号码:" << endl;
		string newPhone;
		cin >> newPhone; // 输入新的电话号码
		abs->personArray[ret].m_Phone = newPhone; // 修改电话号码

		// 住址
		cout << "请输入新的家庭住址:" << endl;
		string newAddr;
		cin >> newAddr; // 输入新的家庭住址
		abs->personArray[ret].m_Addr = newAddr; // 修改家庭住址
		
		// 修改成功提示
		cout << "修改联系人成功!" << endl;
		system("pause"); // 暂停系统,等待用户按任意键继续
		system("cls"); // 清屏
	}
}

// 6.清空联系人功能
// 步骤:
// 6.1封装清空联系人函数
// 测试清空联系人功能

// 思路:将通讯录中所有联系人信息清空,更新通讯录人数为0
void clearPerson(Contact* abs) {
	// 将通讯录中所有联系人信息清空
	// 再次确认是否清空联系人
	cout << "您确定要清空所有联系人吗?" << endl;
	cout << "1. 确定清空" << endl;
	cout << "2. 取消清空" << endl;
	int choice = 0;
	cin >> choice; // 输入用户选择
	if(choice != 1) { // 如果用户选择不是1,则取消清空
		cout << "取消清空联系人!" << endl;
		system("pause"); // 暂停系统,等待用户按任意键继续
		system("cls"); // 清屏
		return; // 结束函数
	}
	else {
		// 如果用户选择是1,则清空联系人
		cout << "正在清空联系人..." << endl;
		abs->m_Size = 0;
		cout << "清空联系人成功!" << endl;
		system("pause"); // 暂停系统,等待用户按任意键继续
		system("cls"); // 清屏
	}
}

int main() {

	// 创建通讯录结构体变量
	Contact abs; // 定义一个通讯录变量
	// 初始化通讯录中当前人员个数
	abs.m_Size = 0; // 初始化通讯录中当前人员个数为0


	bool is_true = true;

	while (is_true) {

		int select = 0; // 用户选择

		// 菜单调用
		showMenu();

		cout << "请输入您的选择:" << endl;
		cin >> select; // 输入用户选择

		switch (select) {
		case 1:		// 添加联系人功能
			addPerson(&abs);	//利用地址传递,可以修饰实参
			break;
		case 2:		// 显示联系人功能
			showPerson(&abs);	//利用地址传递,可以修饰实参
			break;
		case 3: 	// 删除联系人功能
			deletePerson(&abs);
			break;
		case 4:		// 查找联系人功能
			findPerson(&abs);
			break;
		case 5:		// 修改联系人功能
			modifyPerson(&abs);
			break;
		case 6:		// 清空联系人功能
			clearPerson(&abs);
			break;
		case 0:
			is_true = false;
			cout << "感谢使用通讯录管理系统,欢迎下次使用!" << endl;
			system("pause"); // 暂停系统,等待用户按任意键继续	
			break; // 退出程序
		}
	}
	return 0;
}

你可能感兴趣的:(c++,服务器,开发语言)