C++ 机房预约系统

        

 

 1.4 申请简介

项目结构如下:

 

代码如下: 

computerRoom.h

#ifndef COMPUTERROOM_H
#define COMPUTERROOM_H

#endif // COMPUTERROOM_H
#include <iostream>
using namespace std;
//机房类
class computerroom {
public:
    int m_ComId;
    int m_MaxNum;
};

globalFile.h

#ifndef GLOBALFILE_H
#define GLOBALFILE_H

#endif // GLOBALFILE_H
//管理员
#define ADMIN_FILE "admin.txt"
//学生
#define STUDENT_FILE "student.txt"
//老师
#define TEACHER_FILE "teacher.txt"
//机房信息
#define COMPUTER_FILE "computer.txt"
//订单文件
#define ORDER_FILE "order.txt"

identity.h

#ifndef IDENTITY_H
#define IDENTITY_H
#include <iostream>
using namespace std;
//身份抽象基类
class identity {
public:
    //用户名
    string m_Name;
    //密码
    string m_Pwd;
    //操作菜单 纯虚函数
    virtual void operMenu() = 0;
    //    virtual ~identity() = 0;
};

#endif // IDENTITY_H

identity.cpp

#include "identity.h"

manager.h

#ifndef MANAGER_H
#define MANAGER_H
#include <iostream>

using namespace std;
#include "globalFile.h"
#include "identity.h"
#include "student.h"
#include "teacher.h"
#include <algorithm>
#include <fstream>
#include <vector>

//管理员设计
class manager : public identity {
public:
    //默认构造
    manager();
    //有参构造
    manager(string name, string pwd);
    //菜单界面
    virtual void operMenu();
    //添加账号
    void addPerson();
    //查看账号
    void showPerson();
    //查看机房信息
    void showComputer();
    //清空预约记录
    void cleanFile();
    //初始化容器
    void initvector();
    //学生容器
    vector<student> vStu;
    //老师容器
    vector<teacher> vTea;
    //去重操作(true重复 false不重复)
    bool checkRepeat(int id, int type);
    //机房信息
    vector<computerroom> vCom;
};

#endif // MANAGER_H

manager.cpp

#include "manager.h"

manager::manager()
{
}
//有参构造
manager::manager(string name, string pwd)
{
    //初始化管理员的信息
    this->m_Name = name;
    this->m_Pwd = pwd;
    //初始化容器
    this->initvector();
    //初始化机房信息
    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::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;
}
//添加账号
void manager::addPerson()
{
    cout << "请输入添加账号的类型:" << endl;
    cout << "1. 添加学生" << endl;
    cout << "2. 添加老师" << endl;
    string filename;
    string tip;
    ofstream ofs;
    string errortip;
    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();
    //    重新初始化容器
    this->initvector();
}

// for_each的普通函数
// template <class T> //函数模板可以用typename,可以用class,可以使用模板,需要参数一致
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;
    cin >> select;
    if (select == 1) {
        //查看学生
        for_each(vStu.begin(), vStu.end(), printStudent);
    } else {
        //查看老师
        for_each(vTea.begin(), vTea.end(), printTeacher);
    }
    system("pause");
    system("cls");
}
//查看机房信息
void manager::showComputer()
{
    //    for (int i = 0; i < (long long)vCom.size(); i++) {
    //        cout << vCom[i].m_ComId << " " << vCom[i].m_MaxNum << 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;
    ofs.open(ORDER_FILE, ios::trunc);
    ofs.close();
    cout << "清空成功" << endl;
    system("pause");
    system("cls");
}

//初始化容器
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);
    if (!ifs.is_open()) {
        cout << "文件读取失败" << endl;
        return;
    }

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

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

orderfile.h

#ifndef ORDERFILE_H
#define ORDERFILE_H

#include <fstream>
#include <iostream>
using namespace std;
#include "globalFile.h"
#include <map>
class orderfile {
public:
    //构造函数
    orderfile();
    //更新预约记录
    void updateOrder();
    //记录预约条数
    int m_Size = 0;
    //记录所有预约信息的容器 key记录条数  value 具体记录的键值对信息
    map<int, map<string, string>> m_orderData;
};

