【机房预约系统(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://xiahunao.cn/news/2777072.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Git分支常用指令

目录 1 git branch 2 git branch xx 3 git checkout xx 4 git checkout -b xx 5 git branch -d xx 6 git branch -D xx 7 git merge xx(含快进模式和冲突解决的讲解) 注意git-log: 1 git branch 作用&#xff1a;查看分支 示例&#xff1a; 2 git branch xx 作用&a…

第二节课[Demo]作业

基础作业 使用 InternLM-Chat-7B 模型生成 300 字的小故事 user avatar 你是一个精通isekai的勇者&#xff0c;现在需要你讲述一段清新脱俗的异世界日常故事&#xff0c;字数300字以上robot avatar 在一个普通的早晨&#xff0c;我像往常一样起床、洗漱、吃早餐。但是&#xf…

第二十六回 母夜叉孟州道卖人肉 武都头十字坡遇张青-Ubuntu 防火墙ufw配置

武松到县里投案&#xff0c;县官看武松是个汉子&#xff0c;就把诉状改成&#xff1a;武松与嫂一时斗殴杀死&#xff0c;后西门庆前来&#xff0c;两人互殴&#xff0c;打死西门庆。上报东平府。东平府尹也可怜武松&#xff0c;从轻发落&#xff0c;最后判了个&#xff1a;脊杖…

【超高效!保护隐私的新方法】针对图像到图像(l2l)生成模型遗忘学习:超高效且不需要重新训练就能从生成模型中移除特定数据

针对图像到图像生成模型遗忘学习&#xff1a;超高效且不需要重新训练就能从生成模型中移除特定数据 提出背景如何在不重训练模型的情况下从I2I生成模型中移除特定数据&#xff1f; 超高效的机器遗忘方法子问题1: 如何在图像到图像&#xff08;I2I&#xff09;生成模型中进行高效…

Jupyter Notebook如何在E盘打开

Jupyter Notebook如何在E盘打开 方法1&#xff1a;方法2&#xff1a; 首先打开Anaconda Powershell Prompt, 可以看到默认是C盘。 可以对应着自己的界面输入&#xff1a; 方法1&#xff1a; (base) PS C:\Users\bella> E: (base) PS E:\> jupyter notebook方法2&#x…

图像批量重命名(基于Python,本地运行)

图像批量重命名(基于Python&#xff0c;本地运行) &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;场景假设&#x1f333;&#x1f333;知识储备&#x1f333;os.path.splitext方法语法示例 os.listdir方法语法示例 &#x1f333;解决方案&am…

OpenCV 笔记(21):图像色彩空间

1. 图像色彩空间 图像色彩空间是用于定义颜色范围的数学模型。 它规定了图像中可以使用的颜色以及它们之间的关系。它决定了图像中可以显示的颜色范围。不同的色彩空间可以包含不同的颜色范围&#xff0c;因此选择合适的色彩空间对于确保图像在不同设备上看起来一致非常重要。…

查看系统进程信息的Tasklist命令

Tasklist命令是一个用来显示运行在本地计算机上所有进程的命令行工具&#xff0c;带有多个执行参数。另外&#xff0c;Tasklist可以代替Tlist工具。通过任务管理器&#xff0c;可以查看到本机完整的进程列表&#xff0c;而且可以通过手工定制进程列表方式获得更多进程信息&…

vue3 之 商城项目—登陆

整体认识 登陆页面的主要功能就是表单校验和登陆登出业务 路由配置 模版 <script setup></script><template><div><header class"login-header"><div class"container m-top-20"><h1 class"logo"&g…

Redis -- 安装客户端redis-plus-plus

目录 访问reids客户端github链接 安装git 如何安装&#xff1f; 下载/编译、安装客户端 安装过程中可能遇到的问题 访问reids客户端github链接 GitHub - sewenew/redis-plus-plus: Redis client written in CRedis client written in C. Contribute to sewenew/redis-p…

moduleID的使用

整个平台上有很多相同的功能&#xff0c;但是需要不同的内容。例如各个模块自己的首页上有滚动新闻、有友好链接等等。为了公用这些功能&#xff0c;平台引入了moduleID的解决方案。 在前端的配置文件中&#xff0c;配置了模块号&#xff1a; 前端页面请求滚动新闻时&#xff0…

springboot173疫苗发布和接种预约系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【MyBatis面试题】

目录 前言 1.MyBatis执行流程。 2.Mybatis是否支持延迟加载&#xff1f; 3.延迟加载的底层原理知道吗&#xff1f; 4.Mybatis的一级、二级缓存用过吗&#xff1f; 5.Mybatis的二级缓存什么时候会清理缓存中的数据&#xff1f; 总结 前言 本文主要介绍了MyBatis面试题相…

机器学习8-决策树

决策树&#xff08;Decision Tree&#xff09;是一种强大且灵活的机器学习算法&#xff0c;可用于分类和回归问题。它通过从数据中学习一系列规则来建立模型&#xff0c;这些规则对输入数据进行递归的分割&#xff0c;直到达到某个终止条件。 决策树的构建过程&#xff1a; 1.…

代码随想录|Day 14

Day 14 新年将至 一、理论学习 BFS 的使用场景总结&#xff1a;层序遍历、最短路径问题(https://leetcode.cn/problems/binary-tree-level-order-traversal/solutions/244853/bfs-de-shi-yong-chang-jing-zong-jie-ceng-xu-bian-l/) BFS 的应用一&#xff1a;层序遍历 BFS …

AI新工具(20240209) ImgGen AI-免费在线AI图像生成应用;Smoothrase - 新一代的图像擦除技术等

ImgGen AI-免费在线AI图像生成应用 使用ImgGen的AI图像生成器&#xff08;文字转图像&#xff09;免费创建令人惊叹的图像&#xff0c;无水印&#xff0c;无需注册。包括功能、优势、定价、定位等。 Anything in Any Scene - 在现有的动态视频中无缝地插入任何物体&#xff0c…

每日五道java面试题之java基础篇(四)

第一题. 访问修饰符 public、private、protected、以及不写&#xff08;默认&#xff09;时的区别&#xff1f; Java 中&#xff0c;可以使⽤访问控制符来保护对类、变量、⽅法和构造⽅法的访问。Java ⽀持 4 种不同的访问权限。 default (即默认&#xff0c;什么也不写&…

React18原理: 渲染与更新时的重点关注事项

概述 react 在渲染过程中要做很多事情&#xff0c;所以不可能直接通过初始元素直接渲染还需要一个东西&#xff0c;就是虚拟节点&#xff0c;暂不涉及React Fiber的概念&#xff0c;将vDom树和Fiber 树统称为虚拟节点有了初始元素后&#xff0c;React 就会根据初始元素和其他可…

Redis篇之双写一致性

一、什么的双写一致性 1.定义 双写一致性&#xff1a;当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致。 2.正常情况 读操作&#xff1a;缓存命中&#xff0c;直接返回&#xff1b;缓存没命中查询数据库&#xff0c;写入缓存&#xff…

在Ubuntu上部署Stable Video Diffusion动画制作

Stable Diffusion团队推出的开源模型Stable Video Diffusion&#xff0c;支持生成约3秒的视频&#xff0c;分辨率为5761024。通过测试视频展示了其令人瞩目的性能&#xff0c;SVD模型是一个生成图像到视频的扩散模型&#xff0c;通过对静止图像的条件化生成短视频。其特点主要包…