首页 > 范文大全 > 正文

高职院校排课系统的设计与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇高职院校排课系统的设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要

本论文研究并设计的内容是利用信息技术中的网络和计算机进行课表的自动编排,依据用户的不同需求查询并输出课表。本排课系统采用J2EE平台的Struts + Spring + Hibernate框架,采用UML面向对象分析与建模的思想,优化了原有的排课系统,大大提高了运行效率,使高职院校排课管理实现了无纸化运行。

【关键词】排课 Struts+ Spring+ Hibernate UML

随着高职教育在新疆的良好发展,就读高职院校的学生人数急剧增加,所需的教师数量也不断增加,传统手工式排课就暴露出漏排课、错排课、排重课等问题。而通过把信息技术和传统排课相结合的计算机排课技术就能够很好的解决这些问题,同时其优点也是显而易见的,例如教学信息清晰可查,学生学习进程评估优化,教师工作能力评测等等,这些功能对于各院校都具有重要的实际意义。

本次开发的排课系统采用J2EE技术,充分继承和体现了该技术所具有的良好的伸缩性和跨平台性的优点,为后续使用中的模块扩展和应用范围的扩大打下了良好的基础。

1 系统设计

1.1 系统的总体设计

我们以充分分析高职院校当前的需求和未来可能的需求为基础,最终确定了本系统的总体组成结构,见图1。

具体各功能模块完成的任务如下:

(1)用户管理模块:管理用户及其权限。

(2)录入模块:实现对教室、院系、专业、班级、教师、课程等基础信息的增、删、改和浏览的功能。

(3)排课管理模块:实现依据基础信息、附加信息进行科学有效的统计,分析,编排出合理科学的课程表的功能。

(4)查询模块:实现按用户的不同条件进行查询的功能。

(5)报表输出模块:实现利用排课结果,进行新一次的对数据的组织,根据用户的不同需求输出形式不一的,复杂的课表功能。

1.2 系统数据库设计

数据库设计的主要任务是将系统开发中所需要的数据内容按照一定的方式组织起来。在设计数据库的时候,首先针对数据库的相关功能建立模型,其次确定数据库内的数据,并将它们之间的关系组织成二维表,并建立索引、设置规则以保证系统的顺利运行。本排课系统以数据库形式存储教师、课程、班级、教室、院系等相关元素的信息,其E-R图如图2。

2 系统实现

本系统是以J2EE为核心技术的MVC设计模式,具体使用SSH(Struts、Spring、Hibernate)架构来完成的。具体采用SSH架构,其中Struts作为控制器,Spring作为业务层,Hibernate作为DAO层。将用户的请求发送至ActionServlet,通过ActionFormBean将用户数据传送至Action,再由Action类利用Spring的IoC容器访问Hibernate的DAO,由DAO完成于数据库的交互,最后再用JSP页面返回结果进行显示。这里主要以录入模块为例介绍系统实现过程。

2.1 创建数据表

录入模块的主要功能是完成排课所需要的初始数据的录入。此模块中我们可以进行教师信息、课程信息、班级信息、教室信息和时间参数的数据录入。如表1所示。

2.2 Hibernate第一步:创建并配置Hibernate映射文件

使用MyEclipse的工具Data Explorer来自动创建Hibernate的持久化类和映射文件,对应的数据表为course表。最终生成的类文件包括:持久化抽象类AbstractCourse.java、持久化类Course.java、映射文件Course.hbm.xml。

2.3 Hibernate第二步:开发并配置Hibernate DAO层CourseDAO.java

通过上一步,系统已经具备了Hibernate的基础访问功能,接下来开发一个DAO类CourseDAO.java,使用Hibernate Template实现对数据表course的增、删、改、查的操作,包括如下三步:

2.3.1 定义接口类:ICourseDAO.java

首先创建一个接口类com.CourseArrangementSystem.hibernate.dao.ICourseDAO.java.创建接口的原因是为了让Spring的AOP机制能够进行事务的管理,因为事务的管理是基于AOP实现的。

