一种在.NET下实现的全新日课表编排算法

时间:2022-06-20 02:46:31

一种在.NET下实现的全新日课表编排算法

摘要:该文来自吉林省教育厅“十一五”科技规划项目《高等医药院校教学资源综合信息管理与绩效评估系统》(项目编号:吉教科合字2006第123号)。在项目研发过程中,针对医学院校使用日课表的特点,设计了一种全新的课表编排算法,该算法主要研究在课表编排过程中如何解决各种教学资源如教师、教学场地的合理有效利用问题,避免教师、班级在上课时间、地点上的冲突,实现了高效、准确、科学的日课表编排。算法具有一定的科学性及领域先进性。

关键词:课程表;自动排课;预排;优先级;Visual Studio. NET

中图分类号:TP312文献标识码:A文章编号:1009-3044(2010)09-2136-02

An New Arithmetic Based on Microsort .Net of Arranging Daily Curriculum Schedule

FANG Sheng-ji, WENG Su-xiang, LI Guang-qing

(JiLin Medical Collage, Jilin 132013, China)

Abstract: this paper originates from the eleventh five-year scientific and technological project "teaching management and evaluation system of comprehensive message of teaching resources in higher pharmacological college" of Jilin provincial government department (the 123rd of 2006). During the process of studying and developing this project, a totally new arranging algorithm is designed in the light of the characteristics of daily curriculum timetable of medical school. This algorithm mainly studies how to solve the problem of various teaching resources, such as the reasonable and effective utilization of classrooms and teachers so as to avoid the confliction between teachers and classrooms in time and place. This algorithm realizes the effective, accurate and scientific arrangement of daily curriculum timetable and has some certain scientific and advanced nature.

Key words: school timetable; automatic arranging courses; beforehand arrangement; priority; Visual Studio. NET

教学资源的综合管理是高校最重要的工作之一,课表编排更是重中之重,由于院校性质和专业设置的不同,各院校之间的教学管理不尽相同,医药类院校独特的课程体系决定了多数医药类高等院校采用日课表,且与实验学科有着紧密的联系。这使得绝大多数现有的排课系统无法胜任医药学院的课表编排工作。本文在大量实践的基础上,完全针对医药院校的课表特点,阐述了自行研制开发的一种全新的日课表编排算法,经过我院的适用,算法被证明具有科学性及领域先进性。

1 医药类院校排课算法的总体要求

1) 合理的班级组合以避免课程冲突;

2) 选择课表的空闲位置以便排课;

3) 在空闲位置择优选择,以便达到课程设置最优化;

4) 预排课以充分考虑教室的宏观利用率

5) 预排课以充分考虑授课时间的合理性问题;

6) 对于特殊的专业实验课,合理安排实验;

如:细菌培养实验,要求隔24小时后进行下一次实验;微机原理集中实验,要求全天进行实验等。

7) 对于较大的数据计算,系统仍具有较快的响应速度和较小的系统开销。

2 算法总体思想

整个软件系统的课表编排部分基于.NET平台开发,其技术特点是以 .NET Framework为基础平台,结合SQL Server 2000后台数据库,利用C#和开发,是一套数据驱动的、面向对象的、支持3层应用模式的实时在线式课表编排系统。其中,课表编排部分与目前流行的排课系统不同之处在于排课算法的设计上,我们没有采用目前常用的回溯算法,而是充分考虑了医药院校的课程设置特点,在排课算法设计进行了一次全新的尝试。它在算法上具有如下特点:

首先,排课时设置了先预排后调整的方法,调整时使用排课优先级。先对课程进行整体预排,然后再根据课程的优先级进行微调。比如,先把所有课程都预先排到课表中,然后按优先级进行调整:优先级最高的是公共课,公共课通常合班上课的班级个数较多,最容易产生时间冲突;优先级次之的是每周平均课时最多的课程,由于平均课时多,冲突的机会就大;优先级再次的是总课时最多的课程等等。

其次,排课算法生成的授课时间是在教师和所有有课班级共同的空闲时间集合中产生的,并且尽量保证时间选择上的均匀性,有效防止授课时间在一周内过分集中。

