c++机房预约系统

拿clion写的机房预约系统

目录结构

 配置文件CMakeLists.txt

cmake_minimum_required(VERSION 3.25)
project(mach_room_reservation)

set(CMAKE_CXX_STANDARD 17)

add_executable(mach_room_reservation main.cpp student student.cpp teacher teacher.cpp manager manager.cpp orderFile orderFile.cpp)

computerRoom.h

//
// Created by Cauchyshy on 2023/5/7.
//

#ifndef MACH_ROOM_RESERVATION_COMPUTERROOM_H
#define MACH_ROOM_RESERVATION_COMPUTERROOM_H

#endif //MACH_ROOM_RESERVATION_COMPUTERROOM_H

#pragma once
#include <iostream>

using namespace std;

// 机房类
class ComputerRoom {
public:
    int m_ComId; // 机房id号
    int m_MaxNum; // 机房最大容量
};

globalFile.h

//
// Created by Cauchyshy on 2023/5/6.
//

#ifndef MACH_ROOM_RESERVATION_GLOBALFILE_H
#define MACH_ROOM_RESERVATION_GLOBALFILE_H

#endif //MACH_ROOM_RESERVATION_GLOBALFILE_H

/*
 * 不同身份可能会用到不同的文件操作 我们可以将所有的文件名定义到一个全局的文件中
 * */

#pragma once

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

indentity.h

//
// Created by Cauchyshy on 2023/5/6.
//

#ifndef MACH_ROOM_RESERVATION_IDENTITY_H
#define MACH_ROOM_RESERVATION_IDENTITY_H

#endif //MACH_ROOM_RESERVATION_IDENTITY_H
/*
 * 身份基类
 * */
#pragma once
#include <iostream>

using namespace std;

// 身份抽象基类
class Identity {
public:
    // 操作菜单
    virtual void operMenu() = 0;
    string m_Name; // 用户名
    string m_Pwd; // 密码
};

main.cpp

#include <bits/stdc++.h>
#include "identity.h"
#include "globalFile.h"
#include "student.h"
#include "teacher.h"
#include "manager.h"

using namespace std;
// 管理员管理的菜单
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->clearFile();
        } else {
            delete manager;
            cout << "注销成功" << endl;
            system("pause");
            system("cls");
            return ;
        }
    }
}

// 学生菜单的管理
void studentMenu(Identity * &student) {
    while (true) {
        // 学生菜单
        student->operMenu();
        Student * stu = (Student *)student;
        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 student;
            cout << "注销成功" << endl;
            system("pause");
            system("cls");
            return ;
        }
    }
}

// 教师菜单管理
void teacherMenu(Identity * &teacher) {
    while (true) {
        // 教师菜单
        teacher->operMenu();
        Teacher * tea = (Teacher *)teacher;
        int select = 0;
        cin >> select;
        if (select == 1) {
            // 查看所有预约
            tea->showAllOrder();
        } else if (select == 2) {
            // 审核预约
            tea->validOrder();
        } else {
            delete teacher;
            cout << "注销成功" << endl;
            system("pause");
            system("cls");
            return ;
        }
    }
}