2.3.2 开发实现类:CourseDAO.java

public class CourseDAO extends HibernateDaoSupport implements ICourseDAO{

public List findAllBycourse_Name(final String Course_Name){

return(List)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)

throws HibernateException{

List result=session.createCriteria(Course.class).add(Restrictions.eq("username",username)).list();

return result;}});}

public Course findBycourse_code(final String Course_code){

return(Course)getHibernateTemplate().get(Course.class,new Integer(id));}

public void insert(Course Course){

getHibernateTemplate().save(Course);}

public void update(Course Course){

getHibernateTemplate().update(Course);}

public void delete (Course_Code){

Object p=getHibernateTemplate().load(Course.class,new Integer(id));

getHibernateTemplate().delete(p);}}

2.3.3 在applicationContext.xml中配置DAO及其

在applicationContext.xml中配置DAO及其,其目的就是使得对courseDAO的访问都在Spring的事务监管之下。具体包括配置该组件的Bean对象,为Bean对象注入的SessionFactory对象,为DAO对象配置事务组件。

2.4 Struts第一步:开发Struts核心流程代码

开发Struts核心流程代码,其目的是通过对该数据层的调用来实现数据库的操作。可分以下四步完成。

2.4.1 新建并配置表单类CourseForm.java

在进行各种信息录入时,需要一个相应的表单来保存表中每个字段的数据。

2.4.2 在Struts-config.xml中添加请求配置

在本系统中,控制器应访问Spring中的数据(实体Bean)使用的方法是:配置Struts的Action托管给Sping。这种方法耦合度较高,并且方便利用Spring的控制反转的特性。

对于课程信息录入子模块,首先添加如下3个映射请求配置:(1)列表页请求:course.do;(2)新增请求:course_add.do;(3)修改请求:course_edit.do。

代码中type属性值表示将Struts中实现业务逻辑的Action托管给Spring的IoC容器,对于课程信息录入子模块,其中1个映射请求配置代码如下:

type="org.springframework.web.struts.DelegatingActionProxy">

2.4.3 在Struts-config.xml中添加请求

在applicationContext.xml中添加请求的配置组件。其中每一个的name属性与上一步在Struts-config.xml中配置的每一个元素的path属性相对应,class的属性值表示由com.CourseArrangementSystem.struts.actions.CourseAction来对用户提出的各种请求进行处理,同时为其中的每一个注入CourseDAO对象,其中1个的配置代码如下所示:

class="com.CourseArrangementSystem.struts.actions.CourseAction">

2.4.4 在applicationContext.xml中添加请求拦截

在Spring的applicationContext.xml中配置了日志拦截器,其拦截的目标是通过请求地址进行匹配拦截。现在新增加了3个关于通讯录模块的请求地址,因此也需要对这3个地址的请求进行拦截。

2.4.5 开发CourseAction.java原型功能

新建一个类com. Course Arrangement System.struts.actions.CourseAction.java,该类继承自Struts的基类DispatchAction,并为该类添加两个分别是CourseDAO类型和日志记录器类型的变量courseDAO和log。同时将list、add、insert、edit、update、delete6种函数预设在该类中。它们根据页面请求分类,分别对列表页请求、新增页请求、插入数据请求、修改页请求、修改数据请求、删除数据请求进行处理,非常具有代表性。在该类中编写的这6个函数代码,功能简单,只包含最基本的流转代码。

2.5 Struts第二步:开发JSP页面原型

根据用例分析,视图中主要有如下几个jsp文件:

course.jsp:数据列表页面,该页面提供不同的按钮,负责跳转到不同的页面。

course_add.jsp:课程增加页面,负责对课程信息的添加。

course_edit.jsp:课程修改页面,负责对课程信息的修改。

styles.css:页面样式表,在其中定义几个样式表以美化course.jsp、course_add.jsp、course_edit.jsp页面。

