文章目录
-
- 机房预约系统
- 一、系统需求
- 1、系统简介
- 2、身份简介
- 3、机房简介
- 4、申请简介
- 5、系统需求
- 6、创建文件
- 二 、创建主菜单
- 1、菜单实现&接口搭建
- 三、退出功能实现
- 四、创建身份类
- 1、身份基类
- 2、学生类
- 2.1功能分析
- 2.2类的创建
- 3、老师类
- 3.1功能分析
- 3.2类的创建
- 4、管理员类
- 4.1功能分析
- 4.2类的创建
- 五、登录模块
- 1、全局文件添加
- 2、登陆函数封装
- 六、管理员模块
- 1、管理员登陆和注销
- 1.1构造函数
- 1.2管理员子菜单
- 2、添加账号
- 2.1添加功能实现
- 2.2去重操作
- 2.2.1读取信息
- 2.2.2去重函数封装
- 3、显示账号功能
- 4、查看机房
- 4.1添加机房信息
- 4.2机房类创建
- 4.3初始化机房信息
- 4.4显示机房信息
- 5、清空预约
- 5.1功能实现
- 七、学生模块
- 1、学生登陆和注销
- 1.1构造函数
- 1.2学生子菜单
- 2、申请预约
- 2.1获取机房信息
- 2.2预约功能实现
- 3、显示预约
- 3.1创建预约类
- 3.2显示自身预约
- 3.3显示所有预约
- 4、取消预约
- 八、教师模块
- 1、教师登陆和注销
- 1.1构造函数
- 1.2教师子菜单
- 1.3菜单功能实现
- 2、查看所有预约
- 2.1所有预约功能实现
- 3、审核预约
- 3.1审核功能实现
机房预约系统
一、系统需求
1、系统简介
学校现有几个规格不同的机房,为了让大家在申请的时候不发生冲突,,让每个人都能提前知晓机房的使用情况从而有效地申请机位,现开发这套机房预约系统
2、身份简介
分别有三种身份使用该程序
学生代表:申请使用机房
教师:审核学生的预约申请
管理员:给学生、教师创建账号
3、机房简介
机房总共有三间
1 号机房 – 最大容量 20人
2 号机房 – 最多容量 50 人
3 号机房 – 最多容量 100 人
4、申请简介
申请的订单每周有管理员负责清空
学生可以预约未来一周内的机房使用,预约的日期为周一到周五,预约时需要选择预约时段(上午、下午)
教师来审核预约,依据实际情况审核通过或者不通过
5、系统需求
首先进入登录界面,可选登录身份有:
学生代表
老师
管理员
每个身份都需要进行验证后,进入子菜单
学生需要输入:学号、姓名、登录密码
老师需要输入:职工号、姓名、登录密码
管理员需要输入:姓名、登录密码
学生具体功能
申请预约 – 预约机房
查看自身预约 – 查看自己的预约状态
查看所有预约 – 查看全部预约信息以及预约状态
取消预约 – 取消自身的预约,预约成功或审核中的预约可以取消
教师具体功能
查看所有预约 – 查看全部预约信息以及预约状态
审核预约 – 对学生的预约进行审核
注销登录 – 退出登录
管理员具体功能
添加账号 – 添加学生或教师的账号,需要检测学生编号或教师职工号是否重复
查看账号 – 可以选择查看学生或教师的全部信息
查看机房 – 查看所有机房的信息
6、创建文件
创建一个机房预约系统的项目,同时创建一个 机房预约系统.cpp 文件作为主要运行文件
二 、创建主菜单
功能描述:
设计主菜单,与用户进行交互
1、菜单实现&接口搭建
在主函数 main 中添加菜单提示,代码如下
int main()
{
int select = 0;//用于接收用户的选择
while (true)
{
cout << "==================欢迎来到机房预约系统=================" << endl;
cout << endl << "请输入您的身份" << 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| 3、管 理 员 |\n";
cout << "\t\t| |\n";
cout << "\t\t| 0、退 出 |\n";
cout << "\t\t| |\n";
cout << "\t\t----------------------------\n";
cout << "请输入您的选择:";
cin >> select;//接受用户选择
switch (select)//根据用户选择,实现不同接口
{
case 1://学生身份
LoginIn(STUDENT_FILE, 1);
break;
case 2://教师身份
LoginIn(TEACHER_FILE, 2);
break;
case 3://管理员身份
LoginIn(ADMIN_FILE, 3);
break;
case 0://退出系统
cout << "欢迎下一次使用" << endl;
system("pause");
return 0;
break;
default:
cout << "输入有误,请重新选择!" << endl;
system("pause");
system("cls");
break;
}
}
system("pause");
return 0;
}
三、退出功能实现
在 main() 函数分支选项中,添加退出程序功能
cout << "欢迎下一次使用" << endl;
system("pause");
return 0;
break;
四、创建身份类
1、身份基类
在整个系统中,有三种身份,分别为:学生代表、老师以及管理员
三种身份有其共性也有其特性,因此,我们可以将三种身份抽象出一个身份基类 identity
在头文件中创建 identity.h 文件
identity.h 中添加如下代码
#pragma once
#include<iostream>
using namespace std;
class Identify {
public:
virtual void showMenu() = 0;
string m_Name;
string m_Pwd;
};
2、学生类
2.1功能分析
学生类主要功能是可以通过类中成员函数,实现预约实验室操作
学生类中主要功能有
提示学生操作的菜单界面
申请预约
查看自身预约
查看所有预约
取消预约
2.2类的创建
在头文件以及源文件下创建 student.h 和 student.cpp 文件
student.h 中
#pragma once
#include<iostream>
using namespace std;
#include"Identify.h"
#include"computerRoom.h"
#include<vector>
#include"globalFile.h"
#include"orderFile.h"
class Student:public Identify {
public:
Student();
Student(int id, string name, string pwd);
virtual void showMenu();
void applyOrder();
void showMyOrder();
void showAllOrdder();
void cancleOrdedr();
int m_Id;
vector<ComputerRoom>vCom;
};
student.cpp
#include"student.h"
#include<fstream>
Student::Student()
{
}
Student::Student(int id, string name, string pwd)
{
this->m_Id = id;
this->m_Name = name;
this->m_Pwd = pwd;
ifstream ifs;
ifs.open(COMPUTER_FILE, ios::in);
ComputerRoom c;
while (ifs >> c.m_ComId && ifs >> c.m_MaxNum)
{
vCom.push_back(c);
}
ifs.close();
}
void Student::showMenu()
{
cout << "欢迎学生代表:" << this->m_Name << "登陆" << endl;
cout << "-----------------------------------" << endl;
cout << "------------1、申请预约------------" << endl;
cout << "----------2、查看我的预约----------" << endl;
cout << "----------3、查看所有预约----------" << endl;
cout << "------------4、取消预约------------" << endl;
cout << "------------0、注销登陆------------" << endl;
cout << "-----------------------------------" << endl;
}
void Student::applyOrder()
{
cout << "机房开放时间为周一到周五!" << endl;
cout << "1、周一" << endl;
cout << "2、周二" << endl;
cout << "3、周三" << endl;
cout << "4、周四" << endl;
cout << "5、周五" << endl;
int date = 0;
int interval = 0;//时间段
int room = 0;
while (true)
{
cin >> date;
if (date >= 1 && date <= 5)
{
break;
}
cout << "输入有误,请重新输入" << endl;
}
cout << "请输入盛情预约时间段:" << endl;
cout << "1、上午" << endl;
cout << "2、下午" << endl;
while (true)
{
cin >> interval;
if (interval >= 1 && interval <= 2)
{
break;
}
cout << "输入有误,请重新输入" << endl;
}
cout << "请选择机房:" << endl;
cout << "1号机房容量:" << vCom[0].m_MaxNum << endl;
cout << "2号机房容量:" << vCom[1].m_MaxNum << endl;
cout << "3号机房容量:" << vCom[2].m_MaxNum << endl;
while (true)
{
cin >> room;
if (room >= 1 && room <= 3)
{
break;
}
cout << "输入有误,请重新输入" << endl;
}
cout << "预约成功!审核中" << endl;
ofstream ofs(ORDER_FILE, ios::app);//以追加的方式打开
ofs << "date:" << date << " ";
ofs << "interval:" << interval << " ";
ofs << "stuId:" << this->m_Id << " ";
ofs << "stuName:" << this->m_Name << " ";
ofs << "roomId:" << room << " ";
ofs << "status" << 1 << endl;//默认待审核状态为1
ofs.close();
system("pause");
system("cls");
}
void Student::showMyOrder()
{
OrderFile of;
if (of.m_Size == 0)
{
cout << "无预约记录" << endl;
system("pause");
system("cls");
return;
}
for (int i = 0; i < of.m_Size; i++)
{
//这里面是string和int对比,先把string转成char*,再用atoi给他转为c风格的int
if (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_Id)
{
//如果遍历出来的id和自身id相同,说明遍历出来的是自身的信息
cout << "预约日期:周" << of.m_orderData[i]["date"];
cout << "时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
cout << "机房:" << of.m_orderData[i]["roomId"];
string status = "状态:";//0取消预约1审核中2已预约-1预约失败
if (of.m_orderData[i]["status"] == "1")
{
status += "审核中";
}
else if(of.m_orderData[i]["status"]=="2")
{
status += "预约成功";
}
else if (of.m_orderData[i]["status"] == "-1")
{
status += "预约失败,审核未通过";
}
else
{
status += "预约已取消";
}
cout << status << endl;
}
}
system("pause");
system("cls");
}
void Student::showAllOrdder()
{
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_orderData[i]["date"];
cout << "时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
cout << "机房:" << of.m_orderData[i]["roomId"];
string status = "状态:";//0取消预约1审核中2已预约-1预约失败
if (of.m_orderData[i]["status"] == "1")
{
status += "审核中";
}
else if (of.m_orderData[i]["status"] == "2")
{
status += "预约成功";
}
else if (of.m_orderData[i]["status"] == "-1")
{
status += "预约失败,审核未通过";
}
else
{
status += "预约已取消";
}
cout << status << endl;
}
system("pause");
system("cls");
}
void Student::cancleOrdedr()
{
OrderFile of;
if (of.m_Size == 0)
{
cout << "无预约记录" << endl;
system("pause");
system("cls");
return;
}
cout << "审核中或者预约成功的记录可以取消,请输入要取消的记录" << endl;
vector<int>v;
int index = 1;
for (int i = 0; i < of.m_Size; i++)
{
if (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_Id)
{
if (of.m_orderData[i]["status"] == "1" || of.m_orderData[i]["status"] == "2")
{
v.push_back(i);//记录同一个人在文件中的所有记录的编号
cout << index++ << "、";
cout << "预约日期:周" << of.m_orderData[i]["date"];
cout << "时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
cout << "机房:" << of.m_orderData[i]["roomId"];
string status = "状态:";
if (of.m_orderData[i]["status"] == "1")
{
status += "审核中";
}
else if (of.m_orderData[i]["status"] == "2")
{
status += "预约成功";
}
cout << status << endl;
}
}
}
cout << "请输入取消的记录,0代表返回" << endl;
int select = 0;
while (true)
{
cin >> select;
if (select >= 0 && select <= v.size())
{
if (select == 0)
{
break;
}
else
{
of.m_orderData[v[select - 1]]["status"] = "0";
of.updateOrder();
cout << "已取消预约" << endl;
break;
}
}
cout << "输入有误:请重新输入" << endl;
}
system("pause");
system("cls");
}
3、老师类
3.1功能分析
教师主要功能是查看学生的预约,并进行审核
教师类中主要功能有:
显示教师操作的菜单界面
查看所有预约
审核预约
3.2类的创建
在头文件以及源文件中创建 teacher.h 和 teacher.cpp 文