《delphi7.0高校排课系统的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
南京工程学院毕业设计说明书(论文)作者:学号:院系:计算机工程学院专业:计算机科学与技术题目:高校排课系统的设计与实现指导者:副教授助教(姓名)(专业技术职务)评阅者:(姓名)(专业技术职务)2008年6月南京 毕业论文中文摘要排课问题的研究主要是解决各种教学资源如教室、老师的合理有效利用等问题,避免老师、班级在上课时间、地点上的冲突,使排课时间分配均匀。一般而言,在算法设计中为排课操作设置了不同的优先级,逐级排课,有效地降低了排课时间冲突的概率,提高了排课的成功率。论文详细介绍了排课算法的设计和实现、数据库的设计和实现,以及数据输入、信息查询和教师、班级课表输出等功能的设计与实现。在时间选择的灵活性、排课优先级等方面提出了自己的见解并进行了编程实现,毕业设计所实现的排课系统只是一种尝试,还有很多不完善的地方,需待日后改进。关键字排课高校算法设计Delphi7.0 毕业设计说明书(论文)外文摘要TitleDesignandRealizationofCourseArrangingSystemforUniversityAbstractThestudyofarrangingscheduleproblemislargelytosolvetheproperandeffectiveusageofvariousteachingresources,suchasclassrooms,teachersandsoon,toavoidtheconflictonthetimeortheplaceoftheschedule,andtomakethetimeproducedontheaverage.Generallyspeaking,differentprioritiesareassignedtotheoperationofthearrangingschedule,maketheschedulestepbystepinthedesignofthealgorithm,andthusbringdowntheprobabilityoftheconflictofthetimearrangingeffectively,increasetheprobabilityofthesuccessivearranging. Thispaperintroducesthedesignandimplementofarrangingschedulealgorithm、thedesignandimplementofdatabase,andthedesignandimplementofinputtingdata,searchinginformation,outputtingteacherandclassschedule,andsoon.Thepapershowssomeoriginalitiesinflexiblesettingoftimemode,thepriorityofarrangingschedule,etc,andfinallyrealizestheminprogram.Therealizationofcoursearrangingsystemingraduatedesignisonlyanattemptandtherearestillalotofbugstobeimprovedinthefuture.KeywordsCourseArranging,UniversityAlgorithmDesign,Delphi7.0 目录前言1第一章高校排课系统综述21.1课题背景21.2毕业设计实现系统的特点3第二章开发工具简介42.1Delphi7.0简介42.2SQLServer2000简介62.3MicrosoftVisio简介82.4PowerDesigner简介8第三章概要设计103.1需求分析103.2模块功能设计113.3排课算法设计12第四章数据库设计164.1实体关系模型164.2数据库设计17第五章详细设计与实现255.1系统主界面255.2信息录入功能255.3排课功能315.4课表输出功能325.5帮助功能32第六章结论346.1测试结果346.2成果与特色35-ii- 6.3展望与心得36参考文献37致谢38附录391排课算法代码实现392.英文资料及翻译43-ii- 南京工程学院毕业设计说明书(论文)前言全球性的网络化、信息化进程正改变着人们的生活方式,Internet技术应用飞速增长给人们生活工作的各个层面带来了深刻的影响,办公自动化系统作为Internet的重要应用,也已不可避免的成为各行各业的迫切需要。传统的办公模式主要以纸介质为主,在信息革命的浪潮中,显然已经远远不能满足高效率、快节奏的现代工作和生活的需要。如何实现信息处理的自动化和办公的无纸化逐步得到了人们的重视。办公自动化的发展实际上取决于办公活动的需求和实现这种需求的可能性。展望未来,全世界都将进入可持续发展的办公自动化时期。教育行业也迎来了一次全新的办公自动化的改革,教育办公化和办公化教育是当代和未来教育的世界性发展趋势。近年来,大学的学习方式也在不断的更新,许多大学的不断发展,采用学分制的管理系统。而随着高校新生的扩招力度加大,各高校都面临着教室资源紧张的问题,原来每个班有一个固定教室的模式已不存在,甚至原来一个系专用的教学楼都要考虑参加全校的教室资源统一调整,对高校教务处来说确实是一个艰巨的任务。知识经济时代已向我们走来,信息化已经成为社会发展的时代特征。计算机技术、通信技术和现代信息技术的迅速发展,使建设高校排课系统,不仅是时代发展的要求,而且是发展教育事业、提高高校教学管理水平和办学效益的需要。高校排课系统是一个复杂的系统,包括方方面面。排课调课是高校教务管理的一项日常工作。由于我国高校的基础建设相对落后,加之近年来大规模的扩招,因而师资和教室资源紧张的问题非常普遍。这项工作靠手工完成一般需要耗费大量的时间和精力,且多易出错。同时手工操作也容易不充分利用资源满足经常变化的需求。如利用计算机进行自动排课,不但能使教务人员从繁杂的排课任务中解脱出来,大大提高教务管理工作效率,而且能改善教学管理质量,合理高效地利用有限的资源,对推动教学的发展起到非常重要的作用。另外,解决排课问题对解决其他多约束、大规模的时间表问题也具有重要的指导意义。53 南京工程学院毕业设计说明书(论文)第一章高校排课系统综述1.1课题背景本部分主要介绍与课题相关的内容,简单描述一下目前排课系统的发展历史及趋势,主要使用的排课算法,然后引出本系统开发时在算法上所具有的一些特点。接下来着重介绍了开发本系统使用的工具Delphi的一些特性,以及它在数据库开发方面具有的强大功能。1.1.1发展历史传统的人工进行排课,最令人担心的问题就是——出现教室资源冲突或教师资源冲突的情况,而且工作繁琐,工作量巨大,尤其是在给大学校园进行排课时出现的问题更多。市场流行的排课系统很多,比如:相似排课,智能排课系统,正信华课程安排管理系统等等,这些排课软件在解决排课问题时大多数采用的算法都是回溯算法,排课的效果也都很好。利用回溯算法解决问题的思路是先选择某一可能的线索进行试探,每一步试探都有多种方式,将每一方式都一一试探,如有问题就返回纠正,反复进行这种试探再返回纠正,直到得出全部符合条件的答案或是问题无解为止。这种解决问题的方法就是回溯法。回溯算法对空间的消耗较少,当其与分支定界法一起使用时,对于所求解在解答树中层次较深的问题有较好的效果。但应避免在后继节点可能与前继节点相同的问题中使用,以免产生循环。回溯算法是所有搜索算法中最为基本的一种算法,其采用了一种“走不通就掉头”思想作为其控制结构,可用于找解或所有解以及最优解。1.1.2发展趋势计算机软件技术应用于学校的课程安排是发展的必然。充分发挥计算机的优势,将大量复杂的判断与运算交给计算机来做,是真正意义上的人脑的“减负”。教师设置好学校基本情况及排课要求,让计算机排出课程表,适度调课后的课表就能满意地应用于新的学期。随着计算机软件技术的不断发展,排课效率高、出错概率低的排课算法也必将会逐渐趋向成熟,功能更加完善的排课系统也将应运而生。53 南京工程学院毕业设计说明书(论文)1.2毕业设计实现系统的特点1.2.1数据管理特点系统采用半智能化的数据录入功能,工作人员只要对一些基本信息的录入,系统就会对一些相关联的信息进行自动生成,这样大大的减轻了管理人员的工作量,以及对数据的冗余性也有一定的改善。对工作效率有一定的提高。1.2.2算法特点高校排课系统与目前流行的排课系统不同之处在于排课算法的设计上。本系统采用简单的回溯算法,虽然它在实际使用中可能不如已有的各种排课软件,但它是应用程序开发和排课算法设计的一次尝试,并且它在排课的效果和效率方面有一定的突破。它在算法上具有如下特点:1)算法以班级为主线检索,再根据每一个班级检索每个班级所有的待排课程。这样处理不会有排课丢失的现象。2)检索出要排的课程以后选择授课教师,选择教室,判断教师,班级,教室是否有空,判断教室人数是否满足。检索合班否,看是否满足要求。不满足做一个回溯算法。满足,排课然后再检索下一条记录。如此直到结束为止。3)写入数据库,建立视图,设计查询算法,输出课表。53 南京工程学院毕业设计说明书(论文)第二章开发工具简介2.1Delphi7.0简介Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。在“骨架”上即使没有附着任何东西,仍可以严格地按照设计运行。设计者的工作只是在“骨架”中加入程序。缺省的应用程序是一个空白的窗体(Form),运行它,结果得到一个空白的窗口。这个窗口具有Windows窗口的全部性质:可以被放大缩小、移动、最大最小化等,但设计者却没有编写一行程序。因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础。Delphi已经为设计者做好了一切基础工作——程序框架就是一个已经完成的可运行应用程序,只是不处理任何事情。设计者需要做的,只是在程序中加入完成所需功能的代码而已。在空白窗口的背后,应用程序的框架正在等待用户的输入。由于设计者并未告诉它接收到用户输入后作何反应,窗口除了响应Windows的基本操作(移动、缩放等)外,它只是接受用户的输入,然后再忽略。Delphi把Windows编程的回调、句柄处理等繁复过程都放在一个不可见的Romulam覆盖物下面,这样设计者可以不为它们所困扰,轻松从容地对可视部件进行编程。开发软件的难易程度,第一决定要素在于开发工具的选择,它是帮助用户实现其理念的工具,也就是构建在基础理念上的上层建筑。一款优秀的、体贴的、以人为本的开发工具的标准应符合以下四点:1)能够将要解决的问题简化,并以某种理念快速实现。2)不隐藏任何用户想要知道的细节。3)可以忽略用户所不想知道的细节。4)主动去适应不同层次的开发程序员。那么,有符合以上四点的开发工具吗?答案是:有,那就是Delphi。俗话说:“真正的程序员用C开发,聪明的程序员用Delphi开发”53 南京工程学院毕业设计说明书(论文)它将一切化繁为简,却从不阻止用户寻求真实。用户可以在它构造的简化了的VCL虚拟世界中完成任务;也可以钻进VCL的世界以探寻它和现实世界(即Windows平台的真实接口)的映射关系,学习它的Framework的设计;还可以扩展那个虚拟的VCL世界以适应自己的需要。它还有一些更引人注目的优点:1)方便功能强大的可视化开发环境的性能。Delphi的窗体设计器的与众不同之处在于,Delphi是建立在一个真正面向对象的框架结构基础之上的。这样,你对基类所做的改变都将会传递给所有的派生类。这里涉及的一项关键技术就是VFI(visualforminheritance),即可视化窗体继承。VFI技术使你能够动态地继承当前项目或对象库中的任何其他窗体。一旦基窗体发生改变,派生的窗体会立即予以更新。2)编译器的速度和已编译代码的效率。也许Pascal编译器最著名的特点就是速度快,而Delphi正是建立在这种编译器的基础之上的。事实上,它可能是针对Windows的最快的高级语言本地代码编译器。 3)编程语言的功能及其复杂性。Delphi具有强大的功能并且简单易学,对于我们这种没有开发经验的开发者用来开发程序是非常适合的,能够非常迅速的看见成效,也能够树立开发出一个完整程序的信心。4)数据库结构的灵活性和可扩展性。可以毫不夸张的说,Delphi和数据库的联系是非常紧密并且开发数据库方面的系统是具有巨大的优势。Delphi保留了我们认为是所有工具中最灵活的数据库结构。对大多数基于本地、客户/服务器和ODBC数据库平台的应用程序来说,BDE的功能都非常强大。如果你对此不满意,可以避开使用BDE以支持新的本地ADO组件。5)框架对设计和使用模式的扩充。这是一项经常被其他软件设计工具忽略了的重要功能。VCL是Delphi最重要的组成部分。在设计时操纵组件、创建组件、使用OO(面向对象)技术继承其他组件的行为,这些能力都是决定Delphi效率的关键因素。在许多场合,编写VCL组件都采用固定的OO设计方法。相比之下,其他基于组件的框架经常过于死板或过于复杂。比如ActiveX控件具有和VCL控件相同的设计期性能,但却不能被继承以创建一个具有其他不同行为的新类。传统的类框架,如OWL和MFC,需要你有大量的内部结构知识,而且如果没有RAD工具的设计期支持,其功能将会受到抑制。53 南京工程学院毕业设计说明书(论文)本系统用的前台开发语言是Delphi7.0。Delphi7.0是我接触的第一个快速、可视化的IDE,采用基于控件的开发框架结构,提供了100多个可供使用的控件,利用这些控件,开发人员可以快速构造出各式各样的应用系统。正是因为其功能强大、使用方便,Delphi已成为我开发系统的最爱。另外,Delphi强大的数据库开发能力也是我选择它的一个主要理由,该数据库语言所固有的最标准化程序设计风格和可视化设计方法使得设计工作具有极高的效率。2.2SQLServer2000简介图2-1显示了数据库系统的主要组件。数据库由DBMS(DataBaseManagementSystem数据库管理系统)处理,DBMS则由开发人员和用户通过应用程序直接或间接地使用。它主要包括四个要素:用户数据、元数据、索引和应用元数据。数据库用户数据元数据索引应用元数据数据库包括数据库引擎设计工具表生成工具窗体生成工具查询生成工具报表生成工具过程语言编译器执行时间窗体处理器查询处理器报表书写器过程语言执行时间开发人员应用程序用户应用程序图2-1数据库组件目前,大多数数据库把用户数据表示为关系。现在把关系看作数据表。表的列包含域或属性,表的行包含对应业务环境中的实体的记录。并非所有的关系都同样符合要求,有些关系比其它关系更结构化一些。为了对比结构差的关系和结构好的关系之间的差别,以本文所设计的课表管理系统中的课程和任课教员关系为例来说明,假若设计关系R1(TeacherName,CourseName,…,TeacherOthers);这个关系的问题出在它有关于两个不同主题的数据,就是课程和教员。用这种方式构成的关系在进行修改时,会出现问题。因为一个教员可能教授多门课程,如果某个教员的TeacherOthers出现变更,它所教授的课程记录(可能多个)也就必须变化,这是不好的。因此数据用两个关系表示更好。现在如果某一个教员改变了它的TeacherOthers,只有关系的对应行需要改变。当然,要想产生一个53 南京工程学院毕业设计说明书(论文)显示课程名及其任课教员地址的报表,就需要将这两个表的行结合起来。结果表明,将关系分别存储,在生成报表的时候将它们结合起来,比把它们存储在一个合成的表中更好。R2(CourseName,…)。R3(TeacherName,TeacherOthers,…)。数据库是自描述的,这就意味着它自身包含了它的结构的描述,这种结构的描述称作元数据。因为DBMS产品是用来存储和操纵表的,所以大多数产品把元数据以表的形式存储,有时称作系统表。这些系统表存储了数据库中表的情况,指出每一个表中有多少列,哪一列是关键字,每一列的数据类型的描述,它也存储索引、关键字、规则和数据库结构的其他部分。在表中存储元数据不仅对DBMS是有效的,对用户也是方便的,因为他们可以使用与查询用户数据同样的查询工具来查询元数据。第三种类型的数据改进了数据库的性能和可访问性,这种数据经常称作开销数据,尽管有时也采用其他类型的数据结构,如链表,但它主要包括索引。索引可以用来排序和快速访问数据。存储在数据库中的第四种数据是应用元数据,它用来存储用户窗体、报表、查询和其他形式的查询组件。并非所有的DBMS都支持应用组件,支持组件的DBMS也不一定把全部组件的结构作为应用元数据存储在数据库中。然而,大多数现代的DBMS产品存储这种数据作为数据库的一部分。一般来说,数据库开发人员和用户都不直接访问应用元数据,相反,他们通过DBMS中的工具来处理这些数据。SQLServer2000是Microsoft公司推出的基于Client/Server模式的新一代大型关系数据库管理系统。它功能强大,操作简便,广泛应用于数据库后台系统。SQLServer2000代表着下一代Microsoft.NETEnterpriseServers(企业分布式服务器)数据库的发展趋势。它在电子商务、数据仓库和数据库解决方案等应用中起着重要的核心作用。SQLServer2000的主要特点如下:1)真正的客户机/服务器体系结构。2)图形化用户界面,使系统管理和数据库管理更加直观、简单。3)丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。4)SQLServer与Windows操作系统完全集成,利用了其许多功能,如发送和接受消息,管理登录安全性等。SQLServer也可以很好地与MicrosoftBackOffice产品集成。53 南京工程学院毕业设计说明书(论文)5)具有很好的伸缩性,可跨越从运行Windows95/98/XP的膝上型电脑到运行Windows2000的大型多处理器等多种平台使用。6)对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。7)SQLServer提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。2.3MicrosoftVisio简介Visio是当今最优秀的绘图软件之一,它将强大的功能和易用性完美结合,可广泛应用于电子、机械、通信、建筑、软件设计和企业管理等众多领域。专业制作流程图、网络拓扑图、室内布置图、规划图等图纸的软件。对我们设计过程有很大的帮助。Visio提供了快速创建和共享具有专业外观的图表所需的工具。熟悉的MicrosoftOffice环境使Visio很容易学习和使用。有了Visio,无需专业绘图技术就可以创建具有专业外观的图表。通过将预定义的SmartShapes®符号从模具拖到绘图页中,即可快速和容易地组装图表。内置的边框、背景和颜色方案可以帮助您将专业外观添加到图表中。通过将图表复制到Office文档中或者另存为详细的Web页,就能轻松实现图表共享。Visio有三个主要作用:1)补充MicrosoftOffice业务专业人员可以创建信息丰富的图表,以便补充和扩展他们用Office程序所做的工作。2)简化技术设计、部署和维护,技术专业人员可以用图表记录创意、信息和系统,以便简化IT部署、扩展开发工具的使用、甚至记录设备布局和工程计划。3)支持开发自定义的可视解决方案Visio使用户能够创建自定义的形状和模具来支持组织标准,还可以用来创建范围广泛的自定义可视解决方案。2.4PowerDesigner简介53 南京工程学院毕业设计说明书(论文)PowerDesigner系列产品提供了一个完整的建模解决方案,业务或系统分析人员,设计人员,数据库管理员DBA和开发人员可以对其裁剪以满足他们的特定的需要;而其模块化的结构为购买和扩展提供了极大的灵活性,从而使开发单位可以根据其项目的规模和范围来使用他们所需要的工具。PowerDesigner灵活的分析和设计特性允许使用一种结构化的方法有效地创建数据库或数据仓库,而不要求严格遵循一个特定的方法学。PowerDesigner提供了直观的符号表示使数据库的创建更加容易,并使项目组内的交流和通讯标准化,同时能更加简单地向非技术人员展示数据库和应用的设计。PowerDesigner不仅加速了开发的过程,也向最终用户提供了管理和访问项目信息的一个有效结构。它允许设计人员不仅创建和管理数据的结构,而且允许开发和利用数据的结构,针对领先的开发工具环境快速地生成应用对象和数据敏感的组件。开发人员可以使用同样的物理数据模型查看数据库的结构和整理文档,以及生成应用对象和在开发过程中使用的组件。应用对象生成有助于在整个开发生命周期提供更多的控制和更高的生产率。PowerDesigner是一个功能强大而使用简单工具集,提供了一个复杂的交互环境,支持开发生命周期的所有阶段,从处理流程建模到对象和组件的生成。PowerDesigner产生的模型和应用可以不断地增长,适应并随着你的组织的变化而变化。PowerDesigner包含六个紧密集成的模块,允许个人和开发组的成员以合算的方式最好地满足他们的需要。这六个模块是:PowerDesignerProcessAnalyst,用于数据发现。PowerDesignerDataArchitect,用于双层,交互式的数据库设计和构造。PowerDesignerAppModeler,用于物理建模和应用对象及数据敏感组件的生成。PowerDesignerMetaWorks,用于高级的团队开发,信息的共享和模型的管理。PowerDesignerWarehouseArchitect,用于数据仓库的设计和实现。PowerDesignerViewer,用于以只读的、图形化方式访问整个企业的模型信息。53 南京工程学院毕业设计说明书(论文)第三章概要设计3.1需求分析排课是学校管理中一个比较重要也比较复杂的问题,教师,课程,教室,学生,时间分配,这一系列的问题环绕着排课人员。比如说教室容量的限制、教室分配限制等等问题,使得排课人员很难在同时兼顾多重条件限制下,排出满意度高的课表。如何很好的解决这个复杂的问题呢?随着计算机时代的发展,排课也进入了一个智能的时代。如何用计算机算法和软件实现一个操作简便、灵活、实用、安全的高校排课管理系统成为一个时代发展的需要!3.1.1界面及环境需求环境需求为支持Windows操作系统,系统的操作用户主要应用windows操作系统,而界面需求为采用GUI方式。3.1.2功能需求系统的主要功能为:l教师信息管理:对教师信息有增加,删除,修改查询等功能。l课程信息管理:.对课程信息有增加,删除,修改查询等功能。l教室信息管理:对教室信息有增加,删除,修改查询等功能。l班级信息管理:对班级信息有增加,删除,修改查询等功能。l教师课程信息管理:对教师所授课程的关系的增加与删除功能。l班级课程信息管理:对班级所学课程的关系的增加与删除等功能。l教师授课信息管理:对教师所带课程以及所学班级的关系的一个增加删除修改等功能。l排课:53 南京工程学院毕业设计说明书(论文)实现自动排课。l教师课表输出:输出所选择的教师的课表。l班级课表输出:输出所选择的班级的课表。l帮助:提供一些文档类型的帮助信息。3.2模块功能设计通过对需求的分析,本系统主要的功能模块极其子模块设计如图3-1。图3-1模块功能图本设计的主要模块包括信息录入模块,排课实现模块,教师课表输出模块,班级课表输出模块,以及相关信息帮助模块。其中信息录入模块又分为七个子模块,分别对各个信息的管理。包括教师信息管理,班级信息管理,课程信息管理,教室信息管理,教师课程信息管理,班级课程信息管理,教师授课信息管理。各模块的主要功能为:53 南京工程学院毕业设计说明书(论文)1)教师信息管理:针对教师姓名,教师编号,教师简介的添加,修改查询,删除等来实现教师信息的维护。2)班级信息管理:针对班级名称,班级编号,班级人数,班级简介的添加,删除修改,查询等来实现对班级信息的维护。3)课程信息管理:针对课程名称,课程编号,课时数,课程简介的添加,删除,修改,查询等来实现对课程信息的维护。4)教室信息管理:针对教室名称,座位数,教室编号,教室简介的添加,删除,修改,查询等来实现对教室信息的维护。5)教师课程信息管理:实现教师和所授课程的对应关系。6)班级课程信息管理:实现班级和所学课程的对应关系。7)教师授课信息管理:对教师,课程,班级的一一对应的一个添加,删除等功能来实现这些关系的实现与管理。8)排课:实现程序主要功能排课。9)教师课表输出:选择要查询的教师姓名然后输出该教师的课程表。10)班级课表输出:选择要查询的班级输出相应的班级课程表。3.3排课算法设计高校排课系统采用了多种不同的排课思想,其中关联规则需求矩阵法和回溯算法的思想,基于c/s的开放式结构,以此为基础,对该领域进行归纳,并梳理其理论逻辑,期望本文能为人们进一步研究这一课题提供一些有益的视角。53 南京工程学院毕业设计说明书(论文)排课调课是高校教务管理的一项日常工作,因其费时费力,手工完成多易出错,所以利用计算机进行自动排课的想法自然而生。国外从20世纪50年代就有人研究排课问题,直到20世纪90年代关于课表问题的研究仍然十分活跃。所用方法有整数规划、图论、分支定界技术及模拟退化法等。国内从20世纪80年代初期开始排课问题的研究,从模拟手工排课到构建专家系统都有尝试。此文就是通过对多篇文献资料的参考,综述智能排课在高校教育中的发展及应用。3.3.1系统总体目标排课管理的主要任务是把各系或各授课部门的课程申请进行汇总,然后根据教学计划或教学环节制订全校各班级的课表。为了使课表的编排准确、合理、快速、高效,充分利用学校资源。本系统应该具备以下功能:1)根据教学计划和开课任务书实现自动排课,按不同方式输出排课结果。2)同一门课程可以安排在同一个教室,也可以有所流动。3)对于某门课,第一次授课的时间段确定后,当安排后面的授课时,必须考查时间段的有效性。即同一门课的两次授课时间必须隔开。比如,一周的两次授课,第一次排在周一的1,2节这个时段,第二次授课,排在周一的任何时段和周二的任何时段都太近,排在星期五又太远,在星期三或星期四的某个时间则比较理想。4)应避免各种冲突:教室不冲突,同一教室同一时间不能安排两门课程,人数不能超过教室的最大容量。学生不冲突,同一班级学生不能在同一时间上两门或两门以上课程。课程不冲突,同一班级同一课程不能同一时间在不同地点上课。教师不冲突,同一教师不能同一时间在不同地点上课。3.3.2排课算法设计及描述针对系统设计的总体目标,排课算法要满足相应的约束条件,且要达到一定的效率,算法流程图如图3-2。53 南京工程学院毕业设计说明书(论文)图3-2算法设计流程图53 南京工程学院毕业设计说明书(论文)1)排课以班级为主线选出班级课程表中所有的记录,根据班级课程表中的每一条记录做一个循环,判定每个班级所对应的课程是否已排。是:返回选择下一条记录。否:进行下一步。2)根据班级课程表中的ID到教师授课表中选择所对应的教师。3)按策略选择一个教室的时间段,根据教室的时间段判断教师,班级是否有空。否:返回上一层重新选择教室,直到满足条件为止。是:进行下一步。4)判断是否合班上课。合:判断人数合大于不大于教室座位数。大于:返回3重新选择教室重新判断。不大于:进行下一步5。不合:判断人数是否大于教室座位数大于:大于:返回3重新选择教室重新判断。不大于:跳到6。5)对合班的排课,同时把选中的班级以及合班的班级同时进行排课及写入数据库。返回循环开始。6)不合班,对选中的班级进行排课,写入数据库,返回循环开始。7)循环结束,结束本次排课。53 南京工程学院毕业设计说明书(论文)第四章数据库设计4.1实体关系模型实体-关系模型(Entity-RelationshipModule,简称E-R模型)是数据库结构设计常用的方法,E-R图中的矩形表示实体,菱形表示实体间的联系,椭圆表示实体属性,联系的类型可用1:1或M:N来表示。自动排课系统的数据库设计主要是老师、班级、课程、教室的信息管理,其E-R图如图4-1。4-1实体关系模型图53 南京工程学院毕业设计说明书(论文)4.2数据库设计对数据表的设计主要考虑到数据的存储以及表与表之间的关系,比如说对教师表和教师课程表以及课程表之间的关系,教师表中包括教师ID,教师姓名,教师其他的一些信息。教师课程表中包括教师ID课程ID。课程表中包括课程ID,课程名称,课时数,以及课程简介。其中关系是教师课程表中的教师ID关联教师表中的ID,教师课程表中的课程ID关联课程表中的课程ID。这样可以减少一些重复的信息存储,有效降低数据冗余。不过有时候也会增加一些数据冗余,这是考虑程序员在使用方便的情况下做的一些必要的数据冗余。根据E-R图设计数据库关系如图4-2。53 南京工程学院毕业设计说明书(论文)4-2数据库关系图具体数据表设计如下:1)教师信息表教师信息表存放教师相关信息,因为毕业设计主要关注排课算法的实现,因此教师信息表中的字段并不丰富,例如可以再增加联系电话,家庭地址等必要字段,这也是毕业设计后续需要完善的地方,具体的表字段如表4-1。表4-1教师信息表名称代码数据类型是否主键是否必须教师内部IDTeacherinfoIdIntTRUETRUE53 南京工程学院毕业设计说明书(论文)工号TeacherNumberIntFALSETRUE姓名TeacherNameCharFALSETRUE备注TeacherOthersVarcharFALSEFALSE2)班级信息表班级信息表主要包括班级ID,班级名称,班级人数等信息。主要是对班级信息的存储。具体的表字段如表4-2。表4-2班级信息表名称代码数据类型是否主键是否必须班级内部idClassInfoIdintTRUETRUE班级名称ClassNamecharFALSETRUE班级人数ClassNumberintFALSETRUE备注ClassothersvarcharFALSEFALSE3)课程信息表课程信息表包括课程ID,课程名称,课时数,课程简介,主要是对课程信息的存储。具体表字段如表4-3。表4-3课程信息表名称代码数据类型是否主键是否必须课程表内部idCourseInfoIdintTRUETRUE课程名CourseNamecharFALSETRUE课时coursetimesintFALSETRUE备注CourseothersvarcharFALSEFALSE4)教室信息表教室信息表包括教室ID,教室名称,座位数,教室简介,主要是对教室信息的存储。具体表字段如表4-4。表4-4教室信息表名称代码数据类型是否主键是否必须教室内部idClassroomInfoIdintTRUETRUE教室名称ClassroomNamecharFALSETRUE座位数ClassroomNumberintFALSETRUE备注ClassroomOthersvarcharFALSEFALSE5)教室时段表教室时段表是对教室各个时段的信息存储。包括教室时段表内部id,教室内部id,周次,课次,是否已排,对这样信息的处理主要是为了方便排课的时候使用。具体表字段设计如表4-5。53 南京工程学院毕业设计说明书(论文)表4-5教室时段表名称代码数据类型是否主键是否必须教室时段表内部idroomtimeInfoIdintTRUETRUE教室内部idClassroomInfoIdintFALSETRUE周次zhouciintFALSETRUE课次keciintFALSETRUE是否已排IsArrangeintFALSETRUE6)教师课程表教师课程表是对教师与课程关系的一个存储。包括教师ID,课程ID。表字段设计如表4-6。表4-6教师课程表名称代码数据类型是否主键是否必须教师内部IDTeacherinfoIdIntTRUETRUE课程表内部idCourseInfoIdIntTRUETRUE7)班级课程表班级课程表是对班级与课程关系的一个存储。包括班级ID,课程ID。表字段设计如表4-7。表4-7教师课程表名称代码数据类型是否主键是否必须课程表内部idCourseInfoIdIntTRUETRUE班级内部idClassInfoIdintFALSETRUE是否已排IsArrangeintFALSETRUE8)教师上课单元表教师上课单元表是对教师,所授课程,所学班级的一个信息存储。部分信息需要手动输入部分信息是由排课的时候生成的。主要表字段有教师上课单元表内部ID,教师内部ID,课程表内部ID,教室时段表内部ID,合班代码,班级内部ID。表字段设计如表4-8。表4-8教师上课单元表名称代码数据类型是否主键是否必须教师上课单元表内部IDTeacherCourseClassInfointTRUETRUE教师内部IDTeacherinfoIdintFALSETRUE课程表内部idCourseInfoIdintFALSETRUE教室时段表内部idroomtimeInfoIdintFALSEFALSE合班代码TogetherFlagintFALSETRUE53 南京工程学院毕业设计说明书(论文)班级内部idClassInfoIdintFALSETRUE4.3视图设计因为在算法中多次用到对表字段的联合查询,为了方便算法的使用所以联合教师授课表与教室时段表设计了视图teachertime。设计过程如图4-3。图4-3视图teachertime视图teachertime的具体字段如表4-9。表4-9视图teachertime具体字段名称代码属于表输出教师表内部编号tacherInfoIdTeacherCourseClassInfoTRUE课程内部编号CourseInfoIdTeacherCourseClassInfoTRUE班级表内部编号ClassRoomInfoIdTeacherCourseClassInfoTRUE合班标志TogetherFlagTeacherCourseClassInfoTRUE教室时段表内部编号RoomTimeInfoIdTeacherCourseClassInfoTRUE是否已排IsArrangeRoomTimeInfoTRUE周次zhouciRoomTimeInfoTRUE课次keciRoomTimeInfoTRUE教室表内部编号ClassRoomInfoIdRoomTimeInfoTRUE由于在课表输出的时候要联合很多表查询,为了方便输出课表输出方便程序员的使用设计视图kebiao设计过程如图4-4。53 南京工程学院毕业设计说明书(论文)图4-4视图kebiao视图kebiao的具体字段如表4-10。表4-10视图kebiao具体字段名称代码属于表输出周次zhouciRoomTimeInfoTRUE课次KeciRoomTimeInfoTRUE教室名ClassRoomnameClassRoomInfoTRUE课程名CoursenameCourseInfoTRUE教师名TeacherNameTeacherInfoTRUE教师表内部编号tacherInfoIdTeacherCourseClassInfoTRUE课程表内部编号CourseInfoIdTeacherCourseClassInfoTRUE教室时段表内部编号RoomTimeInfoIdTeacherCourseClassInfoTRUE教室内部编号ClassRoomInfoIdClassRoomInfoTRUE4.4数据库的连接Delphi中连接数据库的组件为ADOConnection组件,将ADOConnection连接SQLServer数据库。如连接主界面窗体和数据库,具体步骤如下:1)在主界面窗体中添加一个名为ADOConnection的ADOConnection1组件,双击ADOConnection1,选择ConnectionString属性,进行数据库的连接,出现如图4-553 南京工程学院毕业设计说明书(论文)所示的“zhuye.ADOConnection1.ConnectionString”对话框。图4-5“zhuye.ADOConnection1.ConnectionString”对话框2)在图4-5的对话框中选择“使用连接字符串”单选框,然后单击“构建”按钮,进入图4-6所示的“数据库属性设置”对话框。图4-6“数据库属性设置”对话框3)选择“MicrosoftOLEDBProviderforSQLServer”,单击“下一步”,出现4-7所示的“数据库属性设置”对话框。53 南京工程学院毕业设计说明书(论文)图4-7“数据库属性设置”对话框4)在“选择或输入服务器名称”中选择自己的SQL数据库的服务器名称,再选择登录服务器信息,然后在“在服务器上选择数据库”下拉框中选择自己所建的数据库名,单击“测试连接”按钮。5)如果出现如图4-8所示的“Microsoft数据链接”对话框,则表示数据库连接成功。图4-8“Microsoft数据链接”对话框53 南京工程学院毕业设计说明书(论文)第五章详细设计与实现详细设计阶段的任务是设计出程序的“蓝图”,而实现就是根据“蓝图”具体的编写程序。所谓“蓝图”就是界面的设计,其一般用户界面的设计基本原则应该从以下几个方面考虑:l界面风格。一个应用程序中的多个界面应该保持风格的一致,这是最基本的要求。l界面的美观性。添加必要的装饰效果,但是用户长时间使用的工作界面不要太刺眼,以免影响使用效果。l易操作性。界面中的文字提示尽量要遵守用户的文化或者专业习惯;界面中的控件位置摆放尽量考虑大家的习惯,控件放在容易点击的位置。l程序的易实现性。在不影响以上3点的情况下,可以考虑这个问题。一个程序功能一般都会有多种实现界面。5.1系统主界面系统主界面是进入系统后第一个见到的模块,在此窗口中用户可以通过点击各个按钮进入子模块,用户也可以通过菜单进入各个子模块。模块的子模块有信息管理模块,排课模块,老师课表输出模块,班级课表输出模块以及帮助模块。窗口用到的主要控件有Button,ActionManger,StatuBard等。以打开信息录入窗口为例,其他窗口的打开相似,代码如下:inherited;//调用父类的同名方法。Application.CreateForm(TF_logmessage,F_logmessage);//创建窗口。F_logmessage.ShowModal;//显示窗口。F_logmessage.Free;//资源释放。5.2信息录入功能信息录入功能相当于所有信息管理的界面的主菜单,用户可以通过点击按钮进入各个信息管理页面,信息管理窗口有教师信息管理窗口,班级信息管理窗口,课程信息管理窗口,教室信息管理窗口,教师课程信息管理窗口,班级课程信息管理窗口,教师授课信息管理窗口。1)教师信息管理53 南京工程学院毕业设计说明书(论文)教师信息管理主要针对教师信息进行维护,包括增加、修改、删除以及简单的查询功能。教师信息主要包括教师姓名、教师职工号和教师简介,由于毕业设计主要关注于排课算法的实现,所以对教师信息进行了缩减。(1)新增教师信息填写教师姓名,教师职工号,教师简介,其中教师姓名和教师职工号必须填写,教师简介可以不填,若未填教师姓名和教师职工号则会给予提示。在正式保存教师信息前,会判断职工号是否重复,若重复则不能新增。新增教师信息主要代码如下:Queryteacher.Append;//在数据库中添加以下内容。Queryteacher.FieldByName('TeacherName').AsString:=trim(EditName.Text);Queryteacher.FieldByName('TeacherNumber').AsString:=trim(EditNumber.Text);Queryteacher.FieldByName('TeacherOthers').AsString:=trim(mteacherothers.Text);Queryteacher.Post;//提交添加的内容(2)删除教师信息选中要删除的教师,然后点删除,系统会提示是否要删除教师信息,拥护确定以后程序会自动从数据库中删除该教师的相关信息。(3)修改教师信息选中要修改的教师,然后在信息栏中修改教师职工号,教师姓名,教师简介中的一项或几项最后点修改,系统会判定修改后是否有教师职工号相同如有则不能修改,若没有系统对数据库中的选项进行修改保存。(4)查询教师信息在对应的输入框中输入要查询的教师姓名,然后点查询,显示框中会显示查询的教师的各个信息。查询按钮的主要实现代码为:Queryteacher.SQL.Clear;//清空Query中的SQL语句。Queryteacher.SQL.Add('select*fromTeacherInfowhereTeacherNamelike'+QuotedStr('%'+trim(Editchaxun.Text)+'%'));//重新添加SQL语句。Queryteacher.Open;//显示查询的内容(5)置空教师信息框点击置空按钮实现对信息栏中数据的清空。方便用户的重新输入。(6)退出退出该页面;注:班级信息管理窗口,课程信息管理窗口,有着相似的功能,在这就不一一53 南京工程学院毕业设计说明书(论文)列出。2)教室信息管理教室信息管理主要包括对教室信息的增加,删除,修改以及简单的查询功能等。教室信息主要有教室编号,教室名称,教室座位数,教室简介等。在这里添加,删除,修改教室的时候不只是对教室信息表的一个删除还有对教室时段表中信息的一个添加,删除,修改。主要设计思想流程图如图5-1图5-1设计思想流程图(1)添加教室信息填写教室名称,教室编号,教室座位数,教室简介其中教室名称,教室编号和教室座位数必须填写,教室简介可以不填,若未填教室名称,教室编号和教室座位数则会给予提示。在正式保存教室信息前,会判断教室编号是否重复,若重复则不能新增。不重复则对教室信息表以及教室时段表的添加。自动添加教室时段表的代码实现如下:fori:=1to5do//外层对周的循环begin53 南京工程学院毕业设计说明书(论文)fors:=1to5do//内层对每日可次的循环beginQueryRoomTime.Append;QueryRoomTime.FieldByName('ClassRoomInfoId').AsInteger:=id;QueryRoomTime.FieldByName('zhouci').AsInteger:=i;QueryRoomTime.FieldByName('keci').AsInteger:=s;//根据教室ID自动填充可次周次生成空间QueryRoomTime.FieldByName('IsArrange').AsInteger:=0;//把是否已排设为0即没排QueryRoomTime.Post;//提交添加对数据库进行添加end;end;(2)删除教室信息选中要删除的教室,然后点击删除按钮,程序会自动对数据库中的内容进行删除,包括教室信息表和教室时段表中的内容。(3)修改教室信息选中要修改的教室,然后对教室名称,教室编号,教室座位数和教室简介进行修改。在正式保存教室信息前,会判断教室编号是否重复,若重复则不能修改。不重复则对教室信息表以及教室时段表的修改。修改功能的主要代码实现如下:QueryClassRoom.Edit;//找出要修改的内容QueryClassRoom.FieldByName('ClassRoomName').AsString:=trim(EditName.Text);QueryClassRoom.FieldByName('ClassroomNumber').AsString:=trim(EditNumber.Text);QueryClassRoom.FieldByName('ClassroomOthers').AsString:=trim(mclsaaroomothers.Text);QueryClassRoom.Post;//提交修改(4)查询教室信息在相应的信息框中输入要查询的教室名称,点击查询按钮在显示信息框中会显示要查询的内容,包括教室名称,教室编号,教室座位数和教室简介。(5)退出退出该页面。3)教师课程信息管理教师课程管理页面主要包括对老师信息的增加,删除,查询功能等。教师课程信息管理主要是对教师和课程之间关系的一个实现,在数据表中存储的是教53 南京工程学院毕业设计说明书(论文)师职工号和课程编号,而添加的时候是一个名称的添加,所以在程序中对名称与编号有一个转换。转换的主要实现代码如下:strSql:='selectTeacherInfoId,TeacherNamefromTeacherInfo';//此处直接调用commonFun中的函数(commonFun是自己定义的一个转换的函数)。g_InitCombox(CbTeacherName,'TeacherInfoId','TeacherName',strSql);//在此通过用户选择的教师,获取教师内部编号,进行查询。在程序中我们处理的是内部编号,界面显示的是教师姓名strsq2:='selectCourseInfoId,CourseNamefromCourseInfo';//此处直接调用commonFun中的函数g_InitCombox(CbCourseName,'CourseInfoId','CourseName',strSq2);(1)添加教师课程信息在教师姓名的下拉框中选择要添加的教师姓名,并在课程名称的下拉框中选择相应的课程名称。然后点击添加按钮系统会对名称的一个转换把名称转换成ID然后判断是否有添加过相同的信息,有提示,没有添加到教师课程表中。(2)删除教师课程信息选中要删除的教师课程信息,点击删除按钮程序会提示是否要删除选项,确定然后对数据库进行操作删除选中的项。删除按钮的主要代码实现如只需要对相对应的Query进行删除。注:(班级信息管理窗口也此有着相似的功能。)4)教师授课信息管理主要功能是对教师,班级,课程信息的增加,删除等功能。教师授课信息管理主要是对教师,课程和班级之间关系的一个实现,在数据表中存储的是教师职工号和课程编号,而添加的时候是一个名称的添加,所以在程序中要对名称与编号的一个转换。然后点击查询按钮系统会对学这门课程的班级进行查询汇总,然后选择要添加的班级点击添加按钮程序会对这部分信息的做一个录入。教师授课信息管理的设计流程图如图5-2。53 南京工程学院毕业设计说明书(论文)图5-2教师授课信息管理设计流程图在教师姓名的下拉框中选择要添加的教师姓名,并在课程称的下拉框中选择相应的课程名称。然后点击查询按钮系统会对学这门课程的班级进行查询汇总,然后选择要添加的班级点击添加按钮程序会判断学这门课的班级是否已被别的老师上,有的话添加失败,重新添加,没有把信息关系添加到数据库中。在教师姓名的下拉框中选择要删除的教师姓名,并在课程名称的下拉框中选择相应的课程名称。然后点击查询按钮系统会对学这门课程的班级进行查询汇总,然后选择要删除的班级点击删除按钮程序会对这部分信息从表中删除。添加按钮的部分代码实现如下:strSql:=’……’;//先判断是否该班级已经有老师选定ifnotqry.Eofthen53 南京工程学院毕业设计说明书(论文)beginmessagebox(handle,pchar('该课程已经由'+qry.FieldByName('TeacherName').AsString+'老师上'),'提示',Mb_OK);exit;end;//向TeacherCourseClassInfo表中添加一条记录//合班标志TogetherFlag为教师id和课程id拼接的字符串strFlag:=TObjComb(cbTeacher.Items.Objects[cbTeacher.ItemIndex]).strFieldID+TObjComb(cbCourse.Items.Objects[cbCourse.ItemIndex]).strFieldID;strSql:='insertintoTeacherCourseClassInfo(TeacherinfoId,CourseInfoId,ClassInfoId,TogetherFlag)values('+TObjComb(cbTeacher.Items.Objects[cbTeacher.ItemIndex]).strFieldID+','+TObjComb(cbCourse.Items.Objects[cbCourse.ItemIndex]).strFieldID+','+qryAllClass.FieldByName('ClassInfoId').AsString+','+quotedstr(strFlag)+')';//添加选择的记录qry.Close;qry.SQL.Clear;qry.SQL.Add(strSql);qry.ExecSQL;//保存到数据库5.3排课功能本界面的设计比较简单,只有一个排课按钮,一个进度条,一个退出按钮,但是在这个页面中实现了本设计的主要算法即排课算法。进入本页面用户只要点排课的按钮系统会自动调用排课的算法实现自动排课的功能。根据进度条的显示,排完之后用户退出本页面进入课表输出的页面就可以输出已经排好的课程表,包括教师课程表和班级课程表。排课的算法思想是结合回溯法遗传算法等而成的一个算法。主要思想是:1)排课以班级为主线选出班级课程表中所有的记录,根据班级课程表中的每一条记录做一个循环,判定每个班级所对应的课程是否已排。是:返回选择下一条记录。否:进行下一步。2)根据班级课程表中的ID到教师授课表中选择所对应的教师。3)按策略选择一个教室的时间段,根据教室的时间段判断教师,班级是否有空。否:返回上一层重新选择教室,直到满足条件为止。是:进行下一步。4)判断是否合班上课。合:判断人数合大于不大于教室座位数。大于:返回3重新选择教室重新判断。不大于:进行下一步5。不合:判断人数是否大于教室座位数大于:大于:返回3重新选择教室重新判断。不大于:跳到6。53 南京工程学院毕业设计说明书(论文)5)对合班的排课,同时把选中的班级以及合班的班级同时进行排课及写入数据库。返回循环开始。6)不合班,对选中的班级进行排课,写入数据库,返回循环开始。7)循环结束,结束本次排课。算法的实现见附录。5.4课表输出功能课表输出是一个结果的输出,前面的所有操作所想要得到的同一个结果就是得到一个正确的课程表,这里课表可以分为教师课表输出和班级课表输出,这样更方便教师和学生的使用也使得设计更人性化。在教师课程表输出界面中选择教师的姓名然后点击查询然后系统会输出这个老师的课程表。课表输出的内容包括上课班级名称,课程名称,上课地点。在班级课程表输出的界面中选则要查询的班级然后点击查询这样就可以输出班级的课程表。课表内容包括上课教师姓名,课程名称,上课地点。课表输出设计流程图设计如图5-3。图5-3课表输出设计流程图这样分开输出会使老师和学生用起来更方便。5.5帮助功能帮助界面是对一个帮助文档的连接,方便用户在使用的时候遇上一些操作上的问题和技术上的问题时方便查阅一些东西。使设计更人性化,更接近实际中所运用的软件。53 南京工程学院毕业设计说明书(论文)第六章结论6.1测试结果6.1.1教师课表输出在选择教师姓名之后点击输出教师课表,然后会输出要查询教师的上课表,表中的内容包括上课的班级,课程的名称,上课的地点。教师课表如图6-1。图6-1教师课表6.1.2班级课表输出在选择班级名称之后点击输出班级课表,然后会输出要查询班级上课表,表中的内容包括上课的教师姓名,课程的名称,上课的地点。班级课表如图6-2。53 南京工程学院毕业设计说明书(论文)图6-2班级课表6.2成果与特色本文是在参考各种市场上流行的排课软件的基础上尝试性地提出了一种大学排课算法,并开发而成小型自动排课系统。排课问题的研究主要是解决各种教学资源如教室、教师的合理有效利用问题,避免教师、班级在上课时间、地点上的冲突,使排课时间分配均匀。在算法设计中为排课操作改进了一些算法的冗余有针对的对学校排课实现,提高了排课的效率。小型自动排课系统只是一种尝试,还有很多不完善的地方,需待日后改进。也可以说这个排课系统还不是一个成熟的软件,例如在目前的高校中一般都有很多院系,每个院系还分有很多不同的专业,因此这个排课系统所需要的基本信息的数据量是非常的大。如果每个学期开始排课的时候,这些数据都像本排课系统一样都需要手工输入,那么这是一件非常令人头痛的事情,而且排课效率非常的低。这个问题的改善可以大大的减少工作人员的工作量。53 南京工程学院毕业设计说明书(论文)在这次毕业设计的过程中,我用积极的态度去面对它,并付出了艰辛的劳动,令我欣慰的是我有了一些实际的收获。此排课系统的开发最大的一个特点是数据库的开发与算法的实现结合在一起。这一点让我更加体会到了数据结构与算法在软件开发中的重要地位。6.3展望与心得排课表是学校教学管理中最重要、最繁重的工作之一。排课表问题普遍存在于大小各级学校中。这些学校,无论规模大小、学科多少,都要涉及到课表编制。科学地编制课程表,合理地进行课程搭配,适当地平衡师生负担,充分地利用教学资源,对稳定学校教学秩序,提高教学质量,都有着重要的作用。该系统采用了一些传统算法的结合,使排课系统中不仅解决了高校分繁复杂的高校课难题而且实现了智能化、人性化的排课过程。也使系统有了针对性。排课系统作为教务管理系统中最重要也最复杂的部分之一,已经成为国内外众多高校以及软件公司的研究课题,也取得了许多这方面的理论成果和实现方法。现有的求解方法主要有二分图及图着色理论在排课中的使用、启发式图着色算法、约束逻辑程序设计、基于规则的系统、整数规划、分组优化决策算法、模拟退火算法、人工神经网络、回溯法、基于组件的课表编排系统、队列竞争算法、分支定界算法、蚂蚁算法、课表编排专家系统以及遗传算法等。各高校也大都根据自身实际情况开发了适用的人机交互的排课系统,这些系统虽然排课周期长、排课员工作量大,但在真正的机器自动排课系统出现之前,这些系统基本可以完成高校的排课任务。随着高校改革的深入,扩招的增长速度远远超过教学资源增长的速度,排课难度年复一年的增加,因此迫切需要开发出适用的自动排课系统。随着时代的进步,社会生产力高速发展,新技术层出不穷信息量急剧膨胀,整个人类社会已成为信息化的社会人们对信息和数据的利用和处理已经进入自动化、网络化和社会化的阶段。如在查找情报资料、处理银行帐目、仓库管理、科研生产等方面,无不需要利用大量的信息资源。因此,如何有效地进行数据信息的管理和利用,已经成为人们普遍关注的课题。在这次毕业设计中我用Dlphi7.0制作了本次的排课系统软件,对Dlphi7.0的编程技巧的加深和对其开发技术的深一步认识,同时体会到编程时要有严谨的态度,虽然我的制作水平有限,使本软件较小,缺陷和BUG较多,和一些大型的排课软件不能相提并论,但基本的功能的完整实现,以及简单的算法,我认为都是它的优点,并且经过我多次的调试,都成功的实现了他的功能,我会在今后的学习中不断的完善,争取有更深一层的进展。53 南京工程学院毕业设计说明书(论文)参考文献[01]叶核亚.Delphi程序设计.北京:人民邮电出版社,2006[02]康祥顺.Delphi案例开发集锦.北京:电子工业出版社,2005[03]叶核亚.Delphi程序设计实用教程.北京:电子工业出版社,2001[04]唐学忠.SQLServer2000数据库教程.北京:电子工业出版社,2005[05]靳敏.数据库原理及应用.北京:机械工业出版社,2004[06]许家.软件工程—理论与实践.北京:高等教育出版社,2005[07]刘山,赵辉.Delphi系统开发实例精粹.北京:人民邮电出版社,2005[08]袁勤勇,何欣.MicrosoftSQLServer2000优化指南.北京:清华大学出版社,2001[09]罗小平.Delphi精要.北京:电子工业出版社,2004[10]萨师煊,王珊.数据库系统概论.北京:高等教育出版社.2002[11]UllmanJD.PrinciplesofDatabaseNewYork.ComputerSciencePress,1998[12]MarcoCantu'.MasteringBorlandDelphi2005.Sybex,200553 南京工程学院毕业设计说明书(论文)致谢在这次毕业设计中我首先要感谢的是我的指导老师彭焕峰老师,我的毕业设计是在校内完成的,所以我跟他交流比较的方便,彭老师对我们是认真负责,从一开始的设计算法思想到最后的功能实现他都一丝不苟的给我理思路教我使用工具帮我完善功能。每次他有空的时候都主动找我交流,问我有没有设计中的问题。当我碰上不会的问题,无法下手的麻烦时他总是在我旁边鼓励我指导我。每当我碰上一些很棘手的问题时我也是第一个就想到他。他对我我们的要求很严格,但是我很明白他是为我们好,他在培养我们当一个合格的程序员,他跟我们讲做程序要认真,调试程序要有耐性,写报告要一丝不苟。看到他在百忙中抽空来查阅我们的程序批改我们的报告我真的很想跟他说:“彭老师您辛苦了”。还要感谢在本次设计中帮助我的老师,同学。感谢刘爱华老师帮我查找资料,感谢张现伟同学帮我修改错误,感谢……。人家说毕业设计是对大学四年所学的知识的一个总结。我觉得这不止是一个总结这还是一个习惯的培养,这还是一个友情的升华。也是一个人生的蜕变。再次感谢学校的领导,我所有的老师,生活中的同学。53 南京工程学院毕业设计说明书(论文)附录1排课算法代码实现procedureTF_paikemessage.btnPaikeClick(Sender:TObject);varqry,qry1,qry2,qry3,qry4:TADOQuery;strSql,strSql1,strSql2:string;stuCount:integer;bFlag:boolean;KeCi,ZhouCi,TeacherId:integer;beginqry:=TADOQuery.Create(self);qry.Connection:=zhuye.F_zhuye.ADOConnection1;qry1:=TADOQuery.Create(self);qry1.Connection:=zhuye.F_zhuye.ADOConnection1;qry2:=TADOQuery.Create(self);qry2.Connection:=zhuye.F_zhuye.ADOConnection1;qry3:=TADOQuery.Create(self);qry3.Connection:=zhuye.F_zhuye.ADOConnection1;qry4:=TADOQuery.Create(self);qry4.Connection:=zhuye.F_zhuye.ADOConnection1;strSql:='select*fromclasscourseinfowhereIsArrange=0';tryqry.SQL.Clear;qry.SQL.Add(strSql);qry.Open;zhuye.F_zhuye.ADOConnection1.BeginTrans;//依次处理班级课程表中的记录whilenotqry.Eofdobegin//如果已排,则不执行后续操作ifqry.FieldByName('IsArrange').AsInteger=1thencontinue;//找合班班级的合班标志strSql:='selectTogetherFlag,TeacherinfoIdfromTeacherCourseClassInfowhereCourseInfoId='+qry.FieldByName('CourseInfoId').AsString+'andClassInfoId='+qry.FieldByName('ClassInfoId').AsString;qry1.Close;qry1.SQL.Clear;qry1.SQL.Add(strSql);qry1.Open;53 南京工程学院毕业设计说明书(论文)TeacherId:=qry1.FieldByName('TeacherinfoId').AsInteger;//查找合班班级strSql:='SELECTClassInfo.ClassNumber,ClassInfo.ClassInfoIdFROMClassInfoINNERJOIN'+'TeacherCourseClassInfoONClassInfo.ClassInfoId=TeacherCourseClassInfo.ClassInfoId'+'whereTeacherCourseClassInfo.TogetherFlag='+quotedstr(qry1.FieldByName('TogetherFlag').AsString);qry2.Close;qry2.SQL.Clear;qry2.SQL.Add(strSql);qry2.open;//确定合班人数stuCount:=0;whilenotqry2.EofdobeginstuCount:=stuCount+qry2.FieldByName('ClassNumber').AsInteger;qry2.Next;end;//查找满足人数的教室strSql:='SELECTRoomTimeInfo.roomtimeInfoId,ClassRoomInfo.ClassroomNumber,RoomTimeInfo.ClassroomInfoId,RoomTimeInfo.zhouci,RoomTimeInfo.keci,'+'RoomTimeInfo.IsArrangeFROMClassRoomInfoINNERJOINRoomTimeInfoONClassRoomInfo.ClassroomInfoId=ClassRoomInfo.ClassroomInfoId'+'andClassRoomInfo.ClassroomNumber>='+intToStr(stuCount)+'andRoomTimeInfo.IsArrange=0'+'andRoomTimeInfo.keci='+inttostr(random(5)+1)+'andRoomTimeInfo.zhouci='+inttostr(random(5)+1);qry3.Close;qry3.SQL.Clear;qry3.SQL.Add(strSql);qry3.Open;//这里随便找一个满足条件的教室ifqry3.Eofthenbegin//这里暂时不作处理qry.Next;continue;end;whilenotqry3.Eofdobegin//在这里确定合适的教室53 南京工程学院毕业设计说明书(论文)KeCi:=qry3.FieldByName('keci').AsInteger;ZhouCi:=qry3.FieldByName('zhouci').AsInteger;//确定老师空闲ifIsTimeEmpty(TeacherId,zhouci,keci,true)=falsethenbeginqry3.Next;continue;end;//确定所有涉及的班级空qry2.First;bFlag:=false;whilenotqry2.EofdobeginifIsTimeEmpty(qry2.FieldByName('ClassInfoId').AsInteger,zhouci,keci,true)=falsethenbeginbFlag:=True;break;end;qry2.Next;end;//有班级时间不空闲ifbFlag=truethenbeginqry3.Next;continue;end;//开始排课//设定教室段已排标志strSql:='updateRoomTimeInfosetIsArrange=1whereroomtimeInfoId='+qry3.FieldByName('roomtimeInfoId').AsString;qry4.close;qry4.SQL.Clear;qry4.SQL.Add(strSql);qry4.ExecSQL;qry2.First;whilenotqry2.Eofdobegin//设置教师上课单元表的教室段idstrSql:='updateTeacherCourseClassInfosetroomtimeInfoId='+qry3.FieldByName('roomtimeInfoId').AsString+'whereClassInfoId='+qry2.FieldByName('ClassInfoId').AsString+'53 南京工程学院毕业设计说明书(论文)andCourseInfoId='+qry.FieldByName('CourseInfoId').AsString;qry4.close;qry4.SQL.Clear;qry4.SQL.Add(strSql);qry4.ExecSQL;//设置班级课表已排标志strSql:='updateclasscourseinfosetIsArrange=1whereClassInfoId='+qry2.FieldByName('ClassInfoId').AsString+'andCourseInfoId='+qry.FieldByName('CourseInfoId').AsString;qry4.close;qry4.SQL.Clear;qry4.SQL.Add(strSql);qry4.ExecSQL;qry2.Next;end;break;qry3.Next;end;qry.close;strSql:='select*fromclasscourseinfowhereIsArrange=0';qry.SQL.Clear;qry.SQL.Add(strSql);qry.Open;end;Exceptone:Exceptiondobeginmessagebox(handle,Pchar('排课失败'+e.message),'提示',MB_OK);qry.free;zhuye.F_zhuye.ADOConnection1.RollbackTrans;exit;end;end;zhuye.F_zhuye.ADOConnection1.CommitTrans;messagebox(handle,Pchar('排课成功'),'提示',MB_OK);end;functionTF_paikemessage.IsTimeEmpty(PersonId:integer;zhouci:integer;keci:integer;IsTeacher:boolean):boolean;varqry:TADOQuery;strSql:string;begin53 南京工程学院毕业设计说明书(论文)qry:=TADOQuery.Create(nil);qry.Connection:=zhuye.F_zhuye.ADOConnection1;ifIsTeacherthenbeginstrSql:='select*fromTeacherTimewhereTeacherinfoId='+IntToStr(PersonId)+'andzhouci='+IntToStr(zhouci)+'andkeci='+IntToStr(keci);endelsebeginstrSql:='select*fromTeacherTimewhereClassInfoId='+IntToStr(PersonId)+'andzhouci='+IntToStr(zhouci)+'andkeci='+IntToStr(keci);end;tryqry.SQL.Clear;qry.SQL.Add(strSql);qry.Open;ifqry.Eofthenbeginresult:=true;endelsebeginresult:=false;end;Exceptone:Exceptiondobeginmessagebox(handle,Pchar('排课失败'+e.message),'提示',MB_OK);qry.free;result:=false;exit;end;end;end;end.2英文资料及翻译2.1英文原文Object-orientedrelationaldatabasedesign一.Conceptdiscrimination53 南京工程学院毕业设计说明书(论文)Somepeople(i.e.databasepattern)thethoughtandtheobject-orienteddatabasemanagementsystem(OODBMS)theoryjumbletogethertheobject-orienteddatabasedesign.Actuallytheformeristhedatabaseuserdefinitiondatabasepatternmentality,thelatteristhedatabankadministrationprocedure.Theuserusestheobject-orientedmethodologytobepossibletodefineanykindofDBMSdatabase,namelythenetwork,thelevel,therelations,object-orientedmay,eventhefilingsystemdesignalsointhesameoldwaymayfollowtheobject-orientedmentality.Theobject-orientedmentalityorcalledthestandardmayuseinthesystemanalysis,thesystemdesign,theprogramming,alsomayuseintheconstructionofdatadesign,thedatabasedesign.OOSEfromontounder,implementstheobject-orientedmentalityfrombeginningtoend,isentitywhichformsacoherentwhole.Theobject-orienteddatabasedesignisonlyaOOSElink.二.DatabasedesignimportanceThecommondatabasedesignmethodhastwokinds,namelyattributeleadingandentityleading.Theattributeleadingembarksfromtheinductiondatabaseapplicationattribute,whencombinationattributeset(entity)maintainstheattributethefunctiondependencerelations.Thentheentityleadingfromseeksfirsthasthesignificanceentitytothedatabaseapplicationtoobtain,thendefinestheentitythroughthedefinitionattribute.Generalrealworldentitynumberwhenattributenumber1/10,usestheentityleadingtodesignthemethodsuitably.Theobject-orienteddatabasedesignisembarksfromtheobjectmodel,belongstotheentityleadingdesign.Belowthecommondatabaseapplicationsystem53 南京工程学院毕业设计说明书(论文)allfollowsisconnectedthedevelopmentstep:(1)Designapplicationsystemstructure;(2)ThechoicewillbeadvantageousfortheapplicationprocedureandDBMStheunionDBMSsystemstructure,likeRDBMS;(3)Accordingtotheapplicationprocedureuseenvironmentplatform,DBMSwhichthechoiceissuitable(forexampleOracle)andthedevelopmentkit(forexamplePB);(4)Designdatabase,compilationdefinitiondatabasepatternSQLprocedure;(5)Thecompilationguaranteesthedatacorrectinputdatabasetheuserconnectionapplicationprocedure;(6)Inputdatabasedata;(7)Moveseachkindwiththedatabasecorrelationapplicationprocedure,confirmsandtherevisiondatabasecontent.Totheabovevarioussteps,someseveralpointsneedtoexplainthat:(1).Thisisnotthewaterfallmodel,eachstepallmayhavethefeedback..Notonlyintheroadboardsystem,theaboveeachstephasthefeedback,hastherelapse,butalsohastheparallelprocessing.Forinstancesomestorehousetablewhendatainput,anothersomestorehousetabledesignisalsorevising.Thisincreasesprogressivelythetypemethodofexploitationrelatedwithus,alsoconcernswiththeobject-orientedcharacteristic.(2).Theaboveorderisnotabsolute,themajoritysituationsarefromthirdstepstart.(3).Saidtothemajoritydatabaseapplicationsystemthat,53 南京工程学院毕业设计说明书(论文)butaboveeachinstepmostimportant,mostdifficultisnottheapplicationsystemdesignisthedatabasedesign.三.DBMSsupportanddatabasedesignThemulti-databaseapplicationsystemexploiterdoesnottakethedatabasedesignthereasonis:TheytooblindlybelieveinDBMS,afterthoughtbuysfunctionformidableDBMSthedatabasedesignnotdifficult,isunimportant.SomedomesticandforeigndatabaseteachingmaterialisfrequentlyinistheDBMSdevelopmentmanufacturercreatesthepropaganda,butverylittlestandsinthedatabaseuserangle,embarkstheintroductiondatabasedesignmethodfromthedatabaseapplicationsystem.Theresultoftencausesthereadernottoclarifyinthebooktointroduceisthedatabankadministrationproceduredesignconcept,appliesthiskindofDBMStocarryonthedatabasedesignthethought.Actually,DBMSonlywasforthedatabasewhichusedhasprovidedastagetotheuser,butwhetherusedinthisstagethestagepropaswellassingsanyplay,thenwasdecidedcompletelybyuser'splayscriptandthedirector(exploiter)arrangement.Forexample,theroadboardsystemusesthedatabasemanagementsystem,istakethetwo-dimensionaltableasthebasicmanagementunit,thesupportallrelationsalgebraoperation,thesupportentityintegrityandtheentityreferencecompleteentirerelationsRDBMS,butwemustuseabove"inthisstageprop"todesignanobject-orientedrelationaldatabase.四.UsingobjectmodelandRDBMSmodelmappingDatabasedesign(pattern)whethersupportstheapplicationsystemtheobjectmodel,thisisjudgeswhetheristheobject-orienteddatabasesystembasicstartingpoint.53 南京工程学院毕业设计说明书(论文)Becauseapplicationsystem-designinfront,databasedesignafterwards,thereforetheapplicationsystemobjectmodeltothedatabasepatternmappingistheobject-orienteddatabasedesignkey.4.1Threedatabasepatternobject-orientedmodelexpansionThecommondatabasedesignreferstoANSL/SPARCmuchaboutthedatabasepattern3standardstructureproposal.TheclosestphysicaldatabaseinternalpatternSQLwhichprovidesbyDBMSdescribes.Theconceptpatternmaygatherbycertaininternalpatternbecomes,itisbythedatabaseuserstandardsometableset.Forexample,theroadboardprojectdepartmentdatabasepattern,thelocomotivedepartmentdatabasepatternandsoon,theyarethelogicaldatabase,frequentlylimitsthestorehouseboundarythroughstorehousetableID.Thegeneralconceptpatternisthedatabasephysicspatternfunctionterritoryboundary,itcanrealizethedatabasephysicssignificance,thespecificDBMSspecialoperationtoexteriorapplicationprocedureinformationhiding.Exteriorpatternisthedatabasepatternwhichregardsfromthespecificuserapplicationangle,embarksfromthedifferentapplicationtotheidenticalconceptspatternmaygivemanykindsofdifferentexteriorpatterns.Forexample:Thehighwayplantingsituationinquiryapplicationsawthedatabaseisontheroadtreestype,quantity,thedistributedratioandsoon,theLiangtunnelconditioninquiryapplicationsawisontheroadbridge,thetunnellength,theinteger,theroadsectionandsoon,buttheyvisitarepossiblytheidenticalstorehousetabledifferentsubset.Whenexteriorapplicationsystemcarriesonabstractlybytheobjectmodel,embarksthe53 南京工程学院毕业设计说明书(论文)objectmodelfromeachapplicationwhichabstractstobepossibletomaponexteriormodel,regardingthiswemightaswellcallitexteriorobjectmodel.But,exteriormodelisonlytheconceptualmodelsubset,thereforetheobject-orienteddatabasedesigncoreliesinthesystemobjectmodel(mightaswelltocallitconceptobjectmodel)tothedatabaseconceptualmodelmapping.4.2ObjectmodeltodatabasetablemappingruleBecauseRDBMSistakethetwo-dimensionaltableasthebasicmanagementunit,thereforetheobjectmodelfinallyisrelatesbythetwo-dimensionaltableandthetabledescribes.Inotherwords,theobjectmodeltothedatabaseconceptualmodelmappingistothedatabasetabletransformationprocess.Therelatedtransformationrulesimpleinductionisasfollows:(1).Anobjectclassmaymapisanabovestorehousetable,whenthekindhaspairofmanyrelations,atablealsomaycorrespondmanykinds.(2).Relations(apair,apairmany,manytomanyaswellasthreerelations)themappingpossiblyhasmanykindsofsituations,butthegeneralmappingisatable,alsomaydefinethecorrespondingforeignkeyintheobjectclasstable.Regardingtheconditionrelationsmapping,atableshouldhave3attributesatleast.(3).Inheritssolelyexudestherelationstobepossibletoultrakindof,thesubclasstoreflectthefiringtableseparately,alsomaynotdecidetheadoptivefatherclasstabletoletthesubclasstablehavethefathergenericattribute;Otherwise,alsomaynotdefinethesubclasstable53 南京工程学院毕业设计说明书(论文)toletthefatherclasstablehavethecompletesubclassattribute.(4).Tomultipleinheritsultrakindofandthesubclassreflectsthefiringtableseparately,tomultipleinheritsmanytimesexudestherelationsalsotomapatable.(5).Tomapsafterthestorehousetabletocarryontheredundancycontroladjustment,enablesittoachievethereasonablerelations.4.3ThedatabasepatternmustfacetheapplicationsystemWechoosetheobject-orientedsystemdesigntobealsogood,theobject-orienteddatabasedesignisalsogood,theprimarypurposeisservestheapplicationsystemneed.Taketheroadboardprojectdepartmentsubsystemastheexample.Projectdepartment'sbiggestworkloadisareportformwhichprocessingpilestoinheaps,thereforehowdepositsandwithdrawsthesereportformsiseffectivelytheprojectdepartmentdatabasedesignkey.Consideredeachmonthdeliversthereportformisanisomorphism,wemayfoundastorehousetabletosavetheidenticalkindofreportform,forexamplehighwayengineeringmonthlystatement.Buthasanotherquestion,whentheuserwantstoinquiresomemonthhighwayengineeringmonthlystatement,howtakesoutthedatafromthestorehousetable?Shouldhaveaprincipallinkageaccordingtothedatabasethoughttomarkthisreportform.Inroadboard'sreportform,thedifferencemonthlystatementhappenstoobtainsomebody'sfavorreportstimebetweenandreportstheunit,butifalladdsonthesetwofieldsforeachrecord,withoutdoubtcanenlargethestorehousetableredundancy,theincreaseinquirytime,reducestheefficiency.53 南京工程学院毕业设计说明书(论文)Muchlesseachreportformallhastheunitpersonincharge,fillsoutaformhuman'sattribute,thenhowsolvesthisproblem?WehavedesignedtheultrakindofobjectX3tableandtheserialnumbertable.Eachapplicationmoduleobjectcorrespondenceestablishesaserialnumbertable,theidenticalkindofreportformistheidenticalserialnumbertable,unifiesthemanagementbytheserialnumbertable.Theserialnumbertabletovarioussub-bureaus,placetheroomsubmitswithestablishmenteachreportformassignsaserialnumber,thisserialnumberintheentiredatabaseisonly,thereforedepositsanyreportforminthestorehouseallisexplicit.TheserialnumberdatatypeisChar(10),first4arethestyle-names,latter6arethesequencenumber,inwhichsequencenumbertakesfromX3tableinthebiggestsequencenumber.Inotherwords,theserialnumberistheobjectidentifier,thereportformisanobject,anobjectidentifieronlydecidesanobject.Onceaftertheserialnumberisassigned,hadthepermanentinvariabilityinthisreportformlifetime.Howregardlessofthereportformcontentandthestructuredochange,itisallinvariable,isdeleteduntilthereportform,theserialnumberonlythencanvanish.Theserialnumbertableisafatherclass,thereportformisthesubclass,betweentheserialnumbertablerelationonlycanpassX3table.5applicationmoduleobjectmapsincompletelythedatabaseconceptualmodel,formstheapplicationobjectandthedatabaseobject11correspondences,maintained5applicationobjectsinthegoalsystemdesigntheoriginalindependence,hastheverygoodsealandtheinformationconfidentiality.Althoughtheserialnumbertablecanhave53 南京工程学院毕业设计说明书(论文)someredundancies,butitisworth.2.2中文翻译面向对象的关系数据库设计一、概念的区分有些人把面向对象的数据库设计(即数据库模式)思想与面向对象数据库管理系统(OODBMS)理论混为一谈。其实前者是数据库用户定义数据库模式的思路,后者是数据库管理程序的思路。用户使用面向对象方法学可以定义任何一种DBMS数据库,即网络型、层次型、关系型、面向对象型均可,甚至文件系统设计也照样可以遵循面向对象的思路。面向对象的思路或称规范可以用于系统分析、系统设计、程序设计,也可以用于数据结构设计、数据库设计。OOSE自上至下、自始至终地贯彻面向对象思路,是一个一气呵成的统一体。面向对象的数据库设计只是OOSE的一个环节。二、数据库设计的重要性一般数据库设计方法有两种,即属性主导型和实体主导型。属性主导型从归纳数据库应用的属性出发,在归并属性集合(实体)时维持属性间的函数依赖关系。实体主导型则先从寻找对数据库应用有意义的实体入手,然后通过定义属性来定义实体。一般现实世界的实体数在属性数1/10以下时,宜使用实体主导型设计方法。面向对象的数据库设计是从对象模型出发的,属于实体主导型设计。一般数据库应用系统都遵循以下相关开发步骤:(1)设计应用系统结构;(2)选择便于将应用程序与DBMS结合的DBMS体系结构,如RDBMS;(3)根据应用程序使用的环境平台,选择适宜的DBMS(如Oracle)和开发工具(如PB);(4)设计数据库,编写定义数据库模式的SQL程序;(5)编写确保数据正确录入数据库的用户接口应用程序;(6)录入数据库数据;(7)运行各种与数据库相关的应用程序,以确认和修正数据库的内容。对以上各步骤,有几点需要说明:(1)这不是瀑布模型,每一步都可以有反馈。53 南京工程学院毕业设计说明书(论文)在公路局系统中,以上各步不仅有反馈、有反复,还有并行处理。比如一些库表在数据录入时,另一些库表设计还在修改。这与我们的递增式开发方法有关,也与面向对象的特征有关。(2)上述顺序不是绝对的,大多数场合是从第三步开始的。(3)对大多数数据库应用系统来说,上述各步中最重要、最困难的不是应用系统设计而是数据库设计。三、DBMS的支持和数据库设计多数据库应用系统开发者不重视数据库设计的原因是:他们太迷信DBMS,认为购入一个功能强大的DBMS后数据库设计就不困难、不重要了。一些国内外的数据库教材常常是在为DBMS的开发厂商做宣传,而很少站在数据库用户角度,从数据库应用系统出发介绍数据库设计方法。结果往往使读者搞不清书中介绍的是数据库管理程序的设计思想,还是应用这种DBMS进行数据库设计的思想。其实,DBMS只是给用户为已采用的数据库提供一个舞台,而是否使用这个舞台上的道具以及唱什么戏,则完全取决于用户的戏剧脚本和导演(开发者)的安排。例如,公路局系统所使用的数据库管理系统,是以二维表为基本管理单元、支持所有关系代数操作、支持实体完整性与实体间参照完整性的全关系型RDBMS,而我们要在这个舞台上利用上述“道具”设计一个面向对象的关系数据库。四、应用对象模型与RDBMS模型的映射数据库设计(模式)是否支持应用系统的对象模型,这是判断是否是面向对象数据库系统的基本出发点。由于应用系统设计在前,数据库设计随后,所以应用系统对象模型向数据库模式的映射是面向对象数据库设计的关键。4.1三层数据库模式面向对象模型的扩展一般数据库设计多参照ANSL/SPARC关于数据库模式的3层标准结构提案。最接近物理数据库的内部模式由DBMS提供的SQL来描述。概念模式可以由若干个内部模式聚集而成,它是由数据库用户规范的一些表的集合。例如,公路局计划处数据库模式、机务处数据库模式等,它们是逻辑数据库,常常通过库表ID来界定库边界。一般的概念模式是数据库物理模式作用域的边界,它能实现数据库的物理意义、特定DBMS的特殊操作对外部应用53 南京工程学院毕业设计说明书(论文)程序的信息隐蔽。外部模式是从特定用户应用角度看待的数据库模式,从不同的应用出发对同一概念模式可以给出多种不同的外部模式。当外部应用系统以对象模型进行抽象时,从各个应用出发抽象出的对象模型例如:公路绿化情况查询应用看到的数据库是公路上的树木种类、数量、分布比率等,梁隧道状况查询应用看到的是公路上的桥梁、隧道长度、个数、路段等,但是它们可能访问的是同一个库表的不同子集。当外部应用系统以对象模型进行抽象时,从各个应用出发抽象出的对象模型可以映射到外部模型上,对此我们不妨称之为外部对象模型。但是,外部模型只是概念模型的子集,所以面向对象的数据库设计核心在于系统对象模型(不妨称之为概念对象模型)向数据库概念模型的映射。4.2对象模型向数据库表的映射规则由于RDBMS是以二维表为基本管理单元的,所以对象模型最终是由二维表及表间关系来描述的。换言之,对象模型向数据库概念模型的映射就是向数据库表的变换过程。有关的变换规则简单归纳如下:(1)一个对象类可以映射为一个以上的库表,当类间有一对多的关系时,一个表也可以对应多个类。(2)关系(一对一、一对多、多对多以及三项关系)的映射可能有多种情况,但一般映射为一个表,也可以在对象类表间定义相应的外键。对于条件关系的映射,一个表至少应有3个属性。(3)单一继承的泛化关系可以对超类、子类分别映射表,也可以不定义父类表而让子类表拥有父类属性;反之,也可以不定义子类表而让父类表拥有全部子类属性。(4)对多重继承的超类和子类分别映射表,对多次多重继承的泛化关系也映射一个表。(5)对映射后的库表进行冗余控制调整,使其达到合理的关系。4.3数据库模式要面向应用系统我们选择面向对象的系统设计也好,面向对象的数据库设计也好,根本目的是服务于应用系统的需要。53 南京工程学院毕业设计说明书(论文)以公路局计划处子系统为例。计划处的最大工作量就是处理成堆的报表,因此如何有效地存取这些报表是计划处数据库设计的关键。考虑到每月上交的报表是同构的,我们可以创建一张库表去存储同一种报表,例如公路工程月报表。但是又产生另一个问题,当用户想查询某个月的公路工程月报表时,如何从库表中取出数据呢?按照数据库的思想应该有一个主键来标识这张报表。在公路局的报表里,区别月报表靠上报时间和上报单位,但如果为每条记录都加上这两个字段,无疑会加大库表冗余,增加查询时间,降低效率。更何况每张报表都有单位负责人、填表人的属性,那么怎样解决这个问题呢?我们设计了超类对象X3表和流水号表。每一个应用模块对象对应建立一张流水号表,同一类的报表属同一流水号表,由流水号表统一管理。流水号表对各分局、处室提交和建立的每一张报表分配一个流水号,该流水号在整个数据库中是唯一的,因此在库中存放任何一张报表都是明确的。流水号的数据类型为Char(10),前4位为表号,后6位为序列号,其中序列号取自X3表中最大序列号。也就是说,流水号就是对象标识符,报表是一个对象,一个对象标识符唯一决定一个对象。流水号一旦被分配出去后,在这张报表的生存期内就具有了永久不变性。无论报表的内容及结构怎么变化,它都不变,直到报表被删除,流水号才会消失。流水号表是父类,报表是子类,流水号表之间的联系只能通过X3表。5个应用模块对象完全映射到数据库概念模型中,形成应用对象与数据库对象的一一对应,保持了5个应用对象在目标系统设计中原有的独立性,具有很好的封装性和信息隐蔽性。尽管流水号表会有一些冗余,但它是值得的。53
此文档下载收益归作者所有