【C++中级项目】机房预约系统

简介: 【C++中级项目】机房预约系统
  1. 引言

机房资源在现代社会中起着越来越重要的作用,为了高效地管理和利用机房资源,我们设计了一个基于C++的机房预约系统。该系统能够实现学生或教职工对机房进行预约、查询和管理等操作,提高机房资源的利用率和管理效率。

  1. 背景和需求分析

当前,大学机房资源管理普遍存在以下问题:

  • 学生和教职工需要手动填写纸质申请表格,工作效率低下。
  • 预约冲突经常发生,造成资源浪费和冲突处理困难。
  • 难以对机房使用情况进行统计和分析。

因此,我们的机房预约系统有以下主要需求:

  • 学生和教职工可以通过登录系统进行机房预约。
  • 系统能够检测预约冲突并及时提示用户。
  • 管理员能够对机房进行管理和统计。
  1. 系统设计

基于以上需求,我们设计了如下系统模块:

  • 用户模块:包括学生和教职工用户,负责用户登录、注册和修改个人信息等功能。
  • 机房模块:负责机房资源的维护,包括增加、删除和查询机房等操作。
  • 预约模块:负责预约机房和处理预约冲突等操作。
  • 管理模块:负责管理员登录和对机房资源进行管理和统计。
  1. 系统实现

我们使用C++语言进行系统开发,主要采用以下技术和方法:

  • 面向对象编程思想:使用类和对象进行模块封装和功能实现。
  • 文件读写操作:使用文件存储机房和用户信息,实现数据的持久化。
  • 错误处理机制:通过异常处理和错误提示,保证系统的稳定性和可靠性。
  1. 结果与分析

经过实际测试,我们的机房预约系统实现了预约、查询和管理等功能,并且能够准确检测出预约冲突并及时提示用户。系统界面操作简单直观,用户易于上手。通过系统统计功能,管理员能够方便地获取机房使用情况和预约记录,便于管理和决策。

首先,选择身份后进入系统

若选择学生身份,输入用户名密码之后进入学生子菜单,可申请或查看、取消预约

预约流程:

查看预约:

若选择教师身份,输入职工号,用户名和密码后,进入教师子菜单

在这里审核预约:

若选择管理员身份,输入用户名和密码后进入管理员子菜单

可添加学生或老师账号

可查看学生或老师的账号

查看机房或清空预约

  1. 总结与展望

本次开发了一个基于C++的机房预约系统,实现了高效的机房资源管理。然而,目前系统还存在一些局限性,比如用户界面可视化程度不高,操作不够友好。后续也希望读者提出宝贵的意见,我会进一步改进系统的用户界面,增加更多的功能模块,提高系统的稳定性和可扩展性。

总之,基于C++的机房预约系统是一项具有实际意义和应用前景的工作。通过不断优化和改进,该系统将在实际运行中发挥更大的作用,提高机房资源的利用率和管理效率。

  1. 代码实现

用于定义身份的抽象类:identity.h

#pragma once
#include<iostream>
#include<string>
using namespace std;
class Identity {
public:
  string name;
  string pwd;
  virtual void operMenu() = 0;
};

继承它的子类:manager.h

#pragma once
#include<fstream>
#include"identity.h"
#include"student.h"
#include"teacher.h"
#include"computerroom.h"
#include"orders.h"
using namespace std;
class Manager : public Identity {
public:
  vector<Student> vStu;
  vector<Teacher> vTea;
  vector<ComputerRoom> vCom;
  Manager() = default;
  Manager(string name, string pwd);
  //菜单界面
  void operMenu();
  //添加账号
  void addPerson();
  //查看账号
  void showPerson();
  //查看机房信息
  void showComputer();
  //清空预约记录
  void cleanFile();
  //初始化容器
  void initVector();
  //检查是否重复
  bool isRepeat(int id, int type);
};

类的实现:manager.cpp

