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++】|黑马程序员 | 项目实战 | 机房预约系统 (未完)

提示:本文不是老师上课的讲义,是自己做该项目的记录

1 机房预约系统需求

1.1 系统简介

学校有几个规格不同的机房, 由于使用时经常出现“撞车”现象,现开发一套机房预约系统,解决这一问题

1.2 身份简介

分别有三种身份使用该程序

  • 学生代表: 申请使用机房
  • 教师: 审核学生的预约申请
  • 管理员: 给学生、教师创建账号

1.3 机房简介

机房总共有三件

  • 1号机房 — 最大容量20人
  • 2号机房 — 最大容量50人
  • 3号机房 — 最大容量100人

1.4 申请简介

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

1.5 系统具体需求

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

2 分析

分析上文的需求,我们至少需要创建一个身份父类,由学生、教师、管理员三个子类继承。
需要一个预约系统.cpp,来实现各个菜单
机房信息需要一个容器来存储

参照老师上次教的职工管理系统,先把菜单和退出功能弄出来,再弄身份类,再加功能

目前还是个未成品,有时间再接着做吧

3 代码

3.1 机房预约系统.cpp

#include <iostream>
using namespace std;
#include "menu.h"
#include <string>
#include "person.h"
#include "student.h"
#include <vector>
#include "computerRoom.h"
#include "teacher.h"
#include <map>
#include "manager.h"
//初始化机房数据
void creatCr(vector< ComputerRoom>& v) {
	ComputerRoom cr = ComputerRoom("1号机房", 20,20);
	v.push_back(cr);
	cr = ComputerRoom("2号机房", 50,50);
	v.push_back(cr);
	cr = ComputerRoom("3号机房", 100,100);
	v.push_back(cr);
}
//查看预约信息以及预约状态
void doCheck(vector< ComputerRoom> v) {
	for (vector< ComputerRoom>::iterator it = v.begin(); it != v.end(); it++) {
		(*it).check();
	}
}

//查看待审核预约
void showUnverify(multimap<int, Student> map) {
	cout << "待审核的预约如下:" << endl;
	for (multimap<int, Student>::iterator it = map.begin(); it != map.end(); it++) {
		cout << "学号为" << it->first << "的学生预约了" << (it->second).bookname << endl;
	}
}
int main() {
	vector< ComputerRoom> v;
	//初始化机房数据
	creatCr(v);
	//待审核预约
	multimap<int, Student> map;
	//实例化菜单类
	Menu m;
	int choice = 0;
	m.mainMenu();
	while (true) {
		
		cout << "请输入您的选择:" << endl;
		cin >> choice;

		string name;
		int id;
		string password;

		switch (choice) {
		case 1://学生登陆
			cout << "请输入学号:" << endl;
			cin >> id;
			//判断学号是否正确
			if (/*学号正确*/true) {
				cout << "请输入密码:" << endl;
				cin >> password;
				//判断密码是否正确
				if (/*密码正确*/true) {
					//创建学生
					Student s = Student(id);
					//进入学生菜单
					system("cls");
					m.sMenu();
					int schoice;
					while (true) {
						cout << "请输入您的选择:" << endl;
						cin >> schoice;
						switch (schoice) {
						case 1://申请预约
							s.book(v,map);
							break;
						case 2://查看自身预约
							s.checkBook();
							break;
						case 3://查看所有预约
							doCheck(v);
							break;
						case 4://取消预约
							s.cancelBook(v,map);
							break;
						case 5://退出登陆
							m.exitSystem();
							break;
						default:
							system("cls");
							break;

						}
					}
				}
				else {
					cout << "您输入的密码有误,请重新输入" << endl;
				}
			}
			else{
				cout << "您输入的学号有误,请重新输入" << endl;
			}
			break;
		case 2://教师登陆
			cout << "请输入职工号:" << endl;
			cin >> id;
			//判断职工号是否正确
			if (/*职工号正确*/true) {
				cout << "请输入密码:" << endl;
				cin >> password;
				//判断密码是否正确
				if (/*密码正确*/true) {
					//创建教师
					Teacher t = Teacher(id);
					system("cls");
					m.tMenu();
					int tchoice;
					while (true)
					{
						cout << "请输入您的选择:" << endl;
						cin >> tchoice;
						switch (tchoice) {
						case 1://查看待审核预约
							showUnverify(map);
							break;
						case 2://审核预约
							t.verify(v,map);
							break;
						case 3://退出登陆
							m.exitSystem();
							break;
						default:
							system("cls");
							break;
						}
					}
				}
				else {
					cout << "您输入的密码有误,请重新输入" << endl;
				}
			}
			else {
				cout << "您输入的职工号有误,请重新输入" << endl;
			}
			break;
		case 3://管理员登陆
			cout << "请输入管理工号:" << endl;
			cin >> id;
			//判断管理工号是否正确
			if (/*管理工号正确*/true) {
				cout << "请输入密码:" << endl;
				cin >> password;
				//判断密码是否正确
				if (/*密码正确*/true) {
					//创建管理员
					Manager mg= Manager(id);
					system("cls");
					m.mMenu();
					int mchoice;
					while (true)
					{
						cout << "请输入您的选择:" << endl;
						cin >> mchoice;
						switch (mchoice) {
						case 1://添加账号
							//这里可用二维数组实现
							break;
						case 2://查看账号
							
							break;
						case 3://查看机房
							doCheck(v);
							break;
						case 4://退出登陆
							m.exitSystem();
							break;
						default:
							system("cls");
							break;
						}
					}
				}
				else {
					cout << "您输入的密码有误,请重新输入" << endl;
				}
			}
			else {
				cout << "您输入的管理工号有误,请重新输入" << endl;
			}
			break;
		case 4://退出
			m.exitSystem();
			break;
		default:
			system("cls");
			break;
		}
	}
	
	return 0;
}

