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文件。

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

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

相关推荐
编程侦探35 分钟前
【设计模式】原型模式:用“克隆”术让对象创建更灵活
c++·设计模式·原型模式
KangkangLoveNLP1 小时前
手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer
人工智能·深度学习·学习·算法·transformer·llama
kfepiza1 小时前
`accept_ra` 和 `autoconf` 和 `forwarding` 的关系 笔记250404
linux·网络·笔记·tcp/ip·智能路由器·ip·tcp
Once_day1 小时前
Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV
linux·c++·sse·x64·sigsegv·xmm0
浪淘沙jkp1 小时前
大模型学习二:DeepSeek R1+蒸馏模型组本地部署与调用
学习·deepseek
kfepiza2 小时前
Debian编译安装mysql8.0.41源码包 笔记250401
数据库·笔记·mysql·debian·database
JhonKI2 小时前
【从零实现Json-Rpc框架】- 项目实现 - 客户端注册主题整合 及 rpc流程示意
c++·qt·网络协议·rpc·json
__lost2 小时前
为什么new分配在堆上,函数变量在栈上+递归调用时栈内存的变化过程
c++·内存分配
m0_613607012 小时前
数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3
学习
序属秋秋秋2 小时前
算法基础_基础算法【位运算 + 离散化 + 区间合并】
c语言·c++·学习·算法·蓝桥杯