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

湖南工程大学课程设计一、课程目标知识目标:1. 学生能够掌握课程相关的基本概念和理论,如XXX(具体概念)的应用和原理;2. 学生能够理解并解释课程内容中涉及的XXX(相关学科)知识,形成知识体系;3. 学生能够运用所学知识解决实际工程问题,具备一定的理论基础。
技能目标:1. 学生能够运用XXX(工具或方法)进行数据分析,培养数据分析与处理能力;2. 学生通过课程实践,掌握XXX(技能)的基本操作,具备实际操作经验;3. 学生能够运用所学技能解决实际问题,培养创新意识和实践能力。
情感态度价值观目标:1. 学生通过课程学习,培养对工程学科的兴趣和热情,形成积极向上的学习态度;2. 学生在课程实践中,学会团队合作,培养沟通协调能力和敬业精神;3. 学生能够认识到工程学科在国家和经济社会发展中的重要性,树立社会责任感。
本课程结合湖南工程大学的专业特点和学生实际情况,注重理论与实践相结合,旨在提高学生的专业知识水平和实践能力,培养具备创新精神和敬业态度的高素质工程技术人才。
课程目标的设定遵循具体、可衡量原则,为教学设计和评估提供明确依据。
二、教学内容本课程教学内容紧密结合课程目标,确保科学性和系统性。
具体包括以下部分:1. 理论知识:- 引导学生深入学习教材中XXX章节的基本概念、原理及其应用;- 对比分析教材中YYY章节的内容,帮助学生构建完整的知识体系;- 结合实际案例,讲解ZZZ章节的理论知识在实际工程中的应用。
2. 实践技能:- 安排实验室实践环节,指导学生掌握XXX工具或方法的使用;- 组织现场教学,让学生亲身体验YYY技能的操作,提高实际操作能力;- 开展课程设计项目,培养学生运用所学理论知识解决实际问题的能力。
3. 教学进度与安排:- 第1-2周:学习基本概念、原理,掌握理论知识;- 第3-4周:实践操作,培养数据分析与处理能力;- 第5-6周:开展课程设计项目,提高解决实际问题的能力;- 第7-8周:总结与复习,进行课程考核。
数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。
二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。
在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。
三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。
2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。
3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。
4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。
5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。
四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。
2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。
通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。
3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。
链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。
在实现链表时,我们定义了一个节点结构,包含数据域和指针域。
通过指针的方式将节点连接起来,形成一个链式结构。
同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。
4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。
教学计划编制问题数据结构课程设计

信息科学与工程学院数据结构课程设计课程设计名称: 教学计划编制问题前言《数据结构》是一门综合性较强的计算机软件、程序设计理论和技术相结合的重要基础课程。
它主要讨论抽象数据关系和算法在计算机中的表示与实现,涉及到的数据在计算机中的表示、组织和处理,以及相应结构上的算法设计和算法性能上的分析技术。
它所包含的知识与提倡的技术方法,无论对大家进一步学习计算机领域里的其他课程,还是对今后从事理论研究、应用开发及技术管理工作都起着重要的作用。
如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法的分析和评价。
通过学习《数据结构》这门理论性强、思维抽象、难度较大的课程后,大家就更深入透彻地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养了基本的、良好的程序设计技能,大家就能编制高效可靠的程序,更重要的也培养大家解决实际问题的能力,提高分析设计能力和编程能力,为大家后续课程的学习及实践也打下了良好的基础。
因此,学校开设了《数据结构(C语言版)》,通过学习数据结构,大家对编程有了更多的了解,为了让大家将自己所学的知识应用到实际当中,学校开设了数据结构课程设计,通过这次课程设计大家可以更好地将C语言应用到实际当中,而且可以更好的掌握算法与数据结构,将数据结构和C语言有效的结合起来,使大家的编程能力得到更大的提高。
关键字:C语言数据结构目录前言 ------------------------------------------- 2一、课题内容和设计要求 -------------------------------- 41.1 课题内容 --------------------------------------- 41.2 设计要求 --------------------------------------- 4二、课题需求分析-------------------------------------- 6三、课题实现模块设计 ---------------------------------- 63.1 程序模块设计 ----------------------------------- 63.2 函数的调用关系 --------------------------------- 7四、模块的功能实现 ------------------------------------ 74.1相关数据类型的定义 ------------------------------ 74.2主要函数的流程图------------------------------- 8五、程序调试 ---------------------------------------- 105.1 测试数据 ------------------------------------ 10 5.2 调试过程 ------------------------------------- 10 六.程序设计总结 ----------------------------------- 13七、附录 -------------------------------------------- 157.1致谢 ----------------------------------------- 157.2参考书目--------------------------------------- 157.3源程序清单 ------------------------------------- 15一、课程内容与要求1.1课题内容[ 问题描述 ]大学的每个专业都要制定教学计划。
教学计划编制问题_数据结构课程设计报告_湖南工程学院

