某马机房预约系统 C++项目(二) 完结

8.4、查看机房

8.4.1、添加机房信息

根据案例,我们还是先在computerRoom.txt中直接添加点数据

//几机房  机器数量
1 20
2 50
3 100

image-20231019212836474

8.4.2、机房类创建

​ 同样我们在头文件下新建一个computerRoom.h文件

添加如下代码:

#pragma once
#include<iostream>
using namespace std;class ComputerRoom {
public://机房idint m_ComId;//机房最大容量int m_MaxNum;
};

8.4.3、初始化机房信息并显示

在Manager管理类下,添加机房的容器,用于保存信息

//机房容器
#include "computerRoom.h"
vector<ComputerRoom> vCom;

在Manager有参构造函数中,追加如下代码,初始化机房信息

image-20231020204646730

//获取机房信息
void Manager::getComputerNumber()
{// 文件名string computerFile = COMPUTER_FILE; // 替换为机房文件名ifstream  ifs;ifs.open(COMPUTER_FILE, ios::in);ComputerRoom c;while (ifs>>c.m_ComId && ifs>>c.m_MaxNum){vCom.push_back(c);}cout << "当前机房数量为: " << vCom.size() << endl;ifs.close();
}

然后我们修改showComputer成员方法

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");
}

效果图:

image-20231020205146979

8.5、清空预约功能

接着我们来实现cleanFile成员方法

由于我们order文件中没有东西,如果需要测试可以自己添加一点

//清空预约系统
void Manager::clearFile()
{ofstream ofs(ORDER_FILE, ios::trunc);ofs.close();cout << "清空成功!" << endl;system("pause");system("cls");
}

9、学生模块

9.1、初始化信息

接下来我们对学生有参构造进行实现

student.cpp

//有参构造
Student::Student(int id, string name, string pwd)
{this->m_Id = id;this->m_Name = name;this->m_Pwd = pwd;
}

9.2、菜单实现

首先添加一个学生菜单函数,在机房预约系统.cpp中添加

void studentMenu(Indentity*& student);

然后我们来实现一下具体的步骤

void Student::studentMenu(Indentity*& student)
{while (true){//学生菜单student->operMenu();Student* stu = (Student*)student;//接受用户选项int select = 0;cin >> select;switch (select){case 1: //申请预约cout << "申请预约" << endl;stu->applyOrder();break;case 2://查看预约cout << "查看预约" << endl;stu->showMyOrder();break;case 3://查看所有预约cout << "查看所有预约" << endl;stu->showAllOrder();break;case 4://取消预约cout << "取消预约" << endl;stu->cancelOrder();break;default://注销登录//销毁掉堆区对象delete student;cout << "注销成功" << endl;system("pause");system("cls");return;}}
}

接着我们来添加一下菜单,回到student.cpp

void Student::operMenu()
{cout << "欢迎:" << this->m_Name << "同学登录!" << endl;cout << endl;cout << "--------------       1、申请预约      -----------------" << endl;cout << endl;cout << "--------------       2、查看预约      -----------------" << endl;cout << endl;cout << "--------------       3、查看所有预约  -----------------" << endl;cout << endl;cout << "--------------       4、取消预约      -----------------" << endl;cout << endl;cout << "--------------    输入其他数字退出    -----------------" << endl;cout << "-------------------------------------------------------" << endl;cout << "请输入序号进行操作:";}

然后回到机房预约系统.cpp

image-20231020212638755

在这里添加方法,测试一下

image-20231020212616382

9.3、申请预约实现

然后我们也要来获取一下机房信息,在studen.h中

#include"computerRoom.h"
#include "globalFile.h"
#include<fstream>
//机房信息
vector<ComputerRoom> vCom;

回到student.cpp中的学生构造中填一下以下代码

//有参构造
Student::Student(int id, string name, string pwd)
{this->m_Id = id;this->m_Name = name;this->m_Pwd = pwd;// 文件名string computerFile = COMPUTER_FILE; // 替换为机房文件名ifstream  ifs;ifs.open(COMPUTER_FILE, ios::in);ComputerRoom c;while (ifs >> c.m_ComId && ifs >> c.m_MaxNum){vCom.push_back(c);}ifs.close();
}

然后我们来实现预约功能在applyOrder()中实现

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 (date>=1&&date<=5){break;}cout << "输入有误,请重新输入" << endl;}cout << "请输入申请预约时间段" << endl;cout << "1、上午" << endl;cout << "2、下午" << endl;while (true){cin >> interval;if (interval >= 1 && interval <= 2){break;}cout << "输入有误,请重新输入" << endl;}cout << "请选择机房:" << endl;cout << "1号机房容量:" <<vCom[0].m_MaxNum << endl;cout << "2号机房容量:" << vCom[1].m_MaxNum << endl;cout << "3号机房容量:" << vCom[2].m_MaxNum << endl;while (true){cin >> room;if (room>=1&&room<=3){break;}cout << "输入有误,请重新输入" << endl;}cout << "预约成功!等待审核" << endl;ofstream ofs(ORDER_FILE, ios::app);ofs << "data:" << 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");
}

