《2022年数据结构》由会员分享,可在线阅读,更多相关《2022年数据结构(34页珍藏版)》请在金锄头文库上搜索。
1、课 程 设 计 报 告课程名称数据结构课程设计课题名称教学计划编制问题专业应用物理班级1201 学号201210040128 姓名张大帅指导教师刘长松黄哲2014 年 12 月 13 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 34 页 - - - - - - - - - 湖南工程学院课 程 设 计 任 务 书课程名称数据结构课程设计课题教学计划编制问题专业班级应用物理 1201 学生姓名张大帅学号201210040128 指导老师刘长松黄哲审批任务书下达日期:20
2、14 年 12 月 13 日任 务 完 成 日 期 :2014 年 12 月 20 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 34 页 - - - - - - - - - 一 、 设 计 内 容 与 设 计 要 求1设计内容:1)问题描述大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多
3、门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。2)基本要求a.输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3 位的字母数字串) 、学分和直接先修课的课程号。b.允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。c.若根据给定的条件问题无解,则报告适当的信息;否则,将教学计划输出到用户指定的文件中。计划的表格格式自行设计。3)测试数据学期总数: 6;学分上限: 10;该专业共开设课数:12 课程号:从C01 到 C12;学分顺序: 2,3,4,3,2,3, 4,4,7,5,2,3。
4、先修关系如下图:4)实现提示可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在1 9 4 2 12 10 11 36578名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 34 页 - - - - - - - - - 该专业开设的课程序列中,则作为错误处理。应建立内部课程号与课程号之间的对应关系。2设计要求:课程设计报告规范1) 需求分析a.程序的功能。b.输入输出的要求。2) 概要设计a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个
5、模块的功能。b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。3) 详细设计a.采用 C 语言定义相关的数据类型。b.写出各模块的类C 码算法。c.画出各函数的调用关系图、主要函数的流程图。4) 调试分析以及设计体会a.测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。b.程序调试中遇到的问题以及解决问题的方法。c.课程设计过程经验教训、心得体会。5) 使用说明用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。6) 书写格式见附带说明。7) 附录a.参考书目b.源程序清单(带注释)考核方
6、式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 34 页 - - - - - - - - - 平时出勤(占 10%) 系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%) 程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%) 设计报告(占3
7、0%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。 独立完成情况(占10%) 。课程验收要求 运行所设计的系统。 回答有关问题。 提交课程设计报告。 提交电子文档(源程序、设计报告文档)。 依内容的创新程度,完善程序情况及对程序讲解情况打分。二、进 度 安 排16 周:星期一下午14:00-18:00 16 周:星期二下午14:00-18:00 16 周:星期三下午14:00-18:00 附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单) 。正文的格式 : 一级标题用3 号黑体 ,二级标题用四号宋体加粗,正文用小四号宋体; 行距为 2
8、2。正文的内容 : 一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释) 。正文总字数要求在5000 字以上(不含程序原代码)。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 34 页 - - - - - - - - - 目录1、需求分析 . 11.1 程序的功能: . 11.2 输入输出的要求: . 12、概要设计 . 12.1
9、程序模块功能图 . 12.2 数据结构 . 23、详细设计 . 33.1 采用 C语言定义相关的数据类型 . 33.2 各模块的类C码算法 . 33.3 各函数的调用关系图、主要函数的流程图 . 94、调试分析以及设计体会 . 11 4.1 测试数据: . 11 4.2 程序调试中遇到的问题以及解决问题的方法: . 12 4.3 课程设计过程经验教训、心得体会: . 12 5、使用说明 . 13 6. 参考书目 . 19 7、附录 . 20 7.1. 源程序清单(带注释) . 19 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
10、 名师精心整理 - - - - - - - 第 6 页,共 34 页 - - - - - - - - - 1 1、需求分析1.1 程序的功能:编制教学计划。 大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限, 每学年含两学期, 每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的, 而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的, 可以有任意多门, 也可以没有。 每门课恰好占一个学期。1.2 输入输出的要求:a.输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3 位的字母数字串)、学分和直接先修课的课程号。b.允许用户指定下列两
11、种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。c.若根据给定的条件问题无解,则报告适当的信息;否则,将教学计划输出到用户指定的文件中。计划的表格格式自行设计。2、概要设计2.1 程序模块功能图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 34 页 - - - - - - - - - 2 图 2.1-1 功能模块图2.2 数据结构int termtime=0; /学期总数int limitgrade=0; /学分上线char
12、 str1004; /课程号int score100=0; /课程学分int totalcourse=0; /课程总数struct node /课程节点 int variable; /标志属不属于同一个学期所修int previous; /前修课程int next; /后学课程struct node * courselink100; /后修课程的指针* coursenode100=NULL; /课程数目节点initialNode() 初始化课程节点createNode() 建立课程顺序sortNode() 课程inputBasicInformation() 输入基本信息cls() 清空信息me
13、nu() 主菜单名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 34 页 - - - - - - - - - 3 3、详细设计3.1 采用 C语言定义相关的数据类型FILE *fp /保存到文件int termtime=0; /学期总数int limitgrade=0; /学分上线char str1004; /课程号int score100=0; /课程学分int totalcourse=0; /课程总数struct node /课程节点 int variable; /标
14、志属不属于同一个学期所修int previous; /前修课程int next; /后学课程struct node * courselink100; /后修课程的指针* coursenode100=NULL; /课程数目节点3.2 各模块的类 C码算法 A. 初始化课程节点void initialNode() /初始化课程节点 int i; int j; printf(n 正在初始化。 。 。 。 。 。 。 n); for(i=0;i100;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
15、- - - 第 9 页,共 34 页 - - - - - - - - - 4 后修课程的指针置零; 同学期学习的课程置零; 前修课程置零 ; 后修课程置零 ; for(j=0;jcourselinkj=NULL; printf(n 初始化完毕。 。 。 。 。 。 。 n); B. 建立课程顺序void createNode() /建立课程顺序 int i; int temp; int flag; for(i=0;inext); printf(n 请输入 %d 的深入课程课程代号分别是什么(用空格分开):,i+1); for(temp=0;tempnext;temp+) scanf(%d,&f
16、lag); coursenodei-courselinktemp=coursenodeflag-1; coursenodeflag-1-previous+; printf(n 课程代号 t 前修课程数 t 深入课程数 n); for(temp=0;tempprevious,coursenodetemp-next); C 排课程void sortNode() /排课程 int i,j,flag=0,session=1; FILE *fp; if(fp=fopen(d:course.txt,a)=NULL) /如果文件已经存在,可以追加学生信息 if(fp=fopen(d:course.txt,w
17、)=NULL) / 文件不存在时,创建新文件,输入学生信息 printf( 文件打开失败!n); return; printf(n-n); printf( 课程代号 t 课程号 t 课程学分 n); fprintf(fp, 课程代号 t 课程号 t 课程学分 n); while(1) flag=1; for(i=0;itotalcourse;i+) if( 课程数目节点为空) if(同学期学习课程为空) if( 前修课程为0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页
18、,共 34 页 - - - - - - - - - 6 printf(%dtt%st%dn,i+1,stri,scorei); fprintf(fp,%dt%st%dn,i+1,stri,scorei); for(j=0;jnext;j+) 前修课程数目节点减一; coursenodei-courselinkj-variable=1; coursenodei-courselinkj=NULL; coursenodei-next=0; 释放数目结点 ; flag=0; if(flag!=0)break; else if(session=termtime) printf( 第%d 学期课程结束n-
19、n,session); fprintf(fp,第%d学期课程结束n-n,session) ; session+; else printf( 学习时间不够 !n); exit(0); if(session=termtime); for(i=0;ivariable=0; fclose(fp); /关闭文件指针 D,输入基本信息void inputBasicInformation() /输入基本信息 int i; printf( 请输入学期总数:); scanf(%d,&termtime); if(termtime=12) printf(n 对不起,学期总数不能超过12n); exit(0); pr
20、intf(n 请输入学分上限:); scanf(%d,&limitgrade); printf(n 请输入课程总数:); scanf(%d,&totalcourse); for(i=0;itotalcourse;i+) printf( 请输入第 %d 门课程号(三个字符,回车结束):,i+1); scanf(%s,&stri); stri3=0; printf( 请输入第 %d 门课程学分(回车结束):,i+1); scanf(%d,&scorei); if( 学分高于上限) printf(n 对不起,课程学分不能超过学分上限n); exit(0); 名师资料总结 - - -精品资料欢迎下载
21、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 34 页 - - - - - - - - - 8 printf(n 您所输入的数据如下,请核实:n); printf( 课程代号 t 课程号 t 课程学分 n); for(i=0;itotalcourse;i+) printf(%dtt%st%dn,i+1,stri,scorei); E清空信息void cls() int i=0; 学期数置零 ; 学分上限置零; for(i=0;icount 栈不空删除栈顶元素,赋给 i count+ 将与第 i 个顶点链接的各
22、顶点入度减1 输出第 i 个顶点值顶点入度为0 顶点序号入栈countG.vexnum 输 出 “ 拓 扑排序成功”输出“拓扑排序不成功”结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 34 页 - - - - - - - - - 11 4、调试分析以及设计体会4.1 测试数据:学期总数: 6;学分上限: 10;该专业共开设课数: 12 课程号:从 C01到 C12 ;学分顺序: 2,3,4,3,2,3,4,4,7,5,2,3。先修关系如下图:图 4.1-1 测试数
23、据先修关系图正确输入测试数据后,如果系统符合要求,正确排序,则如图4.1-2 所示。1 9 4 2 12 10 11 36578名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 34 页 - - - - - - - - - 12 图 4.1-2 正确的测试结果4.2 程序调试中遇到的问题以及解决问题的方法: 程序十分的复杂,遇到了很多常见的语法错误,及逻辑错误。这需要我们不断的调试分析。 符号的格式之类, 指针的用法, 判断输入输出的条件都是十分容易出错的地方。在逐条排除
24、,向同学老师请教后,程序终于得以完成。4.3 课程设计过程经验教训、心得体会: 经过此次课程设计, 我们认识到了理论与实践结合的重要性,仅仅只是从课本上学到算法原理是远远不够的。在实践中, 我们总会出现许多错误。 这就要求我们以一个脚踏实地的态度来处理问题。我们深刻地认识到自己写程序的不足,使我们学到了好多有用的知识,让我们明白了C语言的语句用法。上机实践是学生对本门课程所学知识的一种全面、综合的能力训练, 是与课堂听讲、自学和练习相辅相成必不可少的一个教学环节,也是对课堂教学效果的一种检验。通常,实习题中的问题比平时的习题复杂得多,也更接近实际。实习题注重原理与应用的结合, 目的让学生学会如
25、何把书上学到的知识运用于解决实际问题的过程中去, 培养从事软件开发设计工作所必需的基本技能。同时,通过名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 34 页 - - - - - - - - - 13 实践能使书上的知识变“活” ,起到深化理解和灵活掌握教学内容的作用。平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,可以多人合作, 有利于一整套软件工程规范的训练和科学作风的培
26、养。此外,实践环节中有很重要的一点,就是机器是比任何教师都严格的主考官。经过此次课程设计, 我认识到了理论与实践结合的重要性,仅仅只是从课本上学到算法原理是远远不够的。在实践中, 我们总会出现许多错误。 这就要求我们以一个脚踏实地的态度来处理问题。我深刻地认识到自己写程序的不足,使我们学到了好多有用的知识,让我们明白了C语言的语句用法。5、使用说明使用 VC+ ,打开 schedule.c文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。显示如图5-1:图 5-1 程序编译正确名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
27、 - 名师精心整理 - - - - - - - 第 19 页,共 34 页 - - - - - - - - - 14 要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。如图 5-2 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 34 页 - - - - - - - - - 15 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
28、 - - - 名师精心整理 - - - - - - - 第 21 页,共 34 页 - - - - - - - - - 16 图 5-2 输入课程安排基本信息要求依次输入各课程的深入 (后续) 课程代号, 按照出现的每一步来输入该课程设计所提供的相关数据。如图5-3 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 34 页 - - - - - - - - - 17 图 5-3 建立课程顺序各项信息输入完毕后, 在主选菜单中选择3, 系统将自动排出课程。 如图 5-
29、4所示。图 5-4 排列课程数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 34 页 - - - - - - - - - 18 同时,系统会将教学编制计划自动保存到d:course.txt下,如图 5-5、5-6 所示。图 5-5 保存目录图 5-6 course文件内容如果信息输入错误, 或者需要更换新的信息, 可以在主选菜单中选择清空信息选项,系统将自动删除原有数据。如图5-7 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
30、- - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 34 页 - - - - - - - - - 19 图 5-7 数据清空在主选菜单中选择5 退出后,系统将自动关闭。6. 参考书目A.数据结构教程李春葆等编著清华大学出版社B.数据结构教程上机实验指导李春葆等编著清华大学出版社7、附录7.1. 源程序清单(带注释)#include stdio.h #include malloc.h #include iostream.h #include stdlib.h int termtime=0; /学期总数int limitgrade=0; /学分上线cha
31、r str1004; /课程号int score100=0; /课程学分int totalcourse=0; /课程总数struct node /课程节点 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 34 页 - - - - - - - - - 20 int variable; /标志属不属于同一个学期所修int previous; /前修课程int next; /后学课程struct node * courselink100; /后修课程的指针* courseno
32、de100=NULL; /课程数目节点void initialNode(); /初始化课程节点void createNode(); /建立课程顺序void sortNode(); /排课程void inputBasicInformation(); /输入基本信息void cls(); /清空信息void menu(); /主菜单void initialNode() /初始化课程节点 int i; int j; printf(n&应用物理1201班&n); printf(&【20号张大帅】&n); printf(n); printf(n); printf(n); printf(n 正在初始化 n
33、); for(i=0;ivariable=0; coursenodei-previous=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 34 页 - - - - - - - - - 21 coursenodei-next=0; for(j=0;jcourselinkj=NULL; printf(n 初始化完毕 n); printf(n); printf(n); printf(n); void createNode() /建立课程顺序 int i; int tem
34、p; int flag; for(i=0;inext); printf(n 请输入 %d 的深入课程课程代号分别是什么(用空格分开):,i+1); for(temp=0;tempnext;temp+) scanf(%d,&flag); coursenodei-courselinktemp=coursenodeflag-1; coursenodeflag-1-previous+; printf(n 课程代号 t 前修课程数 t 深入课程数 n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
35、 - 第 27 页,共 34 页 - - - - - - - - - 22 for(temp=0;tempprevious,coursenodetemp-next); void sortNode() /排课程 int i,j,flag=0,session=1,k=0; FILE *fp; if(fp=fopen(d:course.txt,a)=NULL) /如果文件已经存在, 可以追加学生信息 if(fp=fopen(d:course.txt,w)=NULL) / 文件不存在时,创建新文件,输入学生信息 printf( 文件打开失败! n); return; printf(n=n); prin
36、tf( 课程代号 t 课程号 t 课程学分 n); fprintf(fp, 课程代号 t 课程号 t 课程学分 n); while(1) flag=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 34 页 - - - - - - - - - 23 for(i=0;ivariable=0) if(coursenodei-previous=0) printf(%dtt%st%dn,i+1,stri,scorei); fprintf(fp,%dt%st%dn,i+1,s
37、tri,scorei); for(j=0;jnext;j+) coursenodei-courselinkj-previous-=1; coursenodei-courselinkj-variable=1; coursenodei-courselinkj=NULL; coursenodei-next=0; free(coursenodei); flag=0; k+; if(flag!=0) if(k!=totalcourse) printf(n 课程排序不合理,有死循环!); exit(0); break; else if(session=termtime) 名师资料总结 - - -精品资料欢
38、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 34 页 - - - - - - - - - 24 printf(第%d学期课程结束n=n,session); fprintf(fp,第%d学期课程结束n=n,session); session+; else printf( 学习时间不够 !n); exit(0); if(session=termtime); for(i=0;ivariable=0; fclose(fp); /关闭文件指针 void inputBasicInformation() /输入基
39、本信息 int i; printf( 请输入学期总数: ); scanf(%d,&termtime); if(termtime=12) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 30 页,共 34 页 - - - - - - - - - 25 printf(n 对不起,学期总数已超过12n); exit(0); printf(n 请输入学分上限: ); scanf(%d,&limitgrade); printf(n 请输入课程总数 :); scanf(%d,&totalcour
40、se); for(i=0;ilimitgrade) printf(n 对不起,课程学分已超过学分上限n); exit(0); printf(n 您所输入的数据如下,请核实:n); printf( 课程代号 t 课程号 t 课程学分 n); for(i=0;itotalcourse;i+) printf(%dtt%st%dn,i+1,stri,scorei); void cls() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 31 页,共 34 页 - - - - - - - -
41、- 26 int i=0; termtime=0; limitgrade=0; for(i=0;i100;i+) stri0=0; score100=0; totalcourse=0; printf(n 原来数据应经清空 n); void menu() printf(* 学生课程排序*); printf(n 一输入课程安排基本信息); printf(n 二 建 立 课 程 顺 序); printf(n 三 排 列 课 程 顺 序); printf(n 四 原 来 数 据 清 空); printf(n 五 退 出); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - -
42、 - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 34 页 - - - - - - - - - 27 void main() int n; initialNode(); while(1) menu(); printf(n); printf(n); printf(n); printf(n 请输入您要选择的操作序号,按回车键确认:); scanf(%d,&n); switch(n) case 1: inputBasicInformation();break; case 2: createNode();break; case 3:
43、sortNode();break; case 4: cls();break; case 5: exit(0); default: printf( 输入错误,请输入列表中存在的序号!n ); /生成的数据默认存在d:course.txt下名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 33 页,共 34 页 - - - - - - - - - 28 计算机与通信学院课程设计评分表课题名称:教学计划编制问题项目评价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩教师签名:日期:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 34 页,共 34 页 - - - - - - - - -