IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C++项目——机房预约系统】 -> 正文阅读

[C++知识库]【C++项目——机房预约系统】

功能图解

在这里插入图片描述

代码区

机房预约系统.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include "Identity.h"
#include <fstream>
#include <string>
#include "student.h"
#include "teacher.h"
#include "caretaker.h"
#include "globalFile.h"
using namespace std;

void caretakerMenu(Identity * &caretaker)//管理员子菜单
{
	while (true)
	{
		//管理员菜单
		caretaker->operMenu();

		//将父类指针强转为子类指针来调用caretaker中特有接口
		Caretaker* care = (Caretaker*)caretaker;
		int select = 0;

		cin >> select;

		if (select == 1)//添加账号
		{
			cout << "添加账号" << endl;
			care->addPerson();
		}
		else if (select == 2)//查看账号
		{
			cout << "查看账号" << endl;
			care->showPerson();
		}
		else if (select == 3)//查看机房
		{
			cout << "查看机房" << endl;
			care->showComputer();
		}
		else if (select == 4)//清空预约
		{
			cout << "清空预约" << endl;
			care->clearFile();
		}
		else
		{
			delete caretaker;
			cout << "注销成功" << endl;
			system("pause");
			system("cls");
			return;
		}
	}
}

void studentMenu(Identity * &student)//学生子菜单
{
	while (true)
	{
		//管理员菜单
		student->operMenu();

		Student * stu = (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 if (select == 0)//注销登录
		{
			delete student;
			system("pause");
			system("cls");
			return;
		}
	}
}

//进入教师子菜单界面
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->valiOrder();
		}
		else
		{
			delete teacher;
			cout <<"注销成功" << endl;
			system("pause");
			system("cls");
			return;
		}
	}
}

//登录功能       操作文件名    操作身份类型
void Login(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 (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;
		string fName;
		string fPwd;

		while (ifs >> fId && ifs >> fName && ifs >> fPwd)
		{
			if (id == fId&&name == fName&&pwd == fPwd)
			{
				cout << "学生验证登录成功!" << endl;
				system("pause");
				system("cls");
				person = new Student(id, name, pwd);
				//进入学生子菜单界面
				studentMenu(person);
				return;
			}
		}
	}
	else if (type == 2)
	{
		//教师身份验证
		int fId;
		string fName;
		string fPwd;
		while (ifs >> fId&&ifs >> fName&&ifs >> fPwd)
		{
			if (id == fId&&name == fName&&pwd == fPwd)
			{
				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 (name == fName&&pwd == fPwd)
			{
				cout << "管理员成功登录" << endl;
				system("pause");
				system("cls");
				person = new Caretaker(name, pwd);
				//进入管理员子菜单界面
				caretakerMenu(person);
				return;
			}
		}
	}

	cout << "验证登录失败!" << endl;
	system("pause");
	system("cls");
}

int main()
{
	while (true)
	{
		cout << "-----------------欢迎使用机房预约系统------------------" << endl;
		cout << endl << "请输入你的身份:" << endl;
		cout << "\t\t——————————————————" << endl;
		cout << "\t\t|                                 |" << endl;
		cout << "\t\t|             1.学生或职工        |" << endl;
		cout << "\t\t|                                 |" << endl;
		cout << "\t\t|             2.机房教师          |" << endl;
		cout << "\t\t|                                 |" << endl;
		cout << "\t\t|             3.管理员            |" << endl;
		cout << "\t\t|                                 |" << endl;
		cout << "\t\t|             4.退出              |" << endl;
		cout << "\t\t|                                 |" << endl;
		cout << "\t\t——————————————————" << endl;
		cout << "请输入你的选择:";
		int select = 0;
		cin >> select;//接收用户选择

		switch (select)
		{
		case 1://学生
			Login(STUDENT_FILE, 1);
			break;
		case 2://教师
			Login(TEACHER_FILE, 2);
			break;
		case 3://管理员
			Login(CARETAKER_FILE, 3);
			break;
		case 4://退出系统
			cout << "欢迎下次使用!" << endl;
			system("pause");
			return 0;
			break;
		default:
			cout << "输入有误请重新选择!" << endl;
			system("pause");
			system("cls");
			break;
		}
	}
	system("pause");
	return 0;
}

caretaker.h

#pragma once
#include "Identity.h"
#include <iostream>
#include <fstream>
#include <vector>
#include "student.h"
#include "teacher.h"
#include "globalFile.h"
#include "computerRoom.h"
#include <algorithm>
using namespace std;

class Caretaker :public Identity
{
public:
	//默认构造
	Caretaker();

	//有参构造
	Caretaker(string name, string pwd);

	//选择菜单
	virtual void operMenu();

	//添加账号
	void addPerson();

	//查看账号
	void showPerson();

	//查看机房信息
	void showComputer();

	//清空预约记录
	void clearFile();

	//初始化容器
	void initVector();

	//检测重复
	bool checkRepeat(int id,int type);

	//学生容器
	vector<Student>vStu;

	//教师容器
	vector<Teacher>vTea;

	//机房容器
	vector<ComputerRoom>vCom;
};

computerRoom.h

#pragma once
#include<iostream>
using namespace std;
//机房类
class ComputerRoom
{
public:
	int m_ComId;//机房编号

	int m_MaxNum;//机房最大容量
};

golbalFile.h

#pragma once

//学生文件
#define STUDENT_FILE    "student.txt"

//教师文件 
#define TEACHER_FILE    "teacher.txt"

//管理员文件
#define CARETAKER_FILE  "caretaker.txt"

//机房信息文件
#define COMPUTER_FILE   "computerroom.txt"

//订单信息文件
#define ORDER_FILE      "order.txt" 

Identity.h

//身份的抽象基类创建
#pragma once
#include <iostream>
#include <string>
using namespace std;

//身份类创建
class Identity
{
public:

	//操作菜单
	virtual void operMenu() = 0;//多态

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

orderFile.h

#pragma
#include <iostream>
#include <fstream>
#include <algorithm>
#include "Identity.h"
using namespace std;
#include <map>
#include "globalFile.h"

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

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

	//记录容器 key-----记录的条数  value-----键值对应具体记录的信息
	map<int, map<string, string>> m_orderData;

    //预约记录条数
	int m_Size;
};

student.h

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

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

	//机房容器
	vector<ComputerRoom> vCom;
};