#include "manager.h"
Manager::Manager(string name, string pwd) {
  this->name = name;
  this->pwd = pwd;
  initVector();
}
void Manager::operMenu() {
  cout << "欢迎管理员:" << this->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 << "请输入你的选择:";
}
void Manager::addPerson() {
  cout << "请输入添加账号的类型" << endl;
  cout << "1.添加学生" << endl;
  cout << "2.添加老师" << endl;
  int choice;
  cin >> choice;
  string fileName, tip;
  ofstream ofs;
  if (choice == 1) {
    fileName = STUDENT_FILE;
    cout << "请输入学号" << endl;
    tip = "输入的学号重复";
  }
  else if (choice == 2) {
    fileName = TEACHER_FILE;
    cout << "请输入职工号" << endl;
    tip = "输入的职工号重复,请重新输入";
  }
  ofs.open(fileName, ios::out | ios::app);
  int id;
  string name, pwd;
  while (true) {
    cin >> id;
    if (!isRepeat(id, choice)) break;
    cout << tip << endl;
  }
  cout << "请输入姓名:";
  cin >> name;
  cout << "请输入密码:";
  cin >> pwd;
  ofs << id << " " << name << " " << pwd << " " << endl;
  cout << "添加成功!" << endl;
  //刷新vector
  if (choice == 1) {
    Student s;
    s.id = id;
    s.name = name;
    s.pwd = pwd;
    vStu.push_back(s);
  }
  else if (choice == 2) {
    Teacher t;
    t.empId = id;
    t.name = name;
    t.pwd = pwd;
    vTea.push_back(t);
  }
  system("pause");
  system("cls");
}
void Manager::showPerson() {
  cout << "请选择查看内容:" << endl;
  cout << "1.显示学生信息" << endl;
  cout << "2.显示老师信息"  << endl;
  int choice;
  cin >> choice;
  if (choice == 1) {
    for (int i = 0; i < vStu.size(); i++)
      cout << "学号:" << vStu[i].id << " 姓名:" 
      << vStu[i].name << "密码:" << vStu[i].pwd << endl;
  }
  else if (choice == 2) {
    for (int i = 0; i < vTea.size(); i++)
      cout << "职工号:" << vTea[i].empId << " 姓名:"
      << vTea[i].name << "密码:" << vTea[i].pwd << endl;
  }
  system("pause");
  system("cls");
}
void Manager::showComputer() {
  cout << "机房信息如下:" << endl;
  for (int i = 0; i < vCom.size(); i++) {
    cout << "机房编号:" << vCom[i].roomId
      << " 机房容量:" << vCom[i].maxNum << endl;
  }
  system("pause");
  system("cls");
}
void Manager::cleanFile() {
  ofstream ofs(ORDER_FILE, ios::trunc);
  ofs.close();
  cout << "清空成功" << endl;
  system("pause");
  system("cls");
}
void Manager::initVector() {
  vStu.clear();
  vTea.clear();
  vCom.clear();
  //读取信息
  //读取学生文件
  ifstream ifs(STUDENT_FILE, ios::in);
  if (!ifs.is_open()) {
    cout << "文件读取失败!" << endl;
    return;
  }
  Student s;
  while (ifs >> s.id && ifs >> s.name && ifs >> s.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.empId && ifs >> t.name && ifs >> t.pwd) {
    vTea.push_back(t);
  }
  //cout << "当前老师数量为:" << vTea.size() << endl;
  ifs.close();
  //读取机房文件
  ifs.open(COMPUTER_FILE, ios::in);
  if (!ifs.is_open()) {
    cout << "文件读取失败!" << endl;
    return;
  }
  ComputerRoom com;
  while (ifs >> com.roomId && ifs >> com.maxNum) {
    vCom.push_back(com);
  }
  ifs.close();
}
bool Manager::isRepeat(int id, int type) {
  //检查学生
  if (type == 1) 
    for (int i = 0; i < vStu.size(); i++) 
      if (id == vStu[i].id) return true;
  else if (type == 2) 
    for (int i = 0; i < vTea.size(); i++) 
      if (id == vTea[i].empId) return true;
  return false;
}

第二个子类:teacher.h

#pragma once
#include<iostream>
#include<string>
#include"identity.h"
#include"orders.h"
using namespace std;
class Teacher : public Identity {
public:
  int empId;  //职工号
  Teacher();
  Teacher(int empId, string name, string pwd);
  //菜单界面
  void operMenu();
  //查看所有预约
  void showAllOrder();
  //审核预约
  void validOrder();
};

