【机房预约系统(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,一经查实,立即删除!

相关文章

c++基础——运算符重载

一、重载成员访问运算符&#xff08;->&#xff09; 重载的成员访问运算符&#xff08;函数&#xff09;必须返回类对象指针或自定义了"箭头"运算符的类的对象。c 中形如 obj->member() 的表达式&#xff0c;则obj是一个对象指针或者重载了"箭头"运算…

B站弹幕分析系统

视频展示&#xff0c;请点击。 尚硅谷案例 utllib的基本使用 # 使用urllib来获取百度首页的源码 import urllib.request# (1)定义一个url 就是你要访问的地址 url http://www.baidu.com# (2)模拟浏览器先服务器发送请求 response响应 response urllib.request.urlopen(url)…

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

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

计算机网络(第六版)复习提纲30

B HTTP 名词解释&#xff1a;协议HTTP定义了浏览器怎样向万维网服务器请求万维网文档&#xff0c;以及服务器怎样把文档传给浏览器。从层次的角度看&#xff0c;HTTP是面向事务的应用层协议&#xff0c;它是万维网上可靠地交换文件的重要基础&#xff0c;不仅能够传送完成超文本…

蓝桥杯刷题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…

倒计时60天

1.P5908 猫猫和企鹅 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 啊啊啊啊啊啊啊啊啊啊啊啊o(*&#xffe3;▽&#xffe3;*)ブ第一次自己做对dfs加二叉树的题啊啊啊啊啊啊啊啊啊啊&#xff0c;emmmm虽然是之前遇到过类似的kkk #include <bits/stdc.h> using namesp…

linux系统Tomcat目录介绍

Tomcat目录介绍 tomcat主目录webapps目录conf目录tomcat管理tomcat配置页面管理server.xml配置文件Connector主要参数host主要参数 tomcat主目录 cd /data/application/tomcat tree -L 1. ├── bin #存放tomcat的管理脚本 ├── BUILDING.txt ├── conf …

go单元测试之benchmark基准测试详解

目录 与普通测试的区别 举例说明 指令与结果解读 性能比较 并行测试 与普通测试的区别 函数参数类型为*testing.B 测试函数名称必须以Benchmark 开头 执行基准测试时&#xff0c;需要添加-bench参数 运行所有基准测试函数 go test –bench.* 举例说明 编写一个对于for循…

推荐几个Python爬虫接单渠道

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

在 Blazor WASM 中手撸一个.NET MD5类

最近.net8 blazor auto大火, 我也玩了一下,发现ssr能用的代码 MD5 类在wasm是没法用的. 于是搜索了一下互联网,找到了一份代码,分享给大家. 我找到的帖子作者原话: 代码不是我的&#xff0c;但我确实稍微修改了它以使其与 System.Security.Cryptography.MD5 类更加一致。 pub…

第十七篇【传奇开心果系列】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…

服务器禁用了请求中指定的方法

服务器禁用了请求中指定的方法 python post请求时报错 服务器禁用了请求中指定的方法 错误代码 response = requests.post(fhttp://api.fe.udream.cc/api/UserEngineering/UpdateTask?usertoken=132e5a6e12a6bbff88154b27b0241819&timestamp={timestamp}, json=json.dumps…

RocketMQ客户端实现多种功能

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

技术精英求职必备:测试工程师简历制作全指南

简历编写核心原则 撰写针对软件测试工程师职位的简历时&#xff0c;关键在于精确展现您在软件测试、质量保证和错误诊断方面的专业技能、项目经验和技术成就。简历应作为您展示测试策略设计、自动化测试实施和问题解决能力的窗口&#xff0c;确保每一项经历和技能都与软件测试…