如何自动生成课程表(100分)

  • 主题发起人 主题发起人 delphi_jzy
  • 开始时间 开始时间
D

delphi_jzy

Unregistered / Unconfirmed
GUEST, unregistred user!
1。实现的算法,具体一些;
2。如何在delphi中实现;
3。在那里能找到解决此类问题的信息;
谢谢大家的帮忙



 
要知道你有几个班几门课每周各几节几个老师才好具体下手。
要是做一个完全通用的你就发啦~~
 
那做一个给定班,已知课程,已知每周的课数,的课表应怎样下手。
 
很复杂的!
在大学要考虑:
教师:
1)一个教师不能同时在两个地方上课
2)一个教师有某天他不想上课,想尽量安排在什么时间
3)还要考虑晚上尽量不要安排课程
4)尽量分散课程压力
5)还要同步,两个班的进度一样
学生:
1)不能同时在两个地方上课
2)不能连课太多,比如星期一二上完了所有的课
3)要有空余时间,做特定的安排
教室:
1)主要是特殊的教室,做实验要分成小组怎么安排
2)还有大操场怎么用

很多问题:
最难的是排课冲突后的解决冲突的方法,哎!
头疼

 
在排课之前要有教师的课程安排表,最好提供手工排课的功能,程序检查冲突
 
假设不考虑教员和教室的冲突问题应怎样下手
 
《算法+数据结构=程序》
其实就是n个集合判断交集,互斥。等等等等
 
需求分析最重要
大家怎么可能给你算法???
 
呵呵
正如 wjiachun 所说

如果你搞出一个通用的
嘿嘿~~~~
 
提问者:
如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.asp
 
分析,涉及,实施。测试。等等。
 
你得先把你想要实现的功能作一个计划,然后选出一些必须的功能,再给出代码连接起来,
正如mataijin说的那样。一定要先分析清楚才能动手。
 
这个问题我很久以前做过,把你要解决的具体问题讲清楚一点,我再来想想。
 
如果是一个比较通用的,你放10000分,也是值得的
 
据说目前国内只有清华的做出了
 
通用型的我没做出来,但我两年前把艺术类专业型的做出来了。算法思路是通过学生找课程,再通过课程找老师,最后定教室。具体就不说了,还要赚钱呢![8D][8D]
 
