【机房预约系统(C++版)】

一、机房预约系统需求

1.1、系统简介

·学校现有几个规格不同的机房,由于使用时经常出现“撞车“现象,现开发一套机房预约系统,解决这一问题。

1.2、身份简介

分别有三种身份使用该程序
·学生代表:申请使用机房
·教师:审核学生的预约申请
·管理员:给学生、教师创建账号

1.3、机房简介

机房总共有3间
·1号机房 --- 最大容量20人
·2号机房 --- 最多容量50人
·3号机房 --- 最多容量100人

1.4、申请简介

·申请的订单每周由管理员负责清空

·学生可以预约未来一周内的机房使用,预约的日期为周一至周五,预约时需要选择预约时段(上午、下午)

·教师来审核预约,依据实际情况审核预约通过或者不通过

1.5、系统具体需求

·首先进入登录界面,可选登录身份有:

        ·学生代表
        ·老师
        ·管理员
        ·退出

·每个身份都需要进行验证后,进入子菜单
        ·学生需要输入:学号、姓名、登录密码
        ·老师需要输入:职工号、姓名、登录密码
        ·管理员需要输入:管理员姓名、登录密码

·学生具体功能
        ·申请预约 --- 预约机房

        ·查看自身的预约 --- 查看自己的预约状态

        ·查看所有预约 --- 查看全部预约信息以及预约状态

        ·取消预约 --- 取消自身的预约,预约成功或审核中的预约均可取消

·教师具体功能

        ·查看所有预约 --- 查看全部预约信息以及预约状态
        ·审核预约 --- 对学生的预约进行审核
        ·注销登录 --- 退出登录

·管理员具体功能

        ·添加账号 --- 添加学生或教师的账号,需要检测学生编号或教师职工号是否重复
        ·查看账号 --- 可以选择查看学生或教师的全部信息
        ·查看机房 ---  查看所有机房的信息

        ·清空预约 --- 清空所有预约记录
        ·注销登录 --- 退出登录

二、分模块代码

2.1、identity身份基类

#pragma once
using namespace std;
#include<iostream>
#include "globalFile.h"//身份抽象基类
class Identity
{
public://用户名string m_Name;//密码string m_Pwd;//纯虚函数 - 操作函数virtual void operMenu() = 0;
};

2.2、manager管理员