// fileName 操作的文件名 type 登录的身份(1->学生 2->教师 3->管理员)
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; // 文件中读到的密码
        while (ifs >> fId && ifs >> fName && ifs >> fPwd) {
            if (id == fId && name == fName && pwd == fPwd) {
                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; // 文件中读到的密码
        while (ifs >> fId && ifs >> fName && ifs >> fPwd) {
            if (id == fId && name == fName && pwd == fPwd) {
                cout << "教师验证登录成功!" << endl;
                system("pause");
                system("cls");
                // 创建教师对象
                person = new Teacher(id, name, pwd);
                // 进入教师功能子菜单
                teacherMenu(person);
                return ;
            }
        }

    } else if (type == 3) {
        // 管理员身份验证 管理员用户名密码
        string fName; // 文件中管理员姓名
        string fPwd; // 文件中密码
        while (ifs >> fName && ifs >> fPwd) {
            if (name == fName && pwd == fPwd) {
                cout << "管理员验证登录成功" << endl;
                system("pause");
                system("cls");
                // 创建管理员对象
                person = new Manager(name, pwd);
                // 管理员功能子菜单
                managerMenu(person);
                return ;
            }
        }
    }
    cout << "验证登录失败" << endl;

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

int main() {
    char select = '0'; // 改成字符 防止输入字符死循环

    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 << "输入您的选择: " << endl;
        // 接收用户选择
        cin >> select;
        switch (select - '0') {
            case 0: // 退出功能
                cout << "欢迎下次使用!" << endl;
                system("pause");
                return 0;
                // break;
            case 1: // 学生身份
                LoginIn(STUDENT_FILE, 1);
                break;
            case 2: // 老师身份
                LoginIn(TEACHER_FILE, 2);
                break;
            case 3: // 管理员身份
                LoginIn(ADMIN_FILE, 3);
                break;
            default:
                cout << "输入有误,请重新选择!" << endl;
                system("pause");
                system("cls");
                break;
        }
    }
    system("pause");
    return 0;
}

manager.cpp

//
// Created by Cauchyshy on 2023/5/6.
//
#include "manager.h"

// 检测有无重复
bool Manager::checkRepeat(int id, int type) {
    if (type == 1) {
        for (auto t : this->vStu) {
            if (id == t.m_Id) {
                return true;
            }
        }
    } else {
        for (auto t : this->vTea) {
            if (id == t.m_EmpId) {
                return true;
            }
        }
    }

    return false;
}

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

}
// 有参构造(管理员姓名, 密码)
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 c;
    while (ifs >> c.m_ComId && ifs >> c.m_MaxNum) {
        vCom.push_back(c);
    }
    cout << "当前的机房数量为: " << vCom.size() << endl;
    ifs.close();
}
// 选择菜单
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; // 提示
    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;
    // cin >> id;
    // 检查有无重复
    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();
}

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 if (select == 2){
        cout << "所有教师信息如下: " << endl;
        for_each(vTea.begin(), vTea.end(), printTeacher);
    } else {
        cout << "没有你想要输入的选项哦,重新输入吧" << endl;
    }
    system("pause");
    system("cls");
}
// 查看机房信息
void Manager::showComputer() {
    cout << "机房信息如下: " << endl;
    for (auto &t : vCom) {
        cout << "机房编号: " << t.m_ComId << " 机房最大容量: " << t.m_MaxNum << endl;
    }
    system("pause");
    system("cls");
}
// 清空预约记录
void Manager::clearFile() {
    ofstream ofs(ORDER_FILE, ios::trunc); // 如果文件存在 先删除再创建
    ofs.close();
    cout << "清空预约成功!" << endl;
    system("pause");
    system("cls");
}

manager.h

//
// Created by Cauchyshy on 2023/5/6.
//

#ifndef MACH_ROOM_RESERVATION_MANAGER_H
#define MACH_ROOM_RESERVATION_MANAGER_H

#endif //MACH_ROOM_RESERVATION_MANAGER_H
/*
 * 管理员类
 * 功能
 * 1.显示管理员操作的菜单界面
 * 2.添加账号
 * 3.查看账号
 * 4.查看机房信息
 * 5.清空预约记录
 * */
#pragma once
#include "identity.h"
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <map>
#include <set>
#include <deque>
#include <algorithm>
#include <functional>
#include <numeric>
#include <ctime>
#include "student.h"
#include "teacher.h"
#include "globalFile.h"
#include "computerRoom.h"

using namespace std;

class Manager :public Identity {
public:
    // 学生容器
    vector<Student> vStu;
    // 教师容器
    vector<Teacher> vTea;
    // 机房容器
    vector<ComputerRoom> vCom;
    // 初始化容器
    void initVector();
    // 默认构造
    Manager();
    // 有参构造(管理员姓名, 密码)
    Manager(string name, string pwd);
    // 选择菜单
    virtual void operMenu();
    // 添加账号
    void addPerson();
    // 查看账号
    void showPerson();
    // 查看机房信息
    void showComputer();
    // 清空预约记录
    void clearFile();

