教学计划编制问题_数据结构课程设计报告_湖南工程学院.doc
- 文档编号:527415
- 上传时间:2023-04-29
- 格式:DOC
- 页数:38
- 大小:1.26MB
教学计划编制问题_数据结构课程设计报告_湖南工程学院.doc
《教学计划编制问题_数据结构课程设计报告_湖南工程学院.doc》由会员分享,可在线阅读,更多相关《教学计划编制问题_数据结构课程设计报告_湖南工程学院.doc(38页珍藏版)》请在冰点文库上搜索。
下载可编辑
课程设计报告
课程名称数据结构课程设计
课题名称教学计划编制问题
专业网络工程
班级0901
学号2009031201XX
姓名
指导教师刘长松陈华光李杰君
2011年7月15日
湖南工程学院
课程设计任务书
课程名称数据结构课程设计
课题教学计划编制问题
专业班级网络工程0901
学生姓名XX
学号2009031201XX
指导老师刘长松陈华光李杰君
审批
任务书下达日期:
2011年6月26日
任务完成日期:
2011年7月15日
一、设计内容与设计要求
1.设计内容:
1)问题描述
大学的每个专业都要制订教学计划。
假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。
每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。
每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。
每门课恰好占一个学期。
试在这样的前提下设计一个教学计划编制程序。
2)基本要求
a.输入参数包括:
学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。
b.允许用户指定下列两种编排策略之一:
一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。
c.若根据给定的条件问题无解,则报告适当的信息;否则,将教学计划输出到用户指定的文件中。
计划的表格格式自行设计。
3)测试数据
学期总数:
6;
学分上限:
10;
该专业共开设课数:
12
课程号:
从C01到C12;
学分顺序:
2,3,4,3,2,3,4,4,7,5,2,3。
先修关系如下图:
1
9
4
2
12
10
11
3
6
5
7
8
4)实现提示
可设学期总数不超过12,课程总数不超过100。
如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。
应建立内部课程号与课程号之间的对应关系。
2.设计要求:
l课程设计报告规范
1)需求分析
a.程序的功能。
b.输入输出的要求。
2)概要设计
a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。
b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
3)详细设计
a.采用C语言定义相关的数据类型。
b.写出各模块的类C码算法。
c.画出各函数的调用关系图、主要函数的流程图。
4)调试分析以及设计体会
a.测试数据:
准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。
b.程序调试中遇到的问题以及解决问题的方法。
c.课程设计过程经验教训、心得体会。
5)使用说明
用户使用手册:
说明如何使用你编写的程序,详细列出每一步的操作步骤。
6)书写格式
见附带说明。
7)附录
a.参考书目
b.源程序清单(带注释)
l考核方式
指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。
具体考核标准包含以下几个部分:
①平时出勤(占10%)
②系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)
③程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)
④设计报告(占30%)
注意:
不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
⑤独立完成情况(占10%)。
l课程验收要求
①运行所设计的系统。
②回答有关问题。
③提交课程设计报告。
④提交电子文档(源程序、设计报告文档)。
⑤依内容的创新程度,完善程序情况及对程序讲解情况打分。
二、进度安排
第19周
星期一
星期二
星期三
星期四
星期五
上午
8:
00~12:
00
√
下午
13:
30~17:
30
√
√
√
晚上
18:
00~20:
00
√
第20周
星期一
星期二
星期三
星期四
星期五
上午
8:
00~12:
00
√
下午
13:
30~17:
30
晚上
18:
00~20:
00
附:
课程设计报告装订顺序:
封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:
一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。
目录
1、需求分析 1
1.1程序的功能:
1
1.2输入输出的要求:
1
2、概要设计 1
2.1程序模块功能图 1
2.2数据结构 2
3、详细设计 3
3.1采用C语言定义相关的数据类型 3
3.2各模块的类C码算法 3
3.3各函数的调用关系图、主要函数的流程图 9
4、调试分析以及设计体会 11
4.1测试数据:
11
4.2程序调试中遇到的问题以及解决问题的方法:
12
4.3课程设计过程经验教训、心得体会:
12
5、使用说明 14
6.参考书目 20
7、附录 21
7.1.源程序清单(带注释) 21
.专业.整理.
下载可编辑
1、需求分析
1.1程序的功能:
编制教学计划。
大学的每个专业都要制订教学计划。
假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。
每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。
每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。
每门课恰好占一个学期。
1.2输入输出的要求:
a.输入参数包括:
学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。
b.允许用户指定下列两种编排策略之一:
一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。
c.若根据给定的条件问题无解,则报告适当的信息;否则,将教学计划输出到用户指定的文件中。
计划的表格格式自行设计。
2、概要设计
2.1程序模块功能图
main()
主函数
initialNode()
初始化课程节点
createNode()
建立课程顺序
sortNode()
课程
inputBasicInformation()
输入基本信息
cls()
清空信息
menu()
主菜单
图2.1-1功能模块图
2.2数据结构
inttermtime=0; //学期总数
intlimitgrade=0; //学分上线
charstr[100][4]; //课程号
intscore[100]={0}; //课程学分
inttotalcourse=0; //课程总数
structnode //课程节点
{
intvariable; //标志属不属于同一个学期所修
intprevious; //前修课程
intnext; //后学课程
structnode*courselink[100]; //后修课程的指针
}*coursenode[100]={NULL}; //课程数目节点
3、详细设计
3.1采用C语言定义相关的数据类型
FILE*fp//保存到文件
inttermtime=0; //学期总数
intlimitgrade=0; //学分上线
charstr[100][4]; //课程号
intscore[100]={0}; //课程学分
inttotalcourse=0; //课程总数
structnode //课程节点
{
intvariable; //标志属不属于同一个学期所修
intprevious; //前修课程
intnext; //后学课程
structnode*courselink[100]; //后修课程的指针
}*coursenode[100]={NULL}; //课程数目节点
3.2各模块的类C码算法
A.初始化课程节点
voidinitialNode() //初始化课程节点
{
inti;
intj;
printf("\n正在初始化。
。
。
。
。
。
。
\n");
for(i=0;i<100;i++)
{
后修课程的指针置零;
同学期学习的课程置零;
前修课程置零;
后修课程置零;
for(j=0;j<100;j++)
coursenode[i]->courselink[j]=NULL;
}
printf("\n初始化完毕。
。
。
。
。
。
。
\n");
}
B.建立课程顺序
voidcreateNode() //建立课程顺序
{
inti;
inttemp;
intflag;
for(i=0;i { printf("\n请输入%d的深入课程数目: ",i+1); scanf("%d",&(coursenode[i]->next)); printf("\n请输入%d的深入课程课程代号分别是什么(用空格分开): ",i+1); for(temp=0;temp { scanf("%d",&flag); coursenode[i]->courselink[temp]=coursenode[flag-1]; coursenode[flag-1]->previous++; } } printf("\n课程代号\t前修课程数\t深入课程数\n"); for(temp=0;temp { printf("%d\t\t%d\t\t%d\n",temp+1,coursenode[temp]->previous,coursenode[temp]->next); } } C.排课程 voidsortNode() //排课程 { inti,j,flag=0,session=1; FILE*fp; if((fp=fopen("d: \\course.txt","a"))==NULL)//如果文件已经存在,可以追加学生信息 { if((fp=fopen("d: \\course.txt","w"))==NULL)//文件不存在时,创建新文件,输入学生信息 { printf("文件打开失败! \n"); return; } } printf("\n-----------------------------\n"); printf("课程代号\t课程号\t课程学分\n"); fprintf(fp,"课程代号\t课程号\t课程学分\n"); while (1) { flag=1; for(i=0;i if(课程数目节点为空) if(同学期学习课程为空) if(前修课程为0) { printf("%d\t\t%s\t%d\n",i+1,str[i],score[i]); fprintf(fp,"%d\t%s\t%d\n",i+1,str[i],score[i]); for(j=0;j { 前修课程数目节点减一; coursenode[i]->courselink[j]->variable=1; coursenode[i]->courselink[j]=NULL; } coursenode[i]->next=0; 释放数目结点; flag=0; } if(flag! =0)break; else { if(session<=termtime) {printf("第%d学期课程结束\n------------------------------------\n",session); fprintf(fp,"第%d学期课程结束\n------------------------------------\n",session); session++;} else { printf("学习时间不够! ! ! \n"); exit(0); }if(session<=termtime); } for(i=0;i if(课程节目数不为O) coursenode[i]->variable=0; } fclose(fp); //关闭文件指针 } D,输入基本信息 voidinputBasicInformation() //输入基本信息 { inti; printf("请输入学期总数: "); scanf("%d",&termtime); if(termtime>=12) { printf("\n对不起,学期总数不能超过12\n"); exit(0); } printf("\n请输入学分上限: "); scanf("%d",&limitgrade); printf("\n请输入课程总数: "); scanf("%d",&totalcourse); for(i=0;i printf("请输入第%d门课程号(三个字符,回车结束): ",i+1); scanf("%s",&str[i]); str[i][3]='\0'; printf("请输入第%d门课程学分(回车结束): ",i+1); scanf("%d",&score[i]); if(学分高于上限) { printf("\n对不起,课程学分不能超过学分上限\n"); exit(0); } } printf("\n您所输入的数据如下,请核实: \n"); printf("课程代号\t课程号\t课程学分\n"); for(i=0;i { printf("%d\t\t%s\t%d\n",i+1,str[i],score[i]); } } E.清空信息 voidcls() { inti=0; 学期数置零; 学分上限置零; for(i=0;i<100;i++) { str[i][0]='\0'; score[100]=0; } 总课程数置零; printf("\n原来数据已经清空\n"); } F.菜单 voidmenu() { printf("*************************教学计划编制************************\n"); printf("\n1输入课程安排基本信息"); printf("\n2建立课程顺序"); printf("\n3排列课程顺序"); printf("\n4原来数据清空"); printf("\n5退出"); } G.主函数 voidmain() { intn; initialNode(); while (1) { menu(); printf("\n请输入您要选择的操作序号,按回车键确认: "); scanf("%d",&n); switch(n) { case1: inputBasicInformation();;break; case2: createNode();;break; case3: sortNode();;break; case4: cls();break; case5: exit(0); default: printf("输入错误,请输入列表中存在的序号! \n"); } } } 3.3各函数的调用关系图、主要函数的流程图 开始 设辅助数组indegree记录图的各顶点的入度值,并将indegree数组各变量赋初值。 输入图的顶点数、边数 建立一个栈,存储图的顶点的序号 用邻接表法建图,并计算出indegree数组中各变量值 根据indegree数组将入度为0的顶点入栈 count对输出顶点计数0=>count 栈不空 删除栈顶元素,赋给i count++ 将与第i个顶点链接的各顶点入度减1 输出第i个顶点值 顶点入度为0 顶点序号入栈 count 输出“拓扑排序成功” 输出“拓扑排序不成功” 结束 图2.3-1流程图 4、调试分析以及设计体会 4.1测试数据: 学期总数: 6; 学分上限: 10; 该专业共开设课数: 12 课程号: 从C01到C12; 学分顺序: 2,3,4,3,2,3,4,4,7,5,2,3。 先修关系如下图: 1 9 4 2 12 10 11 3 6 5 7 8 图4.1-1测试数据先修关系图 正确输入测试数据后,如果系统符合要求,正确排序,则如图4.1-2所示。 图4.1-2正确的测试结果 4.2程序调试中遇到的问题以及解决问题的方法: 我们在实验过程中遇到的最大难题是课程排序算法的编写。 刚开始的时候没有任何的思路,网上也只有拓扑排序的算法,对于课程设计要求的排序算法没有任何头绪。 经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索有了排序算法的大体思路。 经过几天的修改,终于写出了符合要求的排序算法。 4.3课程设计过程经验教训、心得体会: 每一次读懂别人的代码都是一种提高。 每一次减少一个Error都是一种进步。 每当一个模块编译完成都是一种成就。 这次数据结构的课程设计着实是一件难事,平常很少动手编程序,课堂上也没太多关注把思路转化为代码。 以至于最后要实现图的输入输出时,明明知道可以用邻接表或者拓扑排序,但就是不知道写代码。 经过一个星期的课程设计,过程曲折可谓一语难尽。 整天都是对着电脑,不然就是翻阅资料。 在此期间我失落过,也曾一度热情高涨。 点点滴滴令我回味无长。 这次课程设计使我体会到只有做到细心耐心,恒心才能做好事情。 通过本次课程设计,对图的概念有了一个新的认识,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构教程》这门课程之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。 图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这是一件很巧妙的事情。 在计算机中实现一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以浪费了很多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。 不过,有了这次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf()和包涵在#include 头文件中的输入函数。 这次的课程设计使我懂得了理论与实际相结合是很非常重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在整个设计过程中,构思是很花费时间的。 调试时经常会遇到这样那样的错误,有的是因为粗心造成的语法错误。 当然,很多也时用错了方法,总是实现不了。 同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 根据我在课程设计中遇到得问题,我将在以后的学习过程中注意以下几点。 首先需要认真上好专业实验课,多在实践中锻炼自己。 其次写程序的过程中要考虑周到,严密。 再次,在做设计的时候要有信心,有耐心,切勿浮躁。 然后,认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。 最后,在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。 每个实验通常都要花费很久的时间才能理清一个程序的思路,而且要不断的调试程序才能把程序调试正确,同时还要做到界面的输出也是需要美化的。 这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在老师的辛勤指导下,也完成了课程设计。 通过这次的课程设计,让我更加了解到数据结构的重要性。 以及它对我们
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学计划 编制 问题 数据结构 课程设计 报告 湖南 工程学院
![提示](https://static.bingdoc.com/images/bang_tan.gif)