C++【机房预约系统】源代码+详细注释

使用工具:visual studio

目录

​编辑

头文件(7个)

1.computerRoom.h

2.globalFile.h

3.identity.h

4.manager.h

5.orderFile.h

6.student.h

7.teacher.h

源文件(5个)

1.manager.cpp

2.orderFile.cpp

3.student.cpp

4.teacher.cpp

5.机房预约系统.cpp

在新项目下创建以下文件:

头文件(7个)

1.computerRoom.h

#pragma once//防止头文件重复包含
#include<iostream>//标准io流
using namespace std;//使用标准命名空间

class ComputerRoom//机房类
{
public:
	//以下是机房的两条属性
	int m_ComId;//机房编号
	int m_MaxNum;//机房最大容量
};

2.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"//预约信息文件

3.identity.h

#pragma once//防止头文件重复包含
#include<iostream>//标准io流
using namespace std;//使用标准命名空间

/*在整个系统中,有三种身份:学生代表,教师,管理员
三种身份有其共性,也有特性
因此我们可以将3种身份抽象出共性
所以创建身份的基类*/

//创建身份的基类
//身份抽象类
class Identity//三种身份都有用户名和密码的属性就可以抽象出来了
{
public:
	virtual void operMenu() = 0;//纯虚函数---操作子菜单

	string m_Name;//用户名
	string m_Pwd;//登录密码
};

4.manager.h

#pragma once//防止头文件重复包含
#include<iostream>//标准io流
using namespace std;//使用标准命名空间
#include"identity.h"//使用了库中的字符串处理函数
#include<string>//使用了库中的字符串处理函数
#include<fstream>//文件输入输出流
#include"globalFile.h"//包含存储预约信息的头文件
#include<vector>//包含容器
#include"student.h"//包含学生头文件
#include"teacher.h"//包含教师头文件
#include<algorithm>//使用了algorithm库find函数
#include"computerRoom.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();//初始化容器

	void initComputerRoom();//初始化机房信息

	bool checkRepeat(int id, int type);//检测重复-参数:学号或职工号,身份类型

	vector<Student>vStu;//存放学生信息的容器

	vector<Teacher>vTea;//存放老师信息的容器

	vector<ComputerRoom>vCom;//存放机房信息的容器
};

5.orderFile.h

#pragma once//防止头文件重复包含
#include<iostream>//标准io流
using namespace std;//使用标准命名空间
#include"globalFile.h"//包含存储预约信息的头文件
#include<fstream>//文件输入输出流
#include<map>//C++ maps是一种关联式容器,包含“关键字/值”对
#include<string>//使用了库中的字符串处理函数

//一个管理文件信息的类,会把所有文件中的信息读到手,并进行维护它
//显示预约记录时,需要从文件中获取到所有记录,用来显示,创建预约的了来管理记录以及更新
//创建orderfile.h以及orderfile.cpp

class OrderFile//
{
public://
	OrderFile();//构造函数

	void updateOrder();//更新预约记录函数

	int m_Size;//预约的条数

	//key:第几条预约信息,value:当前这条预约的详细内容,value具体记录键值对信息
	map<int, map<string, string>>m_OrderData;//记录所有预约的容器
	//创建map嵌套map这么一个容器,
};

6.student.h

#pragma once//防止头文件重复包含
#include<iostream>//标准io流
#include<cstdlib>//可以防止 system不明确
using namespace std;//使用标准命名空间
#include"identity.h"//使用了库中的字符串处理函数
#include<string>//使用了库中的字符串处理函数
#include<vector>//包含容器
#include"computerRoom.h"//包含机房头文件
#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();//取消预约

	void initComputerRoom();//初始化机房信息

	int m_Id;//学号

	vector<ComputerRoom>vCom;//存放机房信息的容器
};

7.teacher.h

#pragma once//防止头文件重复包含
#include<iostream>//标准io流
using namespace std;//使用标准命名空间
#include"identity.h"//使用了库中的字符串处理函数
#include<string>//使用了库中的字符串处理函数
#include<fstream>//文件输入输出流
#include"globalFile.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 validOrder();//审核预约

	int m_EmpId;//职工编号
};

源文件(5个)

1.manager.cpp

#include"manager.h"//包含manager头文件
//默认构造
Manager::Manager()//
{

}

//有参构造  参数:姓名、密码
Manager::Manager(string name, string pwd)
//
{
	//以下两行代码初始化管理员信息
	this->m_Name = name;//姓名
	this->m_Pwd = pwd;//密码

	//以下一行代码初始化容器,获取文件中学生、老师的信息
	this->initVector();

	//以下一行代码初始化机房信息,转到下面查看机房信息函数initComputerRoom()中 去定义
	this->initComputerRoom();
}