teacher.h

#pragma once
#include <iostream>
#include<string>
#include<vector>
#include "Identity.h"
using namespace std;

class Teacher :public Identity
{
public:
	//默认构造
	Teacher();

	//有参构造
	Teacher(int empid, string name, string pwd);

	//菜单界面
	virtual void operMenu();

	//显示所有学生的预约功能
	void showAllOrder();

	//审批预约功能
	void valiOrder();

	int m_EmpId;//教师编号
};

caretaker.cpp

#define _CRT_SECURE_NO_WARNINGS 1
# include "caretaker.h"

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

}

//有参构造
Caretaker::Caretaker(string name, string pwd)
{
	this->m_Name = name;
	this->m_Pwd = pwd;

	//初始化容器
	this->initVector();

	//获取机房信息
	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();
}

//菜单界面
void Caretaker::operMenu()
{
	cout << "欢迎管理员:" << this->m_Name << "登录" << endl;
	cout << "\t\t————————————————————"<<endl;
	cout << "\t\t|                                       |" << endl; 
	cout << "\t\t|            1.添加账号                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            2.查看账号                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            3.查看机房                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            4.清空预约                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            0.注销登录                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t————————————————————" << endl;
	cout << "请选择您的操作:" << endl;
}

//添加账号
void Caretaker::addPerson()
{
	cout << "请输入要添加账号的类型" << endl;
	cout << "1.添加学生" << endl;
	cout << "2.添加教师" << endl;

	string fileName;//操作文件名
	string tip;//提示ID号
	string errorTip;//重复错误提示
	ofstream ofs;

	while (true)
	{
		int select = 0;
		cin >> select;

		if (select == 1)
		{
			fileName = STUDENT_FILE;
			tip = "请输入学号: ";
			errorTip = "学号重复,请重新输入!";
		}
		else if (select == 2)
		{
			fileName = TEACHER_FILE;
			tip = "请输入教职工编号:";
			errorTip = "职工号重复,请重新输入!";
		}
		else
		{
			system("pause");
			system("cls");
			break;
		}

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

//清空预约功能
void Caretaker::clearFile()
{
	//输出流方式               trunc方式打开,如果文件存在,删除干净后重新创建
	ofstream ofs(COMPUTER_FILE, ios::trunc);
	ofs.close();

	cout << " 清空成功!" << endl;
	system("pause");
	system("cls");
}

//初始化容器
void Caretaker::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 Caretaker::checkRepeat(int id, int type)
{
	if (type == 1)
	{
		//检测学生
		for (vector<Student>::iterator it = vStu.begin(); it != vStu.end(); it++)
		{
			if (id == it->m_ID)
			{
				return true;
			}
		}
	}
	else
	{
		//检测老师
		for (vector<Teacher>::iterator it = vTea.begin(); it != vTea.end(); it++)
		{
			if (id == it->m_EmpId)
			{
				return true;
			}
		}
		return false;
	}
}
orderFile.cpp

```cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include "orderFile.h"

OrderFile::OrderFile()
{
	ifstream ifs;
	ifs.open(ORDER_FILE, ios::in);

	string data;  //日期
	string time;  //时间段
	string stuId; //学生编号
	string stuName; //学生姓名
	string roomId; //机房编号
	string status; //预约状态


	this->m_Size = 0;//记录预约个数

	while (ifs >> data&&ifs >> time&&ifs >> stuId&&ifs >> stuName&&ifs >> roomId&&ifs >> status)
	{
		string key;
		string value;
		map<string, string>m;

		int pos = data.find(":");
		if (pos != -1)
		{
			key = data.substr(0, pos);
			value = data.substr(pos + 1, data.size() - pos);
			m.insert(make_pair(key, value));
		}

		pos = time.find(":");
		if (pos != -1)
		{
			key = time.substr(0, pos);
			value = time.substr(pos + 1, time.size() - pos);
			m.insert(make_pair(key, value));
		}

		pos = stuId.find(":");
		if (pos != -1)
		{
			key = stuId.substr(0, pos);
			value = stuId.substr(pos + 1, stuId.size() - pos);
			m.insert(make_pair(key, value));
		}

		pos = stuName.find(":");
		if (pos != -1)
		{
			key = stuName.substr(0, pos);
			value = stuName.substr(pos + 1, stuName.size() - pos);
			m.insert(make_pair(key, value));
		}

		pos = roomId.find(":");
		if (pos != -1)
		{
			key = roomId.substr(0, pos);
			value = roomId.substr(pos + 1, roomId.size() - pos);
			m.insert(make_pair(key, value));
		}

		pos = status.find(":");
		if (pos != -1)
		{
			key = status.substr(0, pos);
			value = status.substr(pos + 1, status.size() - pos);
			m.insert(make_pair(key, value));
		}

		this->m_orderData.insert(make_pair(this->m_Size, m));
		this->m_Size++;
	}
}


void OrderFile::updateOrder()//更新预约记录
{
	if (this->m_Size == 0)
	{
		return;
	}

	ofstream ofs(ORDER_FILE, ios::out | ios::trunc);
	for (int i = 0; i < m_Size; i++)
	{
		ofs << "date:" << this->m_orderData[i]["data"] << " ";
		ofs << "time:" << this->m_orderData[i]["time"] << " ";
		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"] << " ";
	}
	ofs.close();
}
student.cpp

```cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include "student.h"
# include "orderFile.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 (ifs >> com.m_ComId&&ifs >> com.m_MaxNum)
	{
		vCom.push_back(com);
	}
	ifs.close();
}

//菜单界面
void Student::operMenu()
{
	cout << "欢迎学生: " << this->m_Name << "--登录" << endl;
	cout << "\t\t————————————————————" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            1.申请预约                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            2.查看我的预约             |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            3.查看所有预约             |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            4.取消预约                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t|            0.注销登录                 |" << endl;
	cout << "\t\t|                                       |" << endl;
	cout << "\t\t————————————————————" << endl;
	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 time = 0;//时间段
	int roomId = 0;//机房编号

	while (true)
	{
		cin >> date;
		if (date >= 1 && date <= 5)
		{
			break;
		}
		cout << "请输入正确的时间段!" << endl;
	}

	cout << "请选择需要预约的时间段:" << endl;
	cout << "1.上午" << endl;
	cout << "2.下午" << endl;

	while (true)
	{
		cin >> time;
		if (time >= 1 && time <= 2)
		{
			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 >> roomId;
		if (roomId >= 1 && roomId <= 3)
		{
			break;
		}
		cout << "请输入正确的机房编号!" << endl;
	}
	cout << "预约成功,审核中!" << endl;

	ofstream ofs;
	ofs.open(ORDER_FILE, ios::app);

	ofs << "date:" << date << " ";
	ofs << "time:" << time << " ";
	ofs << "stuId:" << this->m_ID << " ";
	ofs << "stuName:" << this->m_Name << " ";
	ofs << "roomId:" << roomId << " ";
	ofs << " status:" << 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++)
	{
		if (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_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;
		}
	}
}

//显示所有预约
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 << ", ";
		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 = "状态:  ";//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::cancelOrder()
{
	OrderFile of;
	if (of.m_Size == 0)
	{
		cout << "无预约记录" << endl;
		system("pause");
		system("cls");
		return;
	}
	cout << "状态为审核中或预约成功的记录可以取消,请输入想取消的预约号" << endl;
	vector<int>v;
	int index = 1;
	for (int i = 0; i < of.m_Size; i++)
	{
		if (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_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 = "状态:  ";//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;
			}
		}
	}
	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;
	}
}

teacher.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include "teacher.h"
# include "orderFile.h"

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

}

//有参构造
Teacher::Teacher(int empid, string name, string pwd)
{
	this->m_EmpId = empid;
	this->m_Name = name;
	this->m_Pwd = pwd;
}

//菜单功能
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->valiOrder();
	}
	else
	{
		delete teacher;
		cout << "注销成功" << endl;
		system("pause");
		system("cls");
		return;
	}
  }
}

//菜单功能
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 << "\t\t----------------------------------\n";
}

//显示所有预约
void Teacher::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 << ", ";

		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 = "状态";//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 Teacher::valiOrder()
{
	OrderFile of;
	if (of.m_Size == 0)
	{
		cout << "无预约记录" << endl;
		system("pause");
		system("cls");
		return;
	}
	cout << "待审核预约如下:" << endl;

	vector<int>v;
	int index = 0;
	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 = "状态: ";
			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())
		{
			break;
		}
		else
		{
			cout << "请输入审核结果:" << endl;
			cout << "1.  通过" << endl;
			cout << "2.  不通过" << endl;
			cin >> ret;

			if (ret == 1)
			{
				of.m_orderData[v[select - 1]]["status"] = "2";
			}
			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");
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:32:07  更:2021-07-23 10:33:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 11:42:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码