Przeglądaj źródła

上传文件至 '通讯录管理系统'

Creamo 3 lat temu
rodzic
commit
972b59e8aa
1 zmienionych plików z 413 dodań i 0 usunięć
  1. 413 0
      通讯录管理系统/源.cpp

+ 413 - 0
通讯录管理系统/源.cpp

@@ -0,0 +1,413 @@
+#include <iostream>
+#define MAX 1000
+
+
+//封装函数显示该界面  如 void showMenu()
+//在main函数中掉哦那个封装好的函数
+
+
+//1、菜单界面
+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;
+}
+
+//添加联系人
+//功能描述:
+//实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)
+//添加联系人实现步骤
+//⚪设计联系人结构体
+//⚪设计通讯录结构体
+//⚪main函数中创建通讯录
+//⚪封装添加联系人函数
+//⚪测试添加联系人功能
+
+//设计联系人结构体
+//联系人信息包括:姓名、性别、年龄、联系电话、家庭住址
+//设计如下:
+struct Person
+{
+	//姓名
+	std::string m_Name;
+	//性别       1  男   2  女
+	int m_Sex;
+	//年龄
+	int m_Age;
+	//电话
+	std::string m_Phone;
+	//地址
+	std::string m_Addr;
+
+};
+
+//设计通讯录的结构体
+struct Addressbooks
+{
+	//通讯录中保存的联系人数组
+	struct Person personArray[MAX];
+
+	//通讯录中当前记录的联系人个数
+	int m_Size;
+
+	//
+
+};
+
+//1、添加联系人
+void addPerson(Addressbooks * abs)
+{
+	//判断通讯录是否已满,如果满了就不再添加
+	if (abs->m_Size == MAX)
+	{
+		std::cout << "通讯录容量已满!" << std::endl;
+		return;
+	}
+	else
+	{
+		//添加具体联系人
+
+		//姓名
+		std::string name;
+		std::cout << "请输入姓名:" << std::endl;
+		std::cin >> name;
+		abs->personArray[abs->m_Size].m_Name = name;
+
+		//性别
+		std::cout << "请输入性别:" << std::endl;
+		std::cout << "1 --- 男" << std::endl;
+		std::cout << "2 --- 女" << std::endl;
+		int sex = 0;
+		while (true)
+		{
+			//如果输入的是1 或 2 可以退出循环,因为输入的是正确值;
+			//如果输入的有误就重新输入。
+			std::cin >> sex;
+			if (sex == 1 || sex == 2)
+			{
+				abs->personArray[abs->m_Size].m_Sex = sex;
+				break;
+			}
+			std::cout << "输入有误,请重新输入" << std::endl;
+		}
+		
+		//年龄
+		std::cout << "请输入年龄:" << std::endl;
+		int age = 0;
+		std::cin >> age;
+		abs->personArray[abs->m_Size].m_Age = age;
+
+		//电话
+		std::cout << "请输入联系电话:" << std::endl;
+		std::string phone;
+		std::cin >> phone;
+		abs->personArray[abs->m_Size].m_Phone;
+
+		//地址
+		std::cout << "请输入家庭住址:" << std::endl;
+		std::string address;
+		std::cin >> address;
+		abs->personArray[abs->m_Size].m_Addr = address;
+
+		//更新通讯录人数
+		abs->m_Size++;
+
+		std::cout << "添加成功" << std::endl;
+	}
+
+}
+
+//2、显示所有联系人
+//思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息
+void showPerson(Addressbooks* abs)
+{
+	//判断通讯录中人数是否为0;如果为0,提示记录为空
+	//如果不为0;显示记录的联系人信息
+	if (abs->m_Size == 0)
+	{
+		std::cout << "当前记录为空" << std::endl;
+	}
+	else
+	{
+		for (int i = 0; i < abs->m_Size; i++)
+		{
+			std::cout << "姓名: " << abs->personArray[i].m_Name << "\t";
+			std::cout << "性别: " << ( abs->personArray[i].m_Sex == 1 ?"男":"女" ) << "\t";
+			std::cout << "年龄: " << abs->personArray[i].m_Age << "\t";
+			std::cout << "电话: " << abs->personArray[i].m_Phone << "\t";
+			std::cout << "地址: " << abs->personArray[i].m_Addr << std::endl;
+		}
+	}
+
+	system("pause");   //按任意键继续
+	system("cls");     //清屏
+
+}
+
+
+//删除联系人
+//功能描述:按照姓名进行删除指定联系人
+//删除联系人实现步骤:
+//封装检测联系人是否存在
+//封装删除联系人函数
+//测试删除联系人功能
+
+
+//检测联系人是否存在,如果存在,返回联系人所在通讯录数组中的具体位置,不存在返回 -1
+//参数1 : 通讯录    参数2 : 对比姓名
+int isExist(Addressbooks * abs, std::string name)
+{
+	for (int i = 0; i < abs->m_Size; i++)             //创建一查找遍历
+	{
+		if (abs->personArray[i].m_Name == name)       //查找到用户输入的姓名
+		{
+			return i;                                 //找到,返回这个人在数组中的下标
+		}
+	}
+
+	return -1;                                        //如果遍历结束都没有找到,返回 -1
+
+}
+
+//3、删除指定的联系人
+void deletePerson(Addressbooks* abs)
+{
+	std::cout << "请输入您要删除的联系人" << std::endl;
+
+	std::string name;
+	std::cin >> name;
+
+	//ret == -1   没查到
+	//ret != -1   查到了
+	int ret = isExist(abs, name);
+
+	if (ret != -1)
+	{
+		//查找到这个人要进行删除操作
+		for (int i = ret; i < abs->m_Size; i++)
+		{
+			//数据迁移
+			abs->personArray[i] = abs->personArray[i + 1];
+
+		}
+		abs->m_Size--;    //更新通讯录中的人员数
+		std::cout << "删除成功" << std::endl;
+	}
+	else
+	{
+		std::cout << "没有找到该联系人" << std::endl;
+	}
+
+	system("pause");
+	system("cls");
+}
+
+
+//4、查找指定的联系人信息
+//功能描述:按照姓名查看指定联系人的信息
+//查找联系人实现步骤
+//⚪封装查找联系人函数
+//⚪测试查找指定联系人
+//
+
+void findPerson(Addressbooks * abs)
+{
+	std::cout << "请输入您要查找的联系人" << std::endl;
+	std::string name;
+	std::cin >> name;
+
+	//判断指定的联系人是否存在通讯录中
+
+	int ret = isExist(abs, name);
+
+	if (ret != -1)      //找到联系人
+	{
+		std::cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
+		std::cout << "性别:" << abs->personArray[ret].m_Sex << "\t";
+		std::cout << "年龄:" << abs->personArray[ret].m_Age << "\t";
+		std::cout << "电话:" << abs->personArray[ret].m_Phone << "\t";
+		std::cout << "地址:" << abs->personArray[ret].m_Addr << "\t";
+	}
+	else
+	{
+		std::cout << "没有找到该联系人" << std::endl;
+	}
+
+	system("pause");
+	system("cls");
+}
+
+
+//5、修改联系人
+//功能描述:按照姓名重新修改指定联系人
+//修改联系人实现步骤:
+//⚪封装修改联系人函数
+//⚪测试修改联系人功能
+
+void modifyPerson(Addressbooks* abs)
+{
+	std::cout << "请输入您要修改的联系人" << std::endl;
+	std:: string name;
+	std::cin >> name;
+
+	int ret = isExist(abs, name);
+	if (ret != -1)     //找到联系人
+	{
+		//姓名
+		std::string name;
+		std::cout << "请输入姓名" << std::endl;
+		std::cin >> name;
+		abs->personArray[ret].m_Name = name;
+		//性别
+		std::cout << "请输入性别" << std::endl;
+		std::cout << "1 --- 男" << std::endl;
+		std::cout << "2 --- 女" << std::endl;
+
+		int sex = 0;
+
+		while (true)
+		{
+			std::cin >> sex;
+
+			if (sex == 1 || sex == 2)
+			{
+				//输入正确  退出循环
+				abs->personArray[ret].m_Sex = sex;
+				break;
+			}
+			std::cout << "输入有误,请重新输入" << std::endl;
+		}
+
+		//年龄
+		std::cout << "请输入年龄" << std::endl;
+		int age = 0;
+		std::cin >> age;
+		abs->personArray[ret].m_Age = age;
+
+		//电话
+		std::cout << "请输入电话:" << std::endl;
+		std::string phone;
+		std::cin >> phone;
+		abs->personArray[ret].m_Phone = phone;
+
+		//住址
+		std::cout << "请输入家庭住址" << std::endl;
+		std::string address;
+		std::cin >> address;
+		abs->personArray[ret].m_Addr = address;
+
+		std::cout << "修改成功" << std::endl;
+		
+	}
+	else               //未找到联系人
+	{
+		std::cout << "未找到该联系人" << std::endl;
+	}
+
+	//按任意键后继续
+	system("pause");
+	system("cls");
+
+}
+
+
+//6、清空联系人
+//功能描述:清空通讯录中所有信息
+//清空联系人实现步骤
+//⚪封装联系人函数
+//⚪测试清空联系人
+//实现思路:将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可
+void cleanPerson(Addressbooks* abs)
+{
+	abs->m_Size = 0;
+	std::cout << "通讯录已清空" << std::endl;
+	system("pause");
+	system("cls");
+}
+
+
+
+
+int main()
+{
+	//创建通讯录结构体变量
+	Addressbooks abs;
+	//初始化通讯录中当前的人员个数
+	abs.m_Size = 0;
+
+
+
+	int select = 0;              //创建用户选择的变量
+
+	while (true)
+	{
+		//菜单的调用
+		showMenu();
+
+		std::cin >> select;
+
+		switch (select)
+		{
+		case 1:                  //添加联系人
+			addPerson(&abs);     //利用地址传递可以修饰实参
+			break;
+		case 2:                  //显示联系人
+			showPerson(&abs);
+			break;
+		case 3:                  //删除联系人
+		//{
+		//	std::cout << "请输入删除联系人姓名:" << std::endl;
+		//	std::string name;
+		//	std::cin >> name;
+
+		//	if (isExist(&abs, name) == -1)
+		//	{
+		//		std::cout << "没有该联系人" << std::endl;
+		//	}
+		//	else
+		//	{
+		//		std::cout << "找到该联系人" << std::endl;
+		//	}
+		//}
+
+			deletePerson(&abs);
+
+			break;
+		case 4:                  //查找联系人
+			findPerson(&abs);
+			break;
+		case 5:                  //修改联系人
+			modifyPerson(&abs);
+			break;
+		case 6:                  //清空联系人
+			cleanPerson(&abs);
+			break;
+		case 0:                  //退出通讯录
+			std::cout << "欢迎下次使用" << std::endl;
+			system("pause");
+			return 0;
+			break;
+
+		default:
+			break;
+		}
+
+
+
+	}
+
+
+	
+
+	system("pause");
+	system("cls");
+
+	return 0;
+}