【学习笔记】“机房预约系统”作业复盘及问题总结

 

目录

1. 作业内容

1.1 系统简介

1.2 身份简介

1.3 机房简介

1.4 申请简介

1.5 系统具体要求

2. 作业复盘

 2.1 主函数(CRRSMain.cpp)

2.2  管理类(CRRSManangement.h & CRRSManangement.cpp)

2.2.1 显示主菜单函数(showL1Menu())

2.2.3 退出程序功能(exitSystem())

2.2.4 管理员登录分支(showAdminMenu())

2.2.5 学生登录分支

2.2.6 教师登录分支


1. 作业内容

1.1 系统简介

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

1.2 身份简介

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

  • 学生代表:申请使用机房

  • 教师:审核学生的预约申请

  • 管理员:给学生、教师创建账号

1.3 机房简介

  • 机房总共有3间

  • 1号机房 --- 最大容量20人

  • 2号机房 --- 最多容量50人

  • 3号机房 --- 最多容量100人

1.4 申请简介

  • 申请的订单每周由管理员负责清空。

  • 学生可以预约未来一周内的机房使用,预约的日期为周一至周五,预约时需要选择预约时段(上午、下午)

  • 教师来审核预约,依据实际情况审核预约通过或者不通过

1.5 系统具体要求

  • 首先进入登录界面,可选登录身份有:

    • 学生代表

    • 老师

    • 管理员

    • 退出

  • 每个身份都需要进行验证后,进入子菜单

    • 学生需要输入 :学号、姓名、登录密码

    • 老师需要输入:职工号、姓名、登录密码

    • 管理员需要输入:管理员姓名、登录密码

  • 学生具体功能

    • 申请预约 --- 预约机房

    • 查看自身的预约 --- 查看自己的预约状态

    • 查看所有预约 --- 查看全部预约信息以及预约状态

    • 取消预约 --- 取消自身的预约,预约成功或审核中的预约均可取消

    • 注销登录 --- 退出登录

  • 教师具体功能

    • 查看所有预约 --- 查看全部预约信息以及预约状态

    • 审核预约 --- 对学生的预约进行审核

    • 注销登录 --- 退出登录

  • 管理员具体功能

    • 添加账号 --- 添加学生或教师的账号,需要检测学生编号或教师职工号是否重复

    • 查看账号 --- 可以选择查看学生或教师的全部信息

    • 查看机房 --- 查看所有机房的信息

    • 清空预约 --- 清空所有预约记录

    • 注销登录 --- 退出登录


2. 作业复盘

和上次一样,还是首先通过老师的作业内容构思如何写这次作业。然后复刻老师的程序输出内容,自己写自己的代码,作业结构如下:

 2.1 主函数(CRRSMain.cpp)

主函数是程序是入口,和以往的作业一样,首先显示菜单。提示用户输入选择功能,根据用户的输入跳转不同的功能。

程序运行时的界面如下:

主函数的内容如下: 

#include"CRRSManagement.h"

int main()
{

	CRRSManager crrsm;
	int userSelect = 0;
	while (true)
	{
		crrsm.showL1Menu();
		cout << "Please enter your select:" << endl;
		cin >> userSelect;
		switch (userSelect)
		{
		case 1: // Student branch
			crrsm.showStudentMenu();
			break;
		case 2: // Teacher branch
			crrsm.showTeacherMenu();
			break;
		case 3: // Admin branch
			// show administrator menu after login.
			crrsm.showAdminMenu();
			break;
		case 0: // Exit system
			crrsm.exitSystem();
			break;
		default:
			cout << "Wrong input, please input again." << endl;
			system("pause");
			system("cls");
			break;
		}
	}


	system("pause");

	return 0;
}


而首先调用的显示菜单函数我定义为: crrsm.showL1Menu();crrsm.showL1Menu();

如果用户选择学生登录,跳转showStudentMenu()函数;用户选择教师身份登录,跳转showTeacherMenu()函数;用户选择以管理员身份登录,跳转showAdminMenu()函数;如果用户输入0,退出系统,调用exitSystem()函数。

若用户输入了0、1、2、3之外的内容,则提示用户输入错误,请重新输入。放在default分支中。以上便是主函数的全部内容。

而其他的各项功能函数都注册在CRRSManagement类中。

2.2  管理类(CRRSManangement.h & CRRSManangement.cpp)