//菜单界面
void Manager::operMenu()//管理员子菜单
{
	cout << "欢迎管理员 " << this->m_Name << " 登录!" << endl;//
	cout << "\t---------------------------------" << endl;
	cout << "\t|\t 1-添加账号信息\t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 2-查看账号信息\t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 3-查看机房信息\t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 4-清空预约信息\t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 其它--注销登录\t\t|" << endl;
	cout << "\t---------------------------------" << endl;
	cout << "请输入您的选择:" << endl;
}

//添加账号
void Manager::addPerson()//
{
	cout << "请选择您要添加的账号类型:" << endl;//
	cout << "1-添加学生" << endl;//
	cout << "2-添加教师" << endl;//

	string fileName;//
	string tip;//
	string errorTip;//重复的错误提示

	ofstream ofs;//读文件

	int select = 0;//用户的选择

	while (true)//提供选择
	{
		cin >> select;//接收

		if (select == 1)//添加学生
		{
			fileName = STUDENT_FILE;//写到student文件中
			tip = "请输入您要添加的学生学号:";//提示
			errorTip = "学号重复!请重新输入:";//
			break;
		}
		else if (select == 2)//添加教师
		{
			fileName = TEACHER_FILE;//写到teacher文件中
			tip = "请输入您要添加的教师编号:";//提示
			errorTip = "职工编号重复!请重新输入:";//
			break;
		}
		else//
		{
			cout << "您的输入有误!请重新输入:" << endl;//
		}
	}
	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);// 调用名为checkRepeat的函数,传入id和select作为参数,并将返回值赋给变量ret。checkRepeat函数的作用是检查id和select是否有重复的值。
		if (ret)// 判断变量ret的值是否为真(非零),如果为真,则执行下面的代码块。
		{
			cout << errorTip << endl;//将变量errorTip的值输出到标准输出流
		}
		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 << "\t姓名:" << s.m_Name << "\t密码:" << s.m_Pwd << endl;
	//
}

//显示教师信息
void printTeacher(Teacher& t)//
{
	cout << "职工编号:" << t.m_EmpId << "\t姓名:" << t.m_Name << "\t密码:" << t.m_Pwd << endl;
	//
}

//查看账号
void Manager::showPerson()//
{
	cout << "请选择您要查看的信息类型:" << endl;//
	cout << "1-查看所有学生信息" << endl;//
	cout << "2-查看所有教师信息" << endl;//

	int select = 0;//

	while (true)//提供选项
	{
		cin >> select;//
		if (select == 1)//查看学生信息
		{
			cout << "所有学生信息如下:" << endl;//

			for_each(vStu.begin(), vStu.end(), printStudent);//

			break;
		}
		else if (select == 2)//查看老师信息
		{
			cout << "所有教师信息如下:" << endl;//

			for_each(vTea.begin(), vTea.end(), printTeacher);//

			break;
		}
		else//
		{
			cout << "您的输入有误!请重新输入:" << endl;//
		}
	}
	system("pause");//按任意键返回
	system("cls");//清屏
}

//查看机房信息
void Manager::showComputer()
{
	cout << "所有机房信息如下:" << endl;
	for (vector<ComputerRoom>::iterator it = vCom.begin(); it != vCom.end(); it++)
		//用for循环结构,将vcomuputer这个容器中的内容,进行遍历输出
	{
		cout << "机房编号:" << it->m_ComId << "\t机房最大容量:" << it->m_MaxNum << endl;
		//遍历这个装信息的容器,输出容器里的内容,也就是输出文件里的内容
	}
	/*   名词解释:
		`vector<ComputerRoom > ::iterator`: 是一个容器,用于装`vector`容器中的元素。

		 `vCom.begin()`: 是一个`vector`容器的成员函数,返回指向容器第一个元素的容器。

		 `vCom.end()`: 是一个`vector`容器的成员函数,返回指向容器最后一个元素之后位置的容器。

		 `it- > m_ComId`: `it`通过箭头运算符(`- > `)访问`ComputerRoom`对象的成员变量`m_ComId`。

		 `it- > m_MaxNum`: `it`通过箭头运算符(`- > `)访问`ComputerRoom`对象的成员变量`m_MaxNum`。*/
	

	system("pause");//按任意键返回
	system("cls");//清屏
}

