wordpress网站服务时间,网页设计与制作(第2版)课件,wordpress迁移后除了首页,怎样推广一个产品1、机房预约系统需求 1.1系统简介 学校现有几个规格不同的机房#xff0c;由于使用时经常出现“撞车“现象,现开发一套机房预约系统#xff0c;解决这一问题。 1.2身份简介 分别有三种身份使用该程序 学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账… 1、机房预约系统需求 1.1系统简介 学校现有几个规格不同的机房由于使用时经常出现“撞车“现象,现开发一套机房预约系统解决这一问题。 1.2身份简介 分别有三种身份使用该程序 学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账号 1.3机房简介 机房总共有3间 1号机房 …最大容量20人2号机房 …最多容量50人3号机房 …最多容量100人 1.4申请简介 申请的订单每周由管理员负责清空。学生可以预约未来一周内的机房使用预约的日期为周一至周五预约时需要选择预约时段(上午、下午)教师来审核预约依据实际情况审核预约通过或者不通过 1.5系统具体需求 首先进入登录界面可选登录身份有: 学生代表 老师 管理员 退出 每个身份都需要进行验证后进入子菜单 学生需要输入:学号、姓名、登录密码 老师需要输入:职工号、姓名、登录密码 管理员需要输入:管理员姓名、登录密码 学生具体功能 申请预约--预约机房 查看自身的预约-- 查看自己的预约状态 查看所有预约--查看全部预约信息以及预约状态 取消预约--取消自身的预约预约成功或审核中的预约均可取消 注销登录--退出登录 教师具体功能 查看所有预约--查看全部预约信息以及预约状态 审核预约--对学生的预约进行审核 注销登录-- 退出登录 管理员具体功能 添加账号--添加学生或教师的账号需要检测学生编号或教师职工号是否重复 查看账号--可以选择查看学生或教师的全部信息 查看机房--查看所有机房的信息 清空预约--清空所有预约记录 注销登录--退出登录 2、创建项目 都会不会的重学吧 3、创建主菜单 功能描述 设计主菜单与用户进行交互 3.1菜单实现 在主函数main中添加菜单提示代码如下 cout 欢迎来到机房预约系统 endl;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| 0.退出 |\n;cout \t\t| |\n;cout \t\t ------------------------------------------\n;cout 请输入您的选择; 3.2搭建接口 接受用户的选择搭建接口在main中添加代码 int main() {int select 0;//接受用户的选择while (true){cout 欢迎来到机房预约系统 endl;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| 0.退出 |\n;cout \t\t| |\n;cout \t\t ------------------------------------------\n;cout 请输入您的选择;cin select;//接受用户选择switch (select){case 1: //学生身份break;case 2: //老师身份break;case 3: //管理员身份break;case 0: //退出系统break;default:cout 输入有误请重新选择 endl;system(pause);system(cls);break;}}system(pause);return 0;
} 4、退出功能实现 4.1退出功能实现 在main函数分支0选项中添加退出程序的代码: case 0: //退出系统cout 欢迎下次使用 endl;system(pause);return 0;break; 4.2测试退出功能 5、创建身份类 5.1身份的基类 在整个系统中有三种身份分别为:学生代表、老师以及管理员三种身份有其共性也有其特性因此我们可以将三种身份抽象出一个身份基类identity在头文件下创建ldentity,h文件 #pragma once
#includeiostream
using namespace std;//身份抽象基类
class Identity {public://操作菜单 纯虚函数avirtual void operMenu() 0;//用户名string m_Name;//密码string m_Pwd;
}; 5.2学生类 5.2.1功能分析 学生类主要功能是可以通过类中成员函数实现预约实验室操作学生类中主要功能有: 显示学生操作的菜单界面 申请预约 查看自身预约 查看所有预约 取消预约 5.2.2类的创建 在头文件以及源文件下创建 student.h和student.cpp文件 #pragma once
#includeiostream
using namespace std;
#includeIdentity.hclass Student :public Identity {public://默认构造Student();//有参构造Student(int id, string name, string pwd);//菜单界面virtual void operNameO();//申请预约void applyOrder();//查看自身预约void showMyOrder();//查看所有预约void showAllOrder();//取消预约void cancelOrder();//学生学号int m_Id;
}; #includestudent.h//默认构造
Student::Student(){}//有参构造
Student::Student(int id, string name, string pwd){}//菜单界面
void Student::operNameO(){}//申请预约
void Student::applyOrder(){}//查看自身预约
void Student::showMyOrder(){}//查看所有预约
void Student::showAllOrder(){}//取消预约
void Student::cancelOrder(){} 5.3老师类 5.3.1功能分析 教师类主要功能是查看学生的预约并进行审核教师类中主要功能有: 显示教师操作的菜单界面 查看所有预约 审核预约 5.3.2类的创建 在头文件以及源文件下创建 teacher,h和 teacher.cpp文件 #pragma once
#includeiostream
using namespace std;
#includeIdentity.hclass Teacher :public Identity {public://默认构造Teacher();//有参构造Teacher(int empId, string name, string pwd);//菜单界面virtual void operMenu();//查看所有预约void showAllOrder();//审核预约void validOrder();//职工号int m_EmpId;
}; #includeteacher.h//默认构造
Teacher::Teacher(){}//有参构造
Teacher::Teacher(int empId, string name, string pwd){}//菜单界面
void Teacher::operMenu(){}//查看所有预约
void Teacher::showAllOrder(){}//审核预约
void Teacher::validOrder(){} 5.4管理员类 5.4.1功能分析 管理员类主要功能是对学生和老师账户进行管理查看机房信息以及清空预约记录管理员类中主要功能有: 显示管理员操作的菜单界面 添加账号 查看账号 查看机房信息 清空预约记录 5.4.2类的创建 在头文件以及源文件下创建 manager.h和 manager.cpp文件 #pragma once
#includeiostream
using namespace std;
#includeIdentity.h//管理员类设计
class Manager :public Identity {public://默认构造Manager();//有参构造Manager(string name,string pwd);//菜单界面virtual void operMenu();//添加账号void addPerson();//查看账号void showPerson();//查看机房信息void showComputer();//清空预约记录void clearFile();
}; #includemanager.h//默认构造
Manager::Manager(){}//有参构造
Manager::Manager(string name, string pwd){}//菜单界面
void Manager::operMenu(){}//添加账号
void Manager::addPerson(){}//查看账号
void Manager::showPerson(){}//查看机房信息
void Manager::showComputer(){}//清空预约记录
void Manager::clearFile(){} 6、登录模块 6.1全局文件添加 功能描述 不同的身份可能会用到不同的文件操作我们可以将所有的文件名定义到一个全局的文件中在头文件中添加 globalFile.h 文件并添加如下代码: #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 6.2登录函数封装 功能描述 根据用户的选择进入不同的身份登录 在预约系统的.cpp文件中添加全局函数voidLoginIn(string fileNameint type) 参数 fileName ---操作的文件名type---登录的身份(1代表学生、2代表老师、3代表管理员) #includeIdentity.h
#includefstream
#includestring
#includeglobalFile.h//登录功能 参数1 操作文件名 参数2 操作身份类型
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 (type1) //学生身份{cout 请输入你的学号 endl;cin id;}else if(type2){cout 请输入您的职工号 endl;cin id;}cout 请输入用户名 endl;cin name;cout 请输入密码 endl;cin pwd;if (type 1) {//学生身份验证}else if (type 2) {//教师身份验证}else if (type 3) {//管理员身份验证}cout 验证登录失败 endl;system(pause);system(cls);return;} case 1: //学生身份LoginIn(STUDENT_FILE, 1);break;case 2: //老师身份LoginIn(TEACHER_FILE, 2);break;case 3: //管理员身份LoginIn(ADMIN_FILE, 3);break; 6.3学生登录实现 在student.txt文件中添加两条学生信息用于测试 其中 第一列 代表 学号第二列 代表 学生姓名第三列 代表 密码 在Login函数的学生分支中加入如下代码验证学生身份 //学生身份验证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);//进入学生身份的子菜单return;}} 6.4教师登录实现 在teacher.txt文件中添加一条老师信息用于测试 其中 第一列 代表 教师职工编号第二列 代表 师姓名第三列 代表 密码 在Login函数的教师分支中加入如下代码验证教师身份 //教师身份验证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);//进入教师的子菜单return;}} 6.5管理员登录实现 在admin.txt文件中添加一条管理员信息由于我们只有一条管理员因此本案例中没有添加管理员的功能 其中: admin 代表管理员用户名123 代表管理员密码 在Login函数的管理员分支中加入如下代码验证管理员身份 //管理员身份验证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);//进入管理员的子菜单return;}} 7、管理员模块 7.1管理员登录和注册 7.1.1构造函数 在Manager类的构造函数中初始化管理员信息代码如下: //有参构造
Manager::Manager(string name, string pwd){this-m_Name name;this-m_Pwd pwd;
} 7.1.2管理员子菜单 在机房预约系统.cpp中当用户登录的是管理员添加管理员菜单接口将不同的分支提供出来 添加账号 查看购 查看机房 清空预约 注销登录 实现注销功能 添加全局的数vold managerHenu(Identity*manager)代码如下 //进入管理员子菜单界面
void managerMenu(Identity* manager) {while (true){//调用管理员子菜单manager-operMenu();//将父类指针 转为子类指针调用子类里其他接口Manager* man (Manager*)manager;int select 0;//接受用户选项cin select;if (select 1)//添加账号{cout 添加账号 endl;man-addPerson();}else if (select 2)//查看账号{cout 查看账号 endl;man-showPerson();}else if (select 3)//查看机房{cout 查看机房 endl;man-showComputer();}else if (select 4)//清空预约{cout 清空预约 endl;man-clearFile();}else { //注销delete manager; //销毁堆区对象cout 注销成功 endl;system(pause);system(cls);return;}}
}7.1.3菜单功能实现 在实现成员函数 void Manager::operHenu()代码如下: //菜单界面
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 请选择您的操作 endl;} 7.1.4接口对接 管理员成功登录后调用管理员子菜单界面在管理员登录验证分支中添加代码: //进入管理员的子菜单managerMenu(person); 7.2添加账号 功能描述: 给学生或教师添加新的账号 功能要求: 添加时学生学号不能重复、教师职工号不能重复 7.2.1添加功能实现 在Manager的addPerson成员函数中实现添加新账号功能代码如下: //添加账号
void Manager::addPerson()
{cout 请输入添加账号类型 endl;cout 1、添加学生 endl;cout 2、添加老师 endl;string fileName;//操作文件名string tip; //提示id号ofstream ofs;//文件操作对象int select 0;cin select;//接受用户的选项if (select1){//添加的是学生fileName STUDENT_FILE;tip 请输入学号;}else {//添加的是老师fileName TEACHER_FILE;tip 请输入职工编号;}//利用追加的方式 写文件ofs.open(fileName, ios::out | ios::app);int id; //学号或者职工号string name; //姓名string pwd; //密码cout tip endl;cin id;cout 请输入姓名 endl;cin name;cout 请输入密码 endl;cin pwd;//向文件中添加数据ofs id name pwd endl;cout 添加成功 endl;system(pause);system(cls);ofs.close();} 7.2.2去重操作 功能描述:添加新账号时如果是重复的学生编号或是重复的教师职工编号提示有误 7.2.2.1读取信息 要去除重复的账号首先要先将学生和教师的账号信息获取到程序中方可检测在manager.h中添加两个容器用于存放学生和教师的信息添加一个新的成员函数void intvector()初始化容 //初始化容器void initVector();//学生容器vectorStudentvStu;//教师容器vectorTeachervTea; 在Manager的有参构造函数中获取目前的学生和教师信息 //初始化容器
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 (ifss.m_Idifss.m_Nameifss.m_Pwd){vStu.push_back(s);}cout 当前学生数量为 vStu.size() endl;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);}cout 当前老师数量为 vTea.size() endl;ifs.close();} 在有参构造函数中调用初始化容器函数 //初始化容器 获取到所有文件中 学生、老师信息this-initVector(); 7.2.2.2去重函数封装 在manager,h文件中添加成员函数bool checkRepeat(int id,int type); //检测重复 参数1 检测学号/职工号 参数2 检测类型bool checkRepeat(int id, int type); 在manager.cpp文件中实现成员函数bool checkRepeat(intidint type); //检测重复 参数1 检测学号/职工号 参数2 检测类型
bool Manager::checkRepeat(int id, int type) {if (type1){//检测学生for (vectorStudent::iterator it vStu.begin(); it ! vStu.end(); it) {if (id it-m_Id) {return true;}}}else {//检测老师for (vectorTeacher::iterator it vTea.begin(); it ! vTea.end(); it) {if (id it-m_EmpId) {return true;}}}return false;
} 7.2.2.3添加去重操作 在添加学生编号或者教师职工号时检测是否有重复代码如下: cout tip endl;while (true){cin id;bool ret checkRepeat(id, select);if (ret) //有重复{cout errorTip endl;}else{break;}} 7.2.2.4bug解决 bug描述 虽然可以检测重复的账号但是刚添加的账号由于没有更新到容器中因此不会做检测导致刚加入的账号的学生号或者职工编号再次添加时依然可以重复 解决方案 在每次添加新账号时重新初始化容器 //调用初始化容器接口从新获取文件中的数据this-initVector(); 7.3显示账号 功能描述:显示学生信息或教师信息 7.3.1显示功能实现 在Manager的showPerson成员的数中实现显示账号功能代码如下: 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 请选择查看内容 endl;cout 1、查看所有学生 endl;cout 2、查看所有老师 endl;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);
} 7.3.2测试 7.4查看机房 7.4.1添加机房信息 案例需求中机房一共有三个其中1号机房容量20台机器2号50台3号100台 我们可以将信息录入到computerRoom,txt中 7.4.2机房类创建 在头文件下创建新的文件 computerRoom.h #pragma once
#includeiostream
using namespace std;//机房类
class ComputerRoom {public:int m_ComId;//机房id号int m_MaxNum;//机房最大容量
}; 7.4.3初始化机房信息 在Manager管理员类下添加机房的容器用于保存机房信息 //机房信息容器vectorComputerRoomvCom; 在Manager有参构造函数中追加如下代码初始化机房信息 //初始化机房信息ifstream ifs;ifs.open(COMPUTER_FILE, ios::in);ComputerRoom com;while (ifscom.m_ComIdifscom.m_MaxNum){vCom.push_back(com);}ifs.close();cout 机房数量为 vCom.size() endl; 7.4.4显示机房信息 在Manager类的showComputer成员函数中添加如下代码: //查看机房信息
void Manager::showComputer()
{cout 机房信息如下 endl;for (vectorComputerRoom::iterator itvCom.begin();it!vCom.end();it){cout 机房编号 it-m_ComId 机房最大容量 it-m_MaxNum endl;}system(pasue);system(cls);
} 7.5清空预约 功能描述 清空生成的 order.txt 预约文件 7.5.1清空功能实现 在Manager的cleanFile成员函数中添加如下代码: //清空预约记录
void Manager::clearFile()
{ofstream ofs(ORDER_FILE, ios::trunc);ofs.close();cout 清空成功 endl;system(pause);system(cls);
} 8、学生模块 8.1学生登录和注册 8.1.1构造函数 在Student类的构造函数中初始化学生信息代码如下: //有参构造
Student::Student(int id, string name, string pwd)
{//初始化属性this-m_Id id;this-m_Name name;this-m_Pwd pwd;
} 8.1.2管理员子菜单 在机房预约系统.cpp中当用户登录的是学生添加学生菜单接口将不同的分支提供出来 申请预约 查看我的预约 查看所有预约 取消预约 注销登录 实现注销功能 添加全局函数 void studentMenu(Identity*manager)代码如下: //进入学生子菜单界面
void studentMenu(Identity* student)
{while (true){//调用学生子菜单student-operMenu();Student* stu (Student*)student;int select 0;cin select;//接受用户选择if (select1)//申请预约{stu-applyOrder();}else if (select 2)//查看自身预约{stu-showMyOrder();}else if (select3)//查看所有人预约{stu-showAllOrder();}else if (select4)//取消预约{stu-cancelOrder();}else {//注销登录delete student; //销毁堆区对象cout 注销成功 endl;system(pause);system(cls);return;}}
} 8.1.3菜单功能实现 在实现成员函数 void student::operMenu()代码如下: //菜单界面
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 请选择您的操作 endl;} 8.1.4接口对接 学生成功登录后调用学生的子菜单界面在学生登录分支中添加代码: //进入学生身份的子菜单studentMenu(person); 8.2申请预约 8.2.1获取机房信息 在申请预约时学生可以看到机房的信息因此我们需要让学生获取到机房的信息 在student.h中添加新的成员函数如下: //机房容器vectorComputerRoom vCom; 在学生的有参构造函数中追加如下代码: //初始化机房信息ifstream ifs;ifs.open(COMPUTER_FILE, ios::in);ComputerRoom com;while (ifscom.m_ComIdifscom.m_MaxNum){//将读取的信息放入到 容器中vCom.push_back(com);}ifs.close(); 8.2.2预约功能实现 //申请预约
void Student::applyOrder()
{cout 机房开放时间为周一至周五 endl;cout 请输入申请预约的时间 endl;cout 1、周一 endl;cout 2、周二 endl;cout 3、周三 endl;cout 4、周四 endl;cout 5、周五 endl;int data 0;//日期int interval 0;//时间段int room 0;//机房编号while (true){cin data; if (data1data5){break;}cout 输入有误请重新输入 endl;}cout 请输入申请预约时间段 endl;cout 1、上午 endl;cout 2、下午 endl;while (true){cin interval;if (interval1interval2){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 (room1room3){break;}cout 输入有误请重新输入 endl;}cout 预约成功审核中 endl;ofstream ofs;ofs.open(ORDER_FILE, ios::app);ofs data: data ;ofs intercal: interval ;ofs stuId: this-m_Id ;ofs stuName: this-m_Name ;ofs roomId: room ;ofs status: 1 endl;ofs.close();system(pause);system(cls);} 8.3显示预约 8.3.1创建预约类 功能描述:显示预约记录时需要从文件中获取到所有记录用来显示创建预约的类来管理记录以及更新 在头文件以及源文件下分别创建orderFile.h和 orderFile.cpp文件 orderFile.h中添加如下代码: #pragma once
#includeiostream
using namespace std;
#includeglobalFile.h
#includefstream
#includemap
#includestringclass OrerFile {public://构造函数OrerFile();//更新预约记录void updateOrder();//记录预约条数int m_Size;//记录所有预约信息的容器 key记录条数mapint, mapstring, stringm_orderData;
}; 构造函数中获取所有信息并存放在容器中添加如下代码: //构造函数
OrerFile::OrerFile(){ifstream ifs;ifs.open(ORDER_FILE, ios::in);string data;//日期string interval;//时间段string stuId;//学生编号string stuName;//学生姓名string roomId;//机房编号string status;//预约状态 this-m_Size 0;//记录条数while (ifsdataifsintervalifsstuIdifsstuNameifsroomIdifsstatus){/*cout data endl;cout interval endl;cout stuId endl;cout stuName endl;cout roomId endl;cout status endl;cout endl;*///截取datastring key;string value;mapstring, stringm;int posdata.find(:);if (pos ! -1) {key data.substr(0, pos);value data.substr(pos 1, data.size() - pos - 1);m.insert(make_pair(key, value));}/*cout key key endl;cout value value endl;*///截取intervalpos 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));}//截取stuIdpos 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));}//截取stuNamepos 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));}//截取roomIdpos 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));}//截取statuspos 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();//测试最大map容器/*for (mapint, mapstring, string::iterator it m_orderData.begin(); it ! m_orderData.end(); it) {cout 条数为 it-first value endl;for (mapstring, string::iterator mit (*it).second.begin(); mit ! it-second.end(); mit) {cout key mit-first value mit-second ;}cout endl;}*/
} 更新预约记录的成员函数updateOrder代码如下: //更新预约记录
void OrerFile::updateOrder(){if (this-m_Size0){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();
} 8.3.2显示自身预约 首先我们先添加几条预约记录可以用程序添加或者直接修改order.txt文件 order.txt文件内容如下:比如我们有三名同学分别产生了3条预约记录 在Student类的 void student::showMyorder()成员的数中添加如下代码 //查看自身预约
void Student::showMyOrder(){OrerFile of;if (of.m_Size0){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*)转int*/if (this-m_Id atoi(of.m_orderData[i][stuId].c_str()))//找到自身预约{cout 预约日期 周 of.m_orderData[i][data];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);
} 8.3.3显示所有预约 在Student类的 void student::showA1llOrder()成员的数中添加如下代码
//查看所有预约
void Student::showAllOrder()
{OrerFile 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][data];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);
} 8.4取消预约 在Student类的 void student::cancelOrder()成员的数中添加如下代码 //取消预约
void Student::cancelOrder()
{OrerFile of;if (of.m_Size0){cout 无预约记录 endl;system(pause);system(cls);}cout 审核中或预约成功的记录可以取消请输入取消的记录 endl;vectorintv;//存放在最大容器中的下标编号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][data];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 预约成功;}cout status endl;}}}cout 请输入取消的记录0代表返回 endl;int select 0;while (true){cin select;if (select0selectv.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);
} 9、教师模块 9.1教师登录和注册 9.1.1构造函数 在Teacher类的构造函数中初始化教师信息代码如下 //有参构造
Teacher::Teacher(int empId, string name, string pwd)
{//初始化this-m_EmpId empId;this-m_Name name;this-m_Pwd pwd;
} 9.1.2教师子菜单 在机房预约系统.cpp中当用户登录的是教师添加教师菜单接口将不同的分支提供出来 查看所有预约 审核预约 注销登录 实现注销功能 添加全局函数void TeacherMenu(Person*manager)代码如下; //进入教师子菜单界面
void teacherMenu(Identity* teacher) {while (true){//调用子菜单界面teacher-operMenu();Teacher* tea (Teacher*)teacher;int select 0;//接受用户选择cin select;if (select1)//查看所有预约{tea-showAllOrder();}else if (select 2)//审核预约{tea-validOrder();}else {delete teacher;cout 注销成功 endl;system(pause);system(cls);return;}}
} 9.1.3菜单功能实现 在实现成员的数 void Teacher::opeMenu()代码如下: //菜单界面
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 请选择您的操作 endl;} 9.1.4接口对接 教师成功登录后调用教师的子菜单界面在教师登录分支中添加代码: //进入教师的子菜单teacherMenu(person); 9.2查看所有预约 9.2.1所有预约功能实现 该功能与学生身份的查看所有预约功能相似用于显示所有预约记录 在Teacher.cpp中实现成员的数void Teacher::showAllOrder() //查看所有预约
void Teacher::showAllOrder(){OrerFile 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);
} 9.2.2测试功能 9.3审核预约 9.3.1审核功能实现 功能描述:教师市核学生的预约依据实际情况审核预约 在Teacher.cpp中实现成员函数 vold Teacher::validOrder() //审核预约
void Teacher::validOrder()
{OrerFile of;if (of.m_Size0){cout 无预约记录 endl;system(pause);system(cls);return;}vectorintv;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];string status 状态审核中;cout status endl;}}cout 请输入审核的预约记录0代表返回 endl;int select 0;//接受用户选择的预约记录int ret 0;//接受预约结果记录while (true){cin select;if (select0selectv.size()){if (select0){break;}else{cout 请输入审核结果 endl;cout 1、通过 endl;cout 2、不通过 endl;cin ret;if (ret1){//通过情况of.m_orderData[v[select - 1]][status] 2;}else{//不通过情况of.m_orderData[v[select - 1]][status] -1;}of.updateOrder();//更新预约记录cout 审核完毕 endl;break;}}cout 输入有误请重新输入 endl;}system(pause);system(cls);
} 9.3.2测试审核预约 10、全部代码 10.1computerRoom.h #pragma once
#includeiostream
using namespace std;//机房类
class ComputerRoom {public:int m_ComId;//机房id号int m_MaxNum;//机房最大容量
}; 10.2globalFile.h #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 10.3Identity.h #pragma once
#includeiostream
using namespace std;//身份抽象基类
class Identity {public://操作菜单 纯虚函数avirtual void operMenu() 0;//用户名string m_Name;//密码string m_Pwd;
}; 10.4manager.h #pragma once
#includeiostream
using namespace std;
#includeIdentity.h
#includestring
#includefstream
#includeglobalFile.h
#includevector
#includestudent.h
#includeteacher.h
#includealgorithm
#includecomputerRoom.h//管理员类设计
class Manager :public Identity {public://默认构造Manager();//有参构造Manager(string name,string pwd);//菜单界面virtual void operMenu();//添加账号void addPerson();//查看账号void showPerson();//查看机房信息void showComputer();//清空预约记录void clearFile();//初始化容器void initVector();//检测重复 参数1 检测学号/职工号 参数2 检测类型bool checkRepeat(int id, int type);//学生容器vectorStudentvStu;//教师容器vectorTeachervTea;//机房信息容器vectorComputerRoomvCom;
}; 10.5orderFile.h #pragma once
#includeiostream
using namespace std;
#includeglobalFile.h
#includefstream
#includemap
#includestringclass OrerFile {public://构造函数OrerFile();//更新预约记录void updateOrder();//记录预约条数int m_Size;//记录所有预约信息的容器 key记录条数mapint, mapstring, stringm_orderData;
}; 10.6student.h #pragma once
#includeiostream
using namespace std;
#includeIdentity.h
#includestring
#includevector
#includecomputerRoom.h
#includefstream
#includeglobalFile.h
#includeorderFile.hclass 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;//机房容器vectorComputerRoom vCom;
}; 10.7teacher.h #pragma once
#includeiostream
using namespace std;
#includeIdentity.h
#includestring
#includeorderFile.h
#includefstream
#includevectorclass Teacher :public Identity {public://默认构造Teacher();//有参构造Teacher(int empId, string name, string pwd);//菜单界面virtual void operMenu();//查看所有预约void showAllOrder();//审核预约void validOrder();//职工号int m_EmpId;
}; 10.8manager.cpp #includemanager.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 (ifscom.m_ComIdifscom.m_MaxNum){vCom.push_back(com);}ifs.close();cout 机房数量为 vCom.size() endl;
}//菜单界面
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 请选择您的操作 endl;}//添加账号
void Manager::addPerson()
{cout 请输入添加账号类型 endl;cout 1、添加学生 endl;cout 2、添加老师 endl;string fileName;//操作文件名string tip; //提示id号string errorTip;//重复错误提示ofstream ofs;//文件操作对象int select 0;cin select;//接受用户的选项if (select1){//添加的是学生fileName STUDENT_FILE;tip 请输入学号;errorTip 学号重复请重新输入;}else {//添加的是老师fileName TEACHER_FILE;tip 请输入职工编号;errorTip 职工号重复请重新输入;}//利用追加的方式 写文件ofs.open(fileName, ios::out | ios::app);int id; //学号或者职工号string name; //姓名string pwd; //密码cout tip endl;while (true){cin id;bool ret checkRepeat(id, select);if (ret) //有重复{cout errorTip endl;}else{break;}}cout 请输入姓名 endl;cin name;cout 请输入密码 endl;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 请选择查看内容 endl;cout 1、查看所有学生 endl;cout 2、查看所有老师 endl;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 (vectorComputerRoom::iterator itvCom.begin();it!vCom.end();it){cout 机房编号 it-m_ComId 机房最大容量 it-m_MaxNum endl;}system(pause);system(cls);}//清空预约记录
void Manager::clearFile()
{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);}cout 当前学生数量为 vStu.size() endl;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);}cout 当前老师数量为 vTea.size() endl;ifs.close();}//检测重复 参数1 检测学号/职工号 参数2 检测类型
bool Manager::checkRepeat(int id, int type) {if (type1){//检测学生for (vectorStudent::iterator it vStu.begin(); it ! vStu.end(); it) {if (id it-m_Id) {return true;}}}else {//检测老师for (vectorTeacher::iterator it vTea.begin(); it ! vTea.end(); it) {if (id it-m_EmpId) {return true;}}}return false;
} 10.9orderFile.cpp #includeorderFile.h//构造函数
OrerFile::OrerFile(){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 (ifsdateifsintervalifsstuIdifsstuNameifsroomIdifsstatus){/*cout data endl;cout interval endl;cout stuId endl;cout stuName endl;cout roomId endl;cout status endl;cout endl;*///截取datestring key;string value;mapstring, stringm;int posdate.find(:);if (pos ! -1) {key date.substr(0, pos);value date.substr(pos 1, date.size() - pos - 1);m.insert(make_pair(key, value));}/*cout key key endl;cout value value endl;*///截取intervalpos 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));}//截取stuIdpos 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));}//截取stuNamepos 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));}//截取roomIdpos 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));}//截取statuspos 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();//测试最大map容器/*for (mapint, mapstring, string::iterator it m_orderData.begin(); it ! m_orderData.end(); it) {cout 条数为 it-first value endl;for (mapstring, string::iterator mit (*it).second.begin(); mit ! it-second.end(); mit) {cout key mit-first value mit-second ;}cout endl;}*/
}//更新预约记录
void OrerFile::updateOrder(){if (this-m_Size0){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();
} 10.10student.cpp #includestudent.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 (ifscom.m_ComIdifscom.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 请选择您的操作 endl;}//申请预约
void Student::applyOrder()
{cout 机房开放时间为周一至周五 endl;cout 请输入申请预约的时间 endl;cout 1、周一 endl;cout 2、周二 endl;cout 3、周三 endl;cout 4、周四 endl;cout 5、周五 endl;int date 0;//日期int interval 0;//时间段int room 0;//机房编号while (true){cin date; if (date1date5){break;}cout 输入有误请重新输入 endl;}cout 请输入申请预约时间段 endl;cout 1、上午 endl;cout 2、下午 endl;while (true){cin interval;if (interval1interval2){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 (room1room3){break;}cout 输入有误请重新输入 endl;}cout 预约成功审核中 endl;ofstream ofs;ofs.open(ORDER_FILE, ios::app);ofs date: date ;ofs intercal: 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(){OrerFile of;if (of.m_Size0){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*)转int*/if (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()
{OrerFile 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()
{OrerFile of;if (of.m_Size0){cout 无预约记录 endl;system(pause);system(cls);return;}cout 审核中或预约成功的记录可以取消请输入取消的记录 endl;vectorintv;//存放在最大容器中的下标编号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 状态 ;//1 审核中 2 已预约 -1 预约失败 0 取消预约if (of.m_orderData[i][status] 1){status 审核中;}else if (of.m_orderData[i][status] 2){status 预约成功;}cout status endl;}}}cout 请输入取消的记录0代表返回 endl;int select 0;while (true){cin select;if (select0selectv.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);
} 10.11teacher.cpp #includeteacher.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 请选择您的操作 endl;}//查看所有预约
void Teacher::showAllOrder(){OrerFile 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::validOrder()
{OrerFile of;if (of.m_Size0){cout 无预约记录 endl;system(pause);system(cls);return;}vectorintv;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];string status 状态审核中;cout status endl;}}cout 请输入审核的预约记录0代表返回 endl;int select 0;//接受用户选择的预约记录int ret 0;//接受预约结果记录while (true){cin select;if (select0selectv.size()){if (select0){break;}else{cout 请输入审核结果 endl;cout 1、通过 endl;cout 2、不通过 endl;cin ret;if (ret1){//通过情况of.m_orderData[v[select - 1]][status] 2;}else{//不通过情况of.m_orderData[v[select - 1]][status] -1;}of.updateOrder();//更新预约记录cout 审核完毕 endl;break;}}cout 输入有误请重新输入 endl;}system(pause);system(cls);
} 10.12机房预约系统.cpp #includeiostream
using namespace std;
#includeIdentity.h
#includefstream
#includestring
#includeglobalFile.h
#includestudent.h
#includeteacher.h
#includemanager.h//进入学生子菜单界面
void studentMenu(Identity* student)
{while (true){//调用学生子菜单student-operMenu();Student* stu (Student*)student;int select 0;cin select;//接受用户选择if (select1)//申请预约{stu-applyOrder();}else if (select 2)//查看自身预约{stu-showMyOrder();}else if (select3)//查看所有人预约{stu-showAllOrder();}else if (select4)//取消预约{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 (select1)//查看所有预约{tea-showAllOrder();}else if (select 2)//审核预约{tea-validOrder();}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)//添加账号{//cout 添加账号 endl;man-addPerson();}else if (select 2)//查看账号{//cout 查看账号 endl;man-showPerson();}else if (select 3)//查看机房{//cout 查看机房 endl;man-showComputer();}else if (select 4)//清空预约{//cout 清空预约 endl;man-clearFile();}else { //注销delete manager; //销毁堆区对象cout 注销成功 endl;system(pause);system(cls);return;}}
}//登录功能 参数1 操作文件名 参数2 操作身份类型
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 (type1) //学生身份{cout 请输入你的学号 endl;cin id;}else if(type2){cout 请输入您的职工号 endl;cin id;}cout 请输入用户名 endl;cin name;cout 请输入密码 endl;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);return;}int main() {int select 0;//接受用户的选择while (true){cout 欢迎来到机房预约系统 endl;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| 0.退出 |\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;
}