机房预约系统

1、机房预约系统需求

1.1 系统简介

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

1.2 身份简介

分别有三种身份使用该程序

  • 学生代表:申请使用机房
  • 教师:审核学生的预约申请
  • 管理员:给学生、教师创建账号

1.3 机房简介

机房总共有3间

  • 1号机房 — 最大容量20人
  • 2号机房 — 最多容量50人
  • 3号机房 — 最多容量100人

1.4 申请简介

  • 申请的订单每周由管理员负责清空。
  • 学生可以预约未来一周内的机房使用,预约的日期为周一至周五,预约时需要选择预约时段(上午、下午)
  • 教师来审核预约,依据实际情况审核预约通过或者不通过

1.5 系统具体需求

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

    • 学生代表
    • 老师
    • 管理员
    • 退出
  • 每个身份都需要进行验证后,进入子菜单
    • 学生需要输入 :学号、姓名、登录密码
    • 老师需要输入:职工号、姓名、登录密码
    • 管理员需要输入:管理员姓名、登录密码
  • 学生具体功能
    • 申请预约 — 预约机房
    • 查看自身的预约 — 查看自己的预约状态
    • 查看所有预约 — 查看全部预约信息以及预约状态
    • 取消预约 — 取消自身的预约,预约成功或审核中的预约均可取消
    • 注销登录 — 退出登录
  • 教师具体功能
    • 查看所有预约 — 查看全部预约信息以及预约状态
    • 审核预约 — 对学生的预约进行审核
    • 注销登录 — 退出登录
  • 管理员具体功能
    • 添加账号 — 添加学生或教师的账号,需要检测学生编号或教师职工号是否重复
    • 查看账号 — 可以选择查看学生或教师的全部信息
    • 查看机房 — 查看所有机房的信息
    • 清空预约 — 清空所有预约记录
    • 注销登录 — 退出登录

2、 创建身份类

2.1 身份的基类

  • 在整个系统中,有三种身份,分别为:学生代表、老师以及管理员
  • 三种身份有其共性也有其特性,因此我们可以将三种身份抽象出一个身份基类identity
  • 在头文件下创建Identity.h文件
#pragma  once
#include <iostream>
using namespace std;class Identity
{public:virtual void show_menu()=0;string m_Pwd;string m_Name;};

2.2 学生类

2.2.1 功能分析

  • 学生类主要功能是可以通过类中成员函数,实现预约实验室操作

  • 学生类中主要功能有:

    • 显示学生操作的菜单界面
    • 申请预约
    • 查看自身预约
    • 查看所有预约
    • 取消预约

2.2.2 类的创建

  • 在头文件以及源文件下创建 student.h 和 student.cpp文件

  • student.h中添加如下代码:

