C++:机房预约系统(三)——管理员模块

在这里插入图片描述

//有参构造
Manager::Manager(string name, string pwd)
{
	//初始化管理员信息
	this->m_Name = name;
	this->m_Pwd = pwd;
}

在这里插入图片描述

/进入管理员子菜单
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;
		}
		
	}
}

在这里插入图片描述

//菜单界面
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 << "请输入您的选择:";
}

在这里插入图片描述

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

				//进入管理员身份子菜单
				managerMenu(person);

				return;
			}
		}

在这里插入图片描述

//添加账号
void Manager::addPerson()
{
	cout << "请输入添加账号类型" << endl;
	cout << "1 添加学生" << endl;
	cout << "2 添加老师" << endl;

	string fileName;//操作文件名
	string tip;//提示id号

	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();
}

在这里插入图片描述

//初始化容器
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();

}
//有参构造
Manager::Manager(string name, string pwd)
{
	//初始化管理员信息
	this->m_Name = name;
	this->m_Pwd = pwd;

	//初始化容器,获取所有文件中 学生、老师信息
	this->initVector();
}

在这里插入图片描述

//检测重复  参数1 检测学号/职工号 参数2  检测类型
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;
}

在这里插入图片描述

//添加账号
void Manager::addPerson()
{
	cout << "请输入添加账号类型" << endl;
	cout << "1 添加学生" << endl;
	cout << "2 添加老师" << endl;

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

	ofstream ofs;//文件操作对象

	int select = 0;
	cin >> select;//接受用户选项

	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 = 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();
}

在这里插入图片描述

//向文件添加数据
	ofs << id << " " << name << " " << pwd << " " << endl;
	cout << "添加成功" << endl;

	this->initVector();//调用初始化容器接口,重新获取文件中数据
	system("pause");
	system("cls");

	ofs.close();

在这里插入图片描述

void printStudent(Student &s)
{
	cout << "学号:" << s.m_Id << "姓名:" << s.m_Name << endl;
}

void printTeacher(Teacher& s)
{
	cout << "职工号:" << s.m_EmpId << "姓名:" << s.m_Name << 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");
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

//机房类
class ComputerRoom
{
public:

	int m_ComId;//机房id号

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

在这里插入图片描述


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

在这里插入图片描述

	//初始化机房信息
	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();
	cout << "机房数量为:" << vCom.size() << endl;

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述


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

	cout << "清空成功!" << endl;
	system("pause");
	system("cls");
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值