//清空预约信息
void Manager::clearFile()//封装了一个cleanFile的成员函数
{
	cout << "您确定要清空所有的预约信息吗?" << endl;//
	cout << "1-确定" << endl;//
	cout << "2-返回" << endl;//
	int select = 0;//
	while (true)//询问是否真的清空
	{
		cin >> select;//
		if (select == 1)//
		{
			ofstream ofs;//我们用oftream文件的输出流对象,打开这个文件
			ofs.open(ORDER_FILE, ios::trunc);//并且用trunc的方式打开
			//trunc这种方式打开的时候,如果文件存在,给他删干净,再从新创建,这样等于侧面把文件清空了
			ofs.close();//把这个文件对象关闭掉

			cout << "清空预约信息成功!" << endl;//
			break;
		}
		else if (select == 2)//
		{
			break;//
		}
		else//
		{
			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);//
	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();//
}

//检测重复-参数:学号或职工号,身份类型
bool Manager::checkRepeat(int id, int type)//定义了一个名为checkRepeat的成员函数,返回类型为bool,参数列表为int id和int type。该函数用于检查id是否在学生或老师的容器中重复出现。
{
	if (type == 1)//学生.判断type的值是否为1,如果是,则执行下面的代码块。该条件判断是根据type的值来确定要检查的容器类型。
	{
		for (vector<Student>::iterator it = vStu.begin(); it != vStu.end(); it++)//遍历名为vStu的vector容器中的元素,使用迭代器it进行迭代。vStu是存储学生对象的容器。
		{
			if (it->m_Id == id)//判断迭代器it指向的学生对象的m_Id成员变量是否等于id,如果是,则执行下面的代码块。
			{
				return true;//表示检查到重复。
			}
		}
	}
	else//老师
	{
		for (vector<Teacher>::iterator it = vTea.begin(); it != vTea.end(); it++)//遍历名为vTea的vector容器中的元素,使用迭代器it进行迭代。vTea是存储老师对象的容器。
		{
			if (it->m_EmpId == id)//判断迭代器it指向的老师对象的m_EmpId成员变量是否等于id,如果是,则执行下面的代码块。
			{
				return true;//表示检查到重复。
			}
		}
	}
	return false;//如果以上条件都不满足,则返回false,表示没有检查到重复。
}

//初始化机房信息
void Manager::initComputerRoom()
//已经在Manager管理类下,添加了机房的容器,用于保存机房信息
//在此Manager有参构造函数中,追加如下代码,初始化机房信息
{
	//以下代码意为:获取机房信息

	ifstream ifs;//通过一个文件流对象,读取对象
	ifs.open(COMPUTER_FILE, ios::in);//读文件,利用open并且通过ios::in的方式,把COMPUTER_FILE中的信息拿到手

	ComputerRoom c;//通过ComputerRoom c,准备这么一个对象

	while (ifs >> c.m_ComId && ifs >> c.m_MaxNum)//通过while循环,把文件中的对象都读到手,拿到机房的id号和机房的最大的容量号
	{
		vCom.push_back(c);//利用push_back尾插法,把读到的对象放入到这个vCom.push_back(c)容器中
	}
	//以上六行代码,通过循环,已经把机房信息文件中的内容全部放到了容器中

	cout << "当前机房数量为:" << vCom.size() << endl;//计算并打印机房的数量
	ifs.close();//关闭文件
	//以上九行代码也可以封装为一个函数,但是这里没有封装,因为“查看机房信息”这个操作在此系统中只用一次
	//而且机房的规格是不变的,因此在这里没有封装的必要性
	//如果学校要加入机房的话,便于日后维护,那么可以封装成一个函数
}

2.orderFile.cpp

#include"orderFile.h"//包含orderFile头文件


//构造函数
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;//初始化预约的条数,用一个变量保存预约个数,默认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(":");//date,利用find找到这个:,利用find,把他的可以,value取出来,并且放到一个map容器中把小的map容器都分割好之后
		//string容器中的成员函数,查找,关键字符:,返回一个关键位置position
		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(":");//interval
		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(":");//stuId
		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(":");//stuName
		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(":");//roomId
		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(":");//status
		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 (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()//`void OrderFile::updateOrder()` 是一个成员函数,用于更新订单数据到文件中。
{
	if (this->m_Size == 0)//预约记录为0,就不更新
	{
		return;
	}

	ofstream ofs(ORDER_FILE, ios::out | ios::trunc);//out方式写文件,trunc方式写新文件,等于都删了从新写入
	for (int i = 0; i < this->m_Size; i++)//按照刚才最大的m容器中的所有数据,都拿到手,i是第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();//关闭文件
}





#include"orderFile.h"
//构造函数
OrderFile::OrderFile()
{
	ifstream ifs; //创建一个输入文件流对象
	ifs.open(ORDER_FILE, ios::in); //打开订单文件,以只读方式打开

	string date; //订单日期
	string interval; //预约时间段
	string stuId; //学生ID
	string stuName; //学生姓名
	string roomId; //预约的机房号
	string status; //预约状态

	this->m_Size = 0; //初始化订单数量为0

	while (ifs >> date && ifs >> interval && ifs >> stuId && ifs >> stuName && ifs >> roomId && ifs >> status)
		//从文件中逐行读取订单信息,直到读取完毕

	{
		string key; //键
		string value; //值

		map<string, string>m; //创建一个map对象,用于存储订单的信息

		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)); //将键值对插入到map中
		}
		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)); //将键值对插入到map中
		}
		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)); //将键值对插入到map中
		}
		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)); //将键值对插入到map中
		}
		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)); //将键值对插入到map中
		}
		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中
		}

		this->m_OrderData.insert(make_pair(this->m_Size, m)); //将订单数据插入到订单数据集合中
		this->m_Size++; //订单数量加1

	}
	ifs.close(); //关闭文件流

}