image-20231020214550545

9.4、显示预约

接着我们来创建一个预约类,用于获取所有记录和显示,以及更新

文件名为orderFile.h 和 orderFile.cpp文件

orderFile.h

#pragma once
#include<iostream>
#include<map>
#include "globalFile.h"
#include<string>
using namespace std;class OrderFile {
public://构造函数OrderFile();//更新预约记录void updateOrder();//记录容器 key 记录条数 value -- 具体记录的键值对map<int, map<string, string>>m_orderData;//记录预约的条数int m_size;
};

orderFile.cpp

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){map<string, string> m;insertInfo(m, date);insertInfo(m, interval);insertInfo(m, stuId);insertInfo(m, stuName);insertInfo(m, roomId);insertInfo(m, status);//将小mpa容器放到大的map容器中this->m_orderData.insert(make_pair(this->m_size, m));this->m_size++;//清空小容器m.clear();}ifs.close();//测试代码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::insertInfo(map<string, string> &m,string keys) {string key;string value;int pos = keys.find(":");if (pos != -1){key = keys.substr(0, pos);value = keys.substr(pos + 1);m.insert(make_pair(key, value));}
}

9.4.1、查看自身预约

student.cpp

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++) {//找到自身预约if (this->m_Id == stoi(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");
}

9.4.2、显示所有预约

//查看所有预约
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 << "预约的日期:周" << 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;}
}

9.5、取消预约

student.cpp