在每个JSP页面中,链接地址、表单请求都指向,通过配置文件将请求发送到CourseAction.java类中的方法中,从而实现程序的页面流转。

2.6 Struts第三步:增加表单校验功能

(1)为course_add.jsp和course_edit.jsp页面表单增加长度限制;

(2)为CourseForm.java添加校验功能;

(3)为course_add.jsp和course_edit.jsp页面添加错误标签;

(4)为course_add.jsp和course_edit.jsp页面维持表单输入。

2.7 Struts第四步:调用CourseDAO.java操作数据库

在这里将CourseAction.java类中的请求处理函数修改一下,来实现与数据库的交互功能,并在程序中使用ActionMessages创建错误消息。

包括的主要功能有4个,一是将列表页面的内容显示出来;二是实现增加一门新课程信息的功能;三是实现编辑一门课程信息的功能;四是实现删除一门课程信息的功能。

(1)显示列表页面数据。在CourseAction.java类中,执行list()函数,实现数据的提取。

(2)实现增加课程信息功能。在新增课程信息页面course_add.jsp中,当鼠标点击【提交】按钮时,系统会使用CourseAction.java的insert()函数,该函数来完成对数据库的写操作。如果执行插入成功,将会保存一条成功的信息,如果执行插入失败,将会保存一条失败的信息,这些信息的保存都使用了org.apache.struts.action.GLOBAL_MESSAGE这种Struts里的全局信息标志来完成。因为返回成功信息的页面是course.jsp,失败时返回的页面是course_add.jsp,因此在这两个页面中增加如下所示的全局信息输出代码:

这时如果已经存在该课程的学期课程代号,系统将会通过course_add.jsp页面返回一条提示信息。如果增加成功则会返回到course.jsp页面,显示一条成功消息。图3为排课操作员录入课程信息的界面。

到此课程信息录入子模块的功能就开发完毕。在此模块中,出于对数据库安全的考虑,我们只对系统管理员和操作员授予了操作权限,其他一般用户如普通教师和学生等均没有在此模块进行操作的权限。同时我们还将此模块中所包含的所有窗体之间的关系都基于这样的设计,即当进行某一窗体数据录入时,其他窗体不能被打开,直到当前录入窗体被关闭,才能正常打开继续操作,以有效的减少系统的最终用户在进行操作时出现数据冲突的可能性。数据录入模块要录入的数据包括教师、课程、班级、教学任务、教室以及院系等信息,除此之外,还包括计算机自动排课时所需的相关参数信息的处理。

3 结论

在开发本系统时,对目前已知的各种排课方法进行了分析,同时依据高职学生的专业教学计划的实践要求,以传统人工排课经验算法为基础,利用当今最流行的J2EE架构,在系统生成课表的过程中使用设定等价类、设置优先级等方法将所有排课所需处理的问题分成几个层次处理,从而使排课过程中发生的冲突均能在各个子问题中处理,这种分层处理的方法不仅使算法复杂性大大降低同时还减少了系统中的死锁,是系统的处理速度和处理结果的满意度均有了较大提高。该系统总体已经具备良好的安全性、更好的的用户友好性、快捷的速度和较高的结果准确性。

参考文献

[1]StephanieBodoff,田玉敏.J2EE1.4标准教材(第二版)[M].北京:电子工业出版社,2005.

[2]梁里宁.网上选课系统的设计与实现[J].暨南大学学报(自然科学版),2002,23(5):39-42.

[3]张宏森.四层B/S结构及解决方案[J].计算机应用研究,2002,12(9):67-73.

[4]刘中兵.开发者突击Java Web主流框架整合开发[J2EE+Struts+Hibernate+Spring][M].北京:电子工业出版社,2008.

[5]倪晓秋.J2EE开发案例[M].北京:中国水利水电出版社,2005.

作者单位

1.新疆克拉玛依职业技术学院 新疆维吾尔自治区克拉玛依市 834000

2.新山子石化炼油厂 新疆维吾尔自治区独山子区 833600