摘要 现如今,随着我国高校的快速发展,各个大学早已朝着综合大学的发展,所开设的学科、专业以及学院都如迅猛发展,尤其是扩招以来,各个大学的在校学生数量猛增,在这种情况,以前学校的教务排课系统已远远不能满足现在这个快速发展的现状,以前的那种手动排课或者简单的无纸化的系统,已经不能满足现在排课的需求,很容易出现纰漏,导致正常的教学活动不能顺畅进行。 本文正是基于目前这种现状,利用目前比较流行的B/S模式,流行的关系型数据库MySql以及应用非常普遍的PHP技术,对本次高校智能排课系统进行设计与实现。本次主要是利用了比较先进的流行的排课算法对本系统高校智能排课进行自动排课。本系统大体的思路是,首先对各种基本资料进行管理,并且对各个用户(教师、教务人员、学生等)进行用户管理,并且对其进行角色管理;然后设置了对所有排课信息进行管理的模块,进一步对所有的排课信息进行详细管理,在这个基础上,利用先进的排课算法对这些信息进行排课操作,最后,可通过课程表信息发布与查询模块对智能排课信息进行查询与下载,并可以以Excel的形式进行下载与保存。本次对以上五个模块从需求分析到系统设计再到系统实现进行了详细的分析与阐述,并且在最后对各个模块进行了详细的测试。 第一章绪论 1.1 背景分析 随着科学技术的不断发展,各个行业信息化、科学化不断推进。高校该如何才能提高办学的效率。这是每个高校都会面临的,也是每个高校需要迫切解决的问题。而采用信息化手段来代替传统的教学管理模式是一个重要的途径。 高校的信息化管理和办公自动化的不断推进,教务工作也逐渐实现办公自动化,新学期课程表的安排工作对指导整个学期日常安排是否妥当、对教学资源的利用是否合理有着至关重要的作用。如果采取传统的人工排课方法容易导致课程冲突、课程重复、课程错漏等各种问题,而且传统的人工排课方法的任务非常重和教务人员的效率非常低下,当课程安排上出现错误要更改的时候,教务人员则需要花费大量的时间协调老师、班级、课程、教室等各种因素。随着高校规模的不断扩大,学生人数不断增加,人工排课的难度就呈几何级数增大。而高校通用排课系统正是为了减轻教务人员负担,减少课程安排的出错率,降低修改课程表难度,提高教学资源的合理利用率,从而真正意义上实现教务工作自动化,解决排课这个大难问题的教务办公软件。 1.2 目前国内发展情况 国内多家专业开发教学管理信息系统的企业,如杭州正方公司、湖南强智公司、湖南青果公司等,在其教务管理产品中均实现了自动排课功能,但由于软件设计局限,对合班课程、教师兼课、教室交叉重复使用等复杂的情况应用效果不十分理想。在实际应用中,主要使用其排课冲突检测功能进行计算机辅助排课。国内软件市场上也出现了很多通用型的排课软件,如“51智能排课”,“启智达排课”,“终级排课”等等,这些通用软件可以解决简单的通用排课问题,适合学科门类和课程门数较单一的学校,不适合高校教学管理应用,不能满足高校多学科、专业、以及课程教学的特殊要求,比如完全学分制下课程教学班的排课问题等。 通过对国内部分高校的调研和考察,了解到目前高校排课主要是利用人机交互式的计算机软件辅助排课方式,这种方式能够随时检测排课冲突,但在排课效率方面没有什么优势。也有有少数高校自行研发了自动排课系统,但通常这些排课软件依赖于各院校自身的实际需求和管理模式,不会考虑其他高校的需要,因此它们的数据共享性和扩展性不强,因此没有完全适用于各高校排课的通用系统。 1.3 课题研究内容 本课题在充分了解和熟悉教务排课环节的基础上,通过对排课的要素、制约条件的需求分析,建立基于校园网浏览器端/服务器(B/S)结构自动排课系统的业务模型,对系统进行概要设计、详细设计和数据库设计,结合已知的排课算法,让教务管理系统扩展完善自动排课功能,使教务人员摆脱繁琐、机械的手工排课工作,达到提高排课效率的目的。系统的设计与实现基于微软Windows server2000操作系统软件平台,采用MySql6.0数据库系统作为数据库开发平台,前端数据库开发工具采用ThinkPhp 程序设计语言。 本人的主要工作如下: (1)进行系统详细设计、数据库设计,编程实现自动排课系统全部功能,完成软件开发。对实际的排课问题进行测试,分析评估排课结果的质量和性能并论述系统的可行性和实用性。 (2)使用已知的排课算法,使排课效率和质量得到提高; (3)分析分析了本学校基于完全学分制教学管理模式下排课的要素和制约条件,提出排课问题的难点和目标,通过对排课过程的分析,构建自动排课系统的逻辑模型; (4)以本人所在单位的实际情况为背景,对排课问题进行需求分析,建立系统业务模型,分析排课流程,给出排课系统的功能模块框图; 通过对以上方面的研究,完成高校自动排课系统的设计与实现。 第二章高校智能排课系统的关键技术 2.1 数据库技术 1、数据库的几个原则 数据库设计需要遵循以下几个原则: 一是,在数据库的设计中必须要全面考虑空间、属性、设施、模型数据的兼容性。鉴于此,交通事件管理数据库设计分为综合数据库设计、元数据设计和关联数据设计这三种类型。五是,数据库必须要建立和完善分级管理机制[16]。用户根据访问系统的角色的不同可以分为系统管理用户、运行调度用户、运行浏览用户以及领导决策分析用户这几个类型,不同的角色访问数据的权限要具有差异,并且使用系统的功能也要具有一定的不同,从而实现对角色登陆的严格控制,进而实现数据的分级管理。六是,数据不仅独立,同时还要可扩展。独立性是数据库最基本的特点,只有具有独立性的数据库才能够独立的应用于程序中,并且还能使其自身的数据库的设计及其结构的变化不会对程序的运行造成影响[17]。另外,结合之前的成功经验,详细分析系统的需求,并根据业务的变化,要求在数据库的设计中要具有较强的扩展性,这样就能够使数据库系统在增加或者减少其他需求或者应用时能够保持一定的稳定性,不至于发生太大的变动。 二是,数据不仅完整,同时还要实用。在数据库设计中,我们不仅要考虑系统规模和实际需求,同时还要对工作的实际情况和实际应用特点进行全面的考虑和分析,在设计的过程中,为了保证数据的实用性,必须要遵循“先进性与实用性并重”的原则。数据库中的数据只有具备了完整性,才会具有准确性,其中通常情况下完整性是通过约束条件来控制的[15]。另外,在数据的选择中还具有一定的约束条件,约束条件可以检验进入数据库中的数据值,其目的主要是为了避免那些重复或冗余的数据进入数据库。在系统的设计中为了有效保证新建或修改后的数据能够遵循所定义的业务知识,可以对约束条件进行科学、合理的利用。 三是,数据不仅要标准,同时还要一致。为了给数据交流及功能的实现提供方便,一方面,数据库的设计不仅要符合国家行业和江苏省地方标准及ITS行业的习惯性事实标准,另一方面,还必须要与数据库设计的软件行业标准相一致。在数据库的设计应考虑以前己建立系统的数据,这主要是由于之前的数据库在与其他系统之间进行数据交换的时候具有一定的优势。 四是,数据必须要具有安全性的特点。对于整个信息系统来说,数据库不仅仅是其基础,同时也是其核心,因此必须要保证设计的安全性才能够为整个信息系统的运转提供条件。在设计的过程中,可以构建一个合理和有效的备份和恢复策略,这样,当数据库由于意外事故,例如人为因素或者天灾等因素而损坏数据库系统时,就可以利用这一恢复策略来在最短的时间内使数据库恢复。除此之外,如果能够很好的完善数据库访问的授权设计,那么我们就还能够有效的保证数据不被非法访问。 2、MySQL数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 旗下公司。MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。它主要通过关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的SQL 语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL 作为网站数据库。由于其社区版的性能卓越,搭配PHP 和Apache 可组成良好的开发环境。 2.2 apache(Web服务器) 1、发展历程 Apache 起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发。此后,Apache 被开放源代码团体的成员不断的发展和加强。Apache 服务器拥有牢靠可信的美誉,已用在超过半数的因特网站中-特别是几乎所有最热门和访问量最大的网站。 Apache最开始是Netscape网页服务器之外的开放源代码选择。后来它开始在功能和速度超越其他的基于Unix的HTTP服务器。1996年4月以来,Apache一直是Internet 上最流行的HTTP服务器: 1999年5月它在57% 的网页服务器上运行;到了2005年7月这个比例上升到了69%。在2005年11月的时候达到接近70%的市占率,不过随着拥有大量域名数量的主机域名商转换为微软IIS平台,Apache市占率近年来呈现些微下滑。而Google自己的网页服务器平台GWS推出后,加上Lighttpd这个轻量化网页服务器软件使用的网站慢慢增加,反应在整体网页服务器市占率上,根据netcraft在2007年7月的最新统计数据,Apache的市占率已经降为52.65%,8月时又滑落到50.92%。尽管如此,它仍旧是现阶段因特网市场上,市占率最高的网页服务器软件。 广泛的解释是(也是最显而易见的):这个名字来自这么一个事实:当Apache在1995年初开发的时候,它是由当时最流行的HTTP服务器NCSA HTTPd 1.3 的代码修改而成的,因此是“一个修补的(a patchy)”服务器。然而在服务器官方网站的FAQ 中是这么解释的:“‘Apache’这个名字是为了纪念名为Apache(印地语)的美洲印第安人土著的一支,众所周知他们拥有高超的作战策略和无穷的耐性”。无论如何,Apache 2.x 分支不包含任何NCSA 的代码。 2、详细介绍 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。 Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。 它可以运行在几乎所有广泛使用的计算机平台上。 Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache 的特点是简单、速度快、性能稳定,并可做代理服务器来使用。 本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazon、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。 Apache的诞生极富有戏剧性。当NCSAWWW服务器项目停顿后,那些使用NCSAWWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。 3、特性 Apacheweb服务器软件拥有以下特性: 1.拥有简单而强有力的基于文件的配置过程 2.支持最新的HTTP/1.1通信协议 3.支持基于IP和基于域名的虚拟主机 4.支持实时监视服务器状态和定制服务器日志 5.支持通用网关接口 6.支持多种方式的HTTP认证 7.集成Perl处理模块 8.提供用户会话过程的跟踪 9.集成代理服务器模块 10.支持服务器端包含指令(SSI) 11.通过第三方模块可以支持JavaServlets 12.支持安全Socket层(SSL) 13.支持FastCGI 2.2 PHP技术 1、简介 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。 2、发展历程 PHP原始为Personal Home Page的缩写,已经正式更名为"PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf 为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。 在1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档。并且发布了PHP1.0!在这的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要求增加一些特性。比如循环语句和数组变量等等;在新的成员加入开发行列之后,Rasmus Lerdorf 在1995年6月8日将PHP/FI 公开发布,希望可以透过社群来加速程序开发与寻找错误。这个发布的版本命名为PHP 2,已经有PHP 的一些雏型,像是类似Perl的变量命名方式、表单处理功能、以及嵌入到HTML 中执行的能力。程序语法上也类似Perl,有较多的限制,不过更简单、更有弹性。PHP/FI加入了对MySQL 的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用PHP/FI。 在1997年,任职于Technion IIT公司的两个以色列程序设计师:Zeev Suraski 和Andi Gutmans,重写了PHP 的剖析器,成为PHP 3 的基础。而PHP 也在这个时候改称为PHP:Hypertext Preprocessor。经过几个月测试,开发团队在1997年11月发布了PHP/FI 2。随后就开始PHP 3 的开放测试,最后在1998年6月正式发布PHP 3。Zeev Suraski 和Andi Gutmans 在PHP 3 发布后开始改写PHP 的核心,这个在1999年发布的剖析器称为Zend Engine,他们也在以色列的Ramat Gan 成立了Zend Technologies 来管理PHP 的开发。 在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式发布,2004年7月13日则发布了PHP 5,PHP 5则使用了第二代的Zend Engine。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强。PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。 2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和Safe mode的功能。 3、其它特点 数据连接:PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是绝佳的组合。自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。 php编程技术可扩展性:就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 php编程技术面向对象:PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 php编程技术可伸缩性:传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。 php编程技术更多特点:PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。利用PHP连接包括Oracle,MS- Access,Mysql 在内的大部分数据库。可以在苍蝇上画图,编写程序下载或者显示e-mail。甚至可以完成网络相关的功能。最好的是,可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能! 2.3 B/S架构介绍 B/S(Browser/Server)结构即浏览器和服务器结构。B/S网络结构模式是基于Intranet的需求而出现并发展的。Intranet是应用TCP/1P协议建立的企事业单位内部专用网络,它采用诸如TCP/IP、HTTP、SMTP和HTML等Internet技术和标准,能为企事业单位内部交换信息提供服务。同时,它具有连接Internet的功能和防止外界入侵的安全措施。另一方而,由于数据库具有强大的数据存储和管理能力,并且能够动态地进行数据输入和输出,如果把数据库应用于Internet上,不仅可以实现大量信息的网上发布,而且能够为广大用户提供动态的信息查询和数据处理服务,进而加强企事业单位内部部门之间、上级部门与下级部门之间、企事业单位员工之间、企事业单位与客户之间以及企事业单位与企事业单位之间的信息交流,降低企事业单位的日常工作成本,提高企事业单位的经济效益。 B/S模式,是一种从传统的二层C/S模式发展起来的新的网络结构模式,其本质是三层及三层以上结构的C/S模式。在B/S模式中,客户端运行浏览器软件。浏览器以超文本形式向Web服务器提出访问数据库的要求,Web服务器接受客户端请求后,将这个请求转化为SQL语法,并交给数据库服务器,数据库服务器得到请求后,验证其合法性,并进行数据处理,然后将处理后的结果返回Web服务器,Web服务器再一次将得到的所有结果进行转化,变成HTML文档形式,转发给客户端浏览器以友好的Web页面形式显示出来。 B/S模式最大的优势是灵活性,任何时间、任何地点、任何系统,只要可以使用浏览器上网,就可以使用B/S系统的终端。其主要特点如下: 1、B/S模式的结构易于扩展 由于Web的平台无关性,B/S模式结构可以任意扩展,可以从一台服务器、几个用户的工作组级扩展成为拥有成千上万用户的大型系统。 2、B/S模式提供了一致的用户界面 B/S模式的应用软件都是基于Web浏览器的,这些浏览器的界面都很相似。对于无用户交互功能的页面,用户接触的界面都是一致的,从而可以降低软件的培训费用。 3、系统开发、维护和升级的经济性 对于大型的管理信息系统,软件开发、维护与升级的费用是非常高的,B/S模式所具有的框架结构可以大大节省这些费用,同时,B/S模式对前台客户机的要求并不高,可以避免盲目进行硬件升级造成的巨大浪费。 4、B/S模式具有更强的信息系统集成性 在B/S模式下,集成了解决企事业单位各种问题的服务,而非零散的单一功能的多系统模式,因而它能提供更高的工作效率。 5、B/S模式具有很强的开放性 在B/S模式下,外部的用户亦可通过通用的浏览器进行访问。 6、B/S模式提供灵活的信息交流和信息发布服务 B/S模式借助Internet强大的信息发布与信息传送能力可以有效地解决企业、高等学校内部的大量不规则的信息交流。 2.4 Socket技术 2.4.1 Sockets介绍 2.4.1.1 Sockets具体说明 使用Sockets Socket控件让你建立一个利用TCP/IP和有关的协议与其他系统进行通信的应用。还能够读和写通过它连接的其他机器,而不用担心实际的网络软件的相关细节。Sockets提供基于TCP/IP协议的连接。除此以外还能很好的工作,在其他相关的协议: 例如Xerox Network System (XNS), Digital's DEC net, or Novell's IPX/S PX 家族。C Builder提供你写网络服务器或客户应用程序去读和写其他的系统。一个服务或客户程序通常专注于一个单一的服务如超文本传送协议(HTTP)或文件传输协议(FTP)。使用Server sockets,一个应用程序可以提供这些服务中的一个去连接一个希望使用服务的客户程序。Client sockets允许一个应用使用这些服务中的一个去连接提供这个服务的服务应用。使用sockets去写应用程序,你必须理解下面这些知识: 2.4.1.2 服务工具 当你需要写网络服务或客户应用时,Sockets提供一种接合。对于许多服务,象HTTP 或FTP,第三方服务商提供这些服务已经相当有效。有些甚至随着操作系统捆绑而来,以便不用你自己写。然而,当你想更多的控制服务的实现,如想让你的应用程序与网络通信更加紧密,或当没有一个服务能提供你特殊需要的服务时,你可能想建立你自己的服务或客户应用。例如,工作在分布式data sets时,你可能想为数据库写一层与其他系统通信的应用。想使用Sockets实现一个服务,你必须理解: 1、理解服务和端口 许多标准服务都有关联的、指定的端口号。当执行服务时,你可以为服务考虑一个端口号。如果你实现一个标准服务,Windows socket objects 提供一些方法让你为服务寻找端口号。如果提供一个新的服务,在基于Windows 95 或NT 机器上,你能够在文件Services中为你的服务指定一个相关联的端口号。设置Services文件的更多信息请看微软的Windows Sockets文档。 2、服务协议 在你写一个网络服务或客户程序前,你必须明白你的应用将提供或使用什么服务。你的网络应用必须支持许多服务的标准协议。如果你为标准的服务例如HTTP,FTP写网络应用,或even finger or time,你必须先理解与其他系统通信所使用的协议。特殊服务细节你必须看提供的或使用的文档。如果你的应用程序提供一个新的服务与其他系统通信,第一步是为这个服务的服务端和客户端设计通信协议。什么信息将发送?如何整理这些信息?如何对这些信息进行编码?经常的,你的网络服务端或客户端应用程序要提供一层在网络软件和一个应用之间使用的服务。例如,一个HTTP服务站点在INternet与一个Web 服务应用之间为HTTP请求信息提供内容和应答。在你的网络应用(或客户应用)和网络软件之间Sockets 提供一个接口。该接口在你的应用程序与应用间使用。你可以拷贝第三方服务商提供的标准API(例如ISAPI),或你可以设计和发布你自己的API。 2.4.1.3 Socket连接的类型 Socket连接基本可以分成三个不同的类型,他们可以反映出如何开始连接和什么是本地Socket 连接。这三个不同的类型分别是: 1.服务端连接 当倾听socket同意客户端发出的连接请求时,服务器端socket形成了服务器连接。当服务器同意连接时,要将一个完整的服务端socket描述发送给准备连接的客户端,以完成连接,当客户端接收到这个描述时,连接已被确认,连接完成。一旦连接到客户端的Socket完成,服务器连接就无法识别从客户端发来的连接。两端具有相同的接收相同事件类型的能力。只有倾听(listening)连接是根本不同的,它只有一个单一的末端。 2、倾听连接 服务器socket不主动连接客户端,相反,他们形成了一个被动的“半连接“状态,听客户的请求。服务器sockets形成一个连接请求队列,来储存它所接收到的连接请求。此队列记录客户连接请求,就像它们已经连接了似的。当服务器sockets 与客户连接请求相一致时,它就形成了一个新的sockets连接到客户端,所以这个监听连接可以保持打开以便允许其他客户端请求。 3、客户端连接 客户端连接是由本地系统的客户端socket和一个远程系统上的服务端Socket进行连接。客户端连接是由本地系统的客户端Socket开始。首先,由客户端Socket 来描述它想连接到的服务端Socket. 然后由客户端socket查找服务端socket,如果查找到了服务器,就发出连接要求。服务端socket有可能无法正确的连接到客户端Socket。服务器sockets会形成一个客户端申请连接的队列,在他们能满足条件是自动进行连接。当服务端socket同意客户端的连接要求时,服务端socket就会向它准备连接的客户socket发送一个完整的描述,客户端就可以完成连接。 2.4.1.4 sockets描述 Sockets可以让您的网络应用程序与其他系统通过网络通信。在网络连接中的每个socket都可以被看作是一个终端点。它有指定地址。 socket连接的完整描述,您必须提供socket连接的两端的地址。在开始一个socket连接之前,必须完成所要获得的连接的完整的描述。可以从应用程序运行的系统平台上获取一些信息。例如,您不需要描述客户端socket的本地IP地址,可以从操作系统中得到这个信息。但是你必须提供你所依赖的socket类型的信息。客户端socket必须描述他们想要连接到的服务器。侦听服务器socket必须描述它们提供的服务器端口的响应。一个完整的socket连接的描述由2个部分组成: 1.端口号 在socket连接中,虽然通过IP地址提供的信息可以方便的找到另一端的系统,但是通常也需要指定那个系统的端口号。没有端口号,一个系统同时只能进行一个单一的连接。端口号标识允许一个独立的系统连接到支持同时多个连接的主机,所以连接必须指定端口号。 在网络应用程序中,端口号是服务器工具的一个数字代码。他们的作用是侦听连接到他们自己固定的端口号,这样他们才能找到客户端sockets。服务器sockets要为其服务的相关端口号进行监听。当他们被允许提供一个客户端sockets连接时,就会创建一个单独的sockets连接,使用不同的端口号。以此实现持续监控端口号的相关服务。 客户端socket使用专用的本地端口号,而不必使用其他socket来查找它们。通过指定他们想要连接的服务端的端口号,来查找服务器应用程序。通常是通过指定要连接的服务来指定端口号。 2.IP地址 主机是一个这样的系统,它运行着含有socket的应用程序。你需要向socket来描述主机,这个描述需要给出主机的IP地址。该地址是一个字符串,有四个数字(byte)值,并在标准的internet点付内。 例如123.197.2.3一个简单的系统可以支持多个IP地址。IP地址往往很难记住,容易打错。另一种方法是使用主机名。主机名就是IP地址的另一个名字,是常见的统一资源定位(URLs)。它是一个字符串,包括域名和服务。 例如,大部分内部网中的主机名对应的IP地址是internetIP地址。在windows95和NT机器上,如果你无法使用一个主机名,你可以在HOSTS文件中给你的本地IP地址取一个新的名字。 服务器sockets可以不指定主机。可以从系统中获取本地IP地址。如果本地系统可以支持多个IP地址,则服务器sockets也会在所有的IP地址上侦听客户端请求的。当服务器sockets同意一个连接请求时,由客户端提供一个远程的IP地址。客户端sockets必须通过提供主机名或地址来指定远程主机。 从主机名和IP地址之间选择一个,很多应用程序使用主机名来指定系统。主机名不容易忘而且便于检查排版是否错误。此外,服务器可以改变系统或与IP地址相关联的特殊的主机名。使用主机名,可以让客户端通过主机名来查找需要的站点,即使主机更换了IP地址。如果不知道主机名,客户socket必须知道服务器系统所使用的IP地址。通过提供IP地址来指定服务器会更快。当您提供主机名时,socket要定位服务器系统,就要先搜索与这个主机名相关联的IP地址。 2.4.1.5 使用socket组件 有客户端sockets和服务器sockets两个组件。它们允许你连接到其他的机器,并允许你通过这个连接读写信息。与每个sockets控件相关联的是windows socket 对象,它们是一个实用的终端socket连接。ssocket控件使用windows socket对象去封装windows socket API 调用,所以不需要你的应用去关心怎么建立连接,也不需要去管理socket信息。。 1.使用客户端sockets 在你自己的页面上添加一个客户端socket组件(TClientSocket),把你的应用变成一个TCP/IP客户。指定你想连接的服务器socket和你希望服务器提供的服务。通过描述你想得到的连接,使客户socket控件去完成连接服务。每个客户socket控件都使用独立的客户windows socket对象(TClientWinSocket)去应答连接中的客户终端。使用客户sockets: A.取得关于连接的信息 当成功连接到服务器socket后,可以使用你的客户端socket控制相关的客户的windows socket object获取有关连接的信息。使用Socket property访问客户端窗口对象。一个properties,让您确定在客户端和服务器的连接中使用的地址和端口号。 当使用一个windows socket API调用时,可以通过使用SocketHandle property去获得socket连接中使用的handle。也可以用Handle property去访问windows,能够获得socket连接的信息。AsyncStyles property可以决定windows handle要接收信息类型。 B、建立连接 当你在客户socket控件中设置完成了你想要连接的服务器的属性时,你就可以通过Open的方法来进行连接。如果你希望你的应用程序在启动时能够自动连接,在设计时,通过使用Object Inspector设置Active property为true来实现。 C、指定想得到的服务 客户socket组件有一个数字properties,通过它可以指定你要连接到的服务器系统和端口。可以用主机名指定所需要的服务器系统。如果您不知道主机名,或者您是关注服务器的查找速度,您可以通过使用IP地址属性来指定服务器系统的地址。您必须指定一个IP地址或者主机名。如果您都指定了,客户socket控件会自动使用主机名。除了服务器系统,您还必须指定客户socket将连接到的服务器系统的端口。您可以使用Port property来指定服务端口号。也可以在Service property中使用服务名。如果您同时指定了端口号和服务的名称,客户socket控件会自动使用服务名。 D.关闭连接 当通讯完成要将socket连接关闭时,可以调用Close方法来关闭连接。如果连接由服务器端进行关闭,你会收到一个ondisconnect的事件通知。 2.使用服务器sockets 在你自己的页面添加一个服务端Socket组件使你的应用成为一个TCP / IP的服务器。你可以指定要服务器sockets提供的服务或当探查到客户端请求时使用哪个端口。您可以使用服务器socket控件来监视和允许客户端连接请求。每个socket服务器控件都有一个单独的windows socket Object(TServerWinSocket)来回答侦听到的连接。它使用一个服务器客户winodws socket Object(TServerClientWinSocket)来应答所有连接的的客户socket。 A.指定端口 在你的服务器socket还不能监听客户请求时,你需要给你的监听服务指定一个端口。可以通过Port property来指定端口。如果您的服务器应用程序提供了一个标准服务,该服务将使用自定义相关端口。可以通过Service property指定固定的端口号。使用Service property,可以避免端口号的设置错误。如果同时指定了Port property和Service property,服务socket将自动使用服务名。 B.监听客户请求 当你在server socket控件上设置了端口号,就可以通过调用Open方法来监听连接。可以通过使用Object Inspector设置Active 属性为true来设置应用程序在启动时可以自动监听连接。 C.连接到客户端。 监听服务socket控件会自动接受监听到的连接请求。如果没有收到通知,OnClientConnetc事件将发生。 D.取得关于连接的信息 当你的服务器socket启动了监听连接,就可以通过与你服务器socket控件相关联的服务器windows socket object来获取连接的信息。可以用Socket property 来访问server windows socket。object windows socket object的属性可以让你发现客户端socket连接的所有活动,通过socket服务器控件允许连接。使用Handle属性来访问通过socket连接接收到的信息。 所有活动的,连接的客户应用都是是通过服务、客户windows socket bject (TServerClientWinSocket)封装的。可以通过server windows socket object的属性来读取这些信息。这些server client windows socket object的属性可以让你决定哪些地址和端口号给连接的客户和服务器socket使用。如果你使用windows socket API调用,那么可以通过SocketHandle属性来获取socket连接时所使用的handle。也可以通过Handle属性去读取windows从socket连接处获得的信息。windows handle将接收的信息类型由AsyncStyles属性来决定。 E.关闭连接 可以通过调用Close方法来关闭监听连接。这时所有打开着的以及连接到客户应用的连接将会关闭,尚未同意的连接将会取消,然后会关闭监听连接,使你的服务socket控件不在接受任何新的连接请求。如果客户端关闭了他们连接到你的server socket的独立的连接时,服务端会在OnClientDisconnect事件中得到相关讯息。 2.4.1.6 socket事件的应答 客户在使用的过程中不可避免的会产生相应的错误事件,在产生错误事件之后,socket就会有相应的事件应答的机制,在此过程中会产生一个OnError事件,同时把错误代码改为0,以避免socket产生一个例外。 2.4.2 Socket运行原理详解 1、Socket中连接释放原理 上文中我们已经对于建立连接的过程进行了详细的介绍,下面我们将对与连接释放的过程进行分析,我们在进行连接释放的过程中就意味着客户关闭了连接,也就是说首先客户通过相应的客户端调用close进行连接的关闭,这时候客户端就会想服务器发送一个FIN M包,服务器在接收到这个包之后,就会对FIN包进行相应的确认,同时把结束的字符发送到相应的客户端上,同时客户端也不会在接收到相应的连接的数据。 2、Socket中TCP发送原理 在日常的实践的过程中,我们在Socket程序运行的过程中关于TCP连接的建立大致可以分成三个重要的组成部分,也就说说我们在建立TCP连接的时候需要经过以下流程: 我们要建立一个TCP的连接,首先需要我们自己通过我们自身的客户端把一个SYN J发送到相应的服务器,服务器在接收到相应的SYN J请求之后,需要对这个SYN J进行确认,也就是服务器对于用户的SYN J发送一个SYN K作为响应,同时在响应的过程中通过ACK J 1进行确认;客户在接受到服务器的响应之后,同时需要发送一个确认ACK K 1到响应的服务器,只有通过这三次的流程,我们才可能建立一个TCP 连接。 TCP在Socket发送的三次流程 从上图中我们可以清楚的看出,在建立连接的过程中,客户端首先根据自身的需要向服务器发送一个连接请求的SYN J包,在这个过程中,客户端所调用的是connect 命令,发送之后,客户端中的connect就会进入相应的忙碌状态;客户端发送相应的连接请求之后,服务器就会相应的受到SYN J包,也就是接收到客户的连接的请求,这时候服务器就会调用accept函数接受客户的请求,同时向客户端发送相应的响应SYN K以及确认的ACK J 1;客户端在接收到相应的SYN K以及确认的ACK J 1之后,connect就会返回,同时向服务器发送确认包SYN K,服务器在接收到确认的ACK K 1时,accept返回,这样通过三次的流程我们就最终实现了建立连接的目的。 2.5 多线程技术 本次高校智能排课系统在应用当中,会出现同时多人、多角色同时使用同一模块的情况,所以,需要用到多线程技术。 1)Thread t = new Thread(),初始化一个线程,实际上就是一个普通对象,此时他的状态为New。 2)t.start(); 线程处于就绪状态(可运行状态),也就是随时等待着运行,不要小看这个start,这个start决定了他是否是一个真正的线程实例,因为start为其准备了线程环境,你若只是普通调用run方法,那么这就是一个普通的方法。处在这个时候的线程,都会去竞争CPU资源,所以谁被竞争到了CPU资源,也就是被调度Scheduler,那么他就可以从可运行状态到真正运行状态。 3)当线程获取到了CPU资源时,线程就从可运行状态到真正运行状态,也就是Running,现在正在运行。 4)如果这个线程正在等待客户输入,也就是IO异常,等各种阻塞事件,也有可能是自己调用了sleep等阻塞事件,线程就会从运行状态转为阻塞状态,这个状态是不会发生任何事情的! 5)一旦阻塞事件被清除,比如用户已经输入完成,IO流已经关闭,sleep也已经超时等,线程从阻塞状态变为就绪状态,又一次回到了可运行状态,随时与别的线程竞争资源,等待运行! 6)处于运行状态的线程可能会在运行当中遇到了同步方法或同步块,也就是synchronized标记的方法或块,这个时候该线程获到了对象的锁,其他线程就无法进入该同步方法,那么这些无法执行的线程怎么办呢?他们就都阻塞在这里,等待锁的释放,从新去竞争锁资源,因为只有拥有锁的线程才有资格继续往下运行,那么这里这些线程就阻塞在锁池(Lock Pool)。 7)一旦被阻塞在锁池的线程竞争到了锁(之前的线程运行完了或之前的线程在内部跑出来异常,或者调用了wait等,都会释放线程的锁),那么这个线程就会从阻塞状态转为就绪状态,不要以为这个线程会立刻执行,这是不可能的,你要想到线程执行都是要获取到CPU资源的,如果没有操作系统的调度,他们都没有资格运行。 8)处于运行状态的线程可能会在运行当中进入了同步方法或同步块,这个时候他拥有了对象的锁,至高无上,可是由于当前环境可能导致他没必要继续执行,所以他会自己让出锁资源让别的线程也有机会继续执行,所以这个线程可能在synchronized内部调用所对象的wait方法,一旦调用,当前线程让出锁资源,同时自己进入等待池(wait pool)中,直到被别的线程唤醒。如果没有被唤醒就一直会处在等待池当中,受到线程的阻塞,所以这个时候他们一心想要的是被唤醒,因为只有唤醒才有可能继续运行。 9)一旦被阻塞在等待池的线程被唤醒(可能是某个synchronized的线程调用了notify或notifyAll,也可能是外部调用 interrupt导致内部抛出异常,也会获取到锁),那么这个线程就会从等待池转为锁池当中,继续阻塞,所以不要以为线程被唤醒就会继续运行,这是不可能的,他们同样需要竞争锁资源。 10)线程运行过程中抛出异常,或者线程实在运行完了,那么线程就结束了,也就是消亡期。运行完了是不可以继续start的,必须从新new 一个线程才能start。那么将是有一个生命周期。 2.6 排课算法介绍 随着计算机信息技术的发展,进入上世纪90年代后,国内外对课表编排问题的研究也活跃起来。在排课问题的研究领域中,研究人员提出了多种不同的智能排课算法。目前,解决课表编排问题的方法主要有如下几种: 1、优先级算法 优先级算法的基本原理是把现实中的关于排个的影响因素进行一定的搜集和归纳,把这些因素中的关于排课所涉及的老师、学生作为主要的研究的对象,同时把时间和空间加入到其中,组成优先级算法的四维空间的组成部分。这样我们就把排课问题的基本要素归纳成了算法中的一个4维的空间,而在排课过程中涉及的教学方案的计划以及其他的对于排课的特别的要求作为我们实现四维空间优化的约束条件。这样,排课问题就会转化为算法上的优化问题。我们通过算法进行排课的优化。这种算法的优点在于能够把复杂的问题简单化,进一步实现了化整为零的目的,使得排课问题优化成为一个简单的过程。 2、模拟退火法算法 模拟退火的算法是在上世纪八十年代初建立起来的,模拟退火算法建立的目的就是解决问题优化问题。它的基本原理就是基于概率演算的基础之上,首先赋予问题一个初始的解,初始解的前提就是满足问题要求的基本条件。模拟退火法之所以叫做退火法就是在问题初始解的基础上实现退火的过程,要求在退火的过程中实现我们对问题的优化,退火的每个解都要求满足问题的所有条件,其优化的过程则是通过目标函数的定义来实现的,因此模拟退火法非常适合在排课问题中的应用,并且通过一些应用的实践的案例,证明模拟退火法的效果还是比较明显的。 2.7 本章小结 本章主要对本次高校智能排课系统的实现过程所要使用的关键技术进行了简要的介绍,本次系统开发主要使用了目前比较流行的关系型数据库MySql,开发语言使用的是非常流行的PHP技术,以及普遍使用的B/S开发结构,另外对本次只能开发系统所要使用的排课算法进行了简单介绍。通过使用以上流行技术,可以确保本次系统的开发各种安全、效率得到有效的保证。 第三章排课系统需求分析 需求分析作为软件开发基础性的工作,是软件系统设计中必不可少的步骤,它是软件系统开发过程实施的一项重要环节。因此在系统需求分析阶段,要精心安排到教务部门走访调研,细致的进行分析和总结,做出精炼、准确、详实的需求分析说明。 3.1 排课系统业务分析 课程表作为专业教学培养方案实施的教学安排表,是学生课堂学习和教师教学进程的具体实施方案,排课过程就是对课程、时间、教师、学生、教学场地综合一体的统筹安排的过程,它对教务人员来说是一项十分繁重而复杂的工作。 排课对每一个专业来说应尽量满足一个最优的安排方案。在实际排课操作中,这种最优的排课方案其实不是唯一的,甚至有很多种可行的方案。学生在一周的学习中课程安排需要合理且符合教学要求,针对不同课程的性质和教学环节的特点进行合理的分析安排,同时还要处理好专业必修课和公共选修课之间的关系,为学生提供最大程度地获取知识和技能的空间。 3.1.1 排课根本的限制条件 排课基本的约束条件是排课过程始终要遵守并必须得到满足的要求,归纳排课过程的基本约束条件有如下几点: (1)在同一个课程安排的时间段,同一个行政班不能排多门课程或在多个教室上课。 (2)在同一个课程安排的时间段,同一位教师的同一门课程不能安排两个以上的教学班上课。 (3)在同一个课程安排的时间段,同一位教师不能安排两门以上的不同课课程。 (4)满足课程排课合理性要求,如根据课程性质课程排在上午或下午上课,多学时要隔天排课等。 (5)在同一个课程安排的时间段,同一位教师不能安排在两个以上的教室中上课。 (6)在同一个课程安排的时间段,同一个教室不能排两门以上课程或有多个教学班上课。 (7)在同一个课程安排的时间段,同一专业的行政班不能排两门以上的必修课。 (8)满足课程对教学场地的要求,如容纳学生数量的要求、多媒体教室的要求等。 (9)对于兼课较多的教师,为保证教师有充足的授课精力,同一位教师一天排课不能超过4学时。 3.1.2 程序智能排课的基本需求 在归纳出上述排课的基本约束的条件后,针对自动排课系统的整体基本需求,即对系统有哪些要求,需要系统完成哪些工作,作了进一步的概括与总结,说明如下: (1)对课程安排的结果提供良好的系统反馈手段,方便教务人员对课程安排进行调整。 (2)按照学期教学任务书中的课程所划分的教学班,实施按专业行政班进行冲突检测的自动排课过程; (3)对同一时间段的必修课与选修课的教学班总容量进行控制,确保学生有充足的选课空间; (4)满足排课的基本约束条件,并能够自动核查专业必修课和公选课排课冲突; 3.1.3 主要的业务流程分析 自动排课系统的业务主要包括了排课信息录入、自动排课和课程表查询这三项业务工作内容。为了更加清楚的表达自动排课系统的业务工作流程,教务人员在登录界面输入用户名和登录密码登录,登录系统后需要对各专业课程的排课信息资料进行录入,包括了课程周学时的计算、使用教学场地的类型、课程排课的优先级、参加自动排课的课程等信息。教务人员在连续录入若干个课程相关排课资料后,系统更新数据库提交保存录入的信息。 自动排课活动图中,教务人员在登录界面输入用户名和密码,经系统验证正确后,进入系统进行自动排课业务。系统按照学期教学任务书中的课程所划分的教学班,实施按专业行政班进行冲突检测的排课过程,应用自动排课算法进行自动排课。当所选课程教学班中的每一个行政班排课均不冲突,则该门课程教学班排课成功,随后更新系统数据库保存排课数据。如果所选课程教学班排课冲突无法安排或未排完所有课程教学班时,则继续选择其它未安排的课程进行排课。全部课程教学班已排完后,结束自动排课。 教师在登录界面输入用户名和密码,经系统验证正确后,进入系统进行课程表查询业务。用户可以按要求设置查询的专业行政班、教师姓名或课程名称等查询条件,系统生成相应的课程表。 3.2 系统具体需求分析 自动排课系统建立在以校园网为基础的网络环境上,实现高校的日常教务排课管理的功能需求。根据高校的管理和实际需求及学院的教学管理特点,用户权限的管理要求设置为:系统管理员、教务排课人员、教师等一般用户的多级权限管理模式。利用分层授权和客户端访问权限等方式来保证系统数据的安全性。 在系统功能方面,根据排课系统业务需求分析和对目前本人工作所在学院的调查研究,并兼顾系统对未来可扩展性的需求的基础上,确定出高校自动排课系统应包括的功能分别为:系统管理、用户管理、排课信息管理、智能排课管理、课程表信息发布与查询,共五个功能模块。 3.2.1 系统管理模块需求 系统管理完成用户登录与退出以及系统基础数据的管理功能。 3.2.2 用户管理模块需求 用户管理完成对用户权限授权的管理;排课信息管理负责自动排课所需基本信息的录入管理。 3.2.3 排课信息管理模块需求 该模块主要是系统管理员对高校智能排课系统所需要的基本信息的增删改查等功能。 3.2.4 智能排课管理模块需求 自动排课管理完成自动排课功能; 3.2.5 课程表信息发布与查询模块需求 课程表查询提供了信息发布与信息共享的功能。 3.3 性能需求分析 系统的功能性需求是对高校管理教务系统中所有功能模块的工作内容进行的需求分析,侧重于系统的主体功能和客户的基础要求,但是一个系统能否正常的、稳定的运行还需要关注功能性需求以外的非功能性需求。通过对系统的非功能性需求的整理和分析,获得了以下系统的非功能性需求: 系统的可靠性,由系统的可维护性和适应性两个方面组成。能够保证学生公寓管理系统能够保持长期稳定的运行;在异常情况下能够进行一定的系统修复能力和数据还原能力。不可以出现频繁的系统崩溃或者无可用状况出现。 系统的易用性,该交通应急指挥系统的操作人员主要为系统操作人员。因此需要保证系统具有良好的易用性和完备的帮助文档或渠道。 系统安全性,应急指挥系统中保存不少的以往突发事件信息,这些数据信息是该对后续的事故分析及其它案情分析非常有帮助,所以该系统需要能够避免系统数据出现窃取、篡改的情况发生。 系统的可扩展性,该应急指挥系统由于涉及到方面比较广,后期会进行系统功能的优化和修改,为了较少系统后期改造的成本和风险,需要保证系统具有良好的可扩展性。 3.4 本章小结 本章首先对自动排课系统业务内容和工作流程进行了详细的需求分析。对高校教育规律下的排课原则、排课基本约束条件以及排课系统的基本需求进行了深入的分析。同时针对不同需求进行分类,并通过业务的主要活动图的形式进行了说明。对系统功能需求进行了描述,分析了系统非功能性的需求,使我们对排课系统有了一个整体准确清晰的认识和设计方向。 第四章智能排课系统的设计 本章进入智能排课系统的物理设计阶段。通过在系统需求分析阶段所确定的系统逻辑模型、功能等方面的要求,设计出能够在校园网络环境上运行的具体的实施方案,即建立自动排课系统的物理模型,完成自动排课系统的设计。 4.1 智能排课系统总体设计 4.1.1 系统的设计目标 智能排课系统设计目标是提供一个准确的、高效的、可靠的课程表安排的解决方案,能够科学、合理地分配与使用各种教学资源,课程表编排符合教学规律,更加人性化,从而有利于提高高校教学管理水平和教学质量。在新的完全学分制教学管理改革的要求下,配合新的专业培养方案的实施,满足学生选课、选讲台的需要,最大限度的提供优质的教学资源,确保教学管理工作的顺利进行。 4.1.2 系统层次结构 将系统划分为四个层次。其中,硬件层是系统的最底层,是系统运行和维护的基础,保证了整个系统的正常实施,包括校园网、数据库服务器、排课工作站、课表查询工作站等硬件资源。数据层包括计算机操作系统、后台数据库服务器系统、以及前台数据库开发平台,实现了系统排课数据的存储与管理。系统层体现了自动排课系统软件的各个功能模块的组成,它是系统设计的核心,包括系统管理、用户管理、排课信息管理、排课系统管理、以及课程表查询。系统的最高层是用户层,包括系统的用户界面、系统管理员、教务人员排课用户、教师等一般查询用户。系统的四个层次间不允许跨层调用,只能在本层子系统之间或与下一级的子系统产生依赖关系。系统层次间的数据传输是通过实体在层间进行的,各层均有实体进行封装,相邻两层之间的数据访问是通过访问接口实现的。 4.1.3 智能排课系统逻辑模型 根据排课系统业务分析和系统需求构建系统的逻辑模型,系统数据流程图如下: 根据各专业教学培养方案的计划安排学期教学任务书,排课前需要向教学任务书补充排课相关排课信息。首先根据课程开课专业人数、课程性质等要求,分配教学班,一般每个教学班有若干专业行政班组成。其次,根据课程开课起始周和结束周计算课程的周学时,填入教学任务数据中。第三,针对课程的开课要求,设置课程排课优先级,确定哪些课先排,哪些课后排。排课数据准备好后,进入系统自动排课阶段,通过系统排课算法判断教师、专业课程、教学班、行政班、教学场地的冲突,按课程排课优先级和上课时间安排表应用自动排课算法进行课程表自动编排。排课完成后,根据不同用户对象的使用用途的需要发布专业课程安排表、教学班课程安排表、教室使用情况表等。 4.2 智能排课系统功能设计 根据系统功能需求进行系统的功能结构图设计。 4.2.1 系统管理模块 实现系统基本管理功能,如用户登录,教学任务信息,教师信息、教学场地信息、行政班级信息、课程上课时间表等数据的导入功能。 4.2.2 用户管理模块 实现系统对用户权限的管理。为了保证系统数据库的安全,不同的用户具有不同的操作权限,用户权限分别为系统管理员一教务人员一教师,不同权限的用户对系统数据的操作范围是不同的,对于权限最低的用户,只能进行查询,没有对排课数据的修改权限。 4.2.3 排课信息管理模块 该模块是为了智能排课做准备,没有该模块提供的大量的排课信息,后面的智能排课模块就发挥不了作用,甚至排出错误的课程表。排课信息包括有课程开课周学时数据、课程排课优先级数据、其它约束条件等。这个模块事件上就是完成这些基本数据的增删改查及批量操作功能。 4.2.4 智能排课模块 智能排课模块是整个高效智能排课系统的非常重要的模块,在前面系统管理员录入信息的基础上,使用核心的排课算法进行计算,通过不同条件的限制,排出另教务人员和老师都满意的课程表。 4.2.5 课程表信息发布与查询模块 该模块通过不同的查询方式,可以查询到自己想要的课表信息,例如,可以选择教师,也可以选择教学班级,也可以选择专业,也可以选择课程,同样,也可以选择教室等。意味着可以选取其中的一个或者多个进行查询。 4.3 数据库设计 对于数据库来说,不仅仅是建立几个表,建立几个字段,最为重要的是分析清楚各个表之间对应的关系,其实,每个表就代表了一个实体,分析清楚了这些实体,就弄清楚了整个表之间的关系。在设计表时,一定要规范,在考虑表和表之间的关系时,要做到精干,防止冗余的数据出现,尽量做到数据库中每个表都能够正常的分配,这样,在算法程序调用的时候,数据需求合理。尽可能做到合理的、恰当的有关数据结构的研究与设计,这样,就保证了整个应用程序能够高效的运行,同样,也简化了整个高效智能排课系统的运行方式。 4.3.1 数据库表结构总体设计 4.3.2 各表详细设计 以总体设计为基础,对系统进行详细分析,并且按照数据库规范要求,从整体需求出发,设计了下面总共11个数据表的表结构信息。 1、课程代码表(KeCheng) 课程代码表:此表是用来描述某门课程的具体信息的表。主要包括唯一标识、课程代码、课程名称、课程简称、性质、学分、学时等7个字段。其中,性质有两个选项:即“必须”和“选修”,前者是自己所在专业方向上的课程,后者代表了没有专业属性的那些课。 2、教师代码表(JiaoShi) 教师代码表:此表是用来记录教师信息的表。主要包括唯一标识、教师的代码、老师的姓名、老师所在组的代码等4个字段。其中,考虑到一个课程有好几个老师代课,所以教师的代码与教师的名称字段长度要稍长一些,这样以来,可以有多个老师的信息存储在表中。 3、教学任务安排表(TeaShech) 教学任务安排表:此表是整个排课系统的基础表,存储了排课信息的基本资料。主要包括唯一标识、学期、课程代码、代课老师代码、班级代码、上课类型、首周、末周、每周学时、优先级、标志和最大次数等12个字段。 没有这个表,就不能进行自动排课,所以本系统必须由系统管理员首先录入排课的基础资料。其中,每门课程必须要有那几周开始、那几周结束,当然了,也可以设置系统默认的以普遍规律默认给出每周学时。给每门课程设置优先级,这样,排课时,就有了排课前后的依据,哪些优先级高的,肯定排在前面,这样,对学生和老师来讲,都会得到较好的教学效果。另外一个字段,标志,当标志为“0”时,代表在系统自动排课时,不起作用。像哪些实际课程,还有前、后半学期课程时间、地点完全重合,这些都不用系统排课;当值是“1”时,意思是本门课程需要系统排课;当值是“2”时,就代表了该门课程已经被系统排课;当值是“2”时,就代表了该门课程因为和其它课程时间相同而不能参与系统自动排课。而最大次数能够控制系统排课的功能与效果。 4、班级信息表(CC) 班级信息表:该表是用来记录班级详细信息的表。主要包括唯一标识、班级名称、专业标志、班级人数等4个字段。其中,班名就包含了专业和年级信息。 5、教学班代码表(SC) 教学班代码表:此表是用来记录上课的班级的表。主要包括唯一标识、班级代码、班级名称、班级的容量等4个字段。其中,班代码的格式为:学期链接“-”链接课程代码链接“-”序号,如“20141-ITC 140001 C-1”代表了2014-2015学年首个学期“大学英语”课程首次教学班的代码,而班的名称这样命名:课程简称 年级 序号 层次,而班的名称和班的代码能够由计算机自己计算生成。 6、专业代码表(SpecaPL) 专业代码表:该表是用来记录专业内容的的表。主要包括唯一标识、专业代码、专业名称、级别等4个字段。该表其实就是记录高校所拥有的所有的专业信息的表。 7、教学班行政分配表(CDB) 教学班行政分配表:该表是用来记录教学班行政分配内容的的表。主要包括唯一标识、学期、教学班代码、行政班标志等4个字段。这里提醒一下,该表只适用哪些必须课的教学班的。 8、上课时间表(ShangKeShiJianBiao) 上课时间表:该表是用来记录上课名称和代码对应关系的的表。主要包括唯一标识、上课时间代码、上课时间等3个字段。该表其实就是记录上课的时间和其代码所对应的关系。上课时间代码由5为字符组成,第2, 3位和第4, 5位分别代表课程节次。
信息发布:广州名易软件有限公司 http://www.myidp.net
|