    // 检测重复 参数(id, type) true表示有重复 false表示没有重复
    bool checkRepeat(int id, int type);
};

orderFile.cpp

//
// Created by Cauchyshy on 2023/5/7.
//
#include "orderFile.h"

using namespace std;

// 构造函数
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) {
        string key;
        string value;
        map<string ,string> m;
        int pos = date.find(":");
        if (pos != -1) {
            key = date.substr(0, pos);
            value = date.substr(pos + 1, date.size() - pos - 1);
            m.insert(make_pair(key, value));
        }

        pos = interval.find(":");
        if (pos != -1) {
            key = interval.substr(0, pos);
            value = interval.substr(pos + 1, interval.size() - pos - 1);
            m.insert(make_pair(key, value));
        }

        pos =stuId.find(":");
        if (pos != -1) {
            key = stuId.substr(0, pos);
            value = stuId.substr(pos + 1, stuId.size() - pos - 1);
            m.insert(make_pair(key, value));
        }

        pos = stuName.find(":");
        if (pos != -1) {
            key = stuName.substr(0, pos);
            value = stuName.substr(pos + 1, stuName.size() - pos - 1);
            m.insert(make_pair(key, value));
        }

        pos = roomId.find(":");
        if (pos != -1) {
            key = roomId.substr(0, pos);
            value = roomId.substr(pos + 1, roomId.size() - pos - 1);
            m.insert(make_pair(key, value));
        }


        pos = status.find(":");
        if (pos != -1) {
            key = status.substr(0, pos);
            value = status.substr(pos + 1, status.size() - pos - 1);
            m.insert(make_pair(key, value));
        }
        this->m_orderData.insert(make_pair(this->m_Size, m));
        this->m_Size++;
    }
    ifs.close();
    // 测试
//    for (auto &it : m_orderData) {
//        cout << "key = " << it.first << " value = " << endl;
//        for (auto mit : it.second) {
//            cout << "key = " << mit.first << " value = " << mit.second << " ";
//        }
//        cout << 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();
}

orderFile.h

//
// Created by Cauchyshy on 2023/5/7.
//

#ifndef MACH_ROOM_RESERVATION_ORDERFILE_H
#define MACH_ROOM_RESERVATION_ORDERFILE_H

#endif //MACH_ROOM_RESERVATION_ORDERFILE_H

#pragma once
#include <map>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include "globalFile.h"

using namespace std;

class OrderFile {
public:
    // 构造函数
    OrderFile();

    // 更新预约记录
    void updateOrder();

    // 记录的容器 key---记录的条数 value 具体记录的键值对信息
    map<int, map<string, string>> m_orderData;

    // 预约记录条数
    int m_Size;
};

student.cpp

//
// Created by Cauchyshy on 2023/5/6.
//
#include "student.h"

// 默认构造
Student::Student() {

}

