数据结构教学计划编制课程设计指导书Word格式文档下载.docx
- 文档编号:22319170
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:7
- 大小:27.55KB
数据结构教学计划编制课程设计指导书Word格式文档下载.docx
《数据结构教学计划编制课程设计指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构教学计划编制课程设计指导书Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
一是使学生在各学期中的学习负担尽量均匀;
二是使课程尽可能地集中在前几个学期中。
(3)若根据给定的条件问题无解,则报告适当的信息;
否则将教学计划输出到用户指定的文件中。
计划的表格格式自行设计。
设计思路
与
设计过程
运用图的拓扑排序对课程先修排列的实现,并调用递归完成拓扑排列。
设计过程:
用户输入信息后保存课程编排的具体信息
保存可以选择的课程
初始化要用到的各个数据再调用递归
递归函数,完成拓扑排序
统计该层递归可以选择的课程
当课程安排成功时将课程安排记录保存
根据客户要求输出相应的课程安排
负责输出课程信息
输出课程的联系
负责将课程信息写入文件
将课程的联系写入文件
计划与进度
12.01-13.03复习数据结构,了解数学计划编制;
12.04-12.07进行需求分析;
12.08-12.12进行总体设计;
12.13-12.16进行详细设计,代码实现各模块;
12.17-12.18进行程序调试;
12.19-12.20资料归档,填写相关文档。
任课教师
意见
备注
课程设计报告
课程:
数据结构
学号:
姓名:
班级:
教师:
时间:
2010.12.01~2010.12.20
计算机科学与技术系
设计名称:
教学计划编制
日期:
2010年12月15日
设计内容:
大学的每个专业都要制定教学计划。
假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。
每个专业开设课程都是确定的,而且课程在开设时间的安排必须满足先修关系。
每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。
每门课恰好占一个学期。
试在这样的前提下设计一个教学计划编制程序。
设计目的与要求:
设计环境或器材、原理与说明:
设计环境或器材:
硬件:
计算机软件:
MicrosoftVisualC++
设计原理说明:
设计过程(步骤)和部分程序代码(可以加页):
存储结构设计
structCourseHead//表头结点的结构体,保存课程信息
{
intflag;
//标记该门课程是否已经编排
intpriornum;
//给课程的直接先修课的个数
charName[30];
//课程的名字
charOfcourse[4];
//课程号
floatScore;
//学分
CourseLink*first;
//以该门课程为先修的后修课程
};
structCourseLink//表头结点的链结点,即该门课程的后继课程
{
intIndex;
//该课程在表头结点的下标,
CourseLink*next;
//下一门与它有公共先修课的课程
};
structTopo//保存课程安排的最终结果
intlevel;
//标记是否平均分配,
ArryInTopo*toporesualt;
//一个一维数组保存课程的具体安排
Topo*next;
//下一种课程安排的情况
structArryInTopo//用于保存课程编排的具体信息
intIndex;
//保存课程的序号
intTime;
//保存课程的开课时间
structZero//保存可以选择的课程
intzero;
//课程在原始数据里的下标
Zero*next;
//下一个可选课程结点的地址
主要算法设计
用到的函数的功能
voidInitData();
//完成数据初始化
voidInitData(intnum);
//由课程数目num来完成数据的细节
floatInitData(char*b);
//方便判断输入数据的准确性而已
voidStartTopoSort();
//初始化要用到的各个数据再调用递归
voidTopoSort(inttopotempsum,inttime);
//递归函数,完成拓扑排序,
voidCheck(intindex);
//当选择course[index]时,相应的课//程的priornum项要减一
voidCheckBack(intindex);
//当退选course[index]时,相应的课程
//的priornum项要加
intZERO();
//统计该层递归可以选择的课程
//并且完成可选课程的记录
voidIfsuccessed();
//当课程安排成功时将课程安排记录保存
//并对课程安排做评价
voidPrint();
//根据客户要求输出相应的课程安排
voidprintf1(int);
//负责输出课程信息
voidprintf2();
//输出课程的联系
voidprintf1(FILE*);
//负责将课程信息写入文件
voidprintf2(FILE*);
//将课程的联系写入文件
设计结果与分析(可以加页):
分析:
在每一层递归开始时,必须将该层递归可以选择的课程选出来。
求出可以选择的课程数目n然后要考虑在此层递归中,如何选择课程的问题:
可以选一课,一直到最大的许可范围.这样便存在Cn1+Cn2+……+Cnn种情况,即2n-1种情况。
我开始是在每一层递归里面都建立的一个二位数组,保存每一种选课情况,0(不选),1(选),这样的话,存储空间会以2n的速度增加,那样效果相当的不好。
后来考了到,若过将上面的01串当成是一个数据的二进制表示,那么每一种情况都与一个数是对应的,这样便可以运用数的位运算来达到遍历每一种情况。
例如:
假设某一层递归时,它的可选课程有三门:
离散数学,数据结构,汇编语言,那么在该层递归里面就有23(8-1)种选择(不可能一门课程都不选,那样的话就没有实际意义),若果按照初始思路则要建立一个二维数组:
其中0代表不选则,1代表选择。
但是结果观察,如果将它的选项的二进制看做是数的表示,则分别对应与1,2,3,4,5,6,7(23-1).于是可以在递归里面去掉二维数组,用数的位运算来求出选课的各个情况。
以下是其关键思路:
(详细的源代码在“教学计划编制.cpp”里)
For(i=1;
i<
math.pow(2,n);
++i)
{//考虑每一种情况
For(j=1;
;
)
{//位运算,遍历每一位二进制位
if((i&
j)==j)
//相应的操作,即选择该门课程
}
j=j<
<
1;
//下一个二进制位
}.
这样的话既可以节约存储空间,又可以加快运算(位运算效率高).
设计体会与建议:
经过这次数据结构课程设计,我学习到:
一、不拘泥于课本,将学的知识转换为自己的知识,体会到将课本知识运用到实际问题中的重要性.学习课本也只是学习其思想方法,并不是全盘照搬.比如这次我的课程设计课题《教学计划编制》,实际就是图的拓扑排序,但是又不是简单的排序,要考虑到实际情况,假如就像书本上的那样思路写,其结果会很不全,因为在实际课程编排中课程并没有什么第一个后继或者第二个后继,而是只要它的先修课已经全部修完,那么它在什么时候修都可以,而不是一定要马上去修这门课程.
二、要与老师多交流,那样可以知道很多自己没有考虑过的问题.可以通过与老师交谈扩大自己的知识面,要明白一件事:
老师的知识面远远超过我们的,所以我们应该谦虚地向老师学习。
有不懂的地方要多多向老师请教。
三、这次的课程设计的算法,我觉得还可以加以改进:
可以调用数据库,直接在数据库里面读取课程信息(包括课程名,课程号,先修课,学分,学期数,一学期的学分上限),那样当有大量数据时才有实际应用价值,而不是在界面输入。
设计成绩:
教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 教学计划 编制 课程设计 指导书