它的实现:teacher.cpp

#include "teacher.h"
Teacher::Teacher() {
}
Teacher::Teacher(int id, string name, string pwd) {
  this->empId = id;
  this->name = name;
  this->pwd = pwd;
}
void Teacher::operMenu() {
  cout << "欢迎教师:" << this->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 << "请输入你的选择:";
}
void Teacher::showAllOrder() {
  Orders ord;
  ord.showOrders();
}
void Teacher::validOrder() {
  Orders ord;
  if (ord.orderCnt == 0) cout << "无预约记录" << endl;
  else {
    cout << "目前所有预约记录如下:" << endl;
    ord.showOrders();
    cout << "请选择要审核的记录:" << endl;
    int choice = 0;
    while (choice < 1 || choice > ord.orderCnt) {
      cin >> choice;
      if (choice < 1 || choice > ord.orderCnt) cout << "请输入正确的预约记录编号" << endl;
    }
    int res = 0;
    cout << "请输入审核结果:" << endl;
    cout << "1.通过" << endl;
    cout << "2.不通过" << endl;
    cin >> res;
    ord.validStatus(choice, res);
  }
}

第三个子类:student.h

#pragma once
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
#include"identity.h"
#include"computerroom.h"
#include"globalfile.h"
#include"orders.h"
using namespace std;
class Student : public Identity {
public:
  int id;
  vector<ComputerRoom> vCom;
  Student() = default;
  Student(int id, string name, string pwd);
  //菜单界面
  void operMenu();
  //申请预约
  void applyOrder();
  //查看自身预约
  void showMyOrder();
  //查看所有预约
  void showAllOrder();
  //取消预约
  void cancelOrder();
  //初始化容器
  void initVector();
};

它的实现:student.cpp

#include"student.h"
Student::Student(int id, string name, string pwd) {
  this->id = id;
  this->name = name;
  this->pwd = pwd;
  //初始化机房信息
  initVector();
}
void Student::operMenu() {
  cout << "欢迎学生:" << this->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 << "请输入你的选择:";
}
void Student::applyOrder() {
  int date = 0, interval = 0, room = 0;
  cout << "机房开放时间为周一至周五" << endl;
  cout << "请输入申请预约的时间" << endl;
  cout << "1.周一" << endl;
  cout << "2.周二" << endl;
  cout << "3.周三" << endl;
  cout << "4.周四" << endl;
  cout << "5.周五" << endl;
  while (date < 1 || date > 5) {
    cin >> date;
    if (date < 1 || date > 5) cout << "请输入正确的时间" << endl;
  }
  cout << "请输入申请预约的时间段" << endl;
  cout << "1.上午" << endl;
  cout << "2.下午" << endl;
  while (interval < 1 || interval > 2) {
    cin >> interval;
    if (interval < 1 || interval > 2) cout << "请输入正确的时间段" << endl;
  }
  cout << "请输入申请预约的机房" << endl;
  cout << "机房信息如下:" << endl;
  for (int i = 0; i < vCom.size(); i++) {
    cout << "机房编号:" << vCom[i].roomId
      << " 机房容量:" << vCom[i].maxNum << endl;
  }
  while (room < 1 || room > vCom.size()) {
    cin >> room;
    if (room < 1 || room >= vCom.size()) cout << "请输入正确的机房号" << endl;
  }
  cout << "预约成功!审核中" << endl;
  //将审核信息写入到文件中
  ofstream ofs(ORDER_FILE, ios::app);
  ofs << "date:" << date << " " << "interval:" << interval << " "
    << "student_id:" << this->id << " "
    << "student_name:" << this->name << " "
    << "room_id:" << room << " "
    << "status:" << 1 << endl;
  ofs.close();
}
void Student::showMyOrder() {
  Orders ord;
  if (ord.orderCnt == 0) cout << "预约记录为空" << endl;
  else ord.showOneOrder(this->id);
}
void Student::showAllOrder() {
  Orders ord;
  ord.showOrders();
}
void Student::cancelOrder() {
  Orders ord;
  if (ord.orderCnt == 0) cout << "无预约记录" << endl;
  else {
    cout << "目前您所有的预约记录如下所示:" << endl;
    ord.showOneOrder(this->id);
    cout << "请选择要取消的预约记录编号:";
    int input = 0;
    while (input <= 0 || input > ord.orderCnt) {
      cin >> input;
      if (input <= 0 || input > ord.orderCnt) cout << "输入序号有误,请重新输入" << endl;
    }
    ord.setStatusCancel(input, this->id);   
  }
} 
void Student::initVector() {
  ifstream ifs(COMPUTER_FILE, ios::in);
  if (!ifs.is_open()) {
    cout << "文件读取失败!" << endl;
    return;
  }
  ComputerRoom com;
  while (ifs >> com.roomId && ifs >> com.maxNum) {
    vCom.push_back(com);
  }
  ifs.close();
}

