- 头文件
- 源文件
globalFile.h
#pragma once
#define TEACH_FILE "teacher.txt"
#define STU_FILE "student.txt"
#define ADMIN_FILE "admin.txt"
#define ORDER_FILE "order.txt"
#define ROOM_INFO "room.txt"
enum STATUS{
REVIEWING, // 审核中
SUCCESS, // 成功
APPOIFAIL, // 预约失败
APPOICANCEL // 取消预约
};
enum level {
STU,
T,
A
};
identify.h
#pragma once #include#include #include "globalFile.h" #include class Identify { public: virtual void openMenu() = 0; virtual void changePwd() = 0; virtual void sysExit() = 0; virtual void select(int) = 0; std::string m_name; std::string m_pwd; bool isExit = false; std::string roomInfo[20]; };
machineManager.h
#pragma once #include#include #include "globalFile.h" class MachineManager { public: MachineManager(); void menu_init(); void sys_exit(); void user_login(level); bool login(const std::string, const std::string, const std::string, const int id = 0); bool isEqual(const std::string, const std::string); ~MachineManager(); };
Manager.h
#pragma once
#include "identify.h"
class Manager: public Identify
{
public:
Manager();
Manager(std::string name, std::string pwd);
void sysExit();
void openMenu();
void changePwd();
void addAccount(int);
void applyAcount(const std::string);
void showAccount();
void showAppoiInfo();
void clearAppoi();
void select(int);
bool checkUniqueId(const std::string, int, std::string);
};
student.h
#pragma once
#include "identify.h"
class Student: public Identify
{
public:
Student();
Student(int id, std::string name, std::string pwd);
void openMenu();
void sysExit();
void changePwd();
void applyAppoi();
void showAppoiInfo();
void showAppoiAll();
void cancelApppoi();
void select(int);
int m_id;
};
teach.h
#pragma once #include源文件#include "identify.h" class Teacher : public Identify { public: Teacher(); Teacher(int id, std::string name, std::string pwd); void sysExit(); void openMenu(); void changePwd(); void checkAppoi(); void showAppoiAll(); void select(int); int m_id; };
machinaManager.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "machineManager.h"
#include "identify.h"
#include "Manager.h"
#include "student.h"
#include "teach.h"
void MachineManager::menu_init()
{
std::cout << "====================== 欢迎来到校园机房预约系统 ====================== " << std::endl;
std::cout << "ttt1. 学 生 用 户" << std::endl;
std::cout << "ttt2. 教 师 用 户" << std::endl;
std::cout << "ttt3. 管 理 员 " << std::endl;
std::cout << "ttt0. 退 出" << std::endl;
std::cout << "请输入您的选择:";
}
void MachineManager::sys_exit()
{
std::cout << "欢迎下次使用..." << std::endl;
system("pause");
exit(0);
}
void MachineManager::user_login(level l)
{
char name[30], pwd[30];
int id;
std::cout << "请输入id:";
std::cin >> id;
std::cout << "请输入用户名:";
std::cin >> name;
std::cout << "请输入密码:";
std::cin >> pwd;
Identify *user = NULL;
switch (l)
{
case STU:
if (login(STU_FILE, name, pwd, id))
user = new Student(id, name, pwd);
else
{
std::cout << "用户名或密码不正确请重新输入..." << std::endl;
return;
}
break;
case T:
if (login(TEACH_FILE, name, pwd, id))
user = new Teacher(id, name, pwd);
else
{
std::cout << "用户名或密码不正确请重新输入..." << std::endl;
return;
}
break;
case A:
if (login(ADMIN_FILE, name, pwd, id))
user = new Manager(name, pwd);
else
{
std::cout << "用户名或密码不正确请重新输入..." << std::endl;
return;
}
break;
default:
std::cout << "没有该用户,无法登录..." << std::endl;
return;
break;
}
int choice = 0;
while (true)
{
if (user->isExit)
break;
user->openMenu();
std::cin >> choice;
user->select(choice);
}
}
bool MachineManager::login(const std::string fileName, const std::string name, const std::string pwd, const int id)
{
std::ifstream fp;
std::string m_name, m_pwd;
int m_id = 0;
fp.open(fileName, std::ios::in);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return false;
}
char buf[128];
while (fp.getline(buf, 128))
{
char *t_id = strtok(buf, " ");
if (atoi(t_id) == id)
{
char *t_name = strtok(NULL, " "); // 获取用户名
std::cout << t_name << std::endl;
if (this->isEqual(t_name, name))
{
char *t_pwd = strtok(NULL, " "); // 获取密码
if (this->isEqual(t_pwd, pwd))
{
std::cout << "用户【" <
main.cpp
#define _CRT_SECURE_NO_WARNINGS
#include
#include "machineManager.h"
void test()
{
MachineManager manager;
int choice = 0;
while (1)
{
manager.menu_init();
std::cin >> choice;
switch (choice)
{
case 0: // 退出
manager.sys_exit();
break;
case 1: // 学生
manager.user_login(STU);
break;
case 2: // 教师
manager.user_login(T);
break;
case 3: // 管理员
manager.user_login(A);
break;
default:
std::cout << "输入有误,请重新输入:";
break;
}
system("pause");
system("cls");
}
}
void test01()
{
char i = '0', o = '0';
char a = i | o;
std::cout << a << std::endl;
}
void main()
{
test01();
system("pause");
}
Manager.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "Manager.h"
Manager::Manager(std::string name, std::string pwd)
{
this->m_name = name;
this->m_pwd = pwd;
this->isExit = false;
}
void Manager::openMenu()
{
system("cls");
std::cout << "========================= 用户【" << this->m_name << "】 ========================= " << std::endl;
std::cout << "ttt1. 添 加 账 号" << std::endl;
std::cout << "ttt2. 查看所有账号 " << std::endl;
std::cout << "ttt3. 查看机房信息" << std::endl;
std::cout << "ttt4. 清空预约记录" << std::endl;
std::cout << "ttt0. 退 出" << std::endl;
std::cout << "请输入您的选择:";
}
void Manager::changePwd()
{
}
void Manager::addAccount(int s)
{
switch (s)
{
case 1: // 添加学生账户
this->applyAcount(STU_FILE);
break;
case 2: // 添加老师账户
this->applyAcount(TEACH_FILE);
break;
default:
break;
}
}
void Manager::applyAcount(const std::string fileName)
{
std::ofstream fp;
int id;
std::string m_name, m_pwd;
fp.open(fileName, std::ios::out | std::ios::app);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
while (true)
{
std::cout << "请输入用户id:";
std::cin >> id;
std::cout << "请输入用户名:";
std::cin >> m_name;
std::cout << "请输入密码:";
std::cin >> m_pwd;
if (this->checkUniqueId(fileName, id, m_name))
break;
}
fp << id << " " << m_name << " " << m_pwd << std::endl;
std::cout << "用户【" << m_name << "】添加成功..." << std::endl;
fp.close();
system("pause");
}
bool Manager::checkUniqueId(const std::string fileName, int id, std::string name)
{
std::ifstream fp;
fp.open(fileName, std::ios::in);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return NULL;
}
int t_id;
char t_name[20];
char t_pwd[20];
while (fp >> t_id && fp >> t_name && fp >> t_pwd)
{
if (t_id == id || t_name == name) // 判断是否相同
{
std::cout << "该用户名被注册...." << std::endl;
return false;
}
}
return true;
}
void Manager::showAccount()
{
std::ifstream fp_stu, fp_t, fp_a;
fp_stu.open(STU_FILE, std::ios::in);
fp_t.open(TEACH_FILE, std::ios::in);
fp_a.open(ADMIN_FILE, std::ios::in);
if (!fp_stu.is_open() || !fp_t.is_open() || !fp_a.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
int m_id;
char m_name[20];
char m_pwd[20];
std::cout << "============学生用户============" << std::endl;
while (fp_stu >> m_id && fp_stu >> m_name && fp_stu >> m_pwd)
std::cout << "用户id:" << m_id << " 用户名:" << m_name << " 用户密码:" << m_pwd << std::endl;
std::cout << std::endl;
std::cout << "============教师用户============" << std::endl;
while (fp_t >> m_id && fp_t >> m_name && fp_t >> m_pwd)
std::cout << "用户id:" << m_id << " 用户名:" << m_name << " 用户密码:" << m_pwd << std::endl;
std::cout << std::endl;
std::cout << "============管理员用户============" << std::endl;
while (fp_a >> m_id && fp_a >> m_name && fp_a >> m_pwd)
std::cout << "用户id:" << m_id << " 用户名:" << m_name << " 用户密码:" << m_pwd << std::endl;
system("pause");
}
void Manager::showAppoiInfo()
{
std::ifstream fp;
int i = 0;
fp.open(ROOM_INFO, std::ios::in);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
std::string a, e, o, u, r;
while (fp >> a &&fp >> e && fp >> o && fp >> u && fp >> r)
{
if (i == 0)
std::cout << " 上午 " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
else
std::cout << " 下午 " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
}
fp.close();
system("pause");
}
void Manager::clearAppoi()
{
std::ofstream fp;
int i = 0;
fp.open("room.txt", std::ios::out);
fp << "0t 0t 0t 0t 0" << std::endl;
fp << "0t 0t 0t 0t 0" << std::endl;
fp.close();
std::cout << "预约已清空..." << std::endl;
system("pause");
}
void Manager::sysExit()
{
this->isExit = true;
std::cout << "欢迎用户【" << this->m_name << "】下次使用..." << std::endl;
}
void Manager::select(int choice)
{
int s = 0;
switch (choice)
{
case 1: // 添加用户
std::cout << "请输入【1.添加学生账户 2.添加教师账户】:";
std::cin >> s;
this->addAccount(s);
break;
case 2: // 查看所有用户
this->showAccount();
break;
case 3: // 清空预约记录
this->showAppoiInfo();
break;
case 4:
this->clearAppoi();
break;
case 0: // 退出
sysExit();
break;
default:
std::cout << "没有该选项,请重新选择..." << std::endl;
break;
}
}
student.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "student.h"
Student::Student(int id, std::string name, std::string pwd)
{
this->m_id = id;
this->m_name = name;
this->m_pwd = pwd;
this->isExit = false;
}
void Student::openMenu()
{
system("cls");
std::cout << "======================== 欢迎用户【"<< this->m_name << "】 ======================== " << std::endl;
std::cout << "ttt1. 申 请 预 约" << std::endl;
std::cout << "ttt2. 查看自身预约" << std::endl;
std::cout << "ttt3. 查看所有预约 " << std::endl;
std::cout << "ttt4. 取 消 预 约" << std::endl;
std::cout << "ttt5. 修 改 密 码" << std::endl;
std::cout << "ttt0. 退 出" << std::endl;
std::cout << "请输入您的选择:";
}
void Student::changePwd()
{
int i = 0, record = -1;
std::string m_pwd;
std::ifstream fp_r;
std::ofstream fp_w;
std::cout << "请输入要修改的密码:";
std::cin >> m_pwd;
fp_r.open(STU_FILE, std::ios::in | std::ios::app);
if (!fp_r.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
char buf[128];
std::string data[1024];
std::string t_id;
while (fp_r.getline(buf, 128))
{
data[i] = buf;
int lpos = data[i].find(" "); // 获取用户id
t_id = data[i].substr(0, lpos);
if (atoi(t_id.c_str()) == this->m_id)
{
record = i;
}
i++;
}
fp_r.close();
fp_w.open(STU_FILE, std::ios::out || std::ios::app);
if (!fp_w.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
for (int j = 0; j < i; ++j)
{
if (j == record)
fp_w << this->m_id << " " + this->m_name + " " + m_pwd << std::endl;
else
fp_w << data[j] << std::endl;
}
fp_w.close();
std::cout << "密码修改成功..." << std::endl;
system("pause");
system("cls");
}
void Student::applyAppoi()
{
std::ofstream fp;
std::string day, lday, room;
std::cout << "请选择【星期一~五】:";
std::cin >> day;
std::cout << "请选择【上午/下午】:";
std::cin >> lday;
std::cout << "请选择机房号【1~3】:";
std::cin >> room;
fp.open(ORDER_FILE, std::ios::app);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
fp << this->m_name + " " + day + " " + lday;
std::cout << "预约申请已提交,等待审核..." << std::endl;
}
void Student::showAppoiInfo()
{
std::ifstream fp;
int i = 0;
fp.open("room.txt", std::ios::in);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
char buf[128];
while (fp.getline(buf, 128))
{
this->roomInfo[i] = buf;
i++;
}
}
void Student::showAppoiAll()
{
std::ifstream fp;
int i = 0;
fp.open(ROOM_INFO, std::ios::in);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
std::string a, e, o, u, r;
while (fp >> a &&fp >> e && fp >> o && fp >> u && fp >> r)
{
if (i == 0)
std::cout << " 上午 " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
else
std::cout << " 下午 " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
}
fp.close();
system("pause");
}
void Student::cancelApppoi()
{
}
void Student::sysExit()
{
this->isExit = true;
std::cout << "欢迎用户【" << this->m_name << "】下次使用..." << std::endl;
}
void Student::select(int choice)
{
switch (choice)
{
case 1: // 申请预约
this->applyAppoi();
break;
case 2: // 查看自身预约
this->showAppoiInfo();
break;
case 3: // 查看所有预约
this->showAppoiAll();
break;
case 4: // 取消预约
this->cancelApppoi();
break;
case 5: // 修改密码
this->changePwd();
break;
case 0: // 退出
this->sysExit();
break;
default:
break;
}
}
teacher.cpp
#include "teach.h"
Teacher::Teacher(int id, std::string name, std::string pwd)
{
this->m_id = id;
this->m_name = name;
this->m_pwd = pwd;
this->isExit = false;
}
void Teacher::openMenu()
{
system("cls");
std::cout << "========================= 用户【" << this->m_name << "】 ========================= " << std::endl;
std::cout << "ttt1. 审 核 预 约" << std::endl;
std::cout << "ttt2. 查看所有预约 " << std::endl;
std::cout << "ttt3. 修 改 密 码" << std::endl;
std::cout << "ttt0. 退 出" << std::endl;
std::cout << "请输入您的选择:";
}
void Teacher::changePwd()
{
int i = 0, record = -1;
std::string m_pwd;
std::ifstream fp_r;
std::ofstream fp_w;
std::cout << "请输入要修改的密码:";
std::cin >> m_pwd;
fp_r.open(TEACH_FILE, std::ios::in | std::ios::app);
if (!fp_r.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
char buf[128];
std::string data[1024];
std::string t_id;
while (fp_r.getline(buf, 128))
{
data[i] = buf;
int lpos = data[i].find(" "); // 获取用户id
t_id = data[i].substr(0, lpos);
if (atoi(t_id.c_str()) == this->m_id)
{
record = i;
}
i++;
}
fp_r.close();
fp_w.open(TEACH_FILE, std::ios::out || std::ios::app);
if (!fp_w.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
for (int j = 0; j < i; ++j)
{
if (j == record)
fp_w << this->m_id << " " + this->m_name + " " + m_pwd << std::endl;
else
fp_w << data[j] << std::endl;
}
fp_w.close();
std::cout << "密码修改成功..." << std::endl;
system("pause");
system("cls");
}
void Teacher::checkAppoi()
{
char arr[5][2] = { 0 };
std::ifstream fp;
fp.open(ORDER_FILE, std::ios::in);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
std::string t_name;
std::string day;
std::string lday;
while (fp >> t_name && fp >> day && fp >> lday)
{
std::cout << "【" << t_name << "】预约时间: " << day << "," << lday << std::endl;
int checked = 0;
std::cout << "请审核是否通过:【0/1】";
std::cin >> checked;
if (checked == 1)
{
if (lday == "上午")
{
if (day == "星期一")
arr[0][0] = '1';
else if (day == "星期二")
arr[1][0] = '1';
else if (day == "星期三")
arr[2][0] = '1';
else if (day == "星期四")
arr[3][0] = '1';
else if (day == "星期五")
arr[4][0] = '1';
}
else
{
if (day == "星期一")
arr[0][1] = '1';
else if (day == "星期二")
arr[1][1] = '1';
else if (day == "星期三")
arr[2][1] = '1';
else if (day == "星期四")
arr[3][1] = '1';
else if (day == "星期五")
arr[4][1] = '1';
}
}
}
std::ifstream fp_r;
fp_r.open(ROOM_INFO, std::ios::in);
if (!fp_r.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
char buf[128];
int j = 0;
while (fp_r.getline(buf, 128))
{
for (int i = 0; i < 5; ++i)
{
arr[j][i] |= buf[i * 2];
}
j++;
}
std::ofstream fp_w;
fp_w.open(ROOM_INFO, std::ios::out);
if (!fp_w.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
for (int i = 0; i < 2; ++i)
fp_w << arr[i] << std::endl;
}
void Teacher::showAppoiAll()
{
std::ifstream fp;
int i = 0;
fp.open(ROOM_INFO, std::ios::in);
if (!fp.is_open())
{
std::cout << "文件打开失败..." << std::endl;
return;
}
std::cout << "t星期一 星期二 星期三 星期四 星期五" << std::endl;
std::string a, e, o, u, r;
while (fp >> a &&fp >> e && fp >> o && fp >> u && fp >> r)
{
if (i == 0)
std::cout << " 上午 " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
else
std::cout << " 下午 " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
}
fp.close();
system("pause");
}
void Teacher::sysExit()
{
this->isExit = true;
std::cout << "欢迎用户【" << this->m_name << "】下次使用..." << std::endl;
}
void Teacher::select(int choice)
{
switch (choice)
{
case 1: // 审核预约
this->checkAppoi();
break;
case 2: // 查看所有预约
this->showAppoiAll();
break;
case 3: // 取消预约
this->changePwd();
break;
case 0: // 退出
this->sysExit();
break;
default:
break;
}
}