#endif // ORDERFILE_H

orderfile.cpp

#include "orderfile.h"

orderfile::orderfile()
{
    ifstream ifs;
    ifs.open(ORDER_FILE, ios::in);
    string date; //日期
    string interval; //时间段
    string stuid; //学生编号
    string stuname; //学生姓名
    string roomid; //机房编号
    string status; //预约状态
    this->m_Size = 0; //记录条数
    while (ifs >> date && ifs >> interval && ifs >> stuid && ifs >> stuname && ifs >> roomid && ifs >> status) {
        //        cout << date << endl;
        //        cout << interval << endl;
        //        cout << stuid << endl;
        //        cout << stuname << endl;
        string key;
        string value;
        map<string, string> m;
        int pos = date.find(":"); // 4
        if (pos != -1) {
            key = date.substr(0, pos);
            value = date.substr(pos + 1, date.size()); // size = 9 ,或者直接不写date.size()
            m.insert(make_pair(key, value));
        }
        pos = interval.find(":");
        if (pos != -1) {
            key = interval.substr(0, pos);
            value = interval.substr(pos + 1, interval.size()); // size = 9 ,或者直接不写date.size()
            m.insert(make_pair(key, value));
        }
        //学号
        pos = stuid.find(":"); // 4
        if (pos != -1) {
            key = stuid.substr(0, pos);
            value = stuid.substr(pos + 1, stuid.size()); // size = 9 ,或者直接不写date.size()
            m.insert(make_pair(key, value));
        }
        //姓名
        pos = stuname.find(":"); // 4
        if (pos != -1) {
            key = stuname.substr(0, pos);
            value = stuname.substr(pos + 1, stuname.size()); // size = 9 ,或者直接不写date.size()
            m.insert(make_pair(key, value));
        }
        //机房编号
        pos = roomid.find(":"); // 4
        if (pos != -1) {
            key = roomid.substr(0, pos);
            value = roomid.substr(pos + 1, roomid.size()); // size = 9 ,或者直接不写date.size()
            m.insert(make_pair(key, value));
        }
        //预约状态
        pos = status.find(":"); // 4
        if (pos != -1) {
            key = status.substr(0, pos);
            value = status.substr(pos + 1, status.size()); // size = 9 ,或者直接不写date.size()
            m.insert(make_pair(key, value));
        }
        //将小容器放入大map容器中
        this->m_orderData.insert(make_pair(this->m_Size, m));
        this->m_Size++;
    }
    ifs.close();
    //测试最大map容器
    //    for (map<int, map<string, string>>::iterator it = m_orderData.begin(); it != m_orderData.end(); it++) {
    //        cout << "条数为:" << it->first << " value = " << endl;
    //        for (map<string, string>::iterator mit = it->second.begin(); mit != it->second.end(); mit++) {
    //            cout << "key=" << mit->first << " value=" << mit->second << endl;
    //        }
    //    }
}

void orderfile::updateOrder()
{
    if (this->m_Size == 0) {
        return;
    }
    ofstream ofs(ORDER_FILE, ios::out | ios::trunc);
    for (int i = 0; i < this->m_Size; i++) {
        ofs << "date:" << this->m_orderData[i]["date"] << " ";
        ofs << "interval:" << this->m_orderData[i]["interval"] << " ";
        ofs << "stuid:" << this->m_orderData[i]["stuid"] << " ";
        ofs << "stuname:" << this->m_orderData[i]["stuname"] << " ";
        ofs << "roomid:" << this->m_orderData[i]["roomid"] << " ";
        ofs << "status:" << this->m_orderData[i]["status"] << endl;
    }
    ofs.close();
}

student.h

#ifndef STUDENT_H
#define STUDENT_H

#include <iostream>
using namespace std;
#include "computerRoom.h"
#include "globalFile.h"
#include "identity.h"
#include "orderfile.h"
#include <fstream>
#include <vector>
//设计学生类,继承基类
class student : public identity {
public:
    //默认构造
    student();
    //有参构造 参数:学号,姓名,密码
    student(int id, string name, string pwd);

