JAVA排课教务系统的应用与开发,毕业论文,课程设计

3995
    


来源:
Licence:
联系:
平台:
环境:
大小:
更新:
标签:
联系方式 :
免费下载 ×

下载APP,支持永久资源免费下载

限免产品服务请联系qq:1585269081

下载APP
免费下载 ×

下载APP,支持永久资源免费下载

下载APP 免费下载
下载 ×

下载APP,资源永久免费


如果出现不能下载的情况,请联系站长,联系方式在下方。

免费下载 ×

下载论文助手APP,资源永久免费

免费获取

如果你已经登录仍然出现不能下载的情况,请【点击刷新】本页面或者联系站长


内蒙古工业大学本科毕业设计说明书 本科毕业设计说明书



题 目:JAVA排课教务系统的应用与开发

学生姓名:***

学 院:信息工程学院

系 别:计算机系

专 业:计算机科学与技术

班 级:计算机05

指导教师:**教授

**工程师
二 〇 〇 九 年 六 月摘 要
排课系统的主要任务是将教师、课程、班级等相关信息进行汇总,然后根据教学计划或教学环节制订各班级的课程表。由于班级数、课程门数、教师、教学时间等排课要素的不确定性,如果用手工进行排课,不可避免地出现教室资源冲突或教师资源冲突的情况。为了使课表的编排更准确、合理、快速,高校教务部门都用计算机来进行排课管理,并先后开发出一些适用的排课软件系统。

本文设计了基于Struts+Hibernate框架下的Java排课系统,可部署在网络上,支持多人同时在线进行排课。本系统应用随机采样、循环遍历算法进行自动排课,并利用Hibernate技术对数据进行整和处理,Java Servlet Page(JSP)可视化编程技术处理页面,从而有效的处理了课程、老师和班级三者之间的冲突问题,使各项有限资源得到较合理的利用。

本系统不仅实现了条件限制下的排课功能,同时还可以对教师、课程、班级、场地、课表和教务信息进行增加、删除、修改和查询。通过对系统安全性、稳定性和跨平台等因素的考虑,本系统界面采用 JSP 和JAVAScript两种技术设计完成,其核心部分地处理采用MVC模式的Struts+Hibernate框架,同时使用了MD5(Message-Digest Algorithm 5)算法对数据进行加密,Oracle数据库的运用也是研究的重点。

关键词:JAVA排课;Hibernate;Struts;MVC模式

Abstract
Course Scheduling system's main task is to be teachers, courses, classes, and other relevant information in aggregate, then teaching plans or teaching classes part of the preparation of the Timetable. As the number of classes, courses gates, teachers, teaching time, such as arranging schedule elements of uncertainty, if by hand for arranging schedule, a classroom resources inevitably conflict or conflict of teacher resources. Timetable to make the presentation more accurately, reasonable, fast, dean of University departments to use the computer for arranging schedule management, and has developed some software system applicable course arrangement.

This paper designeded course arrangement which based on Struts + Hibernate JAVA course arrangement, the framework of the system can be deployed on the network, to support people at the same time online. the system applicat sampling, traversing cycle algorithm automatically arranging schedule and use Hibernate technical data and conformity data, JSP visual programming technology to treat the pages and to deal effectively with the curriculum, teachers and three classes of The conflict between, so that the limited resources of a more rational use.

This system not only under the conditions of the course arrangement functions, but also still on teachers, courses, classes, space, Timetable and academic information to add, delete, modify, and query features. Through the system security, stability and cross-platform, and other factors to consider, the system interface using JSP and JAVAScripe two technical design is completed, the core of the MVC model used to deal with the Struts + Hibernate framework, the use of the data on MD5 (Message-Digest Algorithm 5)algorithm Encrypted, Oracle database is the use of the focus of the study.

Keywords: Java course arrangement; Hibernate; Struts; MVC model

目 录
引 言 1

第一章 概述 2

1.1 课题的现状 2

1.2 课题的应用领域 2

1.3 Hibenate的发展 2

1.4 Struts框架的发展 3

1.5 MD5数据加密 4

第二章 排课相关算法简述 5

2.1 解决NP问题的几种算法 5

2.1.1 动态规划法 5

2.1.2 贪心算法 5

2.1.3 回溯法 6

第三章 系统需求分析 7

3.1 排课教务系统的实现思想 7

3.2 系统功能需求 7

3.2.1 问题的描述 7

3.2.2 主要数据结构 8

3.2.3 冲突检测 8

3.2.4 模块功能说明 9

3.3 系统性能需求 10

第四章 系统总体设计 11

4.1 MVC模式 11

4.1.1 MVC架构 11

4.1.2 处理流程 12

4.1.3 总体结构设计 13

4.1.4 功能分配 14

4.2 接口设计 15

4.3 数据结构设计 15

4.4 出错处理设计 18

4.5 安全保密设计 19

第五章 排课教务系统的实现 20

5.1 Struts技术的实现 20

5.2 Hibernate技术的实现 21

5.3 人机交互的实现 22

5.4 模块功能实现 23

5.5 数据库的实现 30

结 论 31

参考文献 33

谢 辞 34
引 言
排课问题是一个NP完全问题,这一论断确立了排课问题的理论深度。对于NP问题目前在数学上是没有一个通用的算法能够很好地解决。近40年来,人们对课程表问题的计算机解法做了许多尝试。其中,课程表编排的整体规划模型将问题归结为求一组0-1变量的解,但是其计算量非常大。解决0-1线性优化问题的技术却只适用于规模较小的课程表编排,Mihoc和Balas(1965)将课程表公式化为一个优化问题,Krawczk则提出一种线性编程的方法。Junginger将课程表问题简化为三维运输问题,而Tripathy则把课程表问题视作整数线性编程问题并提出了大学课程表的数学模型。

进入九十年代以后,国外对课程表问题的研究仍然十分活跃。比较有代表性的有印度的Vastapur大学管理学院的ArabindaTripathy、加拿大Montreal大学的Jean Aubin和Jacques Ferland等。目前,解决课程表问题的方法有:模拟手工排课法;图论方法;拉格朗日法;二次分配型法等多种方法。

由于课程表约束复杂,用数学方法进行描述时往往导致问题规模增大,这已经成为应用数学编程解决课程表问题的巨大障碍。研究表明,解决大规模课程表编排问题单纯靠数学方法是行不通的,而利用运筹学中分层规划的思想将问题分解,将是一个有希望得到成功的办法。从实际使用的情况来看,国内外研制开发的这些软件系统在实用性上仍不尽如人意。一方面原因是作为一个很复杂的系统,排课要想面面俱到是一件很困难的事;另一方面每个学校由于其各自的特殊性,自动排课软件很难普遍实用,特别是在调度的过程中一个很小的变动,要引起全部课程的大调整,这意味着全校课程大变动,在实际的应用中这是很难实现的事。

目前对NP 完全问题研究的主要思想是如何降低其计算复杂度,即利用一个近似算法来代替,力争使得解决问题的时间从指数增长简化到多项式增长。结合到课程表问题就是建立一个合适的现实简约模型,利用该简约模型能够大大降低算法的复杂度,便于程序实现,这是解决排课问题一个很好的思路。

JAVA排课教务系统是采用Hibernate+Struts架构设计的, 是一个可以为3个班级排4周课程,且一名教师只能教授一门课程的简单的模型。

概述
1.1 课题的现状

1962年,Gotlieb曾提出了一个课程表问题的数学模型,并利用匈牙利算法解决了三维线性运输问题。次后,人们对课程表问题的算法、解的存在性等问题做了很多深入探讨。但是大多数文献所用的数学模型都是Gotlieb的数学模型的简化或补充,至今还没有一个可行的算法来解决课程表问题。

此外,有些文献试图从图论的角度来求解课程表的排课问题,但是图的染色问题也是NP完全问题,只有在极为简单的情况下才可以将课程表编排转化为二部图匹配问题,这样的数学模型与实际相差太远,所以对于大多数学校的课程表编排问题来说没有实用价值。

在国内,对课程表问题的研究开始于80年代初期、具有代表性的有:南京工学院的UTSS(A University Timetable Scheduling System)系统,清华大学的TISER(Timetable SchedulER)系统,大连理工大学的智能教学组织管理与课程调度等,这些系统大多数都是模拟手工排课过程,以“班”为单位,运用启发式函数来进行编排的。但是这些课程表编排系统往往比较依赖于各个学校的教学体制,不宜进行大量推广。

从实际使用的情况来看,国内外研制开发的这些软件系统在实用性上仍不尽如人意。一方面原因是作为一个很复杂的系统,排课要想面面俱到是一件很困难的事;另一方面每个学校由于其各自的特殊性,自动排课软件很难普遍实用,特别是在调度的过程中一个很小的变动,要引起全部课程的大调整,这意味着全校课程大变动,在实际的应用中这是很难实现的事。

课题的应用领域

排课问题的核心为多维资源的冲突与抢占,其研究对类似的问题(特别是与时间表有关的问题:如考试排考场问题、电影院排座问题、航空航线问题)也是个参考。

1.3 Hibenate的发展

Hibernate三层结构设计使得模块之间的耦合度得到了很大的提高, 但是在开发过程中仍然具有一定的难度, 在开发的过程中要为不同的业务逻辑写不同的代码, 软件开发的效率很低。随着软件开发的不段发展, 又发展成为四层结构,将与数据库打交道的分离出来, 形成数据持久化层,即数据库层,数据持久化层, 业务逻辑层和应用层。每一层都为上层提供服务,下层不依赖于上层结构,具有非常高的内棸和低耦合度。Hibernate就是专门负责数据持久化的。

Hibernate是从JDBC发展而来的,并且对JDBC作了轻量级的封装。在需要的时候,绕过hibernate直接通过JDBC操作数据库。使程序员可以使用对象编程思想来操作数据库。它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复机制。使用JDBC和Serivce Query Language(SQL)来操作数据库,使用Hibernate能大大的提高实现的效率。Hibernate框架用配置文件的形式来定义Java对象和数据表之间的映射关系,同时在更深的层面将数据表之间的关系解释为Java对象之间的继承及包含等关系。通过使用Hibernate Query Language(HQL)语句将复杂的关系算法用对象的方式描述,在很大程度上简化了对数据的查询,加快了开发的效率。在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要创建或修改这些对象,只需在程序中与它们进行交互,然后告诉Hibernate保存即可。这样,大量封装持久化操作的业务逻辑不再需要编写烦琐的JDBC语句,从而使数据持久层得到了极大的简化。Hibernate是开放源码的Java实现的持久化的中间件。

1.4 Struts框架的发展

Struts框架最早是作为Apache Jakarta项目的组成部分问世运做,它继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts框架很好的结合了Jsp,Java Servlet,Java Bean,Taglib等技术。在Struts中,承担MVC中控制器角色的是ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充Action Form(FromBean),并传给动作类(ActionBean)。动作类访问核心商业逻辑,即访问Java Bean或调用EJB。最后动作类把控制权传给后续的JSP文件,由JSP文件生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。在Struts框架中,视图主要由JSP生成页面完成,Struts提供丰富的JSP标签库,这有利于分开表现逻辑和程序逻辑。模型以一个或多个Java Bean的形式存在。在Struts中,主要存在三种Bean,分别是:Action,ActionForm,EJB或者Java Bean。

Struts框架没有具体定义模型层的实现,在实际开发中,模型层通常是和业务逻辑紧密相连的,并且要对底层数据进行操作。下面介绍一种开发策略,将Hibernate引入到Struts框架的模型层中,使用它来进行数据封装和映射,提供持久化的支持。

Struts实现了MVC架构,即JSP+Servlet+javaBean的结构在MyEclipse中导入Struts中间系统会导入struts标签库和struts配置文件(struts-config.xml), 和hibernate一样,需要对struts进行配置,struts配置文件主要是配置表单信息, 在第一个表单中都对应着一个java类,和hiberante一样,一个表单对应一个类,这些技术在某种程度上都具有相似之处,这些表单类称为javaBean。

1.5 MD5数据加密

所谓MD5,即“Message-Digest Algorithm 5(信息-摘要算法)”,它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前“压缩”成一种保密的格式,关键之处在于——这种“压缩”是不可逆的。

MD5用的是哈希函数,在计算机网络中应用较多的不可逆加密算法有RSA公司发明的MD5算法和由美国国家技术标准研究所建议的安全散列算法SHA.

MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
第二章 排课相关算法简述
2.1 解决NP问题的几种算法

2.1.1动态规划法

动态规划法是将求解的问题一层一层地分解成一级一级、规模逐步缩小的子问题,直到可以直接求出其解的子问题为止。分解成的所有子问题按层次关系构成一颗子问题树。树根是原问题。原问题的解依赖于子问题树中所有子问题的解。动态规划算法通常用于求一个问题在某种意义下的最优解。设计一个动态规划算法,通常可按以下几个步骤进行:

(1)分析最优解的性质,并刻划其结构特征。

(2)递归的定义最优解。

(3)以自底向上的方式计算出最优解。

(4)根据计算最优解时得到的信息,构造一个最优解。

步骤1-3是动态规划算法的基本步骤。在只需要求出最优解的情况下,步骤4可以省去。若需要求出问题的一个最优解,则必须执行步骤4。此时,在步骤3中计算最优解时,通常需记录更多的信息,以便在步骤4中,根据所记录的信息,快速地构造出一个最优解。

2.1.2 贪心算法

当一个问题具有最优子结构性质时,会想到用动态规划法去解它,但有时会有更简单、更有效的算法,即贪心算法。顾名思义,贪心算法总是做出在当前看来最好的选择。也就是说贪心算法并不是在整体最优上加以考虑,而是所作出的选择只是在某种意义上的局部最优的选择。虽然贪心算法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题,它能产生整体最优解,如图的算法中单源最短路径问题,最小支撑树问题等。在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好的近似解。

在贪心算法中较为有名的算法是Dijkstra算法。它作为路由算法用来寻求两个节点间的最短路径。Dijkstra算法的思想是:假若G有n个顶点,于是我们总共需要求出n-1条最短路径,求解的方法是:初试,写出V0(始顶点)到各顶点(终顶点)的路径长度,或有路径,则令路径的长度为边上的权值;或无路经,则令为∞。再按长度的递增顺序生成每条最短路径。事实上生成最短路径的过程就是不断地在始顶点V到顶点W间加入中间点的过程,因为在每生成了一条最短路径后,就有一个该路径的终顶点U,那么那些还未生成最短路径的路径就会由于经过U而比原来的路径短,于是就让它经过U。

2.1.3 回溯法

回溯法有“通用的解题法”之称。用它可以求出问题的所有解或任一解。概括地说,回溯法是一个既带有系统性又带有跳跃性的搜索法。它在包含问题所有解的一颗状态空间树上,按照深度优先的策略,从根出发进行搜索。搜索每到达状态空间树的一个节点,总是先判断以该节点为根的子树是否肯定不包含问题的解。如果肯定不包含,则跳过对该子树的系统搜索,一层一层地向它的祖先节点继续搜索,直到遇到一个还有未被搜索过的儿子的节点,才转向该节点的一个未曾搜索过的儿子节点继续搜索;否则,进入子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根的所有儿子都已被搜索过才结束;而在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。
第三章 系统需求分析
3.1 排课教务系统的实现思想

本系统设计的排课算法由Java语言实现,其算法主要是循环遍历和随机抽取这两种方法的结合。

排课条件的限制:

排课的班级只有3个,教师为4名,并且每位教师只能讲授一门课程,而在排课的时间上做了严格的限制, 4周的课表,每周为1个课时,同时每周的上课时间为周1-周5,每天的上课时间为早9时至晚5时。

再者,我们通过给定的条件,通过分析得出,我们所要排课的要求。一个教师一门课程,第一周某位教师在讲授完课程后,不能在后三周再出现,同时该教师在其他两个班级第一周的课表上不能出现,因为这样会产生冲突。

根据以上的特点和条件约束我们如下设计:在从JSP表单中获得数据后,我们将将教师和课程进行封装,封装的对象叫teachercourse,在这个对象中有2个属性,一个是教师,一个是学生。之后我们将每一个对象都放到一个LIST中,然后通过随机方法,随机得到一个值,将这个值放入另一个LIST中,并将这个值从原来的LIST中REMOVE掉。然后在被REMOVE掉的LIST中继续随机取得一个值,再将值放入到第2个LIST中,并将此值从原来的LIST中REMOVE掉,以此循环完成整个第一步骤。新生成的这个LIST通过EL语句在JSP页面输出,即班级1的课程表生成。

随后2个班级的课程表主要通过随机和遍历生成。在原LIST中随机抽取一个值,然后拿这个值和LIST1做比较,条件是产生随机数的位置不能和LIST1同位置的值相同,同时随后产生的值在不能和LIST1的值相同的情况下,还不能和前面产生的值相同,这点是通过REMOVE原有数组做到的。

3.2 系统功能需求

3.2.1 问题的描述

自动排课问题的简化描述如下:

设安排的课程为{ C1,C2,...,Cn},课程总数为n,而各门课程每周安排次数(每次为连续的2 学时) 为{ N1,N2,...,Nn},每周教学日共5 天,即星期一至星期五;每个教学日最多安排4 次课程教学,在这种假设下,显然每周的教学总时间段数为5 ×4 = 20,并存在以下约束关系:

    n ≤20 , (3-1)

    N = 6n, i =1, Ni ≤20. (3-2)

自动排课问题是:设计适当的数据结构和算法, 以确定{ C1,C2,...,Cn } 中每个课程的教学应占据的时间段,并且保证任何一个时间段仅由一门课程占据。

3.2.2 主要数据结构

对于每一门课程,分配2 个字节的“时间段分配字”(无符号整数):{ T1,T2,..., Tn}。其中任何一个时间段分配字(假设为Ti ) 都具有如下格式:

Ti 的数据类型C 语言格式定义为:unsigned int Ti 的最高位是该课程目前是否是有效的标志,0 表示有效,1 表示无效(如停课等);其它各位称为课程分配位,每个课程分配位占连续的3 个位(bit),表示某教学日(星期一至星期五) 安排该课程的时间段的值,0 表示当日未安排,1-4 表示所安排的相应的时间段(超过4 的值无效)。

在这种设计下,有效的时间段分配字的值应小于32768 (十六进制8000),而大于等于32768 的时间段分配字对应于那些当前无效的课程(既使课程分配位已设置好也如此),因此很容易实现停课/开课处理。

3.2.3 冲突检测

有时在自动排课完毕后,需要人工调整某些课程的安排时间,如把第i 门课程在人工干预下改成星期数为week、时间段为segment 的位置,则根据上述数据结构需做如下运算:

T [ i ] = T [ i ] &(~ (7 << (week - 1) * 3) ) + (segment << (week - 1)*3)其中&、~ 和n 分别为按位与、按位取反和按位左移运算符(下同)。问题是如何判断是否已有其它课程安排在同一个时间段上。设人工调整的时间段分配字为T[1 ] ,则该问题描述为:判断时间段分配字T [1 ] 与{ T[2 ],T [3 ] ,...,T [ n ]} 中的某个分配字是否存在相同课程分配位上的相等的非零时间段值,或者说{ T [2 ], T [3 ] ,...,T[ n ]} 中是否存在与T [1 ] 冲突的时间段分配字。为简化起见,在以下算法描述中假设所有时间段分配字的最高位为0。

算法2 冲突检测

输入 T1 和{ T2,...,Tn}

输出 与T1 冲突的{ T2,...,Tn} 中的时间段分配字

① 对c-index = 2,3,...,n 做以下操作:

  初始化屏蔽字mask = 7

  对星期值week = 1,2,3,4,5 做以下操作:

  如果T[1] & mask 等于T[c-index] & mask,而且二者不等于0

 则:T[ 1 ]与T[c-index ]相冲突,转①

  mask 左移3 位(或乘8)

② 算法结束

本算法时间复杂度为O ( n) ( n 为课程门数)

3.2.4 模块功能说明

系统总体分为3个模块,用户模块、信息模块和排课模块,模块及其功能实现的用例图如下:
图3-1 用户基本信息模块用例图图3-2 信息模块用例图


图3-3 排课模块用例图3.3 系统性能需求

1.系统要有很好的可移植性,运行环境不能受系统编码格式限制。

2.系统必须有很好的可维护性。

3.系统要有一定的健壮性,有一定的错误处理机制和容错能力。

4.界面设计要求美观、大方。

5.系统运行必须稳定,尽量少占内存资源。

6.系统运行环境:

Windows∕Unix操作系统

512M内存,40G硬盘

7.系统开发环境:

MyEclipse5.5或6.0

Oracle 9i 或10g

Tomcat 5.0

Java 5.0

第四章 系统总体设计
4.1 MVC模式

本系统主要采用MVC模式进行架构,通过Struts+Hibernate实现系统任务,这种方式使得系统模块更加清晰明了,方便修改和维护,以下具体阐述系统的总体设计思想。
图4-1 MVC模式

4.1.1 MVC架构

MVC是模、视图、控制的缩写,在使用jsp时,有相应的文件去实现相应的操作 ,通常jsp只负责view显示页面。业务逻辑等有bean(ejb)去实现。

设计思路 :

当构建一个Application时。首先考虑界面的问题,而界面修改是非常平常的。如果在jsp中实现所有的操作,一旦修改界面就比较麻烦了。使用MVC则可以减少的一些麻烦。在设计时候jsp只负责显示页面,jsp调用Bean(Struts,servlet)传过来的数据然后显示,而Bean(Struts,servlet)负责收集jsp需要的数据,用ArrayList(Arttibute)传给jsp。假如需要提交表单,一般也直接提交给Struts来处理servlet。处理后再返回处理信息。相应的业务逻辑由Bean去实现。

Bean的设计 :

Bean通常有三类,分别在manager,entry,database目录下面。

manager下面的bean做商业逻辑 ,entry下的bean就是封装数据,每个数据库表对应会有一个bean。jsp得到的也全部是类。database下的bean就是操作数据库,执行如insert,update,delete,load(查询一条记录)等等,batchload(查询多条记录)。entry负责封装数据,作为database的调用参数,返回结果。

图4-2 MVC详细框架4.1.2 处理流程

系统从页面获得数据,然后交给Action,Action 调用Service方法进行业务逻辑处理,有数据交互则业务逻辑层调用Dao层,通过Dao方法和数据库交互,查询相关的数据。相应的数据和操作都被封装到工厂类中,在工厂类中进行整合处理。具体的时序图如下:
图4-3 工厂类时序图
总体结构设计

本系统总体结构设计为3部分,表示层、业务逻辑层、数据库层,表示层由JSP动态实现,提供给用户直观的页面,同时用户可以进行相应的操作。业务逻辑层主要是通过ActionForm捕获用户填写的信息,并且由Action调用Service进行业务逻辑处理。数据库层则由Dao层实现,处理用户信息和相应业务逻辑所涉及到的数据。

其中Hibernate主要负责对象的持久化,对JDBC进行封装,连接数据库,并且建立了关系数据和对象之间的映射关系。

图4-4 系统结构逻辑图
图4-5 Hibenate+Struts逻辑结构图
4.1.4 功能分配

Java排课系统主要功能分为以下几个模块:

1.用户基本功能模块:这个模块主要是用户的注册和登陆,同时用户可以修改自己的信息,密码丢失用户可以通过安全问题找回密码,最后还有用户等级功能。

2.排课模块:排课模块是系统的核心模块,其中包括教务信息的发布查阅功能,以及教师、教室、场地和课程的增加、删除、修改和查询功能。同时核心的排课部分可以获得相应的各部分信息,通过获得的信息用户可以进行条件选择,然后进行排课,排课生成的课程表用户可以保存,保存的课程表可以通过查询课程表功能进行查询,并且打印。

3.信息模块:信息模块主要由3部分组成,即:发送信息、发件箱和收件箱。此部分功能主要是用于用户之间进行信息交流,信息可以从页面上获得。图 4-6 系统功能图
4.2 接口设计

系统采用MVC模式,此模式合理有效的分层,各层之间通过接口调用,使用方便简单,同时也方便程序的修改。

可视化层和业务逻辑层的接口有:IcoursService、ImemberService、 ImessageService,对应的实现类为IcourseServiceImpl、ImemberServiceImpl ImessageServiceImpl。

业务逻辑层和数据层的接口有:IcourseDao、ImemberDao、ImessageDao,对应的实现类为 IcourseDaoImpl 、ImemberDaoImpl、ImessageDaoImpl。

其每个实现类中都有相应功能需要所设计的方法,在其对应的实现类中都有其方法的具体实现。

4.3 数据结构设计

本系统采用Oracle 9I 数据库,安全性、稳定性都不错,在数据结构设计中建立了Memberinfo等多张表,以下为本系统的数据字典:
表4-1 MemberInfo(存放会员信息)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

NickName

Varchar2(20)

Not Null

用户昵称

Password

Varchar2(50)

Not Null

MD5加密口令,页面上限制为16字节

Gender

Varchar2(1)

Not Null

性别,’男’或’女’

Age

Number

Not Null

年龄

Email

Varchar2(100)

Not Null

电子邮件

PasswordQuestion

Varchar2(200)
密码提示问题

PasswordAnswer

Varchar2(200)
密码提示问题答案

ProvinceCity

Varchar2(20)
所在省市

Address

Varchar2(200)
地址

Phone

Varchar2(50)
联系电话

Point

Number

Default=0

当前积分

Recommender

Varchar2(20)
推荐人

RegisterDate

Date
注册时间

LatestDate

Date
上次上线时间

Status

Number

Default=0

0-正常 1-注销

IsOnline

Number

Default=0

0-下线 1-在线

GradeId

Number
等级ID
表4-2 Pcourse(存放排课的信息)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Teacher

Varchar2(20)
老师

Coursetime

Int(5)
课时

Class

Varchar2(50)
班级

Course

Varchar2(20)
课程表4-3 GradeRecord(存放会员级别的评判规则)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Minpoint

Number

Not Null

积分的上限

Maxpoint

Number

Not Null

积分的下限

Gradename

Varchar2(20)

Not Null

级别名称

IconPath

Varchar2(50)

Not Null

每个级别分别对应不同的头像
表4-4 PointRecord(存放会员获取积分的流水记录)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Nickname

Varchar2(20)

Not Null

获取积分的会员

ReceiveDate

Date

Not Null

获得积分的日期

PointactionId

Number

Not Null

所获积分
表4-5 MessageRecord(存放短信信息)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Sender

Varchar2(20)

Not Null

发件人登录名

Receiver

Varchar2(20)

Not Null

收件人登录名

SendDate

Date

Default=当前时间, Not Null

发送日期

Title

Varchar2(100)

Not Null

短信标题,页面上最多100字

Content

Varchar2(300)

Not Null

短信内容,页面上最多300字

Status

Number

Default=0

0-未阅读 1-已阅读

SenderStatus

Number

Default=0

0-表示未删除 1-表示已删除(发送者)

ReceiverStatus

Number

Default=0

0-表示未删除 1-表示已删除(接收者)
表4-6 Coursetable(存放课程信息的流水记录)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Teachername

Varchar2(20)

Not Null

获得课表中老师的信息

Coursename

Varchar2(20)

Not Null

获得课表中课程信息

Pkdate

Date

Not Null

课程表生成时间

Mark

Long

Not Null

标记
表4-7 Groundinfo(存放场地信息的流水记录)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Groundname

Varchar2(20)

Not Null

场地名称

Groundpeoplenumber

Varchar2(20)

Not Null

场地容量

Groundleader

Varchar2(20)

Not Null

场地管理员

Grounddescribe

Varchar2(20)

Not Null

场地描述
表4-8 Classinfo(存放存放班级信息的流水记录)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Classinfo

Varchar2(20)

Not Null

班级信息

Classpeoplenumber

Number

Not Null

班级人数

Classleader

Varchar2(20)

Not Null

班主任

Classdescribe

Varchar2(20)

Not Null

班级描述
表4-9 Educationalinfo(存放教务信息的流水记录)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Publishtopic

Varchar2(20)

Not Null

教务主题

Publishdepartment

Number

Not Null

发布教务信息部门

Publishdate

Varchar2(20)

Not Null

发布时间

Publishcontent

Varchar2(20)

Not Null

发布内容
表4-10 Teacherinfo(存放教师信息的流水记录)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Teachername

Varchar2(20)

Not Null

教师姓名

Teachertitle

Varchar2(20)

Not Null

教师职称

Teachercourse

Varchar2(20)

Not Null

教师所带课程

Teacherdesecribe

Varchar2(20)

Not Null

描述
表4-11 Courseinfo(存放课程信息的流水记录)

字段名

字段类型

约束或索引

描述

ID

Number(Sequence)

PK

记录流水号

Coursename

Varchar2(20)

Not Null

课程名称

Coursetime

Number

Not Null

课时

Coursedesecribe

Varchar2(20)

Not Null

课程描述

4.4 出错处理设计

出错处理主要包括2部分,程序出错处理(即Exception)和用户信息错误处理(即错误信息对应的message)。

Exception:系统中一共定义了MemberServiceException 、CourseServiceException、MessageServiceException 3个异常处理类,它们主要处理系统在运行过程中出现的异常和错误。

Message:根据业务的需求和用户实际操作过程中出现的问题,我们在系统中定义了相应的Message,当用户在操作时出现错误时,系统会为用户提供相应错误提示。如:用户密码错误、密码长度必须大于等于6位等等。



图 4-7 出错处理逻辑图

4.5 安全保密设计

系统的用户密码信息采用MD5算法加密。第五章 排课教务系统的实现
5.1 Struts技术的实现

Struts在MyEclipse中导入标签库和配置文件(struts-config.xml),Struts配置文件主要是配置表单信息,在一个表单中都对应着一个java类javaBean必须满足的要求为:

1)一个pojo类

2)需要提供一个包名

3)实现序列化接口

4)提供一个无参构造器(serializable)

5)提供getter/setter方法

6)可以提供业务逻辑和数据访问的方法

7)可以提供处理事件的方法

在struts-config.xml中还需要配置相当于servlet的action-mapping,使其每一个动作标签对应的不同的行为。具体的操作将再下面项目中具体介绍。

运用Hibernate和struts开发J2EE应用

  下面结合开发实践,以在J2EE应用中非常普遍的用户登录过程为例,来说明上述体系结构是如何具体运用的。登录的流程非常清晰:用户从登录页面login.jsp输入登录信息,系统对登录信息进行验证,如果正确则成功登录,否则提示相应错误信息。

在开发过程中,使用Eclipse做为开发环境,同时加载了对Struts及Hibernate提供更好的控制和支持的第三方插件MyEclipse,Web服务器使用Tomcat,数据库选用了Mysql。

首先对Hibernate进行配置,只需要对系统自动生成的hibernate.cfg.xml进行修改,配置好数据库连接的各种参数以及定义数据映射文件。由于Hibernate所带的连接池主要用于测试,性能不是很好,可以通过JNDI将其修改为使用Tomcat的连接池。

其次是生成持久化类,实际上,由于使用了Hibernate,持久化类以及对持久化对象的映射定义均可以借助于系统中的向导自动生成。持久化对象的映射定义放到了User.hbm.xml中。

再次,使用Struts框架来实现逻辑控制,利用系统提供的向导可以生成视图及控制器。具体的配置在Struts-config.xml文件中。相关代码如下:

输入页面Login.jsp将用户填写的登录信息提交给控制器DoLogin进行处理,控制器调用由Hibernate定义好的持久化类User从数据库中读取相应信息进行验证。操作完成后将提示信息展示在表示层中。DoLogin中使用语句User u1=UserDAO.findbyname(username)得到User对象,然后就可以进行登录信息的验证。

从整个开发过程可以看出,程序员除了利用向导对有关的配置文件进行修改,只须编写少量代码即可完成登录模块的编码。开发完成的模块符合MVC框架的要求,质量比较高,易于修改和维护。

5.2 Hibernate技术的实现

获取与数据库连接的session对象

要与数据库进行通信,首先必须获得与数据库的连接,hibernate提供了一个Configuration对象,在myEclipse中添加hibernate组件中,必须对hibernate的配置文件进行置,这个Configuration对象就对应是这个系统生成的配置文件的信息,在配置文件中必须对数据源进行配置,其中包括数据库的路径(URL),驱动(driver),以及输入用户名和密码。这样Hibernate才能通过JDBC找到对应的数据库。

下面是配置hibernate数据库的配置文件hibernate.cfg.xml



图5-1 hibernate.cfg.xml



cfg配置好了之后,就可以通过Configuration对象来获得Session对象了,下面是具体的过程:

synchronized public static Session getSession()

{

Configuration cfg = new Configuration();

cfg.configure("/hibernate.cfg.xml"); //获取配置文件

SessionFactory factory = cfg.buildSessionFactory();//获得session实例的工厂类

Session session = factory.openSession();//获得Session对象

return session;

}

获得session对象之后,就可以对数据库进行操作了。

Hibernate表与类之间的关联映射。由于目前市场上所有数据库基本上都是关系型的,而我们所写的类都是面向对象的,这就造成了表和类之间并不完全相符,但是表中的字段和类中的属性之间存在了对应的关联。要使hibernate知道哪个类对应数据库中的哪张表,就需要在配置文件中配置表与类之间的关系。表与表之间存在三种关系, 分别是一对一、一对多、和多对多这三种关系,但在hibernate配置文件必须体现这三种映射关系。

在上面的配置文件中配置的是一张学生表,它的字段有id,name,select,grade 和institution

其中的get/set方法以及构造器没有给出,具体情况可以去参看程序。

其中id为主健,按照sequence中的student_seqzhang自动生成,hibernate从中去读取,并将值赋给id,property 对应的分别是student表中的属性,name=“name” 表明类中有一个属性为name,column=“name“表明对应student表中name字段,其类型为string类型,其它的映射也是一样,最后一个属性sc是一个集合,和数据库中SC表是一对多的关系,对应的字段为studentid,lazy表示延迟加载。

5.3 人机交互的实现

系统交互设计采用目前广为流行的,基于B/S的架构设计,人机交互界面主要使用当今流行的JSP技术,以网页的形式展现给用户。首先,展现在用户面前的是登陆界面,没有注册的用户可点击进入注册页面,而丢失密码的用户则可通过密码找回功能重新获得新的密码,这3个界面都是通过提示信息与用户进行交流,实现人机交互。进入整个浏览器后分成四个子框体,最上面的一个框体显示系统的Log和系统名称;左边的框体主要是系统功能导航;右边的框体主要是显示第一个功能的操作界面,下面的框体是一个静态也面主要显示公司和版权等一些信息。在功能模块中都有提示信息,这些提示方便了用户的操作和使用。

5.4 模块功能实现

(1)用户注册:

在register.jsp页面用户可以注册一个会员帐号,昵称作为以后登陆社区的唯一标识。密码需要用MD5算法加密。
图5-2 用户注册界面
(2)用户登陆:

在login.jsp页面上用户可以输入昵称和密码进行登陆,如果用户名和密码都正确,则登陆成功。如果不正确,需要提示用户。
图5-3 用户登陆界面

(3)修改密码:

用户进入修改密码界面,填写用户名称、密码提示问题和问题答案,通过点击修改按扭实现,新的密码在弹出的对话框中。
图5-4 找回用户密码界面
(4)修改用户信息

会员在modify.jsp页面上输入要修改的信息,点击提交,则需要将修改的信息保存到数据库,并且还需要将session范围内的memberinfo对象里面的属性值与数据库中的值同步。

具体是实现:

从Modify.jsp传入要修改的信息,ModifyAction从ModifyForm获得数据进行处理,具体的处理在MemberServiceImpl中实现,然后交给DAO层提交给数据库。
图5-5 修改用户信息界面
(5)新建信息:

需要判断接收者是否存在,如果存在,则在Messagerecord表中插入一条数据,并且提示用户成功,如果不存在提示用户接收方不存在。
图5-6 发信息界面
(6)已收信息:

显示当前会员接收的所有短信(包括新短信和已读短信),并且可以删除某条短信,和查看某条短信的详细信息。
图5-7 收件箱界面
(7)排课:

通过获得的class 、teacher、 course 、coursetime四个值进行排课,将生成的课表显示出来,课程表可保存和打印。

、图5-8 排课功能界面
(8)从数据库中获得教师、教室、场地、课表和课程等信息,这主要是通过FindClassInfo、FindCourseInfo、FindTeacherInfo、FindGroundInfo这些方法获得,获得的信息显示到排课页面上,用户根据信息选择相应的排课条件,TTAction从 PkActionForm获得用户获得的信息,通过IcourseService中的方法进行排课。当用户点击保存后,则调用Savecoursetable方法对课表进行保存。

教务、教师、教室、场地、课表和课程信息:

可对教师、教室、场地、课表和课程信息进行增删改查。

这几块的功能基本相同,都是提高页面获得数据然后保存到数据库,再从数据库查询出信息动态的显示到页面上,同时可以删除信息。
图5-9 课程相关功能界面

图5-10 查看教务信息界面

(9)用户可以在查看课程表功能中查看已经排好的课程表。图5-11 查看课程表界面

(10)用户可以添加、删除、查询教师信息,教师信息包括教师的姓名,所授课程,描述。在删除信息时会有对话框弹出进行提示。
图5-12 教师信息功能界面
5.5 数据库的实现

首先启动Oracle数据库,进入SQLPLUS空间,创建一个空间,然后创建表,之后建立JAVABEAN和对应的Hbm.xml文件,通过Hibernate进行映射,Hibernate会自动封装JDBC数据源与数据库进行交互。



结 论
系统按需求分析,实现了各部分的功能。但是该系统存在了很多的不足,界面设计过于死板,排课的算法过于简单,而在排课的条件限制上做的不够理想,没能真实的反映出现实需求的情况。

系统使用了主流的MVC模式开发,但是系统在很多方面还具有局限性。首先对于服务器端来说,配置低的机器可能无法适应系统的运行。其次在主要的排课算法的实现上存在很多的缺陷,很多排课所涉及到的元素都是不定的,可变的,这增加了算法难度,该系统忽略了这些可变元素,将其设置为定性的,从而实现简单的排课。本系统只做了管理员部分,并没有涉及到权限的管理,最后MVC架构的系统在分布式方面有很大的缺憾,这使得在访问量,同时在线量等问题上出现了很大的局限性,系统无法解决这类问题。由于是WEB开发,所以以上的局限性需要像EJB等新技术来解决和完善。因此系统在今后需要做以下改进:

(1)登录模块

登录模块的安全性不够高,通过采用随机数字和字母的搭配生成验证码,用户输入正确的验证码才可登录。

自动登录功能,在用户已经注册登录一次后,用户可以选择自动登录模式,这样用户不需要再填写登录信息就可以登录。

(2)排课模块

在排课时间的设置上可以采用图论着色法,用户可以根据需要选择每天上几节课,每周上几天课,同时可以点击课表上的色块选定不能上课的时间。

在教务信息、教师信息、课程信息和场地信息这4块原有功能中增加修改信息功能,即对已存在的信息进行修改操作。

教务信息、教师信息、课程信息和场地信息的动态显示和操作也是需要改进的部分,新添加的信息和删除的信息应该能动态的从排课界面上显示,这需要JAVAScript和JAVASessionBean技术来实现。

排课算法的改进是今后研究的重点方向,可以利用遗传算法和图论着色法综合排课功能,在技术上需要使用到JAVA5的新特性。

(3)信息模块

信息模块的主要改进点在信息的存储,用户所建立信息实际上都存储在一个数据库内,用户建立和查看信息都是对这个数据库进行操作,这样不仅安全性不高,当在线人数过多的时候,访问的速度也会受到影响。这将是今后重点学习和解决的问题。

(4)其他

系统的界面也是今后改进的内容,本次系统采用界面的模式过于死板,这限制了内容的布局。

系统可以实现多人在线操作,但是分布式的应用不够理想,因此采用EJB技术对系统进行改进是关键。

现有系统中如果对中文内容进行增加、删除和查看功能时,会出现乱码现象。解决的办法有2种:

在Hibernate的Hibernate.config.xml文件中加入防止出现乱码的语句。

使用JDBC连接数据源,对数据进行操作。

在解决以上问题的同时,应进一步的探索排课算法和发现系统存在的问题,

通过新技术不断地改进和完善系统。
参考文献
[1] An Average Case Approximation Bound for Course Scheduling by Greedy Bipartite Matching .Gary Lewandowski1.Prakash Ojha2.Jennifer Rizzo1.and Abigail Walker1 Xavier University.Mathematics and Computer Science Department

[2] A column generation scheme for faculty time-tabling.Paolo Sera.ni. University of Udine.Italy

[3] Timetabling using a Steady State Genetic Algorithm .Ender Ozcan.Alpay Alkan.

Yeditepe University Department of Computer Engineering

[4] Architect Struts applications for Web services .Jerome Josephraj Developer Ford Europe .IBM.DEVELOPMENT .15 Apr 2003

[5] 王磊杰,崔军波,韩红宇等.J2EE开发指南-基于Sping/Struts/Hibernate的实现.

北京.人民邮电出版社.2007

[6] 孙卫琴 .JAVA面向对象编程.北京.电子工业出版社.2007

[7] 陈谊,杨怡,张国龙,王尚忠 .基于优先级自动排课算法PCSA 的设计与实现方案.北京.北京工商大学计算机学院 2003

[8] 董艳云,钱晓群,张宇舒 .基于课元相关运算的高校排课算法 .成都.西南交通大学.2005

[9] 张海藩.软件工程导论.北京.清华大学出版社.1998

[10] 吴建,郑潮,汪杰.UML基础及Rose建模案例.北京.人民邮电出版社.2003

[11] [美] Abraham Silberschatz  Henry F.Korth 著.数据库系统概念.北京.机械工业出版社.2004

[12] [美] J.A邦德,U.S.K.默蒂 图论及其应用.北京:科学出版社.1984:97-107

[13] 曾志峰,乐光学 高校排课管理系统的设计与实现.长沙.湖南商学院学报.2001.1:136-137

[14] 胡顺仁,邓毅,王铮 基于高校排课系统中的图论问题研究.计算机工程与应用.2002.4:221-222

[15] 石箐,李宏波 排课算法的比较.福建.福建电脑报.2007年第8期:19-24

[16] 张剑平..学校管理信息系统.北京.中国铁道出版社,1997谢 辞
另外,衷心感谢我的同学们,在我毕业设计过程中,与他们的探讨交流使我受益颇多;他们也给了我很多无私的帮助和支持,我再次深表谢意。

最后,向我的亲爱的家人和亲爱的朋友表示深深的谢意,他们给予我的爱、理解、关心和支持是我不断前进的动力。

33

免费下载 ×

下载APP,支持永久资源免费下载

下载APP 免费下载
温馨提示
请用电脑打开本网页,即可以免费获取你想要的了。
扫描加我微信 ×

演示

×
登录 ×


下载 ×
论文助手网
论文助手,最开放的学术期刊平台
				暂无来源信息			 
回复
来来来,吐槽点啥吧

作者联系方式

×

向作者索要->