前言
衔接上一篇"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文件。
流程图如下:
数据通过文件方式进行流通。明天加个数据流图