完整代码:
https://download.youkuaiyun.com/download/weixin_55771290/87900708
简介:
程序运用面向对象编程思想进行设计。核心有教室类、预约信息类、上课信息类。
教室类:
成员:校区号、教学楼号、教室号、教室类型、座位数、预约状态、预约数、预约信息、上课数、上课信息。
函数:默认构造函数、成员获取函数、成员设置函数。
预约信息类:
成员:课时时间、学号/教工号、姓名、电话。
函数:默认构造函数、构造函数、成员获取函数、重载流运算符。
上课信息类:
成员:教师姓名、教工号、总上课次数、上课时间。
函数:默认构造函数、构造函数、成员获取函数、重载流运算符。
课时时间类:
成员:课时周、周、节
函数:重载相等、不等、流运算符
程序结构图如图1所示。
图 1 程序结构图
二、运行环境
-
硬件环境
-
处理器:Intel Core i7-6500U CPU @ 2.50GHz 2.59GHz
-
内存:8.00GB
-
系统类型:64位操作系统,基于x64的处理器 软件环境:
Windows 10
三、开发工具和编程语言开发工具:
Microsoft Visual Studio Community 2017
编程语言:
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);
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; //课堂信息数组
}
;
预约信息类: 主要用来存取每间教室的一条预约信息,含有预约时间、预约账号、预约者姓名及电话等基本信息,提供构造函数进行初始化,提供获取函数用于获取私有成员。
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:
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;
//三元组 (课时周,周,节)
}
;
查看信息: 查看每座楼的所有教室基本信息,如教室号、教室类型、座位数、预约数、课程数。查看每个教室的详细信息,包括基本信息、预约信息、上课信息。修改信息: 对某个教室的信息进行修改。
修改教室: 可增加、删除一个教室。
增加管理员: 增加一个管理员账号并存储。
增加上课信息:
为某个教室增加上课信息。
统计使用情况:
用于统计各类教室的使用率情况。
查询空闲教室:
普通用户可通过输入课时时间来查询某号楼所有的空闲教室,同时可按照座位数、教室类型进行筛选。
预约空闲教室:
普通用户可通过输入课时时间来预约教室、如果预约时间该教室有课或已有预约将预约失败。
四、调试分析
问题1:程序所有功能都集中一起。
解决:增加用户权限,分为管理员和普通用户。管理员需要密码登陆,并对其进行校验,可对教室信息进行直接管理维护。对于普通用户仅开放预约及查询教室功能。
问题2:预约无校验功能。
解决:为系统添加时间属性、采用课时时间的方式对预约信息、上课信息进行时间管理。预约时可检测是否当前时间已被上课或预约占用。
问题3:交互逻辑使用不便。
解决:改进交互逻辑,提供跳转功能、选择错误处理。
程序改进:
改进管理员对教室进行维护的操作逻辑,使得操作更加方便。
增加真实时间、自动对已过期的预约进行删除。
采用更为合理的信息管理方式、使教室信息管理更加高效易行。
增加用户更多功能,如查询自己的预约、删除自己的预约。
增加程序鲁棒性。
改进交互。
五、测试结果
管理员功能列表如下图2。
图2 管理员功能列表 查询教室详细信息如下图3。
图3 查询教室详细信息 普通用户界面如下图4。
图4 普通用户界面查询空闲教室如下图5。
图5 查询空闲教室预约空闲教室(预约成功)如下图6。
图6 预约空闲教室(成功)预约空闲教室(预约失败)如下图7。
图7 预约空闲教室(失败)