3.student.cpp

#include"student.h"//包含student头文件

//默认构造
Student::Student()//
{

}

//有参构造-参数:学号、姓名、密码
Student::Student(int id, string name, string pwd)//在有参构造里面,接收一下呆会儿我们创建出来的这个人的信息
{
	//初始化学生的三个属性
	this->m_Id = id;//学号
	this->m_Name = name;//姓名
	this->m_Pwd = pwd;//密码

	this->initComputerRoom();//初始化机房信息
}

//菜单界面
void Student::operMenu()//
{
	cout << "欢迎学生代表 " << this->m_Name << " 登录!" << endl;//
	cout << "\t---------------------------------" << endl;
	cout << "\t|\t 1-申 请 预 约 \t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 2-查看我的预约\t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 3-查看所有预约\t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 4-取消预约信息\t\t|" << endl;
	cout << "\t|\t               \t\t|" << endl;
	cout << "\t|\t 其它--注销登录\t\t|" << endl;
	cout << "\t---------------------------------" << endl;
	cout << "请输入您的选择:" << endl;
}

//申请预约
void Student::applyOrder()//
{
	int date = 0;//哪天
	int interval = 0;//时间段
	int room;//机房编号

	cout << "机房开放时间为周一至周五" << endl;
	cout << "请选择您要预约的时间:" << endl;
	cout << "\t1-周一" << endl;
	cout << "\t2-周二" << endl;
	cout << "\t3-周三" << endl;
	cout << "\t4-周四" << endl;
	cout << "\t5-周五" << endl;
	while (true)//提供选择
	{
		cin >> date;//
		if (date >= 1 && date <= 5)//
		{
			break;
		}
		cout << "您的输入有误!请重新输入:" << endl;//
	}
	cout << "请选择您要预约的时间段:" << endl;//
	cout << "1-上午" << endl;//
	cout << "2-下午" << endl;//
	while (true)//提供选择
	{
		cin >> interval;//具体时间段,上午or下午
		if (interval >= 1 && interval <= 2)//
		{
			break;
		}
		cout << "您的输入有误!请重新输入:" << endl;//

	}
	cout << "请选择您要预约的机房编号:" << endl;//
	for (int i = 0; i < vCom.size(); i++)//为了方便打印,循环3次
	{
		cout << vCom[i].m_ComId << "-" << vCom[i].m_ComId << "号机房,其容量为" << vCom[i].m_MaxNum << "人" << endl;
		//利用循环,打印出3种机房的类型
	}
	while (true)//提供选择
	{
		cin >> room;//
		if (room >= 1 && room <= 3)//
		{
			break;
		}
		cout << "您的输入有误!请重新输入:" << endl;//
	}
	cout << "预约成功!正在审核中!" << endl;//
	
	ofstream ofs;//以上输入的所有内容要写入文件中,进行保存
	ofs.open(ORDER_FILE, ios::app);//利用ofstream写文件,把输入到的信息(申请预约信息),存入到order这个文件中,这个文件用来记录预约信息
	//以下是写入文件的内容
	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()//成员函数showMyOrder
{
	OrderFile of;//拿到这个文件中所有的信息,利用刚才封装好的orderfile类,创建一个of对象
	if (of.m_Size == 0)//然后这个对象判断一下,of中的size=0说明没有记录
	{
		cout << "无预约记录!" << endl;//
		system("pause");//按任意键返回
		system("cls");//清屏
		return;
	}
	int index = 0;//
	//如果有记录,把自身的信息显示
	for (int i = 0; i < of.m_Size; i++)//遍历一下of对象的容器size
	{
		//string => int:    string 利用 .c_str() 转为C语言风格的字符串 const char *
		//然后:  atoi( const char * ) => int
		if (this->m_Id == atoi(of.m_OrderData[i]["stuId"].c_str()))//如果自己输入的学号和遍历容器后的学号一样,(最大的容器中的第i条中的学号)
		{
			index += 1;//
			cout << index << "、";//  
			string mydate;//
			if (of.m_OrderData[i]["date"] == "1")//
			{
				mydate = "周一";//
			}
			else if (of.m_OrderData[i]["date"] == "2")//
			{
				mydate = "周二";//
			}
			else if (of.m_OrderData[i]["date"] == "3")//
			{
				mydate = "周三";//
			}
			else if (of.m_OrderData[i]["date"] == "4")//
			{
				mydate = "周四";//
			}
			else
			{
				mydate = "周五";//
			}
			cout << "预约日期:" << mydate;//
			cout << "\t时间段:" << (of.m_OrderData[i]["interval"] == "1" ? "上午" : "下午");//
			cout << "\t机房编号:" << of.m_OrderData[i]["roomId"];//
			string status = "\t状态:";//
			//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 << "、";//

		string mydate;//
		if (of.m_OrderData[i]["date"] == "1")//
		{
			mydate = "周一";//
		}
		else if (of.m_OrderData[i]["date"] == "2")//
		{
			mydate = "周二";//
		}
		else if (of.m_OrderData[i]["date"] == "3")//
		{
			mydate = "周三";//
		}
		else if (of.m_OrderData[i]["date"] == "4")//
		{
			mydate = "周四";//
		}
		else//
		{
			mydate = "周五";//
		}
		cout << "预约日期:" << mydate;//
		cout << "\t时间段:" << (of.m_OrderData[i]["interval"] == "1" ? "上午" : "下午");//
		cout << "\t学号:" << of.m_OrderData[i]["stuId"];//
		cout << "\t姓名:" << of.m_OrderData[i]["stuName"];//
		cout << "\t机房编号:" << of.m_OrderData[i]["roomId"];//
		string status = "\t状态:";//
		//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;//存放大map容器的下标
	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++ << "、";//
				string mydate;//
				if (of.m_OrderData[i]["date"] == "1")//
				{
					mydate = "周一";//
				}
				else if (of.m_OrderData[i]["date"] == "2")//
				{
					mydate = "周二";//
				}
				else if (of.m_OrderData[i]["date"] == "3")//
				{
					mydate = "周三";//
				}
				else if (of.m_OrderData[i]["date"] == "4")//
				{
					mydate = "周四";//
				}
				else//
				{
					mydate = "周五";//
				}
				cout << "预约日期:" << mydate;//
				cout << "\t时间段:" << (of.m_OrderData[i]["interval"] == "1" ? "上午" : "下午");//
				cout << "\t机房编号:" << of.m_OrderData[i]["roomId"];//
				string status = "\t状态:";//1:审核中   2:预约成功
				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");//清屏
}

//初始化机房信息
void Student::initComputerRoom()//和manager一样
{
	ifstream ifs;//读文件
	ifs.open(COMPUTER_FILE, ios::in);//读文件,通过open的方式,ios::in的方式打开文件,进行读取内容

	ComputerRoom c;//创建对象

	while (ifs >> c.m_ComId && ifs >> c.m_MaxNum)//从文件中,yongwhile循环,遍历获取机房的所有信息
	{
		vCom.push_back(c);//将读取到的信息放入这个容器中
	}
	//至此,vCom容器中保存了所有机房的信息
	ifs.close();//关闭文件
}

4.teacher.cpp

#include"teacher.h"//包含teacher头文件
//默认构造
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---------------------------------" << endl;//
	cout << "\t|\t 1-查看所有预约\t\t|" << endl;//
	cout << "\t|\t               \t\t|" << endl;//
	cout << "\t|\t 2-审 核 预  约\t\t|" << endl;//
	cout << "\t|\t               \t\t|" << endl;//
	cout << "\t|\t 其它--注销登录\t\t|" << endl;//
	cout << "\t---------------------------------" << endl;//
	cout << "请输入您的选择:" << endl;//
}
//查看所有预约
void Teacher::showAllOrder()//
{
	OrderFile of;//写文件
	if (of.m_Size == 0)//size计算文件的内容,如果文件里没东西
	{
		cout << "无预约记录!" << endl;//
		system("pause");//按任意键返回
		system("cls");//清屏
		return;
	}
	for (int i = 0; i < of.m_Size; i++)//i表示信息的条数,这个循环表示给文件中的信息排序,按顺序输出
	{
		cout << i + 1 << "、";//序号+顿号

		string mydate;//定义日期字符串
		if (of.m_OrderData[i]["date"] == "1")//如果读取文件中的日期为1,那么他选择的日期为周一
		{
			mydate = "周一";//
		}
		else if (of.m_OrderData[i]["date"] == "2")//
		{
			mydate = "周二";//
		}
		else if (of.m_OrderData[i]["date"] == "3")//
		{
			mydate = "周三";//
		}
		else if (of.m_OrderData[i]["date"] == "4")//
		{
			mydate = "周四";//
		}
		else//
		{
			mydate = "周五";//
		}
		cout << "预约日期:" << mydate;//日期
		cout << "\t时间段:" << (of.m_OrderData[i]["interval"] == "1" ? "上午" : "下午");//日期当天的时间段
		cout << "\t学号:" << of.m_OrderData[i]["stuId"];//学号
		cout << "\t姓名:" << of.m_OrderData[i]["stuName"];//姓名
		cout << "\t机房编号:" << of.m_OrderData[i]["roomId"];//选择的机房编号
		string status = "\t状态:";//预约状态
		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::showAllOrder(void)//定义了一个名为`showAllOrder`的成员函数,返回类型为`void`,没有参数。该函数用于查看所有的预约记录。
{
	OrderFile of;//创建一个名为`of`的`OrderFile`对象,用于读取预约记录的文件。
	if (of.m_Size == 0)//判断`of`对象的`m_Size`成员变量是否为0,如果是,则执行下面的代码块。该条件判断是判断是否有预约记录。
	{
		cout << "无预约记录!" << endl;//
		system("pause");//按任意键返回
		system("cls");//清屏
		return;
	}
	for (int i = 0; i < of.m_Size; i++)// 使用循环遍历预约记录。循环变量`i`从0开始,每次自增1,直到`of.m_Size`。
	{
		cout << i + 1 << "、";//输出预约记录的序号。

		string mydate;//定义一个名为`mydate`的字符串变量,用于表示预约日期。
		if (of.m_OrderData[i]["date"] == "1")//判断第`i`个预约记录中的"date"项的值是否为"1",如果是,则执行下面的代码块。该条件判断是根据预约记录中的日期编号确定日期。
		{
			mydate = "周一";//将`mydate`赋值为"周一"。
		}
		else if (of.m_OrderData[i]["date"] == "2")//
		{
			mydate = "周二";//
		}
		else if (of.m_OrderData[i]["date"] == "3")//
		{
			mydate = "周三";//
		}
		else if (of.m_OrderData[i]["date"] == "4")//
		{
			mydate = "周四";//
		}
		else//
		{
			mydate = "周五";//
		}
		cout << "预约日期:" << mydate;//输出预约日期。
		cout << "\t时间段:" << (of.m_OrderData[i]["interval"] == "1" ? "上午" : "下午");//输出预约的时间段。根据预约记录中的"interval"项的值判断是上午还是下午。
		cout << "\t学号:" << of.m_OrderData[i]["stuId"];//输出学生的学号。
		cout << "\t姓名:" << of.m_OrderData[i]["stuName"];//输出学生的姓名。
		cout << "\t机房编号:" << of.m_OrderData[i]["roomId"];//输出预约的机房编号。
		string status = "\t状态:";//定义一个名为`status`的字符串变量,用于表示预约的状态。
		if (of.m_OrderData[i]["status"] == "1")//判断第`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()//该函数用于审核预约记录
{
	OrderFile of;//创建一个名为of的OrderFile对象,用于读取预约记录的文件
	if (of.m_Size == 0)//判断of对象的m_Size成员变量是否为0,如果是,则执行下面的代码块。该条件判断是判断是否有预约记录。

	{
		cout << "无预约记录!" << endl;//
		system("pause");//按任意键返回
		system("cls");//清屏
		return;
	}

	vector<int>v;//创建一个名为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 << "、";//

			string mydate;//
			if (of.m_OrderData[i]["date"] == "1")//
			{
				mydate = "周一";//
			}
			else if (of.m_OrderData[i]["date"] == "2")//
			{
				mydate = "周二";//
			}
			else if (of.m_OrderData[i]["date"] == "3")//
			{
				mydate = "周三";//
			}
			else if (of.m_OrderData[i]["date"] == "4")//
			{
				mydate = "周四";//
			}
			else//
			{
				mydate = "周五";//
			}
			cout << "预约日期:" << mydate;//
			cout << "\t时间段:" << (of.m_OrderData[i]["interval"] == "1" ? "上午" : "下午");//
			cout << "\t学生学号:" << of.m_OrderData[i]["stuId"];//
			cout << "\t学生姓名:" << of.m_OrderData[i]["stuName"];//
			cout << "\t机房编号:" << of.m_OrderData[i]["roomId"];//
			string status = "\t状态:审核中";//
			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;//

				while (true)//
				{
					cin >> ret;//
					if (ret == 1)//审核通过
					{
						of.m_OrderData[v[select - 1]]["status"] = "2";//
						break;
					}
					else if (ret == 2)//审核不通过
					{
						of.m_OrderData[v[select - 1]]["status"] = "-1";//
						break;
					}
					cout << "您的输入有误!请重新输入:" << endl;//
				}

				of.updateOrder();//
				cout << "审核完毕!" << endl;//
				break;
			}
		}
		cout << "您的输入有误!请重新输入:" << endl;//
	}
	system("pause");//按任意键返回
	system("cls");//清屏
}

5.机房预约系统.cpp

#include<iostream>//标准io流
using namespace std;//使用标准命名空间
#include"identity.h"//包含Identity头文件
#include<fstream>//文件输入输出流
#include<string>//
#include"globalFile.h"//包含globalFile头文件
#include"student.h"//包含student头文件
#include"teacher.h"//包含teacher头文件
#include"manager.h"//包含manager头文件

//进入学生子菜单界面
void studentMenu(Identity*& student)
//通过父类Identity指针,用引用的方式传入student,调用公共的接口
//添加这个全局函数,在学生登录成功后,会调用学生的子菜单界面
{
	while (true)//提供选项
	{
		student->operMenu();//调用学生子菜单(利用多态,实现了这个函数,并且在子类中重写了父类的纯虚函数),意为先显示菜单,然后用指针转回去操作其他的接口123
		Student* stu = (Student*)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");//清屏
			break;
		}

	}
}

//教师子菜单
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->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)//添加账号
		{
			man->addPerson();//
		}
		else if (select == 2)//查看账号
		{
			man->showPerson();//
		}
		else if (select == 3)//查看机房信息
		{
			man->showComputer();//
		}
		else if (select == 4)//清空预约
		{
			man->clearFile();//
		}
		else//注销登录
		{
			delete manager;//
			cout << "注销登录成功!" << endl;//
			system("pause");//按任意键返回
			system("cls");//清屏
			return;
		}
	}
}

