9、 教师模块
在这个模块中,登录和注销和管理员与学生的实现一样;查看所有预约也和学生的查看所有预约实现一样;审核预约基本上和学生的取消预约一样。不同的是,学生模块,是通过学号和预约状态找到可以取消的预约记录。在老师模块,是通过预约状态找到可以审核的预约记录,比起学生模块的还少了一个学号的查找,因此,以下的登录和注销、查看所有预约不赘诉,主要展示代码实现和效果。
9.1 教师登录和注销和查看所有预约
9.1.1 实现步骤:
- 在Teacher.cpp的构造函数中,初始化老师属性
- 在Teacher.cpp的子菜单openMenu函数中,写菜单界面显示的实现
- 在机房预约系统.cpp中,添加全局函数
void TeacherMenu(Person * &manager)
- 当用户登录的是教师,添加教师菜单接口
- 将不同的分支提供出来
- 实现注销功能
- 在机房预约系统.cpp的LoginIn登陆函数中,实现老师子菜单接口对接
- 在Teacher.cpp中实现成员函数
void Teacher::showAllOrder()
,对存放预约记录的容器遍历,输出容器的内容
9.1.2 代码展示:Teacher.cpp-构造函数 菜单显示 查看所有预约
//有参构造 (职工编号,姓名,密码)
Teacher::Teacher(int id, string name, string password)
{
this->m_teaId = id;
this->m_Name = name;
this->m_Password = password;
}
//显示子菜单 重写父类Identity纯虚函数
void Teacher::openMenu()
{
cout << "欢迎教师:" << this->m_Name << "登录!" << endl;
cout << "\t\t ----------------------------------\n";
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 ----------------------------------\n";
cout << "请选择您的操作: " << endl;
}
//查看所有预约
void Teacher::showallOrder()
{
orderFile order;
if (order.m_Size == 0)
{
cout << "没有预约记录!" << endl;
system("pause");
system("cls");
return;
}
for (int i = 0; i < order.m_Size; i++)
{
cout << "\n第" << i + 1 << "条预约记录:";
cout << "预约日期:周" << order.m_order[i]["date"];
cout << "\t时间段:" << (order.m_order[i]["period"] = "1" ? "上午" : "下午");
cout << "\t预约学生学号:" << order.m_order[i]["stuID"];
cout << "\t预约学生姓名:" << order.m_order[i]["stuName"];
cout << "\t机房号:" << order.m_order[i]["roomID"];
string status = "\t状态:";
if (order.m_order[i]["status"] == "1")
{
status += "审核中";
}
else if (order.m_order[i]["status"] == "2")
{
status += "预约成功";
}
else if (order.m_order[i]["status"] == "-1")
{
status += "预约失败,审核未通过";
}
else
{
status += "预约已取消";
}
cout << status << endl << endl;
}
cout << endl;
system("pause");
system("cls");
}
9.1.3 代码展示:机房预约系统.cpp-代码展示
//全局函数 进入老师子菜单界面
void teacherMenu(Identity*& teacher)
{
while (true)
{
//教师菜单
teacher->openMenu();
Teacher* tea = (Teacher*)teacher;
int select = 0;
cin >> select;
switch (select)
{
case 1:
cout << "查看所有预约" << endl;
tea->showallOrder();
break;
case 2:
cout << "审核预约" << endl;
tea->validOrder();
break;
default:
delete teacher;
cout << "注销成功!" << endl;
system("pause");
system("cls");
return;
}
}
}
9.1.2 代码展示:机房预约系统.cpp的LoginIn
9.1.4 测试
登录验证通过:
测试-教师子菜单:
测试-注销登录:
测试-教师身份的查看所有预约功能:
9.2 审核预约
在这部分,和学生模块的申请预约功能基本上一样,以下简要概述。
9.2.1 审核功能实现
功能描述: 教师审核学生的预约,依据实际情况审核预约
实现步骤:
- 首先,判断是否有预约记录,如果没有直接返回,如果有,则找到可以审核的预约记录
- 其次,遍历m_order容器,根据预约记录的状态来筛选可以审核的预约记录
- 接着,找到可以审核的预约记录后,让老师输入审核结果,1-通过,2-不通过
- 然后,按照审核结果修改预约记录信息的预约状态status,再更新m_order容器
- 最后,提示用户审核完毕,并放回老师菜单界面
- 在Teacher.cpp中实现成员函数
void Teacher::validOrder()
代码展示:
//审核预约
void Teacher::validOrder()
{
orderFile order;
int index = 1;
vector<int> v;//维护 待审记录 的真实下标 m_order中该记录的key
for (int i = 0; i < order.m_Size; i++)
{
//找到待审核的预约记录
if (order.m_order[i]["status"] == "1")
{
v.push_back(i);//存放这条记录
cout << index++ << "、";
cout << "预约日期:" << order.m_order[i]["date"];
cout << "预约时间段:" << (order.m_order[i]["period"] == "1" ? "上午" : "下午");
cout << "预约学生学号:" << order.m_order[i]["stuID"];
cout << "预约学生姓名:" << order.m_order[i]["stuName"];
cout << "预约机房:" << order.m_order[i]["roomID"];
string status = "预约状态:";
if (order.m_order[i]["status"] == "1")
{
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)
{
cout << " 审核通过!" << endl;
order.m_order[v[select - 1]]["status"] = "2";
}
else
{
cout << " 审核不通过!" << endl;
order.m_order[v[select - 1]]["status"] = "-1";
}
order.updateOrder();
cout << "审核完毕!" << endl << endl;
break;
}
}
else
{
cout << "输入有误,请重新输入" << endl;
}
}
system("pause");
system("cls");
}
注意点:
- 此时,vector容器v存放的是状态为审核中的预约记录的真实下标,即状态为审核中的预约记录在m_order的key值
- index维护状态为审核中的预约记录的顺序,而select则是维护老师选择审核预约记录的顺序,select只能属于[0, index]这个范围,ret是对该条记录的审核结果
- 根据ret的结果,把审核记录的状态作对应的修改,并更新m_order容器。
m_order[i]---------------------------第i条记录
i------------------------------------对应m_order容器中的key,第i条记录的真实下标
index--------------------------------对应第i条记录的顺序,从1开始,index++,随着i变化
select-------------------------------对应老师选择的可以审核的预约记录的顺序,[0, index]范围
ret----------------------------------对饮老师选择的第select条预约记录的审核结果,1表示通过,2表示不通过
m_order[i]["status"]==1--------------状态为审核中的第i条记录
v.push_back(i);----------------------存 状态为审核中的第i条记录的真实下标,m_order中key值
v[select - 1]------------------------对应存放在v容器中 老师选择的 顺序为select-1 预约记录的真实下标,m_order中key值
m_order[v[select - 1]]["status"]-----对应老师选择的 顺序为select-1 的预约记录的 预约状态
9.2.2 测试审核预约
审核前-order.txt:
审核前-老师查看可以审核的预约记录:
测试 - 审核通过
测试-审核未通过
审核后-order.txt:
至此本案例制作完毕! ^_^