用于记录机房信息的类:computerroom.h

#pragma once
#include<iostream>
#include<string>
#include<vector>
#include"globalfile.h"
using namespace std;
class ComputerRoom {
public:
  int roomId;
  int maxNum;
};

用于预约操作的类:orders.h

#pragma once
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
#include<map>
#include"globalfile.h"
#include"identity.h"
#include"student.h"
using namespace std;
class Orders {
public:
  //记录预约条数
  int orderCnt; 
  Orders();
  //更新预约记录
  void updateOrder();
  //初始化预约信息
  void initFile();
  //查看预约
  void showOrders();
  //查看某人的预约
  void showOneOrder(int id);
  //设为取消预约
  void setStatusCancel(int item, int id);
  //审核
  void validStatus(int item, int res);
private:
  //记录预约信息
  map<int, map<string, string>> mOrder;
};

orders.cpp

#include "orders.h"
Orders::Orders() {
  this->initFile();
}
void Orders::updateOrder() {
  if (this->orderCnt == 0) return;
  ofstream ofs(ORDER_FILE, ios::trunc);
  for (auto it = mOrder.begin(); it != mOrder.end(); it++) {
    ofs << "date:" << it->second["date"];
    ofs << " interval:" << it->second["interval"];
    ofs << " student_id:" << it->second["student_id"];
    ofs << " student_name:" << it->second["student_name"];
    ofs << " room_id:" << it->second["room_id"];
    ofs << " status:" << it->second["status"] << endl;
  }
  ofs.close();
}
void Orders::initFile() {
  ifstream ifs(ORDER_FILE, ios::in);
  if (!ifs.is_open()) {
    cout << "文件不存在!" << endl;
    return;
  }
  //将每一条预约记录写入到内存区
  string date, interval, stuId, stuName, roomId, status;
  this->orderCnt = 0;
  while (ifs >> date && ifs >> interval && ifs >> stuId && ifs >> stuName && ifs >> roomId && ifs >> status) {
    map<string, string> m;
    m.insert(make_pair(date.substr(0, date.find(":")), date.substr(date.find(":") + 1, date.size() - 1)));
    m.insert(make_pair(interval.substr(0, interval.find(":")), interval.substr(interval.find(":") + 1, interval.size() - 1)));
    m.insert(make_pair(stuId.substr(0, stuId.find(":")), stuId.substr(stuId.find(":") + 1, stuId.size() - 1)));
    m.insert(make_pair(stuName.substr(0, stuName.find(":")), stuName.substr(stuName.find(":") + 1, stuName.size() - 1)));
    m.insert(make_pair(roomId.substr(0, roomId.find(":")), roomId.substr(roomId.find(":") + 1, roomId.size() - 1)));
    m.insert(make_pair(status.substr(0, status.find(":")), status.substr(status.find(":") + 1, status.size() - 1)));
    mOrder.insert(make_pair(++orderCnt, m));
  }
}
void Orders::showOrders() {
  for (auto it = mOrder.begin(); it != mOrder.end(); it++) {
    cout << "第" << it->first << "条预约记录" << endl;
    cout << "预约时间:周" << it->second["date"];
    cout << " 预约时间段:" << (it->second["interval"] == "1" ? "上午" : "下午");
    cout << " 学号:" << it->second["student_id"];
    cout << " 姓名:" << it->second["student_name"];
    cout << " 机房:" << it->second["room_id"];
    cout << " 预约状态:";
    if (it->second["status"] == "0") cout << "预约已取消" << endl;
    else if (it->second["status"] == "1") cout << "审核中" << endl;
    else if (it->second["status"] == "2") cout << "审核通过" << endl;
    else if (it->second["status"] == "-1") cout << "审核未通过!" << endl;
    cout << endl;
  }
}
void Orders::showOneOrder(int id) {
  bool flag = false;
  for (auto it = mOrder.begin(); it != mOrder.end(); it++) {
    if (atoi(it->second["student_id"].c_str()) == id) {
      flag = true;
      cout << "预约时间:周" << it->second["date"];
      cout << " 预约时间段:" << (it->second["interval"] == "1" ? "上午" : "下午");
      cout << " 学号:" << it->second["student_id"];
      cout << " 姓名:" << it->second["student_name"];
      cout << " 机房:" << it->second["room_id"];
      cout << " 预约状态:";
      if (it->second["status"] == "0") cout << "预约已取消" << endl;
      else if (it->second["status"] == "1") cout << "审核中" << endl;
      else if (it->second["status"] == "2") cout << "审核通过" << endl;
      else if (it->second["status"] == "-1") cout << "审核未通过!" << endl;
    }
  }
  if(!flag) cout << "未找到预约记录!" << endl;
}
void Orders::setStatusCancel(int item, int id) {
  int input = 0;
  cout << "是否确认取消预约?" << endl;
  cout << "1.确认" << endl;
  cout << "2.返回" << endl;
  cin >> input;
  if (input == 2) return;
  for (auto it = mOrder.begin(); it != mOrder.end(); it++) {
    if (atoi(it->second["student_id"].c_str()) == id && --item == 0) {
      if (it->second["status"] == "0") cout << "预约已取消" << endl;
      else it->second["status"] = "0";
      updateOrder();
    }
  }
}
void Orders::validStatus(int item, int res) {
  int input = 0;
  cout << "是否确认审核结果?" << endl;
  cout << "1.确认" << endl;
  cout << "2.返回" << endl;
  cin >> input;
  if (input == 2) return;
  int status = 1;
  if (res == 1) status = 2;
  else if (res == 2) status = -1;
  mOrder[item]["status"] = to_string(status);
  updateOrder();
  cout << "审核已完成" << endl;
}

