排课系统

编号

学生实习报告

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[] vertices = new VNode[100];//顶点数组

static private int numOfVertex;

BLL中定义了针对界面的操作对DataStruct中的各种数据结构类的操作,相当于业务逻辑层。

具体类说明:

AddSubjectBLL:添加课程的业务逻辑类

PreSubjectBLL:添加先修课的业务逻辑类

ArrangeSubjectBLL:课程编排的业务逻辑类

SystemOfArrangeSubject是一WindowsForm项目,是整个项目的界面表现层(具体说明请见下面的界面设计)。

界面设计

添加课程界面(AddSubject.cs)

添加先修关系界面(AddPreSubject.cs)

排课界面(ArrangeSubject.cs)

五、系统调试过程

由于本实验要求不可以使用数据库作为存储工具,因此我在这个程序中定义了大量的静态变量和方法,所以数据的保存的实现过程也比较复杂。因此在程序的调试中最容易出错的地方也是这里。

六、简要的使用说明

添加课程:

向文本框中输入课程名和课程号,修改数字文档中学分,然后点添加按钮,会弹出添中成功提示框,添加完所有课程后即可点“下一步”按钮进入添加先修关系的操作。

需要注意的是,任意两次添课程名和课程都不能重复,课程名不能是数字。左边的控件会显示添加过和课程。

添加先修关系:

点击最上面的按钮,选择要添加先修课的当前课程,选中后进入中间

的复选框将本门课和所有的先修课都选中;完成后点“保存”,会弹出“保存成功”的提示框,表示本次操作完成;当为所有的课程都添加了先修课之后可以点击“下一步”按钮,进入排课的操作。

这个时候程序会进行拓扑排序,如果发现有环存在,无法进入下一步的操作,需要重新添加先修关系。

排课操作:

修改最上面两个数字文本框,选择总学期数和每学期的最高学分数;然后选中中间的一个radiobutton选择一种排课策略;接下来点击“结预览”按钮,界面上会显示相应的排课结果;当生成了正确的排课结果,就可以点“导出到Excel”按钮,选择要保存Excel的位置,生成相应的Excel 文件。

七、总结

通过将近两周的努务,任务算是完整地完成了,自认为做的比较用心。也许程序写的不是十分完美,中间有很多部分需要完善。但在这个过程中我又学到平时难以得到的知识。

首先就对数据结构这门学科有了更深的认识。通过编写这个程序,体会到了数据结构在实际应用的重要作用。再一个,通过自己完成这个项目,提高了自己的克服困难的能力。另外,也提升了自己整体分析问题的能力。通过与他人交流,也懂得了互相学习的重要性。

相关文档
最新文档