3.2 身份类

3.2.1 person.h

#pragma once
#include <iostream>
using namespace std;
#include <string>
class Person {
public:
	int m_id;
	string m_name;
	string m_password;
};

3.2.2 person.cpp

#include "person.h"

3.3 学生类

3.3.1 student.h

#pragma once
#include <iostream>
using namespace std;
#include "person.h"
#include <string>
#include <vector>
#include"computerRoom.h"
#include <map>
class Student :public Person {
public:
	int m_id;
	string m_name;
	string m_password;

	bool isbook=false;//是否有预约
	bool isok=false;//预约是否被通过
	string bookname;//预约的机房名称

	Student(int id);

	//申请预约
	void book(vector< ComputerRoom>& v, multimap<int, Student> &map);
	//查看自身预约
	void checkBook();
	//取消预约
	void cancelBook(vector< ComputerRoom>& v, multimap<int, Student>& map);

	~Student();
};

3.3.2 student.cpp

#include "student.h"

Student::Student(int id) {
	m_id = id;
	
}

void Student::book(vector< ComputerRoom>& v, multimap<int, Student>& map) {
	string name;
	cout << "请输入要预约的机房名称:(1号机房、2号机房、3号机房)" << endl;
	cin >> name;
	vector< ComputerRoom>::iterator it = v.begin();
	for (; it != v.end(); it++) {
		if (it->m_name == name)
			break;
	}
	it->book();
	//通知老师
	map.insert(make_pair(m_id, *this));

	//更新预约状态
	isbook = true;
	bookname = name;
}

void Student::checkBook() {
	if (!isbook) {
		cout << "您没有预约机房" << endl;
	}
	else {
		cout << "您预约的机房名称为" << bookname << endl;
		if (isok) {
			cout << "您的预约已通过" << endl;
		}
		else {
			cout << "您的预约正在审核中" << endl;
		}
	}
}

void Student::cancelBook(vector< ComputerRoom>& v, multimap<int, Student>& map) {
	if (!isbook) {
		cout << "您没有预约机房" << endl;
	}
	else {
		isbook = false;
		vector< ComputerRoom>::iterator it = v.begin();
		for (; it != v.end(); it++) {
			if (it->m_name == bookname)
				break;
		}

		it->cancel();
		cout << "您的预约已取消" << endl;
		multimap<int, Student>::iterator pos = map.find(m_id);
		map.erase(pos);
	}

	

}
Student::~Student() {

}

3.4 老师类

3.4.1 teacher.h

#pragma once
#include <iostream>
using namespace std;
#include<map>
#include "student.h"
class Teacher {
public:
	int id;
	Teacher(int id);
	
	void verify(vector< ComputerRoom>& v,multimap<int, Student>& map);
};

3.4.2 teacher.cpp

#include "teacher.h"

Teacher::Teacher(int id) {
	this->id = id;
}