    //菜单界面
    virtual void operMenu();
    //申请预约
    void applyOrder();
    //查看自身预约
    void showMyOrder();
    //查看所有预约
    void showAllOrder();
    //取消预约
    void cancelOrder();
    //学生学号
    int m_Id;
    //机房信息
    vector<computerroom> vCom;
};

#endif // STUDENT_H

student.cpp

#include "student.h"

//默认构造
student::student()
{
}
//有参构造 参数:学号,姓名,密码
student::student(int id, string name, string pwd)
{
    this->m_Id = id;
    this->m_Name = name;
    this->m_Pwd = pwd;

    //初始化机房信息

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

//菜单界面
void student::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;
}
//申请预约
void student::applyOrder()
{
    cout << "机房开发的时间为周一至周五!" << endl;
    cout << "请输入申请预约的时间:" << endl;
    cout << "1. 周一" << endl;
    cout << "2. 周二" << endl;
    cout << "3. 周三" << endl;
    cout << "4. 周四" << endl;
    cout << "5. 周五" << endl;
    int date = 0; //日期
    int interval = 0; //时间段
    int room = 0; //编号
    while (true) {
        cin >> date;
        if (date >= 1 && date <= 5) {
            break;
        }
        cout << "输入有误,请重新输入" << endl;
    }
    cout << "输入申请预约的时间段" << endl;
    cout << "1.上午" << endl;
    cout << "2.下午" << endl;
    while (true) {
        cin >> interval;
        if (interval >= 1 && interval <= 2) {
            break;
        }
        cout << "输入有误,请重新输入" << endl;
    }
    cout << "请选择机房" << endl;
    for (int i = 0; (unsigned)i < vCom.size(); i++) {
        cout << vCom[i].m_ComId << "号机房的容量:" << vCom[i].m_MaxNum << endl;
    }
    while (true) {
        cin >> room;
        if (room >= 1 && room <= 3) {
            break;
        }
        cout << "输入有误,请重新输入" << endl;
    }
    cout << "预约成功,审核中!" << endl;
    ofstream ofs;
    ofs.open(ORDER_FILE, ios::app);
    ofs << "date:" << date << " ";
    ofs << "interval:" << interval << " ";
    ofs << "stuid:" << this->m_Id << " ";
    ofs << "stuname:" << this->m_Name << " ";
    ofs << "roomid:" << room << " ";
    ofs << "status:" << 1 << endl;
    ofs.close();
    system("pause");
    system("cls");
}
//查看自身预约
void student::showMyOrder()
{
    orderfile of;
    //    cout << "size=" << of.m_Size;

    if (of.m_Size == 0) { //这里的size是对象全部的预约记录
        cout << "无预约记录" << endl;
        system("pause");
        system("cls");
    } else {
        for (int i = 0; i < of.m_Size; i++) {
            //或者直接用 stoi
            if (atoi(of.m_orderData[i]["stuid"].c_str()) == this->m_Id) { // atoi 将char *转为整型
                cout << "预约日期: 周" << of.m_orderData[i]["date"];
                cout << " 时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
                cout << " 机房:" << of.m_orderData[i]["roomid"];
                string status = " 状态 "; // 0取消 1审核中 2 成功  -1 失败
                if (of.m_orderData[i]["status"] == "1") {
                    status += "审核中";
                } else if (of.m_orderData[i]["status"] == "2") {
                    status += "预约成功";
                } else if (of.m_orderData[i]["status"] == "-1") {
                    status += "预约失败";
                } else {
                    status += "预约取消";
                }
                cout << status << endl;
            }
        }
    }
    system("pause");
    system("cls");
}
//查看所有预约
void student::showAllOrder()
{
    orderfile of;
    if (of.m_Size == 0) { //这里的size是对象全部的预约记录
        cout << "无预约记录" << endl;
        system("pause");
        system("cls");
    } else {
        for (int i = 0; i < of.m_Size; i++) {
            cout << i + 1 << ":";
            cout << "预约日期: 周" << of.m_orderData[i]["date"];
            cout << " 时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
            cout << " 学号:" << of.m_orderData[i]["stuid"];
            cout << " 姓名:" << of.m_orderData[i]["stuname"];
            cout << " 机房:" << of.m_orderData[i]["roomid"];
            string status = " 状态 "; // 0取消 1审核中 2 成功  -1 失败
            if (of.m_orderData[i]["status"] == "1") {
                status += "审核中";
            } else if (of.m_orderData[i]["status"] == "2") {
                status += "预约成功";
            } else if (of.m_orderData[i]["status"] == "-1") {
                status += "预约失败";
            } else {
                status += "预约取消";
            }
            cout << status << endl;
        }
    }

    system("pause");
    system("cls");
}
//取消预约
void student::cancelOrder()
{
    orderfile of;
    if (of.m_Size == 0) {
        cout << "无预约记录" << endl;
        system("pause");
        system("cls");
    }
    cout << "审核中或者预约成功的记录是可以取消的,请输入取消的预约记录" << endl;
    int index = 1;
    vector<int> v; //存放在最大容器中的下标编号
    for (int i = 0; i < of.m_Size; i++) {
        //判断是自身的预约记录
        if (this->m_Id == atoi(of.m_orderData[i]["stuid"].c_str())) {
            //筛选状态
            if (of.m_orderData[i]["status"] == "1" || of.m_orderData[i]["status"] == "2") {
                v.push_back(i);
                cout << index++ << "、";
                cout << "预约的日期:周" << of.m_orderData[i]["date"];
                cout << " 时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
                cout << " 机房:" << of.m_orderData[i]["roomid"];
                string status = " 状态 "; // 0取消 1审核中 2 成功  -1 失败
                if (of.m_orderData[i]["status"] == "1") {
                    status += "审核中";
                } else if (of.m_orderData[i]["status"] == "2") {
                    status += "预约成功";
                }
                cout << status << endl;
            }
        }
    }
    cout << "请输入取消的记录,0代表返回";
    int select = 0;
    while (true) {
        cin >> select;
        if (select >= 0 && select <= (int)v.size()) {
            if (select == 0) {
                break;
            } else {
                of.m_orderData[v[select - 1]]["status"] = "0";
                of.updateOrder();
                cout << "已取消预约" << endl;
                break;
            }
        }
        cout << "输入有误,请重新输入";
    }
    system("pause");
    system("cls");
}

