1、机房预约系统需求
1.1 系统简介
学校现有几个规格不同的机房,由于使用时经常出现"撞车"现象,现开发一套机房预约系统,解决这一问题。
1.2 身份简介
分别有三种身份使用该程序
学生代表:申请使用机房
教师:审核学生的预约申请
管理员:给学生、教师创建账号
1.3 机房简介
机房总共有3间
1号机房 — 最大容量20人
2号机房 — 最多容量50人
3号机房 — 最多容量100人
1.4 申请简介
申请的订单每周由管理员负责清空。
学生可以预约未来一周内的机房使用,预约的日期为周一至周五,预约时需要选择预约时段(上午、下午)
教师来审核预约,依据实际情况审核预约通过或者不通过
1.5 系统具体需求
首先进入登录界面,可选登录身份有:
学生代表
老师
管理员
退出
每个身份都需要进行验证后,进入子菜单
学生需要输入 :学号、姓名、登录密码
老师需要输入:职工号、姓名、登录密码
管理员需要输入:管理员姓名、登录密码
学生具体功能:
申请预约 — 预约机房
查看自身的预约 — 查看自己的预约状态
查看所有预约 — 查看全部预约信息以及预约状态
取消预约 — 取消自身的预约,预约成功或审核中的预约均可取消
注销登录 — 退出登录
教师具体功能
查看所有预约 — 查看全部预约信息以及预约状态
审核预约 — 对学生的预约进行审核
注销登录 — 退出登录
管理员具体功能
添加账号 — 添加学生或教师的账号,需要检测学生编号或教师职工号是否重复
查看账号 — 可以选择查看学生或教师的全部信息
查看机房 — 查看所有机房的信息
清空预约 — 清空所有预约记录
注销登录 — 退出登录
头文件:
computerRoom.h
#pragma once
#include<iostream>
using namespace std;
//机房类
class ComputerRoom {
public:
int m_ComId; //机房
int m_MaxNum; //机房最大容量
};
globalFile.h
#pragma once
//管理员文件
#define ADMIN_FILE "admin.txt"
//学生文件
#define STUDENT_FILE "student.txt"
//教师文件
#define TEACHER_FILE "teacher.txt"
//机房信息文件
#define COMPUTER_FILE "computerRoom.txt"
//订单文件
#define ORDER_FILE "order.txt"
Identity.h
#pragma once
#include<iostream>
using namespace std;
//身份抽象基类
class Identity {
public:
//操作菜单 纯虚函数
virtual void operMenu() = 0;
//用户名
string m_Name;
//密码
string m_Pwd;
};
manager.h
#pragma once
#include<iostream>
using namespace std;
#include"Identity.h"
#include<string>
#include"globalFile.h"
#include<vector>
#include"student.h"
#include"teacher.h"
#include<algorithm>
#include"computerRoom.h"
//管理员类设计
class Manager :public Identity {
public:
//默认构造
Manager();
//有参构造
Manager(string name, string pwd);
//菜单界面
virtual void operMenu();
//添加账号
void addPerson();
//查看账号
void showPerson();
//查看机房信息
void showComputer();
//清空预约记录
void cleanFile();
//初始化容器
void initVector();
//检测重复 检测学号/职工号 检测类型
bool checkRepeat(int id, int type);
//学生容器
vector<Student>vStu;
//教师容器
vector<Teacher>vTea;
//机房信息
vector<ComputerRoom>vCom;
};
orderFile.h
#pragma once
#include<iostream>
using namespace std;
#include"globalFile.h"
#include<fstream>
#include<map>
#include<string>
class OrderFile {
public:
//构造函数
OrderFile();
//更新预约记录
void updateOrder();
//记录预约条数
int m_Size;
//记录所有预约信息的容器 key记录条数 value具体记录键值对信息
map<int, map<string, string>> m_orderData;
};
student.h
#pragma once
#include<iostream>
using namespace std;
#include"Identity.h"
#include<string>
#include<vector>
#include"computerRoom.h"
#include<fstream>
#include"globalFile.h"
#include"orderFile.h"
//学生类
class Student :public Identity {
public:
//默认构造
Student();
//有参构造
Student(int id, string name, string pwd);
//菜单界面
virtual void operMenu();
//申请预约
void applyOrder();
//查看自身预约
void showMyOrder();
//查看所有预约
void showAllOrder();
//取消预约
void cancelOrder();
//学生学号
int m_Id;
//机房容器
vector<ComputerRoom>vCom;
};
teacher.h
#pragma once
#include<iostream>
using namespace std;
#include"Identity.h"
#include"orderFile.h"
#include<vector>
//教师类设计
class Teacher :public Identity {
public:
//默认构造
Teacher();
//有参构造
Teacher(int empId, string name, string pwd);
//菜单界面
virtual void operMenu();
//查看所有预约
void showAllOrder();
//审核预约
void validOrder();
int m_EmpId;
};
源文件
manager.cpp
#include"manager.h"
#include<fstream>
//默认构造
Manager::Manager() {
}
//有参构造
Manager::Manager(string name, string pwd) {
//初始化管理员信息
this->m_Name = name;
this->m_Pwd = pwd;
//初始化容器 获取到所有文件中学生和老师的信息
this->initVector();
//初始化机房信息
ifstream ifs;
ifs.open(COMPUTER_FILE, ios::in);
ComputerRoom com;
while (ifs >> com.m_ComId && ifs >> com.m_MaxNum) {
vCom.push_back(com);
}
ifs.close();
cout << "当前机房数量: " << vCom.size() << endl;
}
//菜单界面
void Manager::operMenu() {
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| 3.查看机房 |\n";
cout << "\t\t| |\n";
cout << "\t\t| 4.清空预约 |\n";
cout << "\t\t| |\n";
cout << "\t\t| 0.注销登录 |\n";
cout << "\t\t| |\n";
cout << "\t\t ---------------------------------\n";
cout << "请选择您的操作: " << endl;
}
//添加账号
void Manager::addPerson() {
cout << "请输入添加账号的类型" << endl;
cout << &