课程设计报告课程名称数据结构课程设计课题名称教学计划编制问题专业网络工程班级 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。
如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。
应建立部课程号与课程号之间的对应关系。
2.设计要求:●课程设计报告规1)需求分析a.程序的功能。
b.输入输出的要求。
2)概要设计a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。
数据结构实验 教学计划编制问题(共6篇)

数据结构实验教学计划编制问题(共6篇)第1篇:数据结构实验报告十—教学计划编制问题问题描述:若用有向网表示教学计划,其中顶点表示某门课程,有向边表示课程之间的先修关系(如果A课程是B课程的先修课程,那么A到B之间有一条有向边从A 指向B)。
试设计一个教学计划编制程序,获取一个不冲突的线性的课程教学流程。
(课程线性排列,每门课上课时其先修课程已经被安排)。
基本要求:(1)输入参数:课程总数,每门课的课程号(固定占3位的字母数字串)和直接先修课的课程号。
(2)若根据输入条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。
一、需求分析:本程序需要基于图的基本操作来实现二、概要设计:抽象数据类型:为实现上述功能需建立一个结点类,线性表类,图类。
算法的基本思想:1、图的构建:建立一个结点类,类的元素有字符型变量用来存储字母,整形变量用来存储位置,该类型的指针,指向下一个元素。
建立一个线性表类,完成线性表的构建。
建立一个图类,完成图的信息的读取,(如有n个点,则建立n个线性表,将每个结点与其指向的结点组成一个线性表,并记录线性表的长度)。
2、Topsort算法:先计算每个点的入度,保存在数组中。
找到第一个入度为0的点,将该点所连的各点的入度减一。
再在这些点中找入度为0 的点。
如果找到,重复上述操作。
如果找不到,则跳出while循环,再搜索其他的点,看入度是否为0。
再重复上述操作,如果所有的入度为0的点都被寻找到,但个数少于输入顶点的个数,说明该图存在环。
程序的流程程序由三个模块组成:输入模块:读入图的信息(顶点和边,用线性表进行存储)。
处理模块:topsort算法。
输出模块:将结果输出。
三、详细设计算法的具体步骤:cla Node{//结点类public: string node; int position; //位置 Node* next; bool visit; //是否被访问Node(){visit=false;next=NULL;position=0;node=‘ ‘;} }; cla Line{ //线性表类 public: int num; Node* head; Node* rear; Node* fence; Line(){num=0;head=fence=rear=new Node();} void insert(int v,string ch){ //插入元素Node* current=new Node();current->node=ch;current->position=v;fence->next=current;fence=current;num++; } }; cla Graph{ //图类 private: int numVertex; int numEdge; Line* line; public: Graph(int v,int e){numVertex=v;numEdge=e;line =new Line[v];} void pushVertex(){ //读入点string ch;for(int i=0;icoutcin>>ch;line[i].head->node=ch;line[i].head->position=i;} } void pushEdge(){ //读入边string ch1,ch2;int pos1,pos2;for(int i=0;i{coutcin>>ch1>>ch2;for(int j=0;jif(line[j].head->node==ch1)pos1=j; //找到该字母对应的位置if(line[j].head->node==ch2){pos2=line[j].head->position;break;}}line[pos1].insert(pos2,ch2);} } void topsort(){ //拓扑排序int i;int *d=new int[numVertex];for(i=0;id[i]=0; //数组初始化for(i=0;iNode* p=line[i].head;while(p->next!=NULL){d[p->next->position]++; //计算每个点的入度 p=p->next;}} int top=-1,m=0,j,k;for(i=0;iif(d[i]==0){d[i]=top; //找到第一个入度为0的点top=i;}while(top!=-1){ j=top; top=d[top];coutnodeNode* p=line[j].head;while(p->next!=NULL){k=p->next->position;d[k]--; //当起点被删除,时后面的点的入度-1if(d[k]==0){d[k]=top;top=k;}p=p->next;}}} coutcout>n>>m; Graph G(n,m); G.pushVertex(); G.pushEdge();G.topsort (); system(“pause”); return 0; }四、调试分析略。
《教学计划编制问题》数据结构课程设计说明书

华北科技学院数据结构课程设计说明书班级计算B121小组成员: 成绩:小组成员: 成绩:小组成员: 成绩:设计题目: 教学计划编制问题设计时间: 2014.6.23 至2014.6.27指导教师:评语:评阅教师: _____________________________________目录设计总说明 0第1章绪论 (1)第2章教学计划编制问题陈述及需求分析 (2)2.1教学计划编制问题陈述 (2)2.2功能需求分析 (2)第3章系统设计 (3)3.1总体设计 (3)3.2主要模块简介 (5)第4章详细设计 (6)4.1数据结构 (6)4.3设计说明 (8)4.4算法说明 (8)第5章编码与调试 (12)5.1教学计划编制问题实例 (12)5.2程序运行结果 (14)第6章总结 (18)参考文献 (19)附录源程序 (20)教学计划编制问题设计总说明根据任务要求及对实际情况的了解,可知设计中需要定义先修关系的AOV网图中的顶点及弧边的结构体,采用邻接表存储结构,利用栈作辅助结构,在运行结果中将图的信息显示出来,利用先修关系将课程排序,最后解决问题——输出每学期的课程。
整个系统从符合操作简便、界面简洁、灵活、实用、安全的要求出发,完成教学计划编制问题的全过程,包括创建三个数据结构(邻接表存储结构、栈、拓扑排序)、数据的处理与计算、数据的分析、结果的输出。
本课程主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
重点说明了系统的设计思路、总体设计、各个功能模块的设计与实现方法。
关键词:教学计划编制问题;数据结构;邻接表存储结构;栈;拓扑排序第1章绪论数据结构是研究数据元素之间的逻辑关系的一门课程,以及数据元素及其关系在计算机中的存储表示和对这些数据所施加的运算。
该课程设计的目的是通过课程设计的综合训练培养分析和编程等实际动手能力,系统掌握数据结构这门课程的主要内容。
本次课程设计的内容是教学计划编制问题,邻接表是图的一种链式存储结构。
《数据结构》课程设计报告

《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。
本课程目标如下:1. 知识目标:(1)理解数据结构的基本概念,包括线性表、栈、队列、串、数组、树、图等;(2)掌握各类数据结构的存储表示和实现方法;(3)了解常见算法的时间复杂度和空间复杂度分析;(4)掌握排序和查找算法的基本原理和实现。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,如实现字符串匹配、图的遍历等;(2)具备分析算法性能的能力,能够根据实际问题选择合适的算法和数据结构;(3)具备一定的编程能力,能够用编程语言实现各类数据结构和算法。
3. 情感态度价值观目标:(1)培养学生对计算机科学的兴趣,激发其探索精神;(2)培养学生团队合作意识,提高沟通与协作能力;(3)培养学生面对问题勇于挑战、善于分析、解决问题的能力;(4)引导学生认识到数据结构在计算机科学中的重要地位,激发其学习后续课程的兴趣。
本课程针对高年级学生,课程性质为专业核心课。
结合学生特点,课程目标注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。
在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。
通过本课程的学习,学生将具备扎实的数据结构基础,为后续相关课程学习和职业发展奠定基础。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. 数据结构基本概念:线性表、栈、队列、串、数组、树、图等;教学大纲:第1章 数据结构概述,第2章 线性表,第3章 栈和队列,第4章 串。
2. 数据结构的存储表示和实现方法:教学大纲:第5章 数组和广义表,第6章 树和二叉树,第7章 图。
3. 常见算法的时间复杂度和空间复杂度分析:教学大纲:第8章 算法分析基础。
4. 排序和查找算法:教学大纲:第9章 排序,第10章 查找。
教学内容安排和进度如下:1. 第1-4章,共计12课时,了解基本概念,学会使用线性表、栈、队列等解决简单问题;2. 第5-7章,共计18课时,学习数据结构的存储表示和实现方法,掌握树、图等复杂结构;3. 第8章,共计6课时,学习算法分析基础,能对常见算法进行时间复杂度和空间复杂度分析;4. 第9-10章,共计12课时,学习排序和查找算法,掌握各类算法的实现和应用。
课程设计湖南工程学院

课程设计湖南工程学院一、课程目标知识目标:1. 学生能掌握课程核心概念,理解学科基本原理,如公式、定律等,并与实际应用相结合。
2. 学生能描述并分析课程内容中的关键知识点,形成知识网络,为后续学习打下坚实基础。
3. 学生能运用所学知识解决与课程相关的问题,提高解决问题的能力。
技能目标:1. 学生通过课堂讨论、实践操作等方式,培养观察、分析、解决问题的能力。
2. 学生在小组合作中,提高沟通、协作、表达等社交技能。
3. 学生掌握课程相关软件、工具或设备的使用,提高实际操作能力。
情感态度价值观目标:1. 学生培养对学科的兴趣和热情,形成积极的学习态度。
2. 学生在课程学习中,树立正确的价值观,关注社会问题,提高社会责任感。
3. 学生通过课程学习,培养创新意识,敢于挑战自我,增强自信心。
课程性质:本课程注重理论与实践相结合,强调学科知识在实际中的应用。
学生特点:学生具备一定的学科基础,具有较强的求知欲和动手能力。
教学要求:教师应采用多元化的教学手段,激发学生兴趣,注重培养学生的实践能力和综合素质。
在教学过程中,关注学生的个体差异,因材施教,使学生在课程学习中取得最佳成果。
通过分解课程目标为具体的学习成果,便于后续教学设计和评估,确保课程目标的实现。
二、教学内容本课程依据课程目标,结合教材内容,进行以下组织与安排:1. 理论知识:包括课程基础概念、原理、公式、定律等,涵盖教材第一章至第三章,重点讲解学科核心知识,为学生奠定扎实的基础。
2. 实践操作:结合教材第四章,让学生动手操作相关实验或实践项目,培养观察、分析、解决问题的能力。
3. 应用拓展:以教材第五章为基础,引入实际案例,让学生了解所学知识在实际工作中的应用,提高学生的实践能力。
4. 讨论与交流:组织课堂讨论,引导学生就教材内容进行思考与探讨,激发学生的思维活力,培养沟通、协作能力。
教学内容安排如下:第一周:第一章,课程导入,基础概念讲解;第二周:第二章,原理、公式、定律学习;第三周:第三章,知识拓展,案例分析;第四周:第四章,实践操作,实验演示;第五周:第五章,应用拓展,实际应用;第六周:复习与讨论,总结课程内容,巩固所学知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程名称数据结构课程设计课题名称教学计划编制问题专业网络工程班级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 数组各变量赋初值。