再次,对教师的选择,一方面考虑到教师的授课时间限制;另一方面,对教师设置排课级别,随着某教师被排课时间的增多,他的级别值就增大,从而再次被选择排课的机率就减小。例如,在医学院校中,较为普遍的情况是同一门课程有多个教师讲授,例如内科学,一名教师按照自己的专业只讲授一个章节,这时排课算法就要兼顾教师的授课时间和已经接受的授课任务进行均衡。

最后,对于教学场地的考虑,我们也设置了排课级别。同对于教师的考虑类似,这样可以保证教室资源会得到合理而均匀有效地利用。

3 算法部分核心代码

3.1 对整体课程进行预排

s=Convert.ToInt32(tem5[j].Trim ());

while(s>0)

{add=add+2;

for(int i=Convert.ToInt32 (tb3.Text )-3;i

{if(s>=2)

{ string str="w"+Convert.ToString (i);

if(str!=str2 & str!=str3)

{ DataSet myds=new DataSet();

SqlDataAdapter myadp=new SqlDataAdapter("updatejiaoxuejindu set "+str+"='"+add+"'where 序号='"+tem4[j] +"' ",myconn);

myadp.Fill(myds,"jiaoxuejindu");

}else

{ s=s+2;

} }

s=s-2;

}}

3.2 对预排好的课程根据优先级进行调整

for ( u=1;u

{string strnam="w"+Convert.ToString (u);

string mystring="select @nam="+strnam+" from jiaoxuejinduwhere 课程代码='"+maxtb1.Text +"'";

SqlCommand mycomm=new SqlCommand(mystring,myconn);

SqlParameter mypara=new SqlParameter("@nam",SqlDbType.Char,100);

mypara.Direction=ParameterDirection.Output;

mycomm.Parameters.Add(mypara);

myconn.Open();

mycomm.ExecuteReader();

myconn.Close();

string nam=mypara.Value.ToString();

mintb1.Text =nam;

if(min>Convert.ToInt32 (mintb1.Text .Trim()) & Convert.ToInt32 (mintb1.Text .Trim ())!=0 )

{ min=Convert.ToInt32 (mintb1.Text .Trim());

si=u;

mintb1.Text =Convert.ToString (min);

}}

max=max-2;

min=min+2;

string namstr1="w"+Convert.ToString (flage);

DataSet myds3=new DataSet();

SqlDataAdapter myadp3=new SqlDataAdapter("updatejiaoxuejindu set"+namstr1+"='"+Convert.ToString (max)+"'where 课程代码='"+maxtb1.Text +"'",myconn);

myadp3.Fill(myds3,"jiaoxuejindu");

string namstr2="w"+Convert.ToString (si);

DataSet myds4=new DataSet();

SqlDataAdapter myadp4=new SqlDataAdapter("updatejiaoxuejindu set"+namstr2+"='"+Convert.ToString (min)+"'where 课程代码='"+maxtb1.Text +"'",myconn);

myadp4.Fill(myds4,"jiaoxuejindu");

sqlDataAdapter2.Update (ds31);

4 结论

笔者根据医学类院校日课表编排的需求和在排课当中遇到的实际问题,在排课算法上进行了一次大胆的尝试,也是在排课算法领域的一次创新,实践证明,该算法在解决规律性医学实验和资源冲突解决方面有独到之处,该算法冲破了排课算法中无法解决的日课表对实验学科的条条框框,使得长期以来束缚医学院校的排课问题迎刃而解,具有一定的先进性。

参考文献:

[1] Holm C,Kruger M.C#软件项目开发全程剖析[M].北京:清华大学出版社,2003.

[2] Johansen B,Reynolds M.Windows应用高级编程C#编程篇[M].北京:清华大学出版社,2003.

[3] 求是科技.SQL Server 2000 数据库管理与开发技术大全[M].北京:人民邮电出版社,2004.

[4] 陈娴,刘开文 项目开发实践[M].北京:中国铁道出版社,2003.

[5] 郑宇军,崔伟宁.Visual C# 案例教程[M].北京:北京希望电子出版社,2002.

[6] 王华杰,李律松.精通C#数据库开发[M].北京:清华大学出版社,2004.

上一篇:浅谈非数值处理问题中C++运算符的重载 下一篇:基于CDMA扩频技术的DCT域图像数字水印算法