void Teacher::verify(vector< ComputerRoom>& v,multimap<int, Student>& map) {
	int id;
	int choice;
	cout << "请输入要审核的预约信息的学号:" << endl;
	cin >> id;
	cout << "是否同意该预约?同意输入1,不同意输入0" << endl;
	cin >> choice;

	multimap<int, Student>::iterator pos = map.find(id);
	(pos->second).isok = choice;
	
	if (!choice) {
		vector< ComputerRoom>::iterator it = v.begin();
		for (; it != v.end(); it++) {
			if (it->m_name == (pos->second).bookname)
				break;
		}
		it->cancel();
	}
	
	map.erase(pos);
}

3.5 管理员类

3.5.1 manager.h

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

class Manager {
public:
	int id;
	Manager(int id);
};

3.5.2 manager.cpp

#include "manager.h"

Manager::Manager(int id) {
	this->id = id;
}

3.6 菜单类

3.6.1 menu.h

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

class Menu {
public:
	//登陆界面
	void mainMenu();
	//学生菜单
	void sMenu();

	void tMenu();

	void mMenu();
	//退出系统
	void exitSystem();
};

3.6.2 menu.cpp

#include <iostream>
using namespace std;
#include "menu.h"
void Menu::mainMenu() {

	cout << "*******************************************" << endl;
	cout << "********** 欢迎使用机房预约系统!**********" << endl;
	cout << "************* 请选择登陆身份 **************" << endl;
	cout << "************* 1、学生 *********************" << endl;
	cout << "************* 2、教师 *********************" << endl;
	cout << "************* 3、管理员 *******************" << endl;
	cout << "************* 4、退出 *********************" << endl;
	cout << "*******************************************" << endl;
	cout << endl;
}

void Menu::sMenu() {
	cout << "*******************************************" << endl;
	cout << "********** 欢迎使用机房预约系统!**********" << endl;
	cout << "**************** 请选择操作 ***************" << endl;
	cout << "************* 1、申请预约 *****************" << endl;
	cout << "************* 2、查看自身的预约 ***********" << endl;
	cout << "************* 3、查看所有预约 *************" << endl;
	cout << "************* 4、取消预约 *****************" << endl;
	cout << "************* 5、退出登陆 *****************" << endl;
	cout << "*******************************************" << endl;
	cout << endl;
}

void Menu::tMenu() {
	cout << "*******************************************" << endl;
	cout << "********** 欢迎使用机房预约系统!**********" << endl;
	cout << "**************** 请选择操作 ***************" << endl;
	cout << "************* 1、查看所有预约 *************" << endl;
	cout << "************* 2、审核预约 *****************" << endl;
	cout << "************* 3、退出登陆 *****************" << endl;
	cout << "*******************************************" << endl;
	cout << endl;
}

void Menu::mMenu() {
	cout << "*******************************************" << endl;
	cout << "********** 欢迎使用机房预约系统!**********" << endl;
	cout << "**************** 请选择操作 ***************" << endl;
	cout << "************* 1、添加账号 *****************" << endl;
	cout << "************* 2、查看账号 *****************" << endl;
	cout << "************* 3、查看机房 *****************" << endl;
	cout << "************* 4、退出登陆 *****************" << endl;
	cout << "*******************************************" << endl;
	cout << endl;
}

void Menu::exitSystem() {
	cout << "欢迎下次使用!" << endl;
	exit(0);
}

3.7 机房类

3.7.1 computerRoom.h

#pragma once
#include <iostream>
using namespace std;
#include<string>
class ComputerRoom {
public:
	string m_name;
	int m_amount;
	int m_unwanted;//空闲
	int m_wanted=0;//已预约
	ComputerRoom(string name,int amount,int unwanted);

	//查看预约信息以及预约状态
	void check();
	void book();
	void cancel();
};

3.7.2 computerRoom.cpp

#include "computerRoom.h"

ComputerRoom::ComputerRoom(string name, int amount,int unwanted) {
	m_name = name;
	m_amount = amount;
	m_unwanted = unwanted;
}

void ComputerRoom::check() {
	cout << m_name << "最大容量为:" << m_amount << ",其中已预约:" << m_wanted << ",未预约:" << m_unwanted << endl;
}

void ComputerRoom::book() {
	if (m_unwanted > 0) {
		m_unwanted--;
		m_wanted++;
		
		cout << "预约已提交!" << endl;
	}
	else {
		cout << "该机房已满!" << endl;
	}
}

void ComputerRoom::cancel() {
	if (m_wanted) {
		m_wanted--;
		m_unwanted++;

	}
	else {
		cout << "取消失败" << endl;
	}
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:19:22  更:2021-08-01 14:20:41 
 
开发: 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年5日历 -2024/5/1 11:12:43-

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