简单的C++项目之机房预约系统(三)

管理员模块

1. 管理员登录和注销

1.1 构造函数

  • 在Manager类的构造函数中,初始化管理员信息,代码如下:
//有参构造
Manager::Manager(string name, string pwd)
{
	this->m_Name = name;
	this->m_Pwd = pwd;
}

1.2 管理员子菜单

  • 在机房预约系统.cpp中,当用户登录的是管理员,添加管理员菜单接口
  • 将不同的分支提供出来
    • 添加账号
    • 查看账号
    • 查看机房
    • 清空预约
    • 注销登录
  • 实现注销功能

添加全局函数 void managerMenu(Identity * &manager),代码如下:

//管理员菜单
void managerMenu(Identity * &manager)
{
	while (true)
	{
		//管理员菜单
		manager->operMenu();

		Manager* man = (Manager*)manager;
		int select = 0;

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

1.3 菜单功能实现

  • 在实现成员函数void Manager::operMenu() 代码如下:
//选择菜单
void Manager::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|          3.查看机房            |\n";
	cout << "\t\t|                                |\n";
	cout << "\t\t|          4.清空预约            |\n";
	cout << "\t\t|                                |\n";
	cout << "\t\t|          0.注销登录            |\n";
	cout << "\t\t|                                |\n";
	cout << "\t\t ---------------------------------\n";
	cout << "请选择您的操作: " << endl;
}

1.4 接口对接

  • 管理员成功登录后,调用管理员子菜单界面
  • 在管理员登录验证分支中,添加代码:
//进入管理员子菜单
managerMenu(person);

2 添加账号

功能描述:

  • 给学生或教师添加新的账号

功能要求:

  • 添加时学生学号不能重复、教师职工号不能重复

2.1 添加功能实现

在Manager的addPerson成员函数中,实现添加新账号功能,代码如下:

//添加账号  
void Manager::addPerson()
{

	cout << "请输入添加账号的类型" << endl;
	cout << "1、添加学生" << endl;
	cout << "2、添加老师" << endl;

	string fileName;
	string tip;
	ofstream ofs;

	int select = 0;
	cin >> select;

	if (select == 1)
	{
		fileName = STUDENT_FILE;
		tip = "请输入学号: ";
	}
	else
	{
		fileName = TEACHER_FILE;
		tip = "请输入职工编号:";
	}

	ofs.open(fileName, ios::out | ios::app);
	int id;
	string name;
	string pwd;
	cout <<tip << endl;
	cin >> id;

	cout << "请输入姓名: " << endl;
	cin >> name;

	cout << "请输入密码: " << endl;
	cin >> pwd;

	ofs << id << " " << name << " " << pwd << " " << endl;
	cout << "添加成功" << endl;

	system("pause");
	system("cls");

	ofs.close();
}

2.2 去重操作

功能描述:添加新账号时,如果是重复的学生编号,或是重复的教师职工编号,提示有误

  1. 读取信息
  • 要去除重复的账号,首先要先将学生和教师的账号信息获取到程序中,方可检测
  • 在manager.h中,添加两个容器,用于存放学生和教师的信息
  • 添加一个新的成员函数 void initVector() 初始化容器
//初始化容器
void initVector();

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

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

在Manager的有参构造函数中,获取目前的学生和教师信息
代码如下:

void Manager::initVector()
{
	//读取学生文件中信息
	ifstream ifs;
	ifs.open(STUDENT_FILE, ios::in);
	if (!ifs.is_open())
	{
		cout << "文件读取失败" << endl;
		return;
	}
    
	vStu.clear();
    vTea.clear();
    
	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();
}

在有参构造函数中,调用初始化容器函数

//有参构造
Manager::Manager(string name, string pwd)
{
	this->m_Name = name;
	this->m_Pwd = pwd;
    
	//初始化容器
	this->initVector();
}
  1. 去重函数封装
    在manager.h文件中添加成员函数bool checkRepeat(int id, int type);
//检测重复 参数:(传入id,传入类型) 返回值:(true 代表有重复,false代表没有重复)
bool checkRepeat(int id, int type);

在manager.cpp文件中实现成员函数 bool checkRepeat(int id, int type);

bool Manager::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;
}
  1. 添加去重操作
    在添加学生编号或者教师职工号时,检测是否有重复,代码如下:
