当前位置:文档之家› 教学计划编制问题 数据结构课程设计报告 湖南工程学院

教学计划编制问题 数据结构课程设计报告 湖南工程学院

课程设计报告课程名称数据结构课程设计课题名称教学计划编制问题专业网络工程班级0901学号2009031201XX姓名指导教师刘长松陈华光李杰君2011年7 月15 日湖南工程学院课程设计任务书课程名称数据结构课程设计课题教学计划编制问题专业班级网络工程0901学生姓名X X学号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。

先修关系如下图:4)实现提示可设学期总数不超过12,课程总数不超过100。

如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。

应建立内部课程号与课程号之间的194212101136578对应关系。

2.设计要求:●课程设计报告规范1)需求分析a.程序的功能。

b.输入输出的要求。

2)概要设计a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。

b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。

3)详细设计a.采用C语言定义相关的数据类型。

b.写出各模块的类C码算法。

c.画出各函数的调用关系图、主要函数的流程图。

4)调试分析以及设计体会a.测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。

b.程序调试中遇到的问题以及解决问题的方法。

c.课程设计过程经验教训、心得体会。

5)使用说明用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。

6)书写格式见附带说明。

7)附录a.参考书目b.源程序清单(带注释)●考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。

具体考核标准包含以下几个部分:①平时出勤(占10%)②系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)③程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)④设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。

⑤独立完成情况(占10%)。

课程验收要求①运行所设计的系统。

②回答有关问题。

③提交课程设计报告。

④提交电子文档(源程序、设计报告文档)。

⑤依内容的创新程度,完善程序情况及对程序讲解情况打分。

二、进度安排第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程序模块功能图图2.1-1 功能模块图2.2数据结构int termtime=0;//学期总数int limitgrade=0; //学分上线char str[100][4]; //课程号int score[100]={0}; //课程学分int totalcourse=0; //课程总数struct node//课程节点 { int variable; //标志属不属于同一个学期所修 int previous; //前修课程 int next;//后学课程struct node * courselink[100];//后修课程的指针}* coursenode[100]={NULL};//课程数目节点main() 主函数initialNod e()初始化课程节点 createNode ()建立课程顺序sortNode() 课程 inputBasicInformation()输入基本信息cls() 清空信息 menu() 主菜单3、详细设计3.1采用C语言定义相关的数据类型FILE *fp //保存到文件int termtime=0; //学期总数int limitgrade=0; //学分上线char str[100][4]; //课程号int score[100]={0}; //课程学分int totalcourse=0; //课程总数struct node //课程节点{int variable; //标志属不属于同一个学期所修int previous; //前修课程int next; //后学课程struct node * courselink[100]; //后修课程的指针}* coursenode[100]={NULL}; //课程数目节点3.2各模块的类C码算法A. 初始化课程节点void initialNode() //初始化课程节点{int i;int j;printf("\n正在初始化。

\n");for(i=0;i<100;i++){后修课程的指针置零;同学期学习的课程置零;前修课程置零;后修课程置零;for(j=0;j<100;j++)coursenode[i]->courselink[j]=NULL;}printf("\n初始化完毕。

\n");}B. 建立课程顺序void createNode() //建立课程顺序{int i;int temp;int flag;for(i=0;i<totalcourse;i++){printf("\n请输入%d的深入课程数目:",i+1);scanf("%d",&(coursenode[i]->next));printf("\n请输入%d的深入课程课程代号分别是什么(用空格分开):",i+1);for(temp=0;temp<coursenode[i]->next;temp++){scanf("%d",&flag);coursenode[i]->courselink[temp]=coursenode[flag-1];coursenode[flag-1]->previous++;}}printf("\n课程代号\t前修课程数\t深入课程数\n");for(temp=0;temp<totalcourse;temp++){printf("%d\t\t%d\t\t%d\n",temp+1,coursenode[temp]->previous,coursenode[temp]->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"))==NULL) // 文件不存在时,创建新文件,输入学生信息{printf("文件打开失败!\n");return;}}printf("\n-----------------------------\n");printf("课程代号\t课程号\t课程学分\n");fprintf(fp,"课程代号\t课程号\t课程学分\n");while(1){flag=1;for(i=0;i<totalcourse;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]->next;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<totalcourse;i++)if(课程节目数不为O)coursenode[i]->variable=0;}fclose(fp); //关闭文件指针}D,输入基本信息void inputBasicInformation() //输入基本信息{int i;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<totalcourse;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<totalcourse;i++){printf("%d\t\t%s\t%d\n",i+1,str[i],score[i]);}}E.清空信息void cls(){int i=0;学期数置零;学分上限置零;for(i=0;i<100;i++){str[i][0]='\0';score[100]=0;}总课程数置零;printf("\n原来数据已经清空\n");}F.菜单void menu(){printf(" ************************* 教学计划编制************************\n ");printf("\n 1 输入课程安排基本信息");printf("\n 2 建立课程顺序");printf("\n 3 排列课程顺序");printf("\n 4 原来数据清空");printf("\n 5 退出");}G.主函数void main(){int n;initialNode();while(1){menu();printf("\n 请输入您要选择的操作序号,按回车键确认:");scanf("%d",&n);switch(n){case 1: inputBasicInformation();;break;case 2: createNode();;break;case 3: sortNode();;break;case 4: cls();break;case 5: exit(0);default: printf("输入错误,请输入列表中存在的序号!\n ");}}}3.3各函数的调用关系图、主要函数的流程图图2.3-1 流程图开始设辅助数组indegree 记录图的各顶点的入度值,并将indegree 数组各变量赋初值。

相关主题