/*********************************************登录功能*************************************************/
void LoginIn(string fileName, int type)
//无返回值,名为LoginIn的 登录函数
//括号里的参数:fileName→操作的文件名,type→登录人员的身份类型
{
	Identity* person = NULL;//父类指针,用于指向子类的对象,设置初始值为空

	ifstream ifs;//读文件
	ifs.open(fileName, ios::in);//open,ios::in方式读文件

	if (!ifs.is_open())//如果读文件失败
	{
		cout << "文件不存在!" << endl;//
		ifs.close();//关闭文件
		return;
	}

	//接收用户的信息
	int id = 0;//
	string name;//
	string pwd;//

	if (type == 1)//判断身份类型-学生
	{
		cout << "请输入学号:" << endl;//
		cin >> id;//
	}
	else if (type == 2)//判断身份类型-教师
	{
		cout << "请输入职工号:" << endl;//
		cin >> id;//
	}
	cout << "请输入用户名:" << endl;//
	cin >> name;//
	cout << "请输入登录密码:" << endl;//
	cin >> pwd;//

	if (type == 1)//学生身份验证
	{
		int fId;//fId=fileId(文件学号) 从文件中读出的学号
		string fName;//fName=fileName(文件姓名)从文件中读出的姓名
		string fPwd;//fPwd=filePassword(文件密码)从文件中读出的密码

		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);//通过进入学生子菜单studentMenu函数中
				return;
			}
		}
	}
	else if (type == 2)//教师身份验证
	{
		int fId;//从文件中读出的职工编号
		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);//创建一个名为person的Manager对象指针,并传入姓名和密码参数
				managerMenu(person);//调用managerMenu函数,进入管理员子菜单
				return; //返回上一级菜单
			}
		}
	}
	cout << "您的输入有误!登录失败!" << endl;//
	system("pause");//按任意键返回
	system("cls");//清屏
	return;
}

