排课系统
编号
学生实习报告
2013~2014学年第一学期
实习类别课程设计
学生姓名崔元浩
专业软件工程
学号110521230
指导教师崔广才
学院计算机科学与技术
2014年 1 月
一、概述:
问题描述
大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,
也可以没有。每门课恰好占一个学期。
主要解决的任务
在这样的前提下设计一个教学计划编制程序。
解决的主要问题
教学计划的安排结果要符合用户输入的先修条件,以此为前提给出两种编排策略:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。
二、设计的基本概念和原理
基本概念
课程信息:包含课程名,课程号和学分。
邻接表(有向图):包含数组结的头结点和弧结点。
邻接表的头结点的:表示有向图中的结点,包含课程信息和第一个依附的弧的结点。
邻接表的弧结点:用以记录有向图中各结点的邻接关系。
主要原理
通过以上概念生成有向图的邻接表,利用拓扑排序的思想生成拓扑的有序序列,再按上面的两种编排策略生成相应的编排结果。
三、总体设计
该程序主要功能:
1、添加课程
2、添加课程问的先修关系
3、根据用户选择生成一种编排结果
4、生成Excel到用户指定位置
算法流程
四、详细设计
对于该题目的程序框架设计,我采用三层架构的思想。整个程序
分为三个工程:DataStruct、BLL、SystemOfArrangeSubject。
DataStruct中定义了程序要用的数据结构类,相当于数据访问层。
具体类说明:
SubjecInfo:课程信息类
private string name;//课程名
private string num;//课程号
private int score;//学分
private int[] preSubjectIndex = new int[5];//先导课,最多五门
ArcNode:邻接链表的边结点类
private int adjvex;//指向的顶点位置
private ArcNode nextarc;//下一条弧
VNode:邻接表的头结点类
private T data;//顶点信息
private ArcNode firstarc;//指向第一条依附该顶点的弧的指针
ALGraph:有向图邻接链表类
static private VNode
static private int numOfVertex;
BLL中定义了针对界面的操作对DataStruct中的各种数据结构类的操作,相当于业务逻辑层。
具体类说明:
AddSubjectBLL:添加课程的业务逻辑类
PreSubjectBLL:添加先修课的业务逻辑类
ArrangeSubjectBLL:课程编排的业务逻辑类
SystemOfArrangeSubject是一WindowsForm项目,是整个项目的界面表现层(具体说明请见下面的界面设计)。
界面设计
添加课程界面(AddSubject.cs)
添加先修关系界面(AddPreSubject.cs)
排课界面(ArrangeSubject.cs)
五、系统调试过程
由于本实验要求不可以使用数据库作为存储工具,因此我在这个程序中定义了大量的静态变量和方法,所以数据的保存的实现过程也比较复杂。因此在程序的调试中最容易出错的地方也是这里。
六、简要的使用说明
添加课程:
向文本框中输入课程名和课程号,修改数字文档中学分,然后点添加按钮,会弹出添中成功提示框,添加完所有课程后即可点“下一步”按钮进入添加先修关系的操作。
需要注意的是,任意两次添课程名和课程都不能重复,课程名不能是数字。左边的控件会显示添加过和课程。
添加先修关系:
点击最上面的按钮,选择要添加先修课的当前课程,选中后进入中间
的复选框将本门课和所有的先修课都选中;完成后点“保存”,会弹出“保存成功”的提示框,表示本次操作完成;当为所有的课程都添加了先修课之后可以点击“下一步”按钮,进入排课的操作。
这个时候程序会进行拓扑排序,如果发现有环存在,无法进入下一步的操作,需要重新添加先修关系。
排课操作:
修改最上面两个数字文本框,选择总学期数和每学期的最高学分数;然后选中中间的一个radiobutton选择一种排课策略;接下来点击“结预览”按钮,界面上会显示相应的排课结果;当生成了正确的排课结果,就可以点“导出到Excel”按钮,选择要保存Excel的位置,生成相应的Excel 文件。
七、总结
通过将近两周的努务,任务算是完整地完成了,自认为做的比较用心。也许程序写的不是十分完美,中间有很多部分需要完善。但在这个过程中我又学到平时难以得到的知识。
首先就对数据结构这门学科有了更深的认识。通过编写这个程序,体会到了数据结构在实际应用的重要作用。再一个,通过自己完成这个项目,提高了自己的克服困难的能力。另外,也提升了自己整体分析问题的能力。通过与他人交流,也懂得了互相学习的重要性。