teacher.h

#ifndef TEACHER_H
#define TEACHER_H
#include "identity.h"
#include "orderfile.h"
#include <iostream>
#include <vector>
using namespace std;
//教师类
class teacher : public identity {
public:
    //默认构造
    teacher();
    //有参构造(职工编号,姓名,密码)
    teacher(int empId, string name, string pwd);
    //菜单界面
    virtual void operMenu();
    //查看所有预约
    void showAllOrder();
    //审核预约
    void validOrder();
    int m_EmpId; //教师编号
};

#endif // TEACHER_H

teacher.cpp

#include "teacher.h"

teacher::teacher()
{
}

//有参构造(职工编号,姓名,密码)
teacher::teacher(int empid, string name, string pwd)
{
    this->m_EmpId = empid;
    this->m_Name = name;
    this->m_Pwd = pwd;
}
//菜单界面
void teacher::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|         0.注销登录        |\n";
    cout << "\t\t|                           |\n";
    cout << "\t\t-----------------------------\n";
    cout << "请选择你的操作:" << endl;
}
//查看所有预约
void teacher::showAllOrder()
{
    orderfile of;
    if (of.m_Size == 0) { //这里的size是对象全部的预约记录
        cout << "无预约记录" << endl;
        system("pause");
        system("cls");
    } else {
        for (int i = 0; i < of.m_Size; i++) {
            cout << i + 1 << ":";
            cout << "预约日期: 周" << of.m_orderData[i]["date"];
            cout << " 时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
            cout << " 学号:" << of.m_orderData[i]["stuid"];
            cout << " 姓名:" << of.m_orderData[i]["stuname"];
            cout << " 机房:" << of.m_orderData[i]["roomid"];
            string status = " 状态 "; // 0取消 1审核中 2 成功  -1 失败
            if (of.m_orderData[i]["status"] == "1") {
                status += "审核中";
            } else if (of.m_orderData[i]["status"] == "2") {
                status += "预约成功";
            } else if (of.m_orderData[i]["status"] == "-1") {
                status += "预约失败";
            } else {
                status += "预约取消";
            }
            cout << status << endl;
        }
    }

    system("pause");
    system("cls");
}
//审核预约
void teacher::validOrder()
{
    orderfile of;
    if (of.m_Size == 0) {
        cout << "无预约记录" << endl;
        system("pause");
        system("cls");
    }
    cout << "待审核的预约记录如下:" << endl;
    vector<int> v;
    int index = 0;
    for (int i = 0; i < of.m_Size; i++) {
        if (of.m_orderData[i]["status"] == "1") {
            v.push_back(i);
            cout << ++index << "、";
            cout << "预约日期: 周" << of.m_orderData[i]["date"];
            cout << " 时段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
            cout << " 学号:" << of.m_orderData[i]["stuid"];
            cout << " 姓名:" << of.m_orderData[i]["stuname"];
            cout << " 机房:" << of.m_orderData[i]["roomid"];
            string status = " 状态 "; // 0取消 1审核中 2 成功  -1 失败
            if (of.m_orderData[i]["status"] == "1") {
                status += "审核中";
            }
            cout << status << endl;
        }
    }
    cout << "请输入审核的预约记录,0代表返回" << endl;
    int select = 0;
    int ret = 0;
    while (true) {
        cin >> select;
        if (select >= 0 && select <= (int)v.size()) {
            if (select == 0) {
                break;
            } else {
                cout << "请输入审核结果" << endl;
                cout << "1. 通过" << endl;
                cout << "2. 不通过" << endl;
                cin >> ret;
                if (ret == 1) {
                    //通过
                    of.m_orderData[v[select - 1]]["status"] = "2";

                } else {
                    //不通过
                    of.m_orderData[v[select - 1]]["status"] = "-1";
                }
                of.updateOrder(); //更新
                cout << "审核完毕" << endl;
                break;
            }
        }
        cout << "输入有误,请重新输入" << endl;
    }
    system("pause");
    system("cls");
}

main.cpp

#include "identity.h"
#include "manager.h"
#include "student.h"
#include "teacher.h"
#include <codecvt>
#include <fstream>
#include <iostream>
using namespace std;
#include "globalFile.h"

//提供全局的函数
// void managerMenu(manager* m) //用指针调用,管理员的引用
//管理员子菜单界面
void managerMenu(identity*& m) //用指针调用,管理员的引用

{
    while (true) {
        //调用管理员子菜单
        m->operMenu();

        //将父类指针转为子类指针
        manager* man = (manager*)m;

        int select = 0;
        cin >> select;
        if (select == 1) {
            //添加账号
            man->addPerson();

        } else if (select == 2) {
            //查看账号
            man->showPerson();

        } else if (select == 3) {
            //查看机房
            man->showComputer();
        } else if (select == 4) {
            //清空预约
            man->cleanFile();
        } else {
            delete m; //销毁堆区对象
            cout << "注销成功" << endl;
            system("pause");
            system("cls");
            return;
        }
    }
}

//进入学生子菜单界面
void studentMenu(identity*& s)
{
    while (true) {
        s->operMenu();
        //转换
        student* stu = (student*)s;
        int select = 0;
        cin >> select;
        if (select == 1) {
            //申请预约
            stu->applyOrder();
        } else if (select == 2) {
            //查看自身预约
            stu->showMyOrder();
        } else if (select == 3) {
            //查看所有人预约
            stu->showAllOrder();
        } else if (select == 4) {
            //取消预约
            stu->cancelOrder();
        } else {
            //注销登录
            delete s;
            cout << "注销成功" << endl;
            system("pause");
            system("cls");
            return;
        }
    }
}