//以下是主函数,用于创建主菜单,搭建接口
int main()
{
	int select = 0;//创建一个变量,用于接收用户的选择
	//然后进入一个无限的循环分支,用while循环来接收用户的选择
	//只要用户选的不是0退出,就会回到主菜单界面

	system("color FC");//产生亮白色
	system("color 70");//产生背景白色文字黑色

	while (true)//
	{
		//登录界面——主菜单
		cout << "\t\t\t\t|____________________________________|" << endl;
		cout << "\t\t\t\t|\t\t欢迎您来到哈信息机房预约系统!\t\t |" << endl;
		cout << "\t\t\t\t|____________________________________|" << endl;
		cout << "\t\t\t\t|\t\t     请选择您的身份:     \t\t |" << endl;//水平制表符不要动嗷
		cout << "\t\t\t\t|_______________________________________|" << endl;
		cout << "\t\t\t\t|\t\t\t1.学生 \t\t\t\t |" << endl;
		cout << "\t\t\t\t|\t\t\t2.教师 \t\t\t\t |" << endl;
		cout << "\t\t\t\t|\t\t\t3.管理员 \t\t\t |" << endl;
		cout << "\t\t\t\t|\t\t\t0.退出 \t\t\t\t |" << endl;
		cout << "\t\t\t\t|_____________________________________|" << endl;
		cout << "请输入您的选择:";

		cin >> select;//接收用户的选择

		switch (select)//根据用户的选择实现不同的接口
		{
		case 1://用户输入1,即选择学生身份
			LoginIn(STUDENT_FILE, 1);//学生登录函数
			break;
		case 2://用户输入2,即选择教师身份
			LoginIn(TEACHER_FILE, 2);//老师登录函数
			break;
		case 3://用户输入3,即选择管理员身份
			LoginIn(ADMIN_FILE, 3);//管理员登录函数
			break;
		case 0://用户输入0,即退出系统
			cout << "欢迎下次使用!" << endl;//退出系统
			system("pause");//按任意键返回到菜单界面
			return 0;//
			break;
		default://若用户输入的不是1,2,3,0
			cout << "您的输入有误!请重新选择!" << endl;//
			system("pause");//按任意键返回
			system("cls");//清屏
			break;
		}
	}

	system("pause");//按任意键返回
	return 0;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
【项目说明】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载食用体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源介绍】 基于C++实现的学校机房预约系统源码+项目说明+超详细注释+exe可执行程序(本科课设).zip 编译运行环境:VS2019 IDE、Window10 (SRC文件夹中是源代码,Release文件夹中是编译好的可以直接运行的可执行文件) 主要涉及的技术点:map容器、vector容器、文件读写操作、C++中封装、继承、多态的特性 此项目主要是依据C++的相关知识来制作的, 主要包含了C++的综合知识、面向对象的编程思想、 泛型的编程思想、STL中容器和算法的使用、文件的读写等。 系统介绍 身份简介 本系统分别有三种身份使用该软件: 1.学生:主要申请使用机房 2.教师:主要审核学生的预约申请 3.管理员:给学生、管理员来创建账号 机房简介 机房一共有三个 1.一号机房:最大容量50人 2.二号机房:最大容量50人 3.三号机房:最大容量100人 申请简介: 申请的预约记录是每周由管理员来负责清空的 学生可以预约未来一周之内的机房的使用,预约的日期为每周的周一到周五,预约时需要选择预约时间段(上午、下午) 教师可以审核学生的预约信息,可以根据具体情况来审核预约通过或不通过 使用介绍 首先进入系统的登录界面,可选的登录的身份有: 1.学生 2.老师 3.管理员 每个身份都需要进行验证,验证通过之后才可以进入子菜单 学生身份需要输入:学号、姓名、登录密码 老师身份需要输入:职工号、姓名、登录密码 管理员身份需要输入:管理员姓名、登录密码 学生具体的功能 1.申请预约 2.查看自身的预约 3.查看所有的预约 4.取消预约 5.退出登录 教师的具体功能: 1.查看学生的所有预约 2.审核学生的预约信息 3.退出登录 管理员的具体功能: 1.添加账号 2.查看所有账号 3.查看机房信息 4.清空预约记录 5.退出登录 软件的运行效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bingo冰冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值