#pragma  once
#include <iostream>
#include "identity.h"
#include <string>
#include "computerRoom.h"
#include <fstream>
#include "globalFile.h"
#include <vector>
#include "orderFile.h"
using namespace std;class Student:public Identity
{public:int m_Sno;Student();Student(int Sno,string Name,string Pwd);//显示Student子菜单virtual void show_menu();//* 申请预约 --- 预约机房void applyOrder();//* 查看自身的预约 --- 查看自己的预约状态void seeMyselfOrder();//* 查看所有预约 --- 查看全部预约信息以及预约状态void seeOwnOrder();//* 取消预约 --- 取消自身的预约,预约成功或审核中的预约均可取消void cancelOrder();vector<ComputerRoom>vCom;};
  • student.cpp中添加如下代码:
#include <iostream>
#include "student.h"
using namespace std;Student::Student()
{}
Student::Student(int Sno,string Name,string Pwd)
{this->m_Sno=Sno;this->m_Name=Name;this->m_Pwd=Pwd;/*ifstream ifs;ifs.open(COMPUTERROOM_FILE,ios::in);ComputerRoom c;while(ifs>>c.m_id && ifs>>c.m_capacity){vCom.push_back(c);}ifs.close();*/
}
void Student::show_menu()
{cout<<"欢迎同学登录"<<endl;cout<<"\t -------------------------------\t"<<endl;cout<<"\t|\t1.申 请  预 约\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t2.查看自身预约\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t3.查看所有预约\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t4.取 消  预 约\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t0.退 出  登 录\t\t|\t"<<endl;cout<<"\t -------------------------------\t"<<endl;cout<<"输入你选择的操作:"<<endl;
}
void Student::applyOrder()
{cout<<"机房可供预约的时间段为周一至周五,请选择你想要预约的时间:"<<endl;cout<<"1.周一"<<endl;cout<<"2.周二"<<endl;cout<<"3.周三"<<endl;cout<<"4.周四"<<endl;cout<<"5.周五"<<endl;int date=0;int shiDuan=0;int room=0;while (true){cin>>date;if (date>=1||date<=5){break;}else{cout<<"请规范输入:"<<endl;;}}cout<<"请选择你要预约的时间段:"<<endl;cout<<"1.上午"<<endl;cout<<"2.下午"<<endl;while (true){cin>>shiDuan;if (shiDuan==1||shiDuan==2){break;}else{cout<<"请规范输入:"<<endl;;}}cout<<"请选择你要预约的机房:"<<endl;cout<<"1.一号机房 容量:20"<<endl;cout<<"2.一号机房 容量:50"<<endl;cout<<"3.一号机房 容量:100"<<endl;while (true){cin>>room;if (room==1||room==2||room==3){break;}else{cout<<"请规范输入:"<<endl;;}}cout<<"预约请求已提交"<<endl;ofstream ofs;ofs.open(ORDER_FILE,ios::out|ios::app);ofs << "date:" << date << " ";ofs << "interval:" << shiDuan << " ";ofs << "stuId:" << this->m_Sno << " ";ofs << "stuName:" << this->m_Name << " ";ofs << "roomId:" << room << " ";ofs << "status:" << 1 << endl;ofs.close();system("pause");system("cls");
}//* 查看自身的预约 --- 查看自己的预约状态
void Student::seeMyselfOrder()
{OrderFile of;//ifstream ifs;//ifs.open(ORDER_FILE,ios::in);if (of.m_Size==0){cout<<"现在还没有预约信息"<<endl;system("pause");system("cls");return;}int j=1;for(map<int, map<string, string>>::iterator it = of.m_orderData.begin(); it != of.m_orderData.end();it++){int i=1;for (map<string, string>::iterator mit = it->second.begin(); mit != it->second.end(); mit++){if (mit->second==to_string(this->m_Sno)){cout << j<< "、";for (map<string, string>::iterator Mit = it->second.begin(); Mit != it->second.end(); Mit++){if (i==1){cout<<"星期";cout<<Mit->second<<" ";}else if (i==2){cout << "时段:" << "" ;cout<<((Mit->second)=="1"?"上午":"下午")<<" ";}else if (i==3){cout<<"机房:";cout<<Mit->second<<" ";}else if(i==4){cout <<"状态:" ;if (Mit->second=="1"){cout<<"审核中"<<endl;}else if (Mit->second=="2"){cout<<"预约成功"<<endl;}else if (Mit->second=="-1"){cout<<"预约失败"<<endl;}else{cout<<"已取消"<<endl;}}i++;}j++;}}}//ifs.close();system("pause");system("cls");}
//* 查看所有预约 --- 查看全部预约信息以及预约状态
void Student::seeOwnOrder()
{OrderFile of;//ifstream ifs;//ifs.open(ORDER_FILE,ios::in);if (of.m_Size==0){cout<<"现在还没有预约信息"<<endl;system("pause");system("cls");return;}for(map<int, map<string, string>>::iterator it = of.m_orderData.begin(); it != of.m_orderData.end();it++){cout << it->first+1 << "、";int i=1;for (map<string, string>::iterator mit = it->second.begin(); mit != it->second.end(); mit++){if (i==1){cout<<"星期";cout<<mit->second<<" ";}else if (i==2){cout << "时段:" << "" ;cout<<((mit->second)=="1"?"上午":"下午")<<" ";}else if (i==3){cout<<"机房:";cout<<mit->second<<" ";}else if(i==4){cout <<"状态:" ;if (mit->second=="1"){cout<<"审核中"<<" ";}else if (mit->second=="2"){cout<<"预约成功"<<" ";}else if (mit->second=="-1"){cout<<"预约失败"<<" ";}else{cout<<"已取消"<<" ";}}else if (i==5){cout<<"学号:";cout<<mit->second<<" ";}else if (i==6){cout<<"姓名:";cout<<mit->second<<" "<<endl;}i++;}}//ifs.close();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 (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_Sno){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 = " 状态: ";  // 0 取消的预约   1 审核中   2 已预约  -1 预约失败if (of.m_orderData[i]["status"] == "1"){status += "审核中";}else if (of.m_orderData[i]["status"] == "2"){status += "预约成功";}cout << status << endl;}}}cout << "请输入取消的记录,0代表返回" << endl;cout<<v.size()<<endl;int select = 0;while (true){cin >> select;if (select >= 0 && select <= v.size()){if (select == 0){break;}else{// cout << "记录所在位置: " << v[select - 1] << endl;of.m_orderData[v[select - 1]]["status"] = "0";of.updateOrder();cout << "已取消预约" << endl;break;}}cout << "输入有误,请重新输入" << endl;}system("pause");system("cls");
}

2.3 老师类

2.3.1 功能分析

  • 教师类主要功能是查看学生的预约,并进行审核

  • 教师类中主要功能有:

    • 显示教师操作的菜单界面

    • 查看所有预约

    • 审核预约

2.3.2 类的创建

  • 在头文件以及源文件下创建 teacher.h 和 teacher.cpp文件
  • teacher.h中添加如下代码:
#pragma  once
#include <iostream>
#include "identity.h"
#include <string>
#include "orderFile.h"
#include "globalFile.h"
#include <fstream>
#include <vector>using namespace std;class Teacher:public Identity
{public:int m_Eno;Teacher();Teacher(int Eno,string Name,string Pwd);//显示Student子菜单virtual void show_menu();//查看所有预约   ---   查看全部预约信息以及预约状态void seeOwnOrder();//审核预约    ---   对学生的预约进行审核void examineOrder();
};
  • teacher.cpp中添加如下代码:
#include <iostream>
#include "teacher.h"
using namespace std;Teacher::Teacher()
{}
Teacher::Teacher(int Eno,string Name,string Pwd)
{this->m_Eno=Eno;this->m_Name=Name;this->m_Pwd=Pwd;
}
//显示Teacher子菜单
void Teacher::show_menu()
{cout<<"欢迎老师登录"<<endl;cout<<"\t -------------------------------\t"<<endl;cout<<"\t|\t1.查看所有预约\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t2.审 核  预 约\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t0.退 出  登 录\t\t|\t"<<endl;cout<<"\t -------------------------------\t"<<endl;cout<<"输入你选择的操作:";
}
//查看所有预约   ---   查看全部预约信息以及预约状态
void Teacher::seeOwnOrder()
{OrderFile of;//ifstream ifs;//ifs.open(ORDER_FILE,ios::in);if (of.m_Size==0){cout<<"现在还没有预约信息"<<endl;system("pause");system("cls");return;}for(map<int, map<string, string>>::iterator it = of.m_orderData.begin(); it != of.m_orderData.end();it++){cout << it->first+1 << "、";int i=1;for (map<string, string>::iterator mit = it->second.begin(); mit != it->second.end(); mit++){if (i==1){cout<<"星期";cout<<mit->second<<" ";}else if (i==2){cout << "时段:" << "" ;cout<<((mit->second)=="1"?"上午":"下午")<<" ";}else if (i==3){cout<<"机房:";cout<<mit->second<<" ";}else if(i==4){cout <<"状态:" ;if (mit->second=="1"){cout<<"审核中"<<" ";}else if (mit->second=="2"){cout<<"预约成功"<<" ";}else if (mit->second=="-1"){cout<<"预约失败"<<" ";}else{cout<<"已取消"<<" ";}}else if (i==5){cout<<"学号:";cout<<mit->second<<" ";}else if (i==6){cout<<"姓名:";cout<<mit->second<<" "<<endl;}i++;}}//ifs.close();system("pause");system("cls");
}
//审核预约    ---   对学生的预约进行审核
void Teacher::examineOrder()
{OrderFile of;if (of.m_Size == 0){cout << "无预约记录" << endl;system("pause");system("cls");return;}vector<int>v;int index = 1;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]["roomId"];string status = " 状态: ";  // 0 取消的预约   1 审核中   2 已预约  -1 预约失败if (of.m_orderData[i]["status"] == "1"){status += "审核中";}else if (of.m_orderData[i]["status"] == "2"){status += "预约成功";}cout << status << endl;}}cout<<"请选择你对哪个预约进行审核,0代表返回"<<endl;int sel;while (true){cin >> sel;if (sel>= 0&& sel<=v.size()){if (sel == 0){break;}else{//  cout << "记录所在位置: " << v[select - 1] << endl;int ch;cout<<"1.通过预约"<<endl;cout<<"2.取消掉这个预约"<<endl;cin>>ch;if (ch==1||ch==2){if (ch==1){of.m_orderData[v[sel - 1]]["status"] = "2";of.updateOrder();cout<<"通过成功"<<endl;break;}else if (ch==2){of.m_orderData[v[sel - 1]]["status"] = "-1";of.updateOrder();cout << "已取消预约" << endl;break;}}cout << "输入有误,请重新输入" << endl;}}cout << "输入有误,请重新输入" << endl;}system("pause");system("cls");
}

2.4.1 功能分析

  • 管理员类主要功能是对学生和老师账户进行管理,查看机房信息以及清空预约记录

  • 管理员类中主要功能有:

    • 显示管理员操作的菜单界面

    • 添加账号

    • 查看账号

    • 查看机房信息

    • 清空预约记录

2.4.2 类的创建

  • 在头文件以及源文件下创建 manager.h 和 manager.cpp文件
  • manager.h中添加如下代码:
#pragma  once
#include <iostream>
#include "identity.h"
#include <string>
#include <fstream>
#include "globalFile.h"
#include "computerRoom.h"
#include <vector>
using namespace std;class Manager:public Identity
{public:Manager();Manager(string Name,string Pwd);//显示Student子菜单virtual void show_menu();//添加账号    ---   添加学生或教师的账号,需要检测学生编号或教师职工号是否重复void addUser();//查看账号    ---   可以选择查看学生或教师的全部信息void seeUser();//查看机房    ---   查看所有机房的信息void seeComputerRoom();//清空预约    ---   清空所有预约记录void clearOrder();/*void getvComputer();vector<ComputerRoom>vComputer;*/};
  • manager.cpp中添加如下代码:
#include <iostream>
#include "manager.h"
using namespace std;//void Manager::getvComputer()
//{//  ComputerRoom c;
//  ifstream ifs;
//  ifs.open(COMPUTERROOM_FILE,ios::in);
//  while(ifs>>c.m_id&&ifs>>c.m_capacity)
//  {//      vComputer.push_back(c);
//  }
//  ifs.close();
//}Manager::Manager()
{}
Manager::Manager(string Name,string Pwd)
{this->m_Name=Name;this->m_Pwd=Pwd;
}
//显示Student子菜单
void Manager::show_menu()
{cout<<"欢迎管理员:"<<this->m_Name<<"登录"<<endl;cout<<"\t -------------------------------\t"<<endl;cout<<"\t|\t1.添 加  账 号\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t2.查 看  账 号\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t3.查 看  机 房\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t4.清 空  预 约\t\t|\t"<<endl;cout<<"\t|\t\t\t\t|"<<endl;cout<<"\t|\t0.退 出  登 录\t\t|\t"<<endl;cout<<"\t -------------------------------\t"<<endl;cout<<"输入你选择的操作:"<<endl;
}
//添加账号    ---   添加学生或教师的账号,需要检测学生编号或教师职工号是否重复
void Manager::addUser()
{int SEuo;int select;int jianChaChongFu;string name;string pwd;cout<<"请输入你想添加的用户类型:"<<endl;cout<<"1.学生"<<endl;cout<<"2.老师"<<endl;cin>>select;if (select==1){A:cout<<"请输入添加的学生的学号:"<<endl;cin>>SEuo;ifstream ifs;ifs.open(STUDENT_FILE,ios::in);while (ifs>>jianChaChongFu){if (jianChaChongFu==SEuo){cout<<"该学号学生已存在,不可再次添加!"<<endl;ifs.close();goto A;}}ifs.close();cout<<"请输入添加的学生的姓名:"<<endl;cin>>name;cout<<"请输入添加的学生的密码:"<<endl;cin>>pwd;ofstream ofs;ofs.open(STUDENT_FILE,ios::out|ios::app);ofs<<SEuo<<" "<<name<<" "<<pwd<<endl;ofs.close();cout<<"添加学生成功!"<<endl;}else if (select==2){B:cout<<"请输入添加的老师的职工号:"<<endl;cin>>SEuo;ifstream ifs;ifs.open(TEACHER_FILE,ios::in);while (ifs>>jianChaChongFu){if (jianChaChongFu==SEuo){cout<<"该职工号老师已存在,不可再次添加!"<<endl;ifs.close();goto B;}}ifs.close(); cout<<"请输入添加的老师的姓名:"<<endl;cin>>name;cout<<"请输入添加的老师的密码:"<<endl;cin>>pwd;ofstream ofs;ofs.open(TEACHER_FILE,ios::out|ios::app);ofs<<SEuo<<" "<<name<<" "<<pwd<<endl;ofs.close();cout<<"添加老师成功!"<<endl;}else{cout<<"输入不规范!"<<endl;system("pause");system("cls");}system("pause");system("cls");
}
//查看账号    ---   可以选择查看学生或教师的全部信息
void Manager::seeUser()
{int SEuo;string name;string pwd;cout<<"请输入你要查看账号的类型:"<<endl;cout<<"1.学生"<<endl;cout<<"2.老师"<<endl;cout<<"3.管理员"<<endl;int select;cin>>select;if (select==1){ifstream ifs;ifs.open(STUDENT_FILE,ios::in);while(ifs>>SEuo && ifs>>name && ifs>>pwd){cout<<"学号:"<<SEuo<<"\t姓名:"<<name<<"\t密码:"<<pwd<<endl;}ifs.close();}else if (select==2){ifstream ifs;ifs.open(TEACHER_FILE,ios::in);while(ifs>>SEuo && ifs>>name && ifs>>pwd){cout<<"职工号:"<<SEuo<<" 姓名:"<<name<<" 密码:"<<pwd<<endl;}ifs.close();}else if (select==3){ifstream ifs;ifs.open(ADMIN_FILE,ios::in);while(ifs>>name && ifs>>pwd){cout<<"用户名:"<<name<<" 密码:"<<pwd<<endl;}ifs.close();}else{cout<<"输入不规范!"<<endl;system("pause");system("cls");}system("pause");system("cls");
}
//查看机房    ---   查看所有机房的信息
void Manager::seeComputerRoom()
{int mark;int number;cout<<"现在的所有机房信息如下:"<<endl;ifstream ifs;ifs.open(COMPUTERROOM_FILE,ios::in);while(ifs>>mark && ifs>>number){cout<<"机房编号:"<<mark<<"\t电脑数量:"<<number<<endl;}ifs.close();system("pause");system("cls");
}
//清空预约    ---   清空所有预约记录
void Manager::clearOrder()
{cout<<"请再次确认,清空后不可恢复!"<<endl;cout<<"输入1-------确认"<<endl;cout<<"输入其他----取消"<<endl;int choice;cin>>choice;if (choice==1){ofstream ofs;ofs.open(ORDER_FILE,ios::trunc);ofs.close();cout<<"清空成功!"<<endl;}else if (choice!=1){system("pause");system("cls");return;}system("pause");system("cls");
}

3、 登录模块

3.1 全局文件添加

功能描述:

  • 不同的身份可能会用到不同的文件操作,我们可以将所有的文件名定义到一个全局的文件中
  • 在头文件中添加 globalFile.h 文件
  • 并添加如下代码:
#pragma once#define ADMIN_FILE "admin.txt"
#define STUDENT_FILE "student.txt"
#define TEACHER_FILE "teacher.txt"
#define COMPUTERROOM_FILE "computerRoom.txt"
#define ORDER_FILE "order.txt"

3.2 搭建接口以及登录函数封装

功能描述:

  • 根据用户的选择,进入不同的身份登录

  • 接受用户的选择,搭建接口

  • 机房预约系统.cpp中添加如下代码:

#include <iostream>
using namespace std;
#include "student.h"
#include "globalFile.h"
#include "identity.h"
#include "teacher.h"
#include "manager.h"
#include <fstream>void intoStudent(Identity *&student)
{Student *stu=(Student*)student;while (true){stu->show_menu();int Sselect;cin>>Sselect;switch (Sselect){case 1:stu->applyOrder();break;case 2:stu->seeMyselfOrder();break;case 3:stu->seeOwnOrder();break;case 4:stu->cancelOrder();break;case 0:delete student;cout<<"已退出学生登录"<<endl;system("pause");system("cls");return;break;default:cout<<"输入有误请重新选择"<<endl;system("pause");system("cls");break;}}}void intoTeacher(Identity *&teacher)
{Teacher *T1=(Teacher*)teacher;while (true){T1->show_menu();int Tselect;cin>>Tselect;switch (Tselect){case 1:T1->seeOwnOrder();break;case 2:T1->examineOrder();break;case 0:delete teacher;cout<<"已退出学生登录"<<endl;system("pause");system("cls");return;break;default:cout<<"输入有误请重新选择"<<endl;system("pause");system("cls");break;}}}void intoManager(Identity *&manager)
{Manager *M1=(Manager*)manager;while (true){M1->show_menu();int Mselect;cin>>Mselect;switch (Mselect){case 1:M1->addUser();break;case 2:M1->seeUser();break;case 3:M1->seeComputerRoom();break;case 4:M1->clearOrder();break;case 0:delete manager;cout<<"已退出管理员登录"<<endl;system("pause");system("cls");return;break;default:cout<<"输入有误请重新选择"<<endl;system("pause");system("cls");break;}}}
void logonIn(string fileName,int type)
{Identity *person=NULL;ifstream ifs;ifs.open(fileName,ios::in);if (!ifs.is_open()){cout<<"文件无法打开"<<endl;ifs.close();system("pause");system("cls");return;}int SEno=0;string name;string pwd;if (type==1){cout<<"请输入你的学号:"<<endl;cin>>SEno;}else if (type==2){cout<<"请输入你的职工号:"<<endl;cin>>SEno;}cout<<"请输入用户名:"<<endl;cin>>name;cout<<"请输入你的密码:"<<endl;cin>>pwd;if (type==1){//学生登录验证int Sno;string Sname;string Spwd;while (ifs>>Sno && ifs>>Sname && ifs>>Spwd){if (Sno==SEno&&Sname==name&&Spwd==pwd){cout<<"身份验证成功!"<<endl;system("pause");system("cls");person=new Student(SEno,name,pwd);intoStudent(person);return;}}}else if (type==2){//教师登录验证int Eno;string Sname;string Spwd;while (ifs>>Eno && ifs>>Sname && ifs>>Spwd){if (Eno==SEno&&Sname==name&&Spwd==pwd){cout<<"身份验证成功!"<<endl;system("pause");system("cls");person=new Teacher(SEno,name,pwd);intoTeacher(person);return;}}}else if (type==3){//管理员登录验证string Sname;string Spwd;while (ifs>>Sname && ifs>>Spwd){if (Sname==name&&Spwd==pwd){cout<<"身份验证成功!"<<endl;system("pause");system("cls");person=new Manager(name,pwd);intoManager(person);return;}}}cout<<"身份验证失败!"<<endl;system("pause");system("cls");
}int main()
{while (true){cout<<"===============欢迎来到机房预约系统==============="<<endl;cout<<endl;cout<<"请输入你的身份"<<endl;cout<<"\t -----------------------\t"<<endl;cout<<"\t|\t1.学生代表\t|\t"<<endl;cout<<"\t|\t\t\t|"<<endl;cout<<"\t|\t2.老    师\t|\t"<<endl;cout<<"\t|\t\t\t|"<<endl;cout<<"\t|\t3.管 理 员\t|\t"<<endl;cout<<"\t|\t\t\t|"<<endl;cout<<"\t|\t0.退    出\t|\t"<<endl;cout<<"\t -----------------------\t"<<endl;cout<<"输入你的选择:"<<endl;int select;cin>>select;switch (select){case 1:logonIn(STUDENT_FILE,1);break;case 2:logonIn(TEACHER_FILE,2);break;case 3:logonIn(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;
}

4. 机房类创建

  • 在头文件下,创建新的文件 computerRoom.h

  • 并添加如下代码:

#pragma once
#include <iostream>
using namespace std;class ComputerRoom
{public:ComputerRoom();ComputerRoom(int id,int capacity){this->m_capacity=capacity;this->m_id=id;}int m_id;int m_capacity;
};

4.1 显示预约

4.1.1 创建预约类

功能描述:显示预约记录时,需要从文件中获取到所有记录,用来显示,创建预约的类来管理记录以及更新

在头文件以及源文件下分别创建orderFile.horderFile.cpp文件

  • orderFile.h中添加如下代码:
#pragma once
#include <iostream>
using namespace std;
#include <string>
#include <map>
#include <fstream>
#include "globalFile.h"class OrderFile
{public:OrderFile();//geng xin ji luvoid updateOrder();int m_Size;map<int,map<string,string>> m_orderData;
};
  • 在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){//cout << date << endl;//cout << interval << endl;//cout << stuId << endl;//cout << stuName << endl;//cout << roomId << endl;//cout << status << endl;//cout << endl;//date:11111string key;string value;map<string, string>m;int pos = date.find(":"); // 4if (pos != -1){key = date.substr(0, pos);value = date.substr(pos + 1, date.size() - pos - 1);  // size = 10  pos = 4  size - pos  - 1 = 6 - 1m.insert(make_pair(key, value));}//cout << "key = " << key << endl;//cout << "value = " << value << endl;//截取时间段pos = interval.find(":"); // 4if (pos != -1){key = interval.substr(0, pos);value = interval.substr(pos + 1, interval.size() - pos - 1);  // size = 10  pos = 4  size - pos  - 1 = 6 - 1m.insert(make_pair(key, value));}//截取学号pos = stuId.find(":"); // 4if (pos != -1){key = stuId.substr(0, pos);value = stuId.substr(pos + 1, stuId.size() - pos - 1);  // size = 10  pos = 4  size - pos  - 1 = 6 - 1m.insert(make_pair(key, value));}//截取姓名pos = stuName.find(":"); // 4if (pos != -1){key = stuName.substr(0, pos);value = stuName.substr(pos + 1, stuName.size() - pos - 1);  // size = 10  pos = 4  size - pos  - 1 = 6 - 1m.insert(make_pair(key, value));}//截取机房号pos = roomId.find(":"); // 4if (pos != -1){key = roomId.substr(0, pos);value = roomId.substr(pos + 1, roomId.size() - pos - 1);  // size = 10  pos = 4  size - pos  - 1 = 6 - 1m.insert(make_pair(key, value));}//截取预约状态pos = status.find(":"); // 4if (pos != -1){key = status.substr(0, pos);value = status.substr(pos + 1, status.size() - pos - 1);  // size = 10  pos = 4  size - pos  - 1 = 6 - 1m.insert(make_pair(key, value));}//将小map容器放入到大的map容器中this->m_orderData.insert(make_pair(this->m_Size, m));this->m_Size++;}ifs.close();//测试最大map容器//for (map<int, map<string, string>>::iterator it = m_orderData.begin(); it != m_orderData.end(); it++)//{//  cout << "条数为: " << it->first << " value = " << endl;//   for (map<string, string>::iterator mit = (*it).second.begin(); mit != it->second.end(); mit++)//   {//     cout << " key = " << mit->first << " value = " << mit->second << " ";// }// cout << endl;//}}//更新预约记录
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();
}

**参考资料:**https://www.bilibili.com/video/BV1et411b73Z?p=283

机房预约系统(黑马程序员)相关推荐

  1. 黑马程序员C++ 案例四 机房预约系统

    源文件 机房预约系统.cpp #include<iostream> using namespace std; #include"identity.h" #include ...

  2. 黑马程序员Linux系统开发视频之创建守护进程模型

    黑马程序员Linux系统开发视频之创建守护进程模型 1.创建子进程,父进程退出   所有工作在子进程中进行形式上脱离了控制终端 2.在子进程中创建新会话   setsid()函数   使子进程完全独立 ...

  3. 2022最新黑马程序员大数据Hadoop教程(补充) 苹果系统 vmware fusion导入虚拟机workstation的node1,node2,node3节点

    我使用的系统版本和虚拟机版本,没装vm的可以看这个快速安装 vmware fusion 12 个人授权版 直达连接 1说明 课程中使用的虚拟机是用windows的的vmware workstation ...

  4. 【黑马程序员新版Linux学习笔记】Linux系统实用操作命令——操作演示

    [黑马程序员新版Linux学习笔记]Linux 零基础快速入门: (一)Linux基本命令--操作演示 (二)Linux用户和权限 -- 操作演示 (三)Linux 小技巧快捷键 (四)Linux系统 ...

  5. 如何系统学习一门编程语言? | 黑马程序员

    一.从认识编程语言开始: 语言有很多种,包括汉语.英语.法语.韩语等,尽管输出的形式不同,但可以达到同样的目的.同样,我们也可以通过「语言」来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言 ...

  6. C++实现机房预约系统

    相关视频--黑马程序员C++(282-314) (1-83笔记)--链接 (84-146笔记)--链接 (146-166笔记)--链接 (167-263笔记)--链接 (264-281笔记)--链接 ...

  7. 机房预约系统(C++)

    各位读者朋友,大家好!本篇文章主要内容是将黑马程序员(C++)的机房预约系统的源代码展现给大家.原码的大部分与黑马程序员老师写的代码一致,我只是对其中的一小部分做了优化,比如用户输入自己的选择不再程序 ...

  8. 黑马程序员C++课程的资源分享

    看完了黑马程序员C++教程的全部. 说实话入门挺合适的,但是距离工作感觉还是远远不够的,其中最深的就是到了C++的STL部分,包括做项目需要的多线程啊.网络编程啊啥的都还没有,我找了一下他们公开课上面 ...

  9. Visual Studio 2022版本 B站黑马程序员C++自学分享-第三阶段(1)(主要包括:自己敲的代码、通过注释来备注上自己对代码的理解)

    Visual Studio 2022版本 B站黑马程序员C++自学分享-第三阶段(1)(主要包括:自己敲的代码.通过注释来备注上自己对代码的理解) 前言 三.第三阶段 C++提高编程 介绍C++泛型编 ...

最新文章

  1. Fib(兔子问题)python实现多种方法
  2. python入门基础代码图-Python入门基础学习一
  3. 函数中使用栈与使用堆时函数执行效率浅对比
  4. 【Flask】创建一个蓝图
  5. [导入]ASP.NET中上传并读取Excel文件数据
  6. python中sendkeys.sendkeys_python的webbrowser模块和SendKeys模块
  7. 【算法分析与设计】找出缺失的一个整数问题
  8. ASP.NET--表达式、运算符与分支结构
  9. 小D课堂 - 新版本微服务springcloud+Docker教程_6-04 自定义Zuul过滤器实现登录
  10. CISCO OSPF-NSSA实验
  11. maven内置属性详细说明
  12. 闲来无事写个qt实现机器人
  13. 基于Nonebot2搭建QQ机器人(三)Linux端部署机器人
  14. 工作流的大致开发流程
  15. iNode客户端“未收到服务器回应,即将强行下线,请检查终端能否正常访问网络或者与管理员联系”问题与解决方式...
  16. TiDB数据库架构概述
  17. K8s NetworkPolicy与网络插件flannel、calico详细版
  18. 过滤器:活性碳过滤器技术参数全面解读
  19. 朴素贝叶斯、贝叶斯网络分类器
  20. 【quill-editor】富文本编辑器对图片的放大缩小拖拽的实现

热门文章

  1. ChatGPT、低代码等技术出现会不会导致底层程序员失业
  2. 计算机网络教程-自顶向下方法(计算机网络概述)
  3. Unity游戏Mod/插件制作教程01 - BepInEx的安装和使用
  4. 计算机一级学平均数,excel计算平均值怎么做?计算机一级考试╭(╯ε╰)╮
  5. linux内核带usb驱动,Linux3.4内核USB驱动的移植
  6. 光盘加密软件测试自学,SecurDisc光盘加密功能实战
  7. SPSS(五)SPSS之相关分析与线性回归模型(图文+数据集)
  8. 动态规划之股票买卖系列问题
  9. 记录在IE下,JS下载保存文件方法
  10. java定义一个圆_JAVA:定义一个圆类Circle,成员变量:半径 radius;