string errorTip; //重复错误提示

if (select == 1)
{
	fileName = STUDENT_FILE;
	tip = "请输入学号: ";
	errorTip = "学号重复,请重新输入";
}
else
{
	fileName = TEACHER_FILE;
	tip = "请输入职工编号:";
	errorTip = "职工号重复,请重新输入";
}
ofs.open(fileName, ios::out | ios::app);
int id;
string name;
string pwd;
cout <<tip << endl;

while (true)
{
	cin >> id;

	bool ret = this->checkRepeat(id, 1);

	if (ret) //有重复
	{
		cout << errorTip << endl;
	}
	else
	{
		break;
	}
}

3 显示账号

显示学生信息或教师信息
在Manager的showPerson成员函数中,实现显示账号功能,代码如下:

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

4 查看机房

4.1 添加机房信息

案例需求中,机房一共有三个,其中1号机房容量20台机器,2号50台,3号100台,我们可以将信息录入到computerRoom.txt中。

4.2 机房类创建

创建新的文件 computerRoom.h,并添加如下代码:

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

	int m_ComId; //机房id号

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

4.3 初始化机房信息

在Manager管理员类下,添加机房的容器,用于保存机房信息

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

在Manager有参构造函数中,追加如下代码,初始化机房信息

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

4.4 显示机房信息

在Manager类的showComputer成员函数中添加如下代码:

//查看机房信息
void Manager::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");
}

5 清空预约

清空生成的order.txt预约文件

//清空预约记录
void Manager::cleanFile()
{
	ofstream ofs(ORDER_FILE, ios::trunc);
	ofs.close();

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

参考代码和视频教程链接如下
参考代码
视频教程

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 黑马机房预约系统是一款用于管理和预约机房资源的系统。该系统可以方便高效地帮助用户进行机房的预约和管理。 首先,该系统提供了一个用户界面,用户可以通过该界面浏览机房的可用时间和预约情况。用户可以根据自己的需要选择合适的时间段进行预约。 其次,系统还提供了预约管理功能。管理员可以登录系统进行机房资源的管理和调度。管理员可以查看所有预约情况,对预约进行审核和处理。如果有冲突或者其他问题,管理员可以通过系统与用户进行沟通和协商。 此外,该系统还提供了提醒功能。系统会在预约时间将近时给用户发送短信或者邮件提醒,确保用户不会忘记约定的使用时间。 黑马机房预约系统的好处是多方面的。首先,它提高了机房资源的利用率,避免了资源的浪费。通过合理的调度和管理,可以确保尽可能多的用户能够享受到机房的使用权。其次,该系统提供了便利的预约和管理功能,方便了用户和管理员的操作,节省了时间和精力。最后,该系统的提醒功能可以避免预约的遗忘,提高了效率和准确性。 总之,黑马机房预约系统是一款方便实用的系统,可以有效管理和预约机房资源,提高资源利用率和用户满意度。 ### 回答2: 黑马机房预约系统是一个方便学生预约机房使用的系统。这个系统主要有以下几个功能: 1. 预约机房:学生可以通过系统预约机房的使用时间。他们可以选择日期和时间段,并在系统中查看机房的实时可用情况。这有助于有效安排机房的使用,避免冲突和浪费。 2. 查看预约记录:学生可以通过系统查看他们的预约记录。这包括他们预约的日期,时间段以及预约成功与否的状态。这一功能方便他们随时了解自己的预约情况以及进行相应的调整。 3. 取消预约:对于一些情况下无法按计划使用机房的学生,他们可以通过系统取消预约。这样可以及时释放机房资源,方便其他学生进行预约。 4. 管理员权限:系统设有管理员权限,负责管理机房资源和学生预约情况。管理员可以查看机房使用情况,审核和确认学生的预约申请。他们还可以处理预约冲突和问题,确保机房资源的最有效利用。 5. 通知功能:系统可以通过短信、邮件等方式通知学生预约情况的变化,以及管理员的审核结果等。这样,学生能及时了解自己的预约状态,管理员也能更方便地与学生进行沟通。 总之,黑马机房预约系统通过有效的预约管理和信息传递,方便了学生对机房的使用,提升了机房资源的利用率。它是一个便捷、高效的工具,为学生和管理员带来了更好的使用体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值