c++学习笔记-STL案例-机房预约系统6-老师模块

前言

衔接上一篇"c++学习笔记-STL案例-机房预约系统5-学生模块",本文主要设计老师模块,从,老师登录和注销、查看所有预约、审核预约三个方面进行分析和实现。


目录

[9 教师模块](#9 教师模块)

[9.1 教师登录和注销](#9.1 教师登录和注销)

[9.1.1 构造函数](#9.1.1 构造函数)

[9.1.2 教师子菜单](#9.1.2 教师子菜单)

​编辑

[9.1.3 菜单功能实现](#9.1.3 菜单功能实现)

[9.1.4 接口对接](#9.1.4 接口对接)

[9.1.5 测试结果](#9.1.5 测试结果)

[9.2 查看所以预约](#9.2 查看所以预约)

[9.2.1 所有预约功能实现](#9.2.1 所有预约功能实现)

[9.2.2 测试结果](#9.2.2 测试结果)

[9.3 审核预约](#9.3 审核预约)

[9.3.1 审核功能实现](#9.3.1 审核功能实现)

[9.3.2 测试审核功能](#9.3.2 测试审核功能)


9 教师模块

9.1 教师登录和注销

9.1.1 构造函数

在Teacher类的构造函数中,初始化教师信息,代码如下:

cpp 复制代码
//有参构造  参数:职工号,姓名,密码
Teacher::Teacher(int empid, string name, string pwd)
{
	this->m_EmpId = empid;
	this->m_Name = name;
	this->m_Pwd = pwd;
}

添加位置如图:

9.1.2 教师子菜单

  • 在机房预约系统.cpp中,当用户登录的是教师,添加教师菜单接口
  • 将不同的分支提供出

查看所有预约

审核预约

注销功能

  • 实现注销功能:

添加全局函数 void TeacherMenu(Identity*&manager)代码如下:

cpp 复制代码
//进入老师子菜单
void teacherMenu(Identity*& teacher)
{
	while (true)
	{
		//调用子菜单界面
		teacher->operMenu();

		//将父类指针  转为子类指针  调用子类指针特有的功能
		Teacher * tea = (Teacher*)teacher;
		
		int select;//接收用户选择
		cin >> select;

		if (select == 1)  //查看所以预约
		{
			tea->showAllOrder();
		}
		else if (select == 2)  //审核预约
		{
			tea->validOrder();
		}
		else
		{
			delete teacher;
			cout << "注销成功" << endl;
			system("pause");
			system("cls");
			return;
		}
	}
}

添加位置如图:

9.1.3 菜单功能实现

cpp 复制代码
//菜单界面
void Teacher::operMenu()
{
	cout << "欢迎教师" << this->m_Name << "登录!" << endl;
	cout << "\t\t -------------------------------------------------" << endl;
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 1.查看所有预约                  |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 2.审核预约                      |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 0.注销登录                      |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t -------------------------------------------------" << endl;
	cout << "请选择您的操作:" << endl;
}

添加位置如图:

9.1.4 接口对接

cpp 复制代码
				//进入教师身份子菜单
				teacherMenu(person);

添加位置如图:

9.1.5 测试结果

登录老师账号:

注销老师账号:

9.2 查看所以预约

9.2.1 所有预约功能实现

该功能与学生身份的查看所有预约功能相似,用于显示所以预约记录

在Teacher.cpp中实现成员函数void Teacher::showAllOrder()

cpp 复制代码
//查看所有预约
void Teacher::showAllOrder()
{
	OrderFile of;
	if (of.m_Size == 0)
	{
		cout << "无预约记录!" << endl;
		system("pause");
		system("cls");
		return;
	}
	for (int i = 0; i < of.m_Size; i++)
	{
		cout << i + 1 << "、";

		cout << "预约日期:周" << of.m_orderDate[i]["data"];
		cout << "预约时段:" << (of.m_orderDate[i]["interval"] == "1" ? "上午" : "下午");
		cout << "学号:" << of.m_orderDate[i]["stuId"];
		cout << "姓名:" << of.m_orderDate[i]["stuName"];
		cout << "机房号:" << of.m_orderDate[i]["roomId"];

		string status = "状态:";
		//1审核中  2已预约  -1预约失败 0取消预约

		if (of.m_orderDate[i]["status"] == "1")
		{
			status += "审核中";
		}
		else if (of.m_orderDate[i]["status"] == "2")
		{
			status += "已预约";
		}
		else if (of.m_orderDate[i]["status"] == "-1")
		{
			status += "预约失败,审核未通过";
		}
		else if (of.m_orderDate[i]["status"] == "0")
		{
			status += "预约已经取消";
		}
		cout << status << endl;
	}
	system("pause");
	system("cls");
}

添加位置如图:

9.2.2 测试结果

9.3 审核预约

9.3.1 审核功能实现

cpp 复制代码
//审核预约
void Teacher::validOrder()
{
	OrderFile of;
	if (of.m_Size == 0)
	{
		cout << "无预约记录" << endl;
		system("pause");
		system("cls");
		return;
	}

	vector<int>v;
	int index = 0;
	cout << "审核中的预约记录如下:" << endl;

	for (int i = 0; i < of.m_Size; i++)
	{
		if (of.m_orderDate[i]["status"] == "1")//审核中的预约
		{
			v.push_back(i);
			cout << ++index << "、";
			cout << "预约日期:周" << of.m_orderDate[i]["date"];
			cout << "  时间段:" << (of.m_orderDate[i]["interval"] == "1" ? "上午" : "下午");
			cout << "  学生编号:" << of.m_orderDate[i]["stuId"];
			cout << "  学生姓名:" << of.m_orderDate[i]["stuName"];
			cout << "  机房编号:" << of.m_orderDate[i]["roomId"];
			string status = "  状态:审核中";
			cout << status << endl;
		}
	}

	cout << "请输入审核的预约记录,0代表返回" << endl;
	int select = 0;//接受用户选择的预约记录
	int ret = 0;//接受预约结果记录

	while (true)
	{
		cin >> select;
		if (select >= 0 && select <=v.size())
		{
			if (select == 0)
			{
				break;
			}
			else
			{
				cout << "请输入审核结果" << endl;
				cout << "1、通过" << endl;
				cout << "2、不通过" << endl;

				cin >> ret;
				if (ret == 1)
				{
					//通过情况
					of.m_orderDate[v[select - 1]]["status"] = "2";
				}
				else
				{
					//不通过情况
					of.m_orderDate[v[select - 1]]["status"] = "-1";
				}
				of.updateOrder();//更新预约记录
				cout << "审核完毕!" << endl;
				break;
			}
		}
		cout << "输入有误,重新输入!" << endl;
	}
	system("pause");
	system("cls");
}

添加位置如图:

9.3.2 测试审核功能

审核通过测试:

order.txt文件第一条预约也对应更改为"2"表示审核通过:

审核不通过测试:

order.txt文件第一条预约也对应更改为"-1"表示审核不通过:

查看所有预约, 第一条预约为"已预约"、 第二条预约为"预约失败,审核未通过",符合上面两个操作审核的过程结果:

总结

教师模块查看预约、审核预约、注销登录三大功能,其中教师的查看所有预约和学生模块的查看所有预约功能一致,审核预约需要筛选出预约状态为"审核中"的预约条目,记录这些条目在实际order.txt中的编号,然后根据人选择的编号更改选中编号的预约状态为"审核通过"或"审核不通过",在根据审核结果更新orderFile的成员函数m_orderDate从而更新 order.txt文件。

流程图如下:​​​​​​​

数据通过文件方式进行流通。明天加个数据流图

相关推荐
逆小舟1 小时前
【Linux】人事档案——用户及组管理
linux·c++
Hello_Embed4 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中4 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Grassto5 小时前
RAG 从入门到放弃?丐版 demo 实战笔记(go+python)
笔记
Magnetic_h5 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
风中的微尘6 小时前
39.网络流入门
开发语言·网络·c++·算法
研梦非凡6 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d
混分巨兽龙某某6 小时前
基于Qt Creator的Serial Port串口调试助手项目(代码开源)
c++·qt creator·串口助手·serial port
小冯记录编程7 小时前
C++指针陷阱:高效背后的致命危险
开发语言·c++·visual studio
limengshi1383927 小时前
机器学习面试:请介绍几种常用的学习率衰减方式
人工智能·学习·机器学习