C++ 教室管理系统
目录
如需源码请后台私信或添加QQ3203499787
需求分析
主要目标:开发一个教室管理系统,实现对学校教室的维护、查询、预约和统计功能。系统将具有权限控制,分为管理员和普通用户。
管理员需求:
查看特定楼宇的教室概要信息。
查看每个教室的详细信息,包括教室基本信息、预约情况和上课情况。
修改某个教室的基本信息。
添加新教室。
删除现有教室。
添加教室的上课情况。
统计特定类型教室的综合使用情况(如每周上课率、每周预约率)。
普通用户需求:
查询符合特定条件的空闲教室。
预约空闲教室。
其他需求:程序应具有良好的用户交互性。
概要设计
本程序采用面向对象编程思想进行设计,主要包括教室类、预约信息类和上课信息类。
教室类:
属性:校区编号、楼宇编号、教室编号、教室类型、座位数量、预约状态、预约数量、预约信息、上课数量、上课信息。
方法:默认构造函数、获取属性值的方法、设置属性值的方法。
预约信息类:
属性:课时时间、学号/教工号、姓名、电话。
方法:默认构造函数、带参数的构造函数、获取属性值的方法、重载流运算符。
上课信息类:
属性:教师姓名、教工号、总上课次数、上课时间。
方法:默认构造函数、带参数的构造函数、获取属性值的方法、重载流运算符。
课时时间类:
属性:课时的周数、周、节次。
方法:重载相等、不等和流运算符。
运行环境:
硬件环境:Intel® Core™ i7-6500U CPU @ 2.50GHz 2.59GHz,8.00GB内存,64位操作系统,基于x64的处理器。
软件环境:Windows 11。 开发工具和编程语言:Microsoft Visual Studio Community 2022,C++11。
详细设计
教室信息类:
该类封装有教室的基本属性和方法,用于存储每个教室的信息集合及修 改其中的信息,构成教室管理系统的核心。
class Classroom
{
public:
Classroom() = default; //默认构造函数
void setCampusType(uint); //设置函数
void setBuildID(uint);
void setRoomID(uint);
void setRoomType(uint);
void setSeats(uint);
void setOrderStatus(uint);
void setOrderCnt(uint);
void setClassCnt(uint);
5
void addOrderInfo(OrderInfo);
void addClassInfo(ClassInfo);
uint getCampusType() const; //获取函数
uint getBuildID() const;
uint getRoomID() const;
uint getRoomType() const;
uint getSeats() const;
uint getOrderStatus() const;
uint getOrderCnt() const;
uint getClassCnt() const;
vector <OrderInfo> getOrderInfo() const;
vector <ClassInfo> getClassInfo() const;
private:
uint m_campusType = 0; //校区
uint m_buildID = 0; //楼号
uint m_roomID = 0; //教室号
uint m_roomType = 0; //教室类型
uint m_seats = 0; //座位数
uint m_orderStatus = 0; //预约状态
uint m_orderCnt = 0; //预约数
uint m_classCnt = 0; //课堂数
vector <OrderInfo> m_orderInfo; //预约信息数组
vector <ClassInfo> m_classInfo; //课堂信息数组
};
预约信息类:
主要用来存取每间教室的一条预约信息,含有预约时间、预约账号、预 6 约者姓名及电话等基本信息,提供构造函数进行初始化,提供获取函数用于 获取私有成员。
class OrderInfo
{
friend ostream& operator<< (ostream &, const OrderInfo&);
public:
OrderInfo() = default;
OrderInfo(const classTime &time, const string &ID,
const string &name, const string &phoneNum) : m_time(time),
m_ID(ID), m_name(name), m_phoneNum(phoneNum) { }
string getID() const;
classTime getClassTime() const;
string getName() const;
string getPhoneNum() const;
private:
classTime m_time;
string m_ID = "";
string m_name = "";
string m_phoneNum = "";
};
上课信息类:
用来存取当前教室的一条上课信息,如上课时间、上课老师姓名、ID。
class ClassInfo
{
friend ostream& operator<< (ostream &, const ClassInfo &);
public:
7
ClassInfo() = default;
ClassInfo(const string &teacherName, const string &teacherID, uint
sumClassCnt, vector< classTime > &classTime)
:m_teacherName(teacherName),m_teacherID(teacherID),
m_sumClassCnt(sumClassCnt), m_classTime(classTime) {}
string getName() const;
string getID() const;
uint getSumClassCnt() const;
vector<classTime> getClassTime() const;
private:
string m_teacherName = "";
string m_teacherID = "";
uint m_sumClassCnt = 0;
vector< classTime > m_classTime; //三元组 (课时周,周,节)
};
查看信息:
查看每座楼的所有教室基本信息,如教室号、教室类型、座位数、预约 数、课程数。查看每个教室的详细信息,包括基本信息、预约信息、上课信 息。 修改信息: 对某个教室的信息进行修改。 修改教室: 可增加、删除一个教室。
增加管理员: 增加一个管理员账号并存储。
增加上课信息: 8 为某个教室增加上课信息。 统计使用情况: 用于统计各类教室的使用率情况。 查询空闲教室: 普通用户可通过输入课时时间来查询某号楼所有的空闲教室,同时可按 照座位数、教室类型进行筛选。 预约空闲教室: 普通用户可通过输入课时时间来预约教室、如果预约时间该教室有课或 已有预约将预约失败。
调试分析
问题 1:程序所有功能都集中一起。
解决:增加用户权限,分为管理员和普通用户。管理员需要密码登陆,并对 其进行校验,可对教室信息进行直接管理维护。对于普通用户仅开放预约及 查询教室功能。
问题 2:预约无校验功能。
解决:为系统添加时间属性、采用课时时间的方式对预约信息、上课信息进 行时间管理。预约时可检测是否当前时间已被上课或预约占用。
问题 3:交互逻辑使用不便。
解决:改进交互逻辑,提供跳转功能、选择错误处理。 程序改进: 1. 改进管理员对教室进行维护的操作逻辑,使得操作更加方便。 2. 增加真实时间、自动对已过期的预约进行删除。 3. 采用更为合理的信息管理方式、使教室信息管理更加高效易行。 4. 增加用户更多功能,如查询自己的预约、删除自己的预约。 5. 增加程序鲁棒性。 6. 改进交互。
测试结果
管理员功能列表如下图
查询教室详细信息如下图
普通用户界面如下图
查询空闲教室如下图
预约空闲教室(预约成功)如下图
预约空闲教室(预约失败)如下图