2.2.1、manager.h
#pragma once
#include"Identity.h"
#include<fstream>
#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;
};
2.2.2、manager.cpp
#include "manager.h"//默认构造
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();
}//菜单界面
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 << "请选择您的操作:";
}//添加账号
void Manager::addPerson()
{cout << "请输入要添加账号的类型(1.学生|2.教师):";string fileName;//操作的文件名string tip;//提示的id号ofstream ofs;//文件操作对象string errorTip;//重复错误提示int select = 0;cin >> select;//接受用户选项if (select == 1){//添加学生fileName = STUDENT_FILE;tip = "请输入学号:";errorTip = "学号重复,请重新输入!";}else{fileName = TEACHER_FILE;tip = "请输入职工编号:";errorTip = "职工号错重复,请重新输入!";}//利用追加的方式写文件ofs.open(fileName, ios::out|ios::app);int id;string name;string pwd;while (true){cout << tip;cin >> id;bool ret = checkRepeat(id, select);if (ret){cout << errorTip << endl;}else{break;}}cout << "请输入姓名:";cin >> name;cout << "请输入密码:";cin >> pwd;//向文件中添加数据ofs << id << " " << name << " " << pwd << " " << endl;cout << "添加成功!" << endl;system("pause");system("cls");ofs.close();//调用初始化容器接口,重新获取文件中的数据this->initVector();
}void printStudent(Student& s)
{cout << "学号:" << s.m_Id << " 姓名:" << s.m_Name << " 密码:" << s.m_Pwd << endl;
}void printTeacher(Teacher& t)
{cout << "职工号:" << t.m_EmpId << " 姓名:" << t.m_Name << " 密码:" << t.m_Pwd << endl;
}//查看账号
void Manager::showPerson()
{cout << "请选择要查看的内容(1.学生|2.老师):";int select = 0;//接受用户选择cin >> select;if (select == 1){//查看学生cout << "所有学生信息如下:" << endl;for_each(vStu.begin() , vStu.end() , printStudent);}else{//查看老师cout << "所有老师信息如下:" << endl;for_each(vTea.begin(), vTea.end(), printTeacher);}system("pause");system("cls");
}//查看机房信息
void Manager::showComputer()
{cout << "机房信息如下:" << endl;for (vector<ComputerRoom>::iterator it = vCom.begin(); it != vCom.end(); it++){cout << "机房编号:" << it->m_ComId << " 机房最大容量:" << it->m_MaxNum << endl;}system("pause");system("cls");
}//清空预约记录
void Manager::cleanFile()
{ofstream ofs(ORDER_FILE, ios::trunc);ofs.close();cout << "清空成功!" << endl;system("pause");system("cls");
}//初始化容器
void Manager::initVector()
{//确保容器清空状态vStu.clear();vTea.clear();//读取信息 - 学生ifstream ifs;ifs.open(STUDENT_FILE, ios::in);if (!ifs.is_open()){cout << "文件读取失败!" << endl;return;}Student s;while (ifs >> s.m_Id && ifs >> s.m_Name && ifs >> s.m_Pwd){vStu.push_back(s);}ifs.close();//读取信息 - 老师ifs.open(TEACHER_FILE, ios::in);if (!ifs.is_open()){cout << "文件读取失败!" << endl;return;}Teacher t;while (ifs >> t.m_EmpId && ifs >> t.m_Name && ifs >> t.m_Pwd){vTea.push_back(t);}ifs.close();
}//检测重复 - 参数(检测学号/职工号、检测类型)
bool Manager::checkRepeat(int id, int type)
{if (type == 1){//检测学生for (vector<Student>::iterator it = vStu.begin(); it != vStu.end(); it++){if (id == it->m_Id){return true;}}}else{//检测老师for (vector<Teacher>::iterator it = vTea.begin(); it != vTea.end(); it++){if (id == it->m_EmpId){return true;}}}return false;
}

2.3、computerRoom机房类

#pragma once
using namespace std;
#include <iostream>//机房类
class ComputerRoom
{
public:int m_ComId;//机房Id号int m_MaxNum;//机房最大容量
};

2.4、globalfile所属文件管理

#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"

2.5、student学生类

2.5.1、student.h
#pragma once
#include"Identity.h"
#include "computerRoom.h"
#include <vector>
#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;
};
2.5.2、student.cpp
#include "student.h"//默认构造
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 com;while (ifs >> com.m_ComId && ifs >> com.m_MaxNum){//将读取的信息放入到容器中vCom.push_back(com);}ifs.close();
}//菜单界面
void Student::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 << "请选择您的操作:";
}//申请预约
void Student::applyOrder()
{cout << "机房开放的时间是周一至周五!" << endl;cout << "请输入申请预约的时间(1.周一|2.周二|3.周三|4.周四|5.周五):";int date = 0;//日期int interval = 0;//时间段int room = 0;//机房编号while (true){cin >> date;if (date >= 1 && date <= 5){break;}cout << "输入有误,请重新输入!" << endl;}cout << "请输入申请预约的时间段(1.上午|2.下午):";while (true){cin >> interval;if (interval >= 1 && interval <= 2){break;}cout << "输入有误,请重新输入!" << endl;}cout << "请选择机房:" << endl;for (int i = 0; i < vCom.size(); i++){cout << vCom[i].m_ComId << "号机房容量为:" << vCom[i].m_MaxNum << endl;}while (true){cin >> room;if (room >= 1 && room <= 3){break;}cout << "输入有误,请重新输入!" << endl;}cout << "预约成功!审核中!" << endl;ofstream ofs;ofs.open(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;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 利用 .c_str() -> const char*//利用 atoi(const char*) -> intif (this->m_Id == atoi(of.m_orderData[i]["stuId"].c_str()))//找到自身预约{cout << "预约日期:周" << of.m_orderData[i]["date"];cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");cout << " 机房号:" << of.m_orderData[i]["roomId"];string status = " 状态:";//1.审核中|2.已预约|-1.预约失败|0.取消预约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::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_orderData[i]["date"];cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");cout << " 学号:" << of.m_orderData[i]["stuId"];cout << " 姓名:" << of.m_orderData[i]["stuName"];cout << " 机房编号:" << of.m_orderData[i]["roomId"];string status = " 状态:";//1.审核中|2.已预约|-1.预约失败|0.取消预约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::cancelOrder()
{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 (this->m_Id == atoi(of.m_orderData[i]["stuId"].c_str())){//再筛选状态 - 审核中|预约成功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代表返回):";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");
}

2.6、orderfile预约记录文件

2.6.1、orderfile.h
#pragma once
using namespace std;
#include<iostream>
#include "globalFile.h"
#include <fstream>
#include<map>class OrderFile
{
public://构造函数OrderFile();//更新预约记录void updateOrder();//记录预约条数int m_Size;//记录所有预约信息的容器 - key记录条数|value具体记录键值对信息map<int, map<string, string >> m_orderData;
};
2.6.2、orderfile.cpp
#include "orderFile.h"//构造函数
OrderFile::OrderFile()
{ifstream ifs;ifs.open(ORDER_FILE, ios::in);string date;//日期string interval;//时间段string stuId;//学生编号string stuName;//学生姓名string roomId;//机房编号string status;//预约状态this->m_Size = 0;//预约记录条数while (ifs >> date && ifs >> interval && ifs >> stuId && ifs >> stuName && ifs >> roomId&& ifs >> status){string key;string value;map<string, string> m;//截取日期int pos = date.find(":");if (pos != -1){key = date.substr(0, pos);value = date.substr(pos + 1, date.size() - pos - 1);m.insert(make_pair(key, value));}//截取时间段pos = interval.find(":");if (pos != -1){key = interval.substr(0, pos);value = interval.substr(pos + 1, interval.size() - pos - 1);m.insert(make_pair(key, value));}//截取学号pos = stuId.find(":");if (pos != -1){key = stuId.substr(0, pos);value = stuId.substr(pos + 1, stuId.size() - pos - 1);m.insert(make_pair(key, value));}//截取姓名pos = stuName.find(":");if (pos != -1){key = stuName.substr(0, pos);value = stuName.substr(pos + 1, stuName.size() - pos - 1);m.insert(make_pair(key, value));}//截取机房号pos = roomId.find(":");if (pos != -1){key = roomId.substr(0, pos);value = roomId.substr(pos + 1, roomId.size() - pos - 1);m.insert(make_pair(key, value));}//截取预约状态pos = status.find(":");if (pos != -1){key = status.substr(0, pos);value = status.substr(pos + 1, status.size() - pos - 1);m.insert(make_pair(key, value));}//将小map容器放入大map容器中this->m_orderData.insert(make_pair(this->m_Size, m));this->m_Size++;}ifs.close();
}//更新预约记录
void OrderFile::updateOrder()
{if (this->m_Size == 0){return;//预约记录为0,直接return}ofstream ofs(ORDER_FILE, ios::out | ios::trunc);for (int i = 0; i < this->m_Size; i++){ofs << "date:" << this->m_orderData[i]["date"] << " ";ofs << "interval:" << this->m_orderData[i]["interval"] << " ";ofs << "stuId:" << this->m_orderData[i]["stuId"] << " ";ofs << "stuName:" << this->m_orderData[i]["stuName"] << " ";ofs << "roomId:" << this->m_orderData[i]["roomId"] << " ";ofs << "status:" << this->m_orderData[i]["status"] << endl;}ofs.close();
}

2.7、teacher教师类

2.7.1、teacher.h
#pragma once
#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 vaildOrder();//职工号int m_EmpId;
};
2.7.2、teacher.cpp
#include "teacher.h"//默认构造
Teacher::Teacher()
{}//有参构造
Teacher::Teacher(int empId, string name, string pwd)
{//初始化属性this->m_EmpId = empId;this->m_Name = name;this->m_Pwd = pwd;
}//菜单界面
void Teacher::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|         0.注销登陆            |\n";cout << "\t\t|                               |\n";cout << "\t\t -------------------------------\n";cout << "请选择您的操作:";
}//查看所有预约
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_orderData[i]["date"];cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");cout << " 学号:" << of.m_orderData[i]["stuId"];cout << " 姓名:" << of.m_orderData[i]["stuName"];cout << " 机房编号:" << of.m_orderData[i]["roomId"];string status = " 状态:";//1.审核中|2.已预约|-1.预约失败|0.取消预约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 Teacher::vaildOrder()
{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_orderData[i]["status"] == "1"){v.push_back(i);cout << ++index << "、";cout << "预约日期:周" << of.m_orderData[i]["date"];cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");cout << " 学生编号:" << of.m_orderData[i]["stuId"];cout << " 学生姓名:" << of.m_orderData[i]["stuName"];cout << " 机房编号:" << of.m_orderData[i]["roomId"];cout << " 状态:审核中" << 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 << "请输入审核结果(1.通过|2.不通过):";cin >> ret;if (ret == 1){//预约通过of.m_orderData[v[select - 1]]["status"] = "2";}else if (ret == 2){//预约未通过of.m_orderData[v[select - 1]]["status"] = "-1";}of.updateOrder();cout << "审核完毕!" << endl;break;}}cout << "输入有误,请重新输入!" << endl;}system("pause");system("cls");
}

2.8、test.cpp

using namespace std;
#include<iostream>
#include "Identity.h"
#include<fstream>
#include "globalFile.h"
#include"student.h"
#include "teacher.h"
#include "manager.h"//进入学生子菜单界面
void studentMenu(Identity*& student)
{while (true){//调用学生子菜单student->operMenu();Student* stu = (Student*)student;int select = 0;cin >> select;//接受用户选择if (select == 1)//申请预约{stu->applyOrder();}else if (select == 2)//查看自身预约{stu->showMyOrder();}else if (select == 3)//查看所有预约{stu->showAllOrder();}else if (select == 4)//取消预约{stu->cancelOrder();}else{//注销登陆delete student;cout << "注销成功!" << endl;system("pause");system("cls");return;}}
}//进入教师的子菜单界面
void teacherMenu(Identity*& teacher)
{while (true){//调用子菜单界面teacher->operMenu();Teacher* tea = (Teacher*)teacher;int select = 0;//接受用户选择cin >> select;if (select == 1)//查看所有预约{tea->showAllOrder();}else if (select == 2)//审核预约{tea->vaildOrder();}else{delete teacher;cout << "注销成功!" << endl;system("pause");system("cls");return;}}
}//进入管理员的子菜单界面
void managerMenu(Identity*& manager)
{while (true){//调用管理员子菜单manager->operMenu();//将父类指针转为子类指针,调用子类里其他接口Manager* man = (Manager*)manager;int select = 0;//接受用户选项cin >> select;if (select == 1)//添加账号{man->addPerson();}else if (select == 2)//查看账号{man->showPerson();}else if (select == 3)//查看机房{man->showComputer();}else if (select == 4)//清空预约{man->cleanFile();}else{//注销delete manager;//销毁堆区对象cout << "注销成功!" << endl;system("pause");system("cls");return;}}
}//登陆功能 - 参数(操作文件名称,操作身份类型)
void LoginIn(string fileName, int type)
{//父类指针用于指向子类对象Identity* person = NULL;//读文件ifstream ifs;ifs.open(fileName, ios::in);//判断文件是否存在if (!ifs.is_open()){cout << "文件不存在!" << endl;ifs.close();return;}//准备接收用户的信息int id = 0;string name;string pwd;//判断身份if (type == 1)//学生身份{cout << "请输入你的学号:";cin >> id;}else if (type == 2){cout << "请输入您的职工号:";cin >> id;}cout << "请输入用户名:";cin >> name;cout << "请输入密码:";cin >> pwd;if (type == 1){//学生身份验证int fId;//从文件中读取的id号string fName;//从文件中获取姓名string fPwd;//从文件中获取密码while (ifs >> fId && ifs >> fName && ifs >> fPwd){//与用户输入的信息做对比if (fId == id && fName == name && fPwd == pwd){cout << "学生验证登陆成功!" << endl;system("pause");system("cls");person = new Student(id , name , pwd);//进入学生身份的子菜单studentMenu(person);return;}}}else if (type == 2){//教师身份验证int fId;//从文件中读取的id号string fName;//从文件中获取姓名string fPwd;//从文件中获取密码while (ifs >> fId && ifs >> fName && ifs >> fPwd){if (fId == id && fName == name && fPwd == pwd){cout << "教师验证登陆成功!" << endl;system("pause");system("cls");person = new Teacher(id, name, pwd);//进入教师子菜单teacherMenu(person);return;}}}else if (type == 3){//管理员身份验证string fName;//从文件中获取姓名string fPwd;//从文件中获取密码while (ifs >> fName && ifs >> fPwd){if (fName == name && fPwd == pwd){cout << "管理员验证登陆成功!" << endl;system("pause");system("cls");person = new Manager(name, pwd);//进入管理员子菜单界面managerMenu(person);return;}}}cout << "验证登陆失败!" << endl;system("pause");system("cls");
}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|         4.退    出            |\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;
}

 三、功能测试

3.1、总菜单

3.2、学生代表

3.2.1、学生登陆

3.2.2、学生子菜单
3.2.3、申请预约

3.2.4、查看自己的预约记录

3.2.5、查看所有人预约
3.2.6、取消预约
3.2.7、查看文件 

3.3、教师

3.3.1、教师登陆

3.3.2、查看所有预约

3.3.3、审核预约

3.3.4、文件查看

3.4、管理员

3.4.1、管理员登陆

3.4.2、添加账号

学生: 

老师:

学号/职工号重复的情况:

3.4.3、查看账号

学生:

老师:

3.4.4、查看机房信息
3.4.5、清空预约

3.4.6、查看文件

3.5、退出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java八股面试系列】并发编程-并发关键字,线程池

目录 并发关键字 Synchronized synchronized最主要的三种使用方式&#xff1a; 具体使用&#xff1a;双重校验锁单例模式 synchronized 底层实现原理&#xff1f; synchronized锁的优化 偏向锁 轻量级锁 重量级锁 Mark Word 与 Monitor 之间的关系 总结 偏向锁、轻量…

蓝桥杯刷题day08——完全日期

1、题目描述 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021年6月5日的各位数字之和为20216516&#xff0c;而16是一个完全平方数&#xff0c;它是4的平方。所以2021年6月5日是一个完全日期。 请问&#xff0c;从200…

操作系统(13)-----文件管理

目录 一.内存映射文件 传统的文件访问方式&#xff1a; 内存映射文件&#xff1a; 内存映射文件与传统文件访问方式的区别&#xff1a; 文件共享的实现&#xff1a; 内存映射文件的优点&#xff1a; 二.文件的属性 三.文件的逻辑结构 1.无结构文件 2.有结构文件 四.…

书生·浦语大模型全链路开源体系

参考&#xff1a;https://www.bilibili.com/video/BV1Rc411b7ns/?spm_id_from333.788&vd_source3bbd0d74033e31cbca9ee35e111ed3d1 背景&#xff1a; 人工智能的发展从针对特定任务&#xff0c;用一个模型解决一个问题过渡到一个模型来应对多模态、多任务&#xff0c;大模…

门诊单据打印用什么软件,线下处方单生成系统教程

门诊单据打印用什么软件&#xff0c;线下处方单生成系统教程 一、前言 以下软件教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图&#xff0c;电子处方或病历记录开单生成保存后&#xff0c;可…

【数学建模】【2024年】【第40届】【MCM/ICM】【A题 七鳃鳗性别比与资源可用性】【解题思路】

我们通过将近半天的搜索数据&#xff0c;查到了美国五大湖中优势物种的食物网数据&#xff0c;以Eric伊利湖为例&#xff0c;共包含34各优势物种&#xff0c;相互之间的关系如下图所示&#xff1a; 一、题目 &#xff08;一&#xff09; 赛题原文 2024 MCM Problem A: Reso…

推荐几个Python爬虫接单渠道

前言 平时工作有闲的家人们&#xff0c;今天给大家推荐一些用Python爬虫做私活的渠道&#xff01; 【Python爬虫学习资料】 先给各位还不熟悉Python爬虫的朋友介绍一下&#xff01; 可以短时间获得大量资料~ 可以进一步数据分析 当然也可以获得收益&#xff01; 学会Python…

第十七篇【传奇开心果系列】Python的OpenCV库技术点案例示例:自适应阈值二值化处理图像提取文字

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列短博文目录前言一、自适应阈值二值化处理图像提取文字轮廓的初步示例代码:二、扩展思路介绍三、调整自适应阈值二值化的参数示例代码四、对二值化图像进行形态学操作示例代码五、使用轮廓特征进行筛选示…

113.路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

【开源】JAVA+Vue+SpringBoot实现实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

RocketMQ客户端实现多种功能

目录 RocketMQ客户端基本流程 消息确认机制 1、消息生产端采用消息确认加多次重试的机制保证消息正常发送到RocketMQ 单向发送 同步发送 异步发送 2、消息消费者端采用状态确认机制保证消费者一定能正常处理对应的消息 3、消费者也可以自行指定起始消费位点 广播消息 …

【Web】基于Mybatis的SQL注入漏洞利用点学习笔记

目录 MyBatis传参占位符区别 不能直接用#{}的情况 in多参数值查询 like %%模糊查询 order by列名参数化 MyBatis传参占位符区别 在 MyBatis 中&#xff0c;#{} 和 ${} 都是用于传参的占位符&#xff0c;但它们之间有很大的区别&#xff0c;主要体现在两个方面&#xff1a…

并发容器+并发队列【ConcurentHashMap、CopyOnWriteArrayList、阻塞队列、ArrayBlockingQueue】

并发容器 什么是并发容器?同步容器:并发容器: ConcurrentHashMap结构图JDK1.7结构图JDK1.8结构图 CopyOnWriteArrayList实现原理 并发队列阻塞队列ArrayBlockingQueue 转自极客时间 什么是并发容器? 在JUC包中&#xff0c;有一大部分是关于并发容器的&#xff0c;如Concurr…

【Python中Selenium元素定位的各种方法】

1、元素定位操作&#xff1a; 2、创建浏览器驱动操作&#xff0c;导入By模块&#xff1a; from selenium import webdriver # 用于界面与浏览器互动 from selenium.webdriver.common.by import By # 用于元素定位 driver webdriver.Chrome() # 调用Chrome类&#xff0c;创…

材料非线性Matlab有限元编程:初应力法与初应变法

导读:本文主要围绕材料非线性问题的有限元Matlab编程求解进行介绍,重点围绕牛顿-拉普森法(切线刚度法)、初应力法、初应变法等三种非线性迭代方法的算法原理展开讲解,最后利用Matlab对材料非线性问题有限元迭代求解算法进行实现,展示了实现求解的核心代码。这些内容都将收…

2023年总结

人们总说时间会改变一切&#xff0c;但事实上你得自己来。 今年开始给自己的时间读书、工作、生活都加上一个2.0的release版本号&#xff0c;相比过去的一年还是有很多进步的。 就跟git commit一样&#xff0c;一步一步提交优化&#xff0c;年底了发个版本。用李笑来的话说&am…

【洛谷题解】P1595 信封问题

题目链接&#xff1a;信封问题 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;错排 题意&#xff1a; 分析&#xff1a;直接用错排公式代入即可 AC代码推理公式&#xff1a; #include<bits/stdc.h> using namespace std; long long f[25]; int main()//用…

服务器被黑,安装Linux RootKit木马

前言 疫情还没有结束&#xff0c;放假只能猫家里继续分析和研究最新的攻击技术和样本了&#xff0c;正好前段时间群里有人说服务器被黑&#xff0c;然后扔了个样本在群里&#xff0c;今天咱就拿这个样本开刀&#xff0c;给大家研究一下这个样本究竟是个啥&#xff0c;顺便也给…

《MySQL 简易速速上手小册》第10章:未来趋势和进阶资源(2024 最新版)

文章目录 10.1 MySQL 在云计算和容器化中的应用10.1.1 基础知识10.1.2 重点案例&#xff1a;使用 Python 部署 MySQL 到 Kubernetes10.1.3 拓展案例 1&#xff1a;在 AWS RDS 上部署 MySQL 实例10.1.4 拓展案例 2&#xff1a;使用 Docker 部署 MySQL 10.2 MySQL 和 NoSQL 的整合…

基于图像掩膜和深度学习的花生豆分拣(附源码)

目录 项目介绍 图像分类网络构建 处理花生豆图片完成预测 项目介绍 这是一个使用图像掩膜技术和深度学习技术实现的一个花生豆分拣系统 我们有大量的花生豆图片&#xff0c;并以及打好了标签&#xff0c;可以看一下目录结构和几张具体的图片 同时我们也有几张大的图片&…