在管理类中,把需要使用到的功能函数都注册在其中。例如,通过分析刚才的主函数的几个功能。

管理类的头文件全部内容如下:

#pragma once
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
#include<vector>
#include<cstdlib>
#include"Student.h"
#include"Teacher.h"
#include"Order.h"

using namespace std;

class CRRSManager
{
public:
	CRRSManager();

	// initialize vector
	void initVector();
	
	void initOrderVector();

	// show L1 menu
	void showL1Menu();

	// show Admin menu
	void showAdminMenu();

	// administrator add accout
	void addAccount();

	// check wether id is repeat
	bool checkRepeat(int id, int type);

	// administrator view accout
	void viewAccount();

	// administrator show computer room
	void viewComputerRoom();

	// show Student menu
	void showStudentMenu();

	// student applay for an appointment
	void stuApplyAppointment(int ID, string name);

	// student view his/her own appointments
	void stuViewOwnAppointment(int ID);

	// view all appointments
	void viewAllAppointment();

	// Cancle student appointment
	void cancaleAppointment(int ID);

	// show teacher's menu
	void showTeacherMenu();

	// teacher audit appointment
	void auditAppointment();
	
	// administrator clear all the appointments
	void clearAppointment();

	// exit system
	void exitSystem();

	~CRRSManager();

public:
	vector<Student> vStu;
	vector<Teacher> vTech;
	vector<Order> vOrder;
};

2.2.1 显示主菜单函数(showL1Menu())

就是一堆cout打印输出。

// show Main Menu
void CRRSManager::showL1Menu()
{
	cout << "=============== Welcome to Computer Room Reservation System ===========" << endl;
	cout << endl;
	cout << "Please enter your identity" << endl;
	cout << "\t\t-----------------------------------             " << endl;
	cout << "\t\t|        1. Student               |             " << endl;
	cout << "\t\t|        2. Teacher               |             " << endl;
	cout << "\t\t|        3. Administrator         |             " << endl;
	cout << "\t\t|        0. Exit                  |             " << endl;
	cout << "\t\t-----------------------------------             " << endl;
}

2.2.3 退出程序功能(exitSystem())

打印输出,告诉用户欢迎下次再来。 然后使用exi(0)退出程序就ok。

// exit system
void CRRSManager::exitSystem()
{
	cout << "Welcome to use next time." << endl;
	system("pause");
	system("cls");
	exit(0);
}

2.2.4 管理员登录分支(showAdminMenu())

之所以先写这个功能,是因为需要首先管理员登录之后创建出老师、学生的账户。

那么如何在程序运行之初就让管理员账户存在呢?我的想法是在管理类的构造函数中生成管理员账户,保存在本地。同样的,机房信息也是固定不变的,包括机房号码及容量。把它也可以在构造函数中进行创建。

通过构造,管理员的用户名及密码保存在了AdminFile中,我定义为".//admin.txt"。

#define AdminFile ".//admin.txt"

 

同样的,机房信息保存在ComRoom中,我定义为".//computerRoom.txt"。

#define ComRoom ".//computerRoom.txt"

构造函数内容如下:

CRRSManager::CRRSManager()
{
	// initialize vector
	CRRSManager::initVector();

	// create admin database
	ofstream ofs;
	ofs.open(AdminFile,ios::trunc);
	ofs << "admin";
	ofs << " 123" << endl;
	ofs.close();

	ofs.open(ComRoom, ios::trunc);
	ofs << "1";
	ofs << " 20" << endl;
	ofs << "2";
	ofs << " 50" << endl;
	ofs << "3";
	ofs << " 100" << endl;
	ofs.close();
}

有了管理员账户,就可以进行验证登录的操作。

通过读取本地文件,对字符串进行截取,获得用户名与密码。将本地文件中的用户名与密码与用户输入对比, 管理员分支的内容如下:

// show Admin menu
void CRRSManager::showAdminMenu()
{
	ifstream ifs;
	ifs.open(AdminFile,ios::in);
	string temp;
	getline(ifs, temp);
	string adminName;
	adminName = temp.substr(0, 5);
	string adminPWD;
	adminPWD = temp.substr(6, 9);
	/*cout << adminName << endl;
	cout << adminPWD << endl;*/
	cout << "Please enter user name:" << endl;
	string name;
	cin >> name;
	cout << "Please enter your password:" << endl;
	string password;
	cin >> password;
	if (name == adminName && password == adminPWD)
	{
		// log in succeed
		
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值