我做过通用的排课大师这是数据模块的DFM希望你看得懂
里面包含了表与表间关系GRNO是年级代码CLNO是班代码
GRNAME是年级名称,CLNAME是班名称,TE是老师,以此类推
SUB是科目,
object datamod: Tdatamod
OldCreateOrder = False
OnCreate = DataModuleCreate
Left = 193
Top = 111
Height = 338
Width = 433
object datacon: TADOConnection
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Mode=' +
'Read|Write;Extended Properties="";Locale Identifier=2052;Jet OLE' +
'DB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Datab' +
'ase Password="";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locki' +
'ng Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global B' +
'ulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:' +
'Create System Database=False;Jet OLEDB:Encrypt Database=False;Je' +
't OLEDB:Don'#39't Copy Locale on Compact=False;Jet OLEDB:Compact Wit' +
'hout Replica Repair=False;Jet OLEDB:SFP=False;Data Source='
LoginPrompt = False
Provider = 'Microsoft.Jet.OLEDB.4.0'
Left = 8
Top = 8
end
object tbgr: TADOTable
Connection = datacon
CursorType = ctStatic
TableName = 'grtable'
Left = 56
Top = 8
object tbgrGRNO: TWideStringField
DisplayWidth = 7
FieldName = 'GRNO'
Size = 4
end
object tbgrGRNAME: TWideStringField
DisplayWidth = 17
FieldName = 'GRNAME'
Size = 30
end
end
object tbcl: TADOTable
Connection = datacon
CursorType = ctStatic
IndexFieldNames = 'GRNO'
MasterFields = 'GRNO'
MasterSource = dsgr
TableName = 'cltable'
Left = 104
Top = 8
object tbclCLNO: TWideStringField
DisplayWidth = 7
FieldName = 'CLNO'
Size = 4
end
object tbclGRNO: TWideStringField
DisplayWidth = 5
FieldName = 'GRNO'
Size = 4
end
object tbclCLNAME: TWideStringField
DisplayWidth = 10
FieldName = 'CLNAME'
Size = 30
end
end
object dsgr: TDataSource
DataSet = tbgr
Left = 56
Top = 56
end
object dscl: TDataSource
DataSet = tbcl
Left = 104
Top = 56
end
object tbte: TADOTable
Connection = datacon
CursorType = ctStatic
IndexFieldNames = 'tename'
TableName = 'tetable'
Left = 152
Top = 8
object tbteTENO: TWideStringField
DisplayWidth = 6
FieldName = 'TENO'
Size = 4
end
object tbteTENAME: TWideStringField
DisplayWidth = 12
FieldName = 'TENAME'
end
end
object dste: TDataSource
DataSet = tbte
Left = 152
Top = 56
end
object tbarr: TADOTable
Connection = datacon
CursorType = ctStatic
IndexFieldNames = 'TENO'
MasterFields = 'TENO'
MasterSource = dste
TableName = 'arrtable'
Left = 200
Top = 8
object tbarrID: TAutoIncField
DisplayWidth = 6
FieldName = 'ID'
ReadOnly = True
end
object tbarrTENO: TWideStringField
DisplayWidth = 6
FieldName = 'TENO'
Size = 4
end
object tbarrGRNO: TWideStringField
DisplayWidth = 7
FieldName = 'GRNO'
Size = 4
end
object tbarrCLNO: TWideStringField
DisplayWidth = 6
FieldName = 'CLNO'
Size = 4
end
object tbarrSUBNO: TWideStringField
DisplayWidth = 6
FieldName = 'SUBNO'
Size = 4
end
object tbarrsubname: TStringField
DisplayWidth = 9
FieldKind = fkLookup
FieldName = 'subname'
LookupDataSet = tbsub
LookupKeyFields = 'SUBNO'
LookupResultField = 'SUBNAME'
KeyFields = 'SUBNO'
Size = 30
Lookup = True
end
object tbarrgrname: TStringField
DisplayWidth = 7
FieldKind = fkLookup
FieldName = 'grname'
LookupDataSet = tbgr
LookupKeyFields = 'GRNO'
LookupResultField = 'GRNAME'
KeyFields = 'GRNO'
Size = 30
Lookup = True
end
object tbarrclname: TStringField
DisplayWidth = 14
FieldKind = fkLookup
FieldName = 'clname'
LookupDataSet = tbcl
LookupKeyFields = 'CLNO'
LookupResultField = 'CLNAME'
KeyFields = 'CLNO'
Size = 30
Lookup = True
end
object tbarrtename: TStringField
FieldKind = fkLookup
FieldName = 'tename'
LookupDataSet = tbte
LookupKeyFields = 'TENO'
LookupResultField = 'TENAME'
KeyFields = 'TENO'
Size = 30
Lookup = True
end
end
object tbsub: TADOTable
Connection = datacon
CursorType = ctStatic
TableName = 'subtable'
Left = 248
Top = 8
object tbsubSUBNO: TWideStringField
FieldName = 'SUBNO'
Size = 4
end
object tbsubSUBNAME: TWideStringField
FieldName = 'SUBNAME'
Size = 30
end
object tbsubTENEED: TBooleanField
FieldName = 'TENEED'
end
end
object tbco: TADOTable
Connection = datacon
CursorType = ctStatic
IndexFieldNames = 'CLNO'
MasterFields = 'CLNO'
MasterSource = dscl
TableName = 'cotable'
Left = 296
Top = 8
object tbcoCLNO: TWideStringField
FieldName = 'CLNO'
Size = 4
end
object tbcoMONA: TWideStringField
FieldName = 'MONA'
Size = 37
end
object tbcoMONP: TWideStringField
FieldName = 'MONP'
Size = 37
end
object tbcoMONE: TWideStringField
FieldName = 'MONE'
Size = 37
end
object tbcoTUEA: TWideStringField
FieldName = 'TUEA'
Size = 37
end
object tbcoTUEP: TWideStringField
FieldName = 'TUEP'
Size = 37
end
object tbcoTUEE: TWideStringField
FieldName = 'TUEE'
Size = 37
end
object tbcoWEDA: TWideStringField
FieldName = 'WEDA'
Size = 37
end
object tbcoWEDP: TWideStringField
FieldName = 'WEDP'
Size = 37
end
object tbcoWEDE: TWideStringField
FieldName = 'WEDE'
Size = 37
end
object tbcoTHUA: TWideStringField
FieldName = 'THUA'
Size = 37
end
object tbcoTHUP: TWideStringField
FieldName = 'THUP'
Size = 37
end
object tbcoTHUE: TWideStringField
FieldName = 'THUE'
Size = 37
end
object tbcoFRIA: TWideStringField
FieldName = 'FRIA'
Size = 37
end
object tbcoFRIP: TWideStringField
FieldName = 'FRIP'
Size = 37
end
object tbcoFRIE: TWideStringField
FieldName = 'FRIE'
Size = 37
end
object tbcoSATA: TWideStringField
FieldName = 'SATA'
Size = 37
end
object tbcoSATP: TWideStringField
FieldName = 'SATP'
Size = 37
end
object tbcoSATE: TWideStringField
FieldName = 'SATE'
Size = 36
end
object tbcoSUNA: TWideStringField
FieldName = 'SUNA'
Size = 37
end
object tbcoSUNP: TWideStringField
FieldName = 'SUNP'
Size = 37
end
object tbcoSUNE: TWideStringField
FieldName = 'SUNE'
Size = 37
end
end
object dsarr: TDataSource
DataSet = tbarr
Left = 200
Top = 56
end
object dssub: TDataSource
DataSet = tbsub
Left = 248
Top = 56
end
object dsco: TDataSource
DataSet = tbco
Left = 296
Top = 56
end
object TBID: TADOTable
Connection = datacon
CursorType = ctStatic
TableName = 'IDTB'
Left = 56
Top = 112
object TBIDFDNAME: TWideStringField
FieldName = 'FDNAME'
Size = 15
end
object TBIDNEXTID: TWideStringField
FieldName = 'NEXTID'
Size = 4
end
end
end
 
我正在搞!
 
算法可参考 数据结构 这一类书籍,
可用 队列 这一算法来解决.
 
先看看<<离散数学>>课本上那个关于排课的例子
 
后退
顶部