// 有参构造(学号, 姓名, 密码)
Student::Student(int id, std::string name, std::string pwd) {
    this->m_Id = id;
    this->m_Name = name;
    this->m_Pwd = pwd;
    // 获取机房信息
    ifstream ifs(COMPUTER_FILE, ios::in);
    ComputerRoom c;
    while (ifs >> c.m_ComId && ifs >> c.m_MaxNum) {
        vCom.push_back(c);
    }
    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;
    cout << "1号机房容量: " << vCom[0].m_MaxNum << endl;
    cout << "2号机房容量: " << vCom[1].m_MaxNum << endl;
    cout << "3号机房容量: " << vCom[2].m_MaxNum << endl;

    while (true) {
        cin >> room;
        if (room >= 1 && room <= 3) break;
        cout << "输入有误,请重新输入!" << endl;
    }
    cout << "预约成功,审核中" << endl;
    ofstream ofs(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;
    if (of.m_Size == 0) {
        cout << "无预约记录!" << endl;
        system("pause");
        system("cls");
        return ;
    }
    for (int i = 0; i < of.m_Size; ++i) {
        // string 通过.c_str转换为 const char *
        // atoi 把const char * 转化为 int
        if (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_Id) {
            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) {
        cout << "无预约记录!" << endl;
        system("pause");
        system("cls");
        return ;
    }
    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");
        return ;
    }
    cout << "审核中或预约成功的记录可以取消,请输入取消的记录: " << endl;
    vector<int> v;
    int index = 1;
    // 先找到该人的记录再取消
    for (int i = 0; i < of.m_Size; ++i) {
        if (atoi(of.m_orderData[i]["stuId"].c_str()) == this->m_Id) {
            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代表返回" << endl;
    int select = 0;
    while (true) {
        cin >> select;
        if (select >= 0 && select <= v.size()) {
            if (select == 0) break; // 没有记录
            else {
                of.m_orderData[v[select - 1]]["status"] = "0";
                of.updateOrder();
                cout << "已取消预约" << endl;
                break;
            }
        }
        cout << "输入有误,请重新输入!" << endl;
    }
    system("pause");
    system("cls");
}

student.h

//
// Created by Cauchyshy on 2023/5/6.
//

#ifndef MACH_ROOM_RESERVATION_STUDENT_H
#define MACH_ROOM_RESERVATION_STUDENT_H

#endif //MACH_ROOM_RESERVATION_STUDENT_H
/*
 * 学生类
 * 功能
 * 1.显示学生操作的菜单界面
 * 2.申请预约
 * 3.查看自身预约
 * 4.查看所有预约
 * 5.取消预约
 * */
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <fstream>
#include <functional>
#include "identity.h"
#include "globalFile.h"
#include "computerRoom.h"
#include "orderFile.h"

using namespace std;

//学生类
class Student :public Identity {
public:
    // 在申请预约时 学生可以看到机房信息 因此我们需要让学生获取到机房信息
    // 机房容器
    vector<ComputerRoom> vCom;

    // 默认构造
    Student();
    // 学号
    int m_Id;

    // 有参构造(学号, 姓名, 密码)
    Student(int id, string name, string pwd);

    // 菜单界面
    virtual void operMenu();

    // 申请预约
    void applyOrder();

    // 查看我的预约
    void showMyOrder();

    // 查看所有预约
    void showAllOrder();

    // 取消预约
    void cancelOrder();
};

teacher.cpp

//
// Created by Cauchyshy on 2023/5/6.
//
#include "teacher.h"

using namespace std;

// 默认构造
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) {
        cout << "无预约记录" << endl;
        system("pause");
        system("cls");
        return ;
    }
    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");
        return ;
    }
    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]["roomId"];
            string status = "状态: "; // 0取消预约 1审核中 2已预约 -1预约失败
            //if (of.m_orderData[i]["status"] == "1") {
            status += "审核中";
            //}
            cout << endl;
        }
    }
    cout << "请输入审核的预约记录,0代表返回" << endl;
    int select = 0;
    int ret = 0;
    while (true) {
        cin >> select;
        if (select >= 0 && select <= 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");
}

teacher.h

//
// Created by Cauchyshy on 2023/5/6.
//

#ifndef MACH_ROOM_RESERVATION_TEACHER_H
#define MACH_ROOM_RESERVATION_TEACHER_H

#endif //MACH_ROOM_RESERVATION_TEACHER_H
/*
 * 教师类
 * 主要功能
 * 1.显示教师操作菜单界面
 * 2.查看所有预约
 * 3.审核预约
 * */

#pragma once
#include <iostream>
#include <string>
#include "identity.h"
#include "globalFile.h"
#include "orderFile.h"

using namespace std;

class Teacher :public Identity {
public:
    int m_EmpId; // 教师编号
    // 默认构造
    Teacher();

    // 有参构造(职工编号, 姓名, 密码)
    Teacher(int empId, string name, string pwd);
    // 菜单界面
    virtual void operMenu();
    // 查看所有预约
    void showAllOrder();

    // 审核预约
    void validOrder();
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值