//取消预约
void Student::cancelOrder()
{OrderFile of;if (of.m_size == 0){cout << "无预约记录" << endl;system("pause");system("cls");}cout << "审核中或预约成功的记录可以取消,请输入取消的记录" << endl;vector<int> v;int index = 1;for (int i = 0; i< of.m_size; i++){if (this->m_Id == stoi(of.m_orderData[i]["stuId"])) {//再筛选状态 审核中或预约成功的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 += "预约成功";}else if (of.m_orderData[i]["status"] == "-1") {status += "预约失败,审核未通过";}else {status += "预约已经取消";}cout << status << endl;}}}cout << "请输入取消的记录,0代表返回" << endl;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");
}

10、教师模块

10.1、教师登录和注销

10.1.1、构造函数

  • 在Teacher类的构造函数中,初始化教师信息,代码如下:
//有参构造
Teacher::Teacher(int empId, string name, string pwd)
{//初始化属性this->m_EmpId = empId;this->m_Name = name;this->m_Pwd = pwd;
}
10.1.2、教师子菜单
  • 在机房预约系统.cpp中,当用户登录的是教师,添加教师菜单接口
  • 将不同的分支提供出来
    • 查看所有预约
    • 审核预约
    • 注销登录
  • 实现注销功能

首先我们还是回到机房预约系统.cpp中,创建一个teacherMenu方法,同样的在LoginIn中创建类并链接此方法

//老师子菜单界面
void teacherMenu(Indentity*& teacher)
{while (true){//学生菜单teacher->operMenu();Teacher* tea = (Teacher*)teacher;//接受用户选项int select = 0;cin >> select;switch (select){case 1: //查看所有预约cout << "查看所有预约" << endl;tea->showAllOrder();break;case 2://审核预约cout << "审核预约" << endl;tea->validOrder();break;default://注销登录//销毁掉堆区对象delete teacher;cout << "注销成功" << endl;system("pause");system("cls");return;}}
}

image-20231023214742818

teacher.cpp中 operMenu()

	cout << "欢迎:" << this->m_Name << "老师!" << endl;cout << endl;cout << "--------------       1、查看所有预约      -----------------" << endl;cout << endl;cout << "--------------       2、审核预约          -----------------" << endl;cout << endl;cout << "--------------      输入其他数字退出      -----------------" << endl;cout << "-------------------------------------------------------" << endl;cout << "请输入序号进行操作:";

10.1.2、审核预约

根据学生的申请进行审核

teacher.cpp

//审核预约
void Teacher::validOrder()
{OrderFile of;if (of.m_size == 0){cout << "无预约记录" << endl;system("pause");system("cls");}cout << "审核中或预约成功的记录可以取消,请输入取消的记录" << endl;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 = " 状态: ";//1.审核中 2.已预约 - 1 预约失败 0 取消预约if (of.m_orderData[i]["status"] == "1"){status += "审核中";}cout << status << 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 << "请输入审核结果" << endl;cout << "1.通过" << endl;cout << "2.不通过" << endl;cin >> ret;if (ret == 1){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");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】文件和异常

文件和异常 实际开发中常常会遇到对数据进行持久化操作的场景&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词&#xff0c;可能需要先科普一下关于文件系统的知识&#xff0c;但是这里我们并不浪费笔墨介绍这个概念&#xff0c;请大…

凉鞋的 Godot 笔记 204. 语句

204. 语句 在上一篇&#xff0c;我们接触了三种常见的类型&#xff0c;如下所示&#xff1a; 这样我们算是对变量进行了一个入门了。 其实我们除了变量&#xff0c;我们还接触了一个叫做语句的概念。 我们可以看下代码: extends Node# Called when the node enters the sce…

IDEA配置HTML和Thymeleaf热部署开发

IDEA配置HTML和Thymeleaf热部署开发 1.项目配置2. IDEA配置3. 使用 需求&#xff1a;现在我们在开发不分离项目的时候&#xff08;SpringBootThmeleaf&#xff09;经常会改动了类或者静态html文件就需要重启一下服务器&#xff0c; 这样不仅时间开销很大&#xff0c;而且经常重…

SpringMVC系列-5 消息转换器

背景 SpringMVC系列的第五篇介绍消息转换器&#xff0c;本文讨论的消息转换指代调用Controller接口后&#xff0c;对结果进行转换处理的过程。 内容包括介绍自定义消息转换器、SpringMVC常见的消息转换器、Spring消息转换器工作原理等三部分。 本文以 SpringMVC系列-2 HTTP请求…

PHP 预定义超全局变量 笔记/练习

预定义超全局数组变量 $_FILES 练习在最后 其他练习跟在每条笔记后 概述 预定义&#xff1a;预定义变量是 PHP 已定义&#xff0c;可以直接使用超全局&#xff1a;作用域是全局&#xff0c;可以在脚本的任何地方&#xff08;包括函数内部、外部&#xff09;都可以进行访问 常…

使用GoogleNet网络实现花朵分类

一.数据集准备 新建一个项目文件夹GoogleNet&#xff0c;并在里面建立data_set文件夹用来保存数据集&#xff0c;在data_set文件夹下创建新文件夹"flower_data"&#xff0c;点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/exampl…

冲刺学习-MySQL-常见问题

MySQL索引的最左原则 联合索引的说明 建立三个字段的联合索引联合索引&#xff08;a&#xff0c;b&#xff0c;c&#xff09;相当于建立了索引&#xff1a;&#xff08;a&#xff09;&#xff0c;&#xff08;a&#xff0c;b&#xff09;&#xff0c;&#xff08;a&#xff0…

计算机考研自命题(5)

1、C语言–求和 1、展开式求和。输入一个实数x&#xff0c;计算并输出下式的和&#xff0c;直到最后一项的绝对值小于0.00001.计算结果保留2位小数&#xff0c;试编程。 S x x/2&#xff01; x/3&#xff01; … /* 算法思想&#xff1a;定义一个求阶乘的函数fact(), 头文件调…

蜣螂优化(DBO)求解置换流水车间调度问题(PFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

基于SpringBoot的时间管理系统

基于SpringBoot的时间管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 用户界面 摘要 基于Spring Boot的时间管理系统是一款功能丰富…

Unity之ShaderGraph如何实现靠近显示溶解效果

前言 今天我们来实现一个我再B站看到的一个使用LeapMotion实现的用手部触摸就可以显示的溶解效果。 效果如下图所示: 主要节点 Position:提供对网格顶点或片段的Position 的访问,具体取决于节点所属图形部分的有效着色器阶段。使用Space下拉参数选择输出值的坐标空间。 …

ArcGIS笔记10_如何创建渔网?

本文目录 前言Step 1 确定渔网的精度单位Step 2 有底图时创建渔网的操作 前言 ArcGIS中的渔网是一个很好用的工具&#xff0c;它可以创建出规规整整的小格子&#xff0c;每个小格子都对应一个标注点&#xff0c;可以将原本散乱的数据规整化&#xff0c;如下图&#xff1a; Ste…

前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

Nginx 防盗链

nginx防盗链问题 盗链&#xff1a; 就是a网站有一张照片&#xff0c;b网站引用了a网站的照片 。 防盗链&#xff1a; a网站通过设置禁止b网站引用a网站的照片。 nginx防止网站资源被盗用模块 ngx_http_referer_module 如何区分哪些是不正常的用户&#xff1f; HTTP Referer…

【Java 进阶篇】Java Tomcat 入门指南

Java Tomcat&#xff08;通常简称 Tomcat&#xff09;是一个流行的开源Servlet容器&#xff0c;用于托管Java Web应用程序。它是Apache软件基金会的一部分&#xff0c;提供了一个稳定、可靠的环境来运行Java Servlets和JavaServer Pages&#xff08;JSP&#xff09;。本篇博客将…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性&#xff08;可直接在属性中设置&#xff09;2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox&#xff08;列表框&#xff09; 1.WinForm文件结构 .sln文件 &am…

zabbix6.0 部署配置

架构 先简单介绍zabbix监控的最主要的两个组件&#xff1a; zabbix server zabbix agent server 用来部署 web console以及相关的数据存储&#xff0c;所以需要配合一些数据库来保存数据&#xff0c;比如mysql,pgsql, 又有前端的页面所以还需要配置 nginx 和getway 所以 serve…

Unity 文字显示动画(2)

针对第一版的优化&#xff0c;自动适配文字大小&#xff0c;TextMeshPro可以拓展各种语言。第一版字母类语言效果更好。 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI;public partial class TextBeat…

基于C#使用winform技术的游戏平台的实现【C#课程设计】

基于C#使用winform技术的游戏平台的实现【C#课程设计】 说明项目结构项目运行截图及实现的功能 部分代码一些说明(个人觉得一些难点的说明)一、ListView &#xff0c;ImageList 的综合使用二、图片上传以及picturebox 图片的动态替换三、图表插件的使用四、SQL工具类封装五、高…