机房管理系统

机房预约系统

一、系统需求

1、系统简介

学校现有几个规格不同的机房,为了让大家在申请的时候不发生冲突,,让每个人都能提前知晓机房的使用情况从而有效地申请机位,现开发这套机房预约系统

2、身份简介

分别有三种身份使用该程序
  学生代表:申请使用机房
  教师:审核学生的预约申请
  管理员:给学生、教师创建账号

3、机房简介

机房总共有三间
  1 号机房 – 最大容量 20人
  2 号机房 – 最多容量 50 人
  3 号机房 – 最多容量 100 人

4、申请简介

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

5、系统需求

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

6、创建文件

创建一个机房预约系统的项目,同时创建一个 机房预约系统.cpp 文件作为主要运行文件

二 、创建主菜单

功能描述:
  设计主菜单,与用户进行交互

1、菜单实现&接口搭建

在主函数 main 中添加菜单提示,代码如下

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

三、退出功能实现

在 main() 函数分支选项中,添加退出程序功能

cout << "欢迎下一次使用" << endl;
system("pause");
return 0;
break;

四、创建身份类

1、身份基类

在整个系统中,有三种身份,分别为:学生代表、老师以及管理员
三种身份有其共性也有其特性,因此,我们可以将三种身份抽象出一个身份基类 identity
在头文件中创建 identity.h 文件

identity.h 中添加如下代码

#pragma once
#include<iostream>
using namespace std;

class Identify {
   
public:
	virtual void showMenu() = 0;

	string m_Name;
	string m_Pwd;
};

2、学生类

2.1功能分析

学生类主要功能是可以通过类中成员函数,实现预约实验室操作
学生类中主要功能有
  提示学生操作的菜单界面
  申请预约
  查看自身预约
  查看所有预约
  取消预约

2.2类的创建

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

student.h 中

#pragma once
#include<iostream>
using namespace std;
#include"Identify.h"
#include"computerRoom.h"
#include<vector>
#include"globalFile.h"
#include"orderFile.h"

class Student:public Identify {
   
public:
	Student();

	Student(int id, string name, string pwd);

	virtual void showMenu();

	void applyOrder();

	void showMyOrder();

	void showAllOrdder();

	void cancleOrdedr();

	int m_Id;

	vector<ComputerRoom>vCom;
};

student.cpp

#include"student.h"
#include<fstream>

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 c;
	while (ifs >> c.m_ComId && ifs >> c.m_MaxNum)
	{
   
		vCom.push_back(c);
	}

	ifs.close();
}

void Student::showMenu()
{
   
	cout << "欢迎学生代表:" << this->m_Name << "登陆" << endl;
	cout << "-----------------------------------" << endl;
	cout << "------------1、申请预约------------" << endl;
	cout << "----------2、查看我的预约----------" << endl;
	cout << "----------3、查看所有预约----------" << endl;
	cout << "------------4、取消预约------------" << endl;
	cout << "------------0、注销登陆------------" << 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 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 << "date:" << date << " ";
	ofs << "interval:" << interval << " ";
	ofs << "stuId:" << this->m_Id << " ";
	ofs << "stuName:" << this->m_Name << " ";
	ofs << "roomId:" << room << " ";
	ofs << "status" << 1 << endl;//默认待审核状态为1

	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转成char*,再用atoi给他转为c风格的int
		if (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_Id)
		{
   
			//如果遍历出来的id和自身id相同,说明遍历出来的是自身的信息
			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 += "预约成功";
			}
			else if (of.m_orderData[i]["status"] == "-1")
			{
   
				status += "预约失败,审核未通过";
			}
			else
			{
   
				status += "预约已取消";
			}
			cout << status << endl;
		}
	}
	system("pause");
	system("cls");
}

void Student::showAllOrdder()
{
   
	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]["roomId"];

		string status = "状态:";//0取消预约1审核中2已预约-1预约失败
		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::cancleOrdedr()
{
   
	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_Id)
		{
   
			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代表返回" << 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");
}

3、老师类

3.1功能分析

教师主要功能是查看学生的预约,并进行审核
教师类中主要功能有:
  显示教师操作的菜单界面
  查看所有预约
  审核预约

3.2类的创建

在头文件以及源文件中创建 teacher.h 和 teacher.cpp 文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值