思维导图:(我是根据这个图做的,自己可能思路没这么清楚,这里建议大家写代码的时候也先进行构思,因为这是一个很好的习惯,写好思维导图之后,写代码按照功能一块一块填好就行了,这里用到了多态,容器,以及一些基本的c++功能,因为最近就在学这些,然后就实践一下,感觉c++的面对对象编程在思路上的确比c的面对过程编程要稍微显得清晰一些,嗯,可能分的块更加清晰了把。分文件的编写会让条理更加清晰。)
所有文件如下:
这里将管理员,教师和学生分为3个子类,父类是一个包含他们公共信息的identity类,可以将他们的共性放在里面,然后个性写在子类里就行了,父类是写了个虚函数,所以子类里面一定要重载,最后按功能填写代码就行了,这里注意文件打开后要进行close,一些小细节就不说了下面上代码。
头文件:
Identity.h(身份类头文件)
//身份基类头文件
#pragma once
#include<iostream>
using namespace std;
class Identity
{
public:
virtual void operMenu() = 0;//纯虚函数,子类重写
string m_Name;//姓名
string m_Pwd;//密码
};
manager.h(管理员头文件)
#pragma once
#include<iostream>
using namespace std;
#include"Identity.h"
#include<string>
#include"globalFile.h"
#include<fstream>
#include"student.h"
#include"teacher.h"
#include<vector>
#include<algorithm>
#include"computerRoom.h"
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;
bool checkRepect(int id, int type);
vector<computerRoom> vcom;
};
student.h(学生类头文件)
#pragma once
#include<iostream>
using namespace std;
#include"Identity.h"
#include<string>
#include<vector>
#include"computerRoom.h"
#include<fstream>
#include"globalFile.h"
#include"orderFile.h"
//学生类
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;
};
teacher.h(教师类头文件)
#pragma once
#include<iostream>
using namespace std;
#include"Identity.h"
#include<string>
#include"orderFile.h"
#include<vector>
//教师类
class Teacher:public Identity
{
public:
//默认构造函数
Teacher();
//有参构造函数
Teacher(int empid, string name, string pwd);
//子菜单
virtual void operMenu();
//查看所有预约
void showAllOrder();
//审核预约
void vaildOrder();
//职工号
int EmpId;
};
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"
computerRoom.h(机房类)个人感觉可以升级一下,插入新的机房什么的
#pragma once
#include<iostream>
using namespace std;
class computerRoom
{
public:
int m_ComId;//机房的编号
int m_MaxNum;//机房大小
};
orderFile.h(容器类)
#pragma once
#include<iostream>
using namespace std;
#include"globalFile.h"
#include<fstream>
#include<map>
#include<string>
class OrderFile
{
public:
//默认构造函数
OrderFile();
//更新预约记录
void updataOrder();
//记录预约信息数量
int m_Size;
//记录所有信息的容器 key是记录的条数 value记录的是信息
map<int, map<string, string>> m_orderData;
};
源文件:(.cpp)
机房预约系统.cpp(主程序)
#include<iostream>
using namespace std;
#include"Identity.h"
#include<fstream>
#include<string>
#include"globalFile.h"
#include"student.h"
#include"teacher.h"
#include"manager.h"
void teacherMenu(Identity * &teacher)//教师菜单
{
while (true)
{
teacher->operMenu();
Teacher * tea = (Teacher*)teacher;
int select;
cin >> select;
if (select == 1)//查看所有预约
{
//cout << "查看所有预约" << endl;
tea->showAllOrder();
}
else if (select == 2)//审核预约
{
//cout << "审核预约" << endl;
tea->vaildOrder();
}
else if (select == 0)
{
delete teacher;
cout << "注销成功!!" << endl;
system("pause");
system("cls");
return;
}
else
{
cout << "输入有误,请重新输入!!" << endl;
system("pause");
system("cls");
}
}
}
void studentMenu(Identity * &student)//学生菜单
{
while (true)
{
student->operMenu();
Student * stu = (Student*)student;
int select;
cin >> select;
if (select == 1)//申请预约
{
//cout << "申请预约" << endl;
stu->applyOrder();
}
else if (select == 2)//查看自身预约
{
//cout << "查看自身预约" << endl;
stu->showMyOrder();
}
else if (select == 3)//查看所有人预约
{
//cout << "查看所有人预约" << endl;
stu->showAllOrder();
}
else if (select == 4)//取消预约
{
//cout << "取消预约" << endl;
stu->cancelOrder();
}
else if(select==0)
{
delete student;
cout << "注销成功!!" << endl;
system("pause");
system("cls");
return;
}
else
{
cout << "输入有误,请重新输入!!" << endl;
system("pause");
system("cls");
}
}
}
void managerMenu(Identity * &manager)//管理员菜单
{
while (true)
{
manager->operMenu();
Manager * man = (Manager*)manager;
int select;
cin >> select;
if (select == 1)//添加账号
{
//cout << "添加账号" << endl;
man->addPerson();
}
else if (select == 2)//查看账号
{
//cout << "查看账号" << endl;
man->showPerson();
}
else if (select == 3)//查看机房
{
//cout << "查看机房" << endl;
man->showComputer();
}
else if (select == 4)//清空预约
{
//cout << "清空预约" << endl;
man->cleanFile();
}
else if(select==0)
{
delete manager;
cout << "注销成功!!" << endl;
system("pause");
system("cls");
return;
}
else
{
cout << "输入有误,请重新输入!!" << endl;
system("pause");
system("cls")