//老师子菜单界面
void teacherMenu(identity*& t) //用指针调用,管理员的引用

{
    while (true) {
        //调用管理员子菜单
        t->operMenu();

        //将父类指针转为子类指针
        teacher* tea = (teacher*)t;

        int select = 0;
        cin >> select;
        if (select == 1) {
            //显示所有预约
            tea->showAllOrder();

        } else if (select == 2) {
            //审核预约
            tea->validOrder();

        } else {
            delete t; //销毁堆区对象
            cout << "注销成功" << endl;
            system("pause");
            system("cls");
            return;
        }
    }
}

//登录功能 文件名称 身份类型
void LoginIn(string filename, int type)
{
    //父类指针指向子类对象,目前为空
    identity* person = NULL;
    //读文件
    ifstream ifs;
    ifs.open(filename, ios::in);
    //判断文件是否存在
    if (!ifs.is_open()) {
        cout << "文件不存在" << endl;
        ifs.close();
        return;
    }
    //准备接收用户的信息
    int id = 0;
    string name;
    string pwd;
    //判断身份
    if (type == 1) {
        cout << "请输入你的学号" << endl;
        cin >> id;
    } else if (type == 2) {
        cout << "请输入你的职工号" << endl;
        cin >> id;
    }
    cout << "请输入用户名" << endl;
    cin >> name;
    cout << "请输入密码" << endl;
    cin >> pwd;
    if (type == 1) {
        //学生身份验证

        int fid;
        string fname;
        string fpwd;
        //这里需要把文件格式改为ansi格式,暂时不知道读取文件怎么指定utf8格式
        while (ifs >> fid && ifs >> fname && ifs >> fpwd) {
            cout << fid << fname << fpwd << endl;
            //对比
            if (fid == id && fname == name && fpwd == pwd) {
                cout << "学生验证登录成功!" << endl;
                system("pause");
                system("cls");
                person = new student(id, name, pwd);
                //进入学生身份的子菜单
                studentMenu(person);
                return;
            }
        }

    } else if (type == 2) {
        //老师
        int fid;
        string fname;
        string fpwd;
        //这里需要把文件格式改为ansi格式,暂时不知道读取文件怎么指定utf8格式
        while (ifs >> fid && ifs >> fname && ifs >> fpwd) {
            cout << fid << fname << fpwd << endl;
            //对比
            if (fid == id && fname == name && fpwd == pwd) {
                cout << "老师验证登录成功!" << endl;
                system("pause");
                system("cls");
                person = new teacher(id, name, pwd);
                //进入老师身份的子菜单
                teacherMenu(person);
                return;
            }
        }

    } else if (type == 3) {
        //管理员
        string fname;
        string fpwd;
        //这里需要把文件格式改为ansi格式,暂时不知道读取文件怎么指定utf8格式
        while (ifs >> fname && ifs >> fpwd) {
            //            cout << fname << fpwd << endl;
            //对比
            if (fname == name && fpwd == pwd) {
                cout << "管理员验证登录成功!" << endl;
                system("pause");
                system("cls");
                person = new manager(name, pwd);
                //进入管理员身份的子菜单
                managerMenu(person);
                return;
            }
        }
    }
    cout << "验证登录失败" << endl;
    system("pause");
    system("cls");
}
int main()
{
    int select; //用于接收用户的选择
    while (true) {
        cout << "==================== 欢迎来到机房预约系统 ====================" << endl;
        cout << endl
             << "请输入你的身份" << 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|         0.退出            |\n";
        cout << "\t\t|                           |\n";
        cout << "\t\t-----------------------------\n";
        cout << "请输入你的选择:";
        cin >> select; //接收用户选择
        switch (select) {
        case 1:
            LoginIn(STUDENT_FILE, 1);

            break;
        case 2:
            LoginIn(TEACHER_FILE, 2);

            break;
        case 3:
            LoginIn(ADMIN_FILE, 3);

            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            exit(0);
            break;
        default:
            cout << "输入有误,请重新选择" << endl;
            system("pause");
            system("cls");
            break;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值