专门用于文件名的宏定义:filename.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"

最后,main.cpp

#include<iostream>
#include<fstream>
#include"identity.h" 
#include"globalfile.h"
#include"student.h"
#include"teacher.h"
#include"manager.h"
using namespace std;
void menu() {
  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 << "请输入您的选择:";
}
void managerMenu(Identity*& manager) {
  while (true) {
    manager->operMenu();
    //将父类指针转换为子类指针,调用子类里其他接口
    Manager* man = (Manager*)manager;
    int choice;
    cin >> choice;
    if (choice == 1) {
      //添加账号
      man->addPerson();
    } else if (choice == 2) {
      //查看账号
      man->showPerson();
    } else if (choice == 3) {
      //查看机房
      man->showComputer();
    } else if (choice == 4) {
      //清空预约
      man->cleanFile();
    } else if (choice == 0) {
      //注销登录
      delete manager;
      cout << "注销成功!" << endl;
      system("pause");
      system("cls");
      return;
    }
  }
}
void TeacherMenu(Identity*& teacher) {
  while (true) {
    //调用教师子菜单
    teacher->operMenu();
    Teacher* tea = (Teacher*)teacher;
    int choice;
    cin >> choice;
    if (choice == 1) {
      //查看所有预约
      tea->showAllOrder();
    } else if (choice == 2) {
      //审核预约
      tea->validOrder();
    } else if (choice == 0) {
      //注销登录
      delete teacher;
      cout << "注销成功!" << endl;
      system("pause");
      system("cls");
      return;
    }
    system("pause");
    system("cls");
  }
}
void studentMenu(Identity*& student) {
  while (true) {
    //调用学生子菜单
    student->operMenu();
    Student* stu = (Student*)student;
    int choice;
    cin >> choice;
    if (choice == 1) {
      //申请预约
      stu->applyOrder();
    } else if (choice == 2) {
      //查看我的预约
      stu->showMyOrder();
    } else if (choice == 3) {
      //查看所有人预约
      stu->showAllOrder();
    } else if (choice == 4) {
      //取消预约
      stu->cancelOrder();
    } else if (choice == 0) {
      //注销登录
      delete student;
      cout << "注销成功!" << endl;
      system("pause");
      system("cls");
      return;
    }
    system("pause");
    system("cls");
  }
}
void logIn(string fileName, int type) {
  Identity* person = NULL;
  ifstream ifs(fileName, ios::in);
  if (!ifs.is_open()) {
    cout << "文件不存在" << endl;
    ifs.close();
    return;
  }
  int id = 0;
  string name, pwd;
  if (type == 1) {
    cout << "请输入学号" << endl;
    cin >> id;
  } else if (type == 2) {
    cout << "请输入职工号" << endl;
    cin >> id;
  }
  cout << "请输入用户名" << endl;
  cin >> name;
  cout << "请输入密码" << endl;
  cin >> pwd;
  int fId;
  string fName, fPwd; //下面对比从文件中读取的id,姓名和密码
  if (type == 1) {
    //学生登录验证
    while (ifs >> fId && ifs >> fName && ifs >> fPwd) {
      if (fId == id && fName == name && fPwd == pwd) {
        system("cls");
        cout << "学生验证登录成功!" << endl;
        person = new Student(id, name, pwd);
        studentMenu(person);
        return;
      }
    }   
  } else if (type == 2) {
    //教师登录验证
    while (ifs >> fId && ifs >> fName && ifs >> fPwd) {
      if (fId == id && fName == name && fPwd == pwd) {
        system("cls");
        cout << "教师验证登录成功!" << endl;
        person = new Teacher(id, name, pwd);
        TeacherMenu(person);
        return;
      }
    }   
  } else if (type == 3) {
    while (ifs >> fName && ifs >> fPwd) {
      if (fName == name && fPwd == pwd) {
        system("cls");
        cout << "管理员验证登录成功!" << endl;
        person = new Manager(name, pwd);
        managerMenu(person);
        return;
      }
    }
  }
  cout << "验证登录失败!" << endl;
  system("pause");
  system("cls");
  return;
}
int main() {
  int choice = 0;
  while (true) {
    menu();
    cin >> choice;
    switch (choice) {
    case 1:
      logIn(STUDENT_FILE, 1);
      break;
    case 2:
      logIn(TEACHER_FILE, 2);
      break;
    case 3:
      logIn(ADMIN_FILE, 3);
      break;
    case 0:
      cout << "欢迎下次使用!" << endl;
      system("pause");
      exit(0);
      break;
    default:
      cout << "输入有误,请重新选择!" << endl;
      system("pause");
      break;
    }
    system("cls");
  }
  return 0;
}
相关文章
|
4月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
86 0
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
70 1
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
433 3
|
3月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
52 3
|
4月前
|
Rust 安全 C++
系统编程的未来之战:Rust能否撼动C++的王座?
【8月更文挑战第31天】Rust与C++:现代系统编程的新选择。C++长期主导系统编程,但内存安全问题频发。Rust以安全性为核心,通过所有权和生命周期概念避免内存泄漏和野指针等问题。Rust在编译时确保内存安全,简化并发编程,其生态系统虽不及C++成熟,但发展迅速,为现代系统编程提供了新选择。未来有望看到更多Rust驱动的系统级应用。
69 1
|
4月前
|
存储 算法 数据可视化
【C++】C++旅游管理系统(源码+论文)【独一无二】
【C++】C++旅游管理系统(源码+论文)【独一无二】
|
4月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)
本系统设计了一个选题管理流程,包括读取题目信息、随机抽取题目、保存及查询选题结果等功能。使用 `readProjects` 从文件读取题目信息,`drawProject` 随机抽取未选中的题目,`saveSelection` 保存选题结果至文件,`querySelection` 查询并显示所有选题结果。主函数提供菜单界面,支持学生信息输入、抽题及结果查询。关注【测试开发自动化】公众号,回复“题库”获取源码。
31 0
|
4月前
|
C++
使用 QML 类型系统注册 C++ 类型
使用 QML 类型系统注册 C++ 类型
79 0
|
4月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)【独一无二】
【C++】C++-学生考试题库管理系统(源码)【独一无二】
156 0
|
19天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
29 2