//有参构造
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");
}