排课系统论文.docx
《排课系统论文.docx》由会员分享,可在线阅读,更多相关《排课系统论文.docx(17页珍藏版)》请在冰豆网上搜索。
排课系统论文
目录
引言3
第一章:
设计的可行性3
1.1MIS系统的产生和发展情况3
1.2排课系统可行性分析4
第二章:
相关软件及技术介绍4
2.1VisualC++6.04
2.2XML4
第三章:
系统概述5
3.1项目范围5
3.2设计策略5
第四章:
系统总体设计6
4.1系统结构设计6
4.1.1各模块功能及示意图6
4.1.2各模块功的结构体设计7
4.1.2模块间的接口9
第五章:
详细设计9
5.1排课系统流程分析9
5.1.1整理课程信息9
5.1.2课程分类9
5.1.3获取可安排的教室9
5.1.4排课10
5.1.5生成课表10
5.2排课系统流程分析10
5.2.1基本对象定义10
5.2.2对每门课程的教室元进行预设定11
5.2.3对每门课程节次时间元的预设定12
5.2.4综合设定表12
5.2.5课程优先级的设定12
5.2.6排课规则13
5.3系统内部分代码13
第七章:
总结15
谢辞15
参考文献15
引言
随着学校的规模不断扩大,学生数量急剧增加,同时教室和课程等各种信息量也成倍增长。
面对庞大的课程体系的信息量,就需要有一个准确高效的排课系统来提高学校工作人员的工作效率。
通过这样的系统,可以做到老师,教室,课程等信息不会产生冲突同时可以对课表信息的规范管理和快速的查询,从而减少排课的复杂度和管理方面的工作量。
该项目开发的软件为排课系统软件,是鉴于目前教室,课程,老师等信息急剧增加前提下,学校对课表准确化的要求日益强烈的背景下构思出来的,该软件设计完成后可对所有教育单位(包括学校,学院等等)排出合理的课表。
第一章:
设计的可行性
1.1MIS系统的产生和发展情况
所谓MIS(管理信息系统--ManagementInformationSystem)系统,是一个由人、计算机及其他外围设备等组成的能进行信息的收集、传递、存贮、加工、维护和使用的系统,是一门新兴的科学,其主要任务是最大限度的利用现代计算机及网络通讯技术加强企业的信息管理,通过对企业拥有的人力、物力、财力、设备、技术等资源的调查了解,建立正确的数据,加工处理并编制成各种信息资料及时提供给管理人员,以便进行正确的决策,不断提高企业的管理水平和经济效益。
目前,企业的计算机网络已成为企业进行技术改造及提高企业管理水平的重要手段。
随着我国与世界信息高速公路的接轨,企业通过计算机网络获得信息必将为企业带来巨大的经济效益和社会效益,企业的办公及管理都将朝着高效、快速、无纸化的方向发展。
MIS系统通常用于系统决策,例如,可以利用MIS系统找出目前迫切需要解决的问题,并将信息及时反馈给上层管理人员,使他们了解当前工作发展的进展或不足。
换句话说,MIS系统的最终目的是使管理人员及时了解公司现状,把握将来的发展路径。
与传统的管理系统相比,在MIS中,处理的对象是抽象成数据的信息,因此,MIS有着自己的巨大优势:
1、解决结构化问题。
2、以高速度低成本完成数据的处理业务,追求系统处理问题的效率。
3、实现一个相对稳定的、协调的工作环境。
4、应用科学的、客观的处理方法,符合实际情况。
1.2排课系统可行性分析
MIS系统的飞速发展,技术的成熟以及应用领域的不断扩大,为信息的交互提供了一个良好的平台和方便的操作界面。
由于MIS系统基于用户需求的设计方法,使得该系统的使用更加的人性化、个人化、更贴近用户。
排课系统是针对在校工作人员使用,从学校的角度来说,学校的规模不断扩大,学生数量急剧增加教室,老师,课程等一系列信息也在不断的增长,如果还是按照传统的课模式
在纸上写好每种信息然后人工的进行排课——已经不能适应新型的排课手段,一方面浪费的大量的人力、物力资源,另一方面浪费时间以及在人为的统计过程中不可避免出现的差错等情况。
随着高校人数的增多,这种弊端会越来越多的暴露出来。
因此,利用计算机,使学校工作人员只要在计算机前输入教室名称,类型,老师姓名,课程信息,班级名称等一系列信息即可完成原来几倍的作业量,而且还不会出现错误。
从教师的角度来说,就不会出现多上课,少上课,走错教室等一系列不必要的麻烦同样也是节省了大量的工作量。
因此通过排课系统能大幅度的减少学校工作人员的工作量,减少错误的发生几率。
以MIS系统的构建思想来实现排课可以最大程度的做到实用性,可扩展性和可维护性相结合,安全性以及规范化原则。
技术可行性:
以MIS技术为开发基础。
第二章:
相关软件及技术介绍
2.1VisualC++6.0
VisualC++6.0是微软公司推出的开发Win32应用程序(Windows95/98/2000/XP/NT)的、面向对象的可视化集成工具。
它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C++类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。
2.2XML
XML,extensiblemarkuplanguage(可扩展标识语言),是当代最热门的网络技术之一,被称为"第二代web语言"、"下一代网络应用的基石"。
自从它被提出来,几乎得到了业界所有大公司的支持,丝毫不逊于当年HTML被提出来的热度。
XML是1986年国际标准组织(ISO)公布的一个名为"标准通用标识语言"(standardgeneralizedmarkuplanguage,sgml)的子集。
它是由成立于1994年10月的W3C(worldwidewebconsoutium)所开发研制的。
1998年2月,W3C正式公布了XML的recommendation1.0版语法标准。
XML掌握了SGML的扩展性,文件自我描述特性,以及强大的文件结构化功能,但却摒除了SGML过于庞大复杂以及不易普及化的缺点。
XML和SGML一样,是一种"元语言"(meta-language)。
换言之,XML是一样用来定义其他语言的语法系统。
这正是XML功能强大的主
第三章:
系统概述
3.1项目范围
排课系统从功能上划分一共有8个主模块,其中教学计划部分包含了2个子模快,具体的结构示意如下列所示:
·教学时间
·班级信息
·课程信息
·教师信息
·教室和场地信息
·教学计划
·老师选课
·老师选班级
3.2设计策略
硬件环境:
处理器:
IntelPentiumIII
内存:
192M
硬盘空间:
20G
软件环境:
操作系统:
WindowsXP
制作工具:
VisualC++6.0
用VisualC++6.0来完成排课系统的界面的设计,编码C++语言,用xml语言做问该软件的数据库。
第四章:
系统总体设计
4.1系统结构设计
4.1.1各模块功能及示意图
排课系统从功能上划分一共有八个主模块,六个子模块。
教学时间:
点击主页面上的教学时间进入设置教学时间,设置一个星期里的星期几上课,设置一天上几节课程。
班级信息:
对班级的录入,增加,删除和修改。
课程信息:
对课程的录入,增加,删除和修改。
教师信息:
对教师的录入,增加,删除和修改。
教室和场地信息:
对教师的录入,增加,删除和修改,对教室的分类。
教学计划:
对录入的老师进行选课和选班级。
课表查看:
课分为老师课表查看,教室课表查看,班级课表查看。
其中班级课表可以人工对他进行修改。
4.1.2各模块功的结构体设计
Structgroundnode
{
Chargroundname[20];
Intshishang;
Intyishang;
};
Structnode
{
Charclassname[20];
Charcoursename[20];
Intleixgeshu;
Structgroundnodegrounde[4];
Structnode*next;
};
老师信息结构体
StructTeacherNode
{
CharTeachername[20];//老师姓名
CharTeachCourse[20];//所教课程
Inttag[12][7];//标记在哪天哪节课在上课
IntTeachGrade;//所教年级
};
班级信息结构体
StructClassNode
{
CharClassName[20];//班级名
Inttag[12][7];//标记在哪天哪节课在上课
Intgrade;//年级
};
教室信息结构体
StructClassRoomNode
{
CharClassRoomName[20];//教室名
CharClassRoomType[20];//教室类型
Inttag[12][7];//标记在哪天哪节课在上课
};
场地信息结构体
StructGroundType
{
CharGroundName[20];//场地名
Intshishang;//在该场地要上几节课
Intyishang;//在该场地已经上了几节课了
};
课程信息结构体
StructCourseNode
{
CharCourseName[20];//课程名
IntHebdomad;//周课时数
IntGrade;//所属年级
Inthave;//该门课程要在几个场地上课
StructGroundTypeGround[4];//该课程在那些场地上课
};
4.1.2模块间的接口
班级信息:
对班级的录入,增加,删除和修改。
课程信息:
对课程的录入,增加,删除和修改。
教师信息:
对教师的录入,增加,删除和修改。
教室和场地信息:
对教师的录入,增加,删除和修改,对教室的分类。
教学计划:
对录入的老师进行选课和选班级。
课表查看:
主要是对课表修改,查看,打印等一些功能。
第五章:
详细设计
5.1排课系统流程分析
课程安排的流程跟教务工作的顺序有很大的关系,被安排的课程的信息来源主要是前期很多教务工作的总结。
其基本流程见图1。
图1课程安排流程
5.1.1整理课程信息
整理本学期需要安排课程的基本信息,包括课程类型(选修、必修、实验课、室外课、普通教室课、多媒体教室课等),讲课老师(任课教师对上课提出的要求、上课时间段和上课用教室),听课的班级(各班人数、总人数等)。
5.1.2课程分类
根据整理出的课程需求,我们对每门课程根据情况进行优先级别分类,作为排课队列的顺序。
5.1.3获取可安排的教室
教室是根据每个系的情况进行分配的,部分特殊教室的使用也是有限制的,因此在排课前必须获得所有能够安排课程的教室情况。
5.1.4排课
根据课程的优先级别按顺序再依据规则依次对课程进行时间和教室的安排,在这里重点是规则的定义和在上课时间和教室空间纵横轴组成的二维空间中对每个课单元的排课许可。
排课的过程是一个搜索的过程,当最后的课程搜索不到位置时,表示课程安排有冲突,可通过回溯的方法通过改变前一门课的定位来增加可选的机会,当最后仍然出现课程冲突时,可列出所有与该课冲突的信息,以便教务管理员分析和重新对某些属性进行设定。
5.1.5生成课表
将排好课的节次时间和教室空间纵横轴组成的二维表的每个单元数据存入数据库。
通过各种检索可以生成课表。
5.2排课系统流程分析
排课系统的实现主要在于排课系统的算法。
5.2.1基本对象定义
通过分析课程表我们可以看到,无外乎教室使用空间问题和每周安排课程的占用时间问题(这里根据本学校的情况,时间以周来算)。
我们把这两个问题放到一个二维表格里面,分别定义为空间轴和时间轴。
而空间的每个单元我们可以简单地称为教室元,每个时间单元我们称为节次元。
教室元,主要是每间教室的类型,可容纳的人数等信息。
在教室的空间轴上依次排列。
排列的顺序的设定在一定程度上影响着排课的效率,所以必须根据教室的属性分类一次排序。
节次元,主要是以一周的时间为时间轴,每天按节次分为6次课上午3次,下午2次,晚上1次。
由时间和空间轴组成的二维数组存储课程信息后的安排表见表1。
这里我们把可安排课程的单元称排课单元。
5.2.2对每门课程的教室元进行预设定
(1)总体教室元的范围设定。
对于本学院,主要设置为系别、专业、班级。
一般教室的使用有一定的系部范围,特别的专业有相关的专业范围教室或者还有特殊的班级范围。
我们可以从范围上从大到小地对各自属性的排课进行教室区域范围的划分,使在各范围内班级的排课范围都预设定好,避免了对每门课程具体设置的复杂过程。
(2)各门课程教室的范围设定。
总体教室元的范围设定并不能完全解决排课的特殊逻辑需求,对各门课程都要进行教室元范围的设定。
这主要是根据各门课程的属性自动设置完成的,当然也有一些需要管理员手动设定。
最后综合两种设定,每门课程都有针对本课在课程表安排时需要的空间轴上教室元的许可设定。
我们假设总体教室元的范围设定为序列ArrayT,各课程教室范围设定序列为ArrayC。
通过ArrayC∩ArrayT(i)求得最终的各课程表的教室范围。
其中ArrayT(i)为所有与ArrayC课程相关的总体教室元的范围设定序列。
5.2.3对每门课程节次时间元的预设定
针对每门课程的类型和任课教师的部分特殊要求,比如必修课的英语必须安排在上午等条件,对每门课程同样要设置其节次元。
基本方法同课程教室范围的设定,如假设对于该课程的节次设定序列有i个要求的ArrayS(i),那么通过各ArrayS(i)的交集求得一确定的序列便是该课程的节次时间元的预设定。
5.2.4综合设定表
最后,将各门课程教室的教室元范围设定ArrayC(i)和课程的节次元设定ArraryT进行运算:
CourseT(i)=ArrayC(i)*ArrayT(i),求得二维课表CourseT课程安排矩阵表,该表每个单元的值表示的便是该课程在此排课单元上的使能。
在后面的排课操作中便可以此为基准进行排课搜寻。
除此之外,为了细分,我们还需要根据现有教室范围进行选取,将邻近教室范围的设定分成相关区域,并独立成多个课程安排矩阵表,以便于邻近表教室之间的操作。
5.2.5课程优先级的设定
在排课之前还有一个重要的工作,那便是对所有排课进行优先级的设定。
由于后面采用的是队列的算法来实现,所以一定的课程排课的顺序也决定了课程表能否成功安排。
5.2.6排课规则
在排课的过程中,排课规则主要是用来协调选择性排课单元的搜索,使课程的定位更具人性化和合理性。
这里我们列举如下几点:
同一个课程元不能连续在一天上两次;同一个课程元最好不要连续上两天;同一老师同一天两次连续的课时间上最好不连续,比如一次在上午,一次在下午;一天内同一班级的课程最好教室距离不要太远。
规则定义好了,主要还是看算法的实现。
基于前面几个步骤的准备工作,规则基本实现逻辑如下:
(1)取得现阶段课程安排矩阵表中关于本次课程元安排的相关信息,并存储该信息到Mes(i)。
假定此时的课程安排矩阵表状态为CourseT(i).
(2)根据Mes(i)进行处理,取得课程安排矩阵表中新的限定控制状态表Control(i).
(3)通过求交集,取得新的课程安排矩阵表状态为CourseT(i)。
(4)从CourseT(i+1)寻找该课程元的位置,更新CourseT(i+1)。
比如规则“同一个课程元不能连续在一天上两次”的实现。
5.3系统内部分代码
以下是用C++编写的一个链表模板。
可以通过该模板创建不同的链表而不要写重复的代码,从而减少了代码量。
#ifndef_LISTTEMPLATE_
#define_LISTTEMPLATE_
#include"NodeType.h"
template
classListTemplate
{
public:
ListTemplate();//初始化节点
~ListTemplate();//释放内存
voidCreateOrInsertNode(NumType&);//创建或者插入老师链表
NumType*ReturnHead();
private:
NumType*Head;//保存头结点
NumType*Rear;//保存尾接点
};
template
ListTemplate:
:
ListTemplate()
{
Head=newNumType;
Rear=newNumType;
Head->next=NULL;
Rear->next=NULL;
}
template
ListTemplate:
:
~ListTemplate()//释放节点申请的内存
{
NumType*tem=newNumType;
while(Head->next!
=NULL)
{
tem=Head;
Head=Head->next;
delete[]tem;
}
delete[]Rear;
}
template
voidListTemplate:
:
CreateOrInsertNode(NumType&Node)//创建或者插入老师链表
{
NumType*NewNode=newNumType;//申请一个节点
*NewNode=Node;//通过符号重载将节点里的数据存入新节点
if(Head->next==NULL)
{
Head->next=NewNode;//如果头结点为空就将头节点指向新节点
Rear=Head->next;//尾指针指向下一个
}
else
{
Rear->next=NewNode;//否则就将新节点连入尾部
Rear=Rear->next;
}
}
template
NumType*ListTemplate:
:
ReturnHead()
{
returnHead;
}
#endif
第七章:
总结
通过最后一个多月的毕业设计,我对VisualC++6.0编译器,xml,c++语言等一系列知识都有了一定的了解。
使用VisualC++6.0开发应用程序也有了很大提高。
由于在此之前对于VisualC++6.0工具,xml和c++语言知识的了解几乎是一片空白,所以从一开始就碰到许多困难。
例如一开始我使用的是SQL数据库用于存储信息,但是由于用数据库存储存在着很大的确定所以后面就改用了XML来存储数据。
在整个设计阶段感受最为深刻的是掌握学习的方式和解决问题的方法。
首先是解决问题的方式,虽然面临的信息很多,但是如何从大量的信息中筛选出所需的信息,有用的信息,才是解决问题的关键,另外一个就是解决问题的方法,就像我在解决设计中的很多问题一样,一开始总是在看书,和书上的进行比对,虽然书本上的只是大部分都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们一定要通过实践才能找到解决问题的方案。
在整个毕业设计的过程中,我深刻的体会到了这一点的重要性,也牢记主了这一点,在今后的学习和研究中我也会继续将这种方法延续下去。
谢辞
在整个设计过程中,有很多人对任务的完成给予了重要的支持和帮助。
感谢
张华老师给了我本次设计的机会并提供指导;感谢许多同学VisualC++6.0编译器,xml,c++语言等问题上给我的帮助使我能够顺利地进行设计的工作;论坛中有很多认识不认识的朋友也都为我的设计提出了很宝贵的建议,同样在这里感谢他们。
参考文献
1.《C++程序设计》谭浩强
2.《visualc6·0编程实例与技巧》
3.《软件工程》
4.《MFCWidnows程序设计》