一、机房预约系统需求
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、查看账号
学生:
老师: