2022年自动生成课程表程序设计 .pdf
55现代电子技术2000年 6 月第 6 期自动生成课程表程序设计黄明河(河南省化工技校开封475002)摘要在自动生成课程表程序中, 如何设计按授课计划排课程表, 同时作到文理相间、单独排的课程的处理和自动排课。关键词FOXBASE+自动生成课程表Devising the program of the autimaticall y- developed lessontableHuangMinghe( chemical technician school,Kaifeng 475002, China)AbstractIn the progamof the automatically- developedlessontable, devisinghow to arrangelessonsaccordin g to the plan and how to makeart and science betweeneachother, arran ge lessonsaloneor arrage lesonsautomaticall y.Key wordsFOXBASE+ ; the automatically- developpedlessontable排课程表是一件较复杂的事情, 因为它牵涉多方面的因素。利用计算机自动生成一个课程表时对多问题的处理也较复杂, 但是也并不是说不可能。下面就根据班级授课计划谈谈自动生成课程表的设计。1排课程表的规则(1)根据授课计划排课程表是本系统的依据。(2) 从时间上做到文理相间, 逻辑思维和形象思维的课程相间。(3)特殊课程单独排。(4)一般课程自动排。2系统数据库的设计(1)因为本系统是根据授课计划排课程表,所以必须建立一个班级授课计划系统数据库 ( skjh. dbf) , 作为生成课程表的依据, 其结构如下 :.useskjh.display structure数据库结构 :C:SKJH.DBF最新更改日期: 04/ 17/00字段字段名类型宽度小数1班级字符62课程字符83周学时数值14文理科字符25指定逻辑16剩余数值1总和20这里文理科 ! 字段主要用于排课程表时的文理相间。指定! 字段用于控制单独排计算机应用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 56的课程的标志,当为 . t. 时对该课程单独排, 为 . f. 时采用自动排的方式。剩余! 字段用于对该课程节数的控制。(2)课程表系统数据库的结构。课程表系统数据库( ksb.dbf) 。在生成课程表时能自动打开, 排好后把它自动复制到另一个库文件中去。便于在修改模块、打印模块中使用。其结构为:. usekcb. displaystructure数据库结构 :C:KcB. DBF数据记录数 :5最新更改日期: 04/17/ 00字段字段名类型宽度小数1星期字符12第 1节字符83第 2节字符84第 3节字符85第 4节字符86第 5节字符87第 6节字符8总和50此库结构只是一天的节数, 要形成含有星期几的一个结构,需要追加五个空记录,并给星期 ! 字段填上1- 5。结构带上五个记录构成一个空课程表结构。3生成课程表的程序的实现生成课程表本程序需要解决好下面几个问题。(1) 排课程表时做到文理相间, 本系统采用的方法是在授课计划数据库(skjh. dbf)中合理排好各课程的记录顺序, 做到文理相间, 同时把周学时多的记录可以写成两个记录, 但总周学时不变, 便于合理安排课程, 也可在 (skjh. dbf) 中增加只有周学时数的空记录。使程序产生虚排, 达到合理的文理相间。(2)单独排的课程的设计作为单独排的课程, 主要是一个老师担任多班的课程、 实验室受限制的课程, 需要单独的排。当然也可以所有课程都单独排。在设计中采用的方法是, 分别在第一工作区和第二工作区打开kcb.dbf 和 skjh. dbf, 显示kcb. dbf 结构 ,利用对话方式将skjh. dbf 中指定! 字段为 . t. 的课程写到kcb.dbf 的相应位置上。每排一次相应记录的剩余! 字段减 1(剩余字段开始为周学时的值) , 以控制此课程排的节数。( 3)对剩余的课程自动排的设计对剩余课程的自动排是采用对skjh. dbf扫描的方法 , 来寻找末排完的课程。同时在kcb. dbf 中跳过已排上的节次。为了避免学时多的课程剩到最后, 要将 skjh. dbf 中课时多的课程写成两个记录, 以便于排开。同时增加只有周学时的值为空的记录产生虚排,等下次扫描时再实排。下面是程序。type zdpkb.prgsettalk offsetexaconusekcbsetsafetyoffzapsetsafetyonxq= 1do whil xq = 5append blankreplace星期 with xqxq= xq+ 1enddoselectbuseskjhkbm= field( 1)kbm= & kbmkbm= trim(kbm)replaceall 剩余 with 周学时locatefor指定do while . not.eof()if found()releaser, ldisplaydimensionr(周学时 ) ,l( 周学时 )store0 to r, l自动生成课程表程序设计名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 57现代电子技术2000年 6 月第 6 期m= 1dowhile m 剩余= 0replace& dgj withb- 课程selectbreplace剩余 with 剩余 -1m= m+ 1else? 此节课已排或学时已排完wait selebloopendifenddoelseexitendifcontinueenddogo 1selectago 1ks= 0dowhile ks 剩余 = 0replace& zdmwith b- 课程ks= ks+ 1selectbreplace剩余 with 剩余 - 1elseks= ks+ 1selebendifm= 0do while . t.skipif eof()go 1endifif 剩余 = 0m= m+ 1if m = reccount(2)exitendifloopendifexitenddoselectaenddolist offwaitkbm= & kbm.kbsetsafetyoffco py to & kbmset safet y onsettalk oncloseallreturn此文只介绍了单独排和自动排的部分,排出的结果有时还不尽人意, 可在主控模块中建立一个修改模块。使在修改模块中能按人的意志进行修改。计算机应用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -