教学计划编制问题课程设计报告
教学计划编排实验报告

程序设计实验报告题目:关于课程编排的报告姓名贾雨飞学号2010434096年级专业10数电类(四班)指导教师王苗2011年12月13日一、需求分析1.程序的功能大学中的每个专业都有几十门基础课程、专业课程及选修课程,学生必须分几个学期完成这些课程才能毕业。
教学计划的制定就是合理的编排这些课程,使得学生能够顺利的进行学习。
这些课程中,有些课程是独立于其它课程的基础课,有些课程却需要其它先行课程;一般四年制本科教学前7个学期(三年半)进行理论课程的学习,第8个学期实习;教学计划的编排必须充分考虑这些因素,编排出一个合理的教学大纲计划。
一、概要设计1、抽象数据类型的定义//边表的结点结构可描述为:typedef struct node{int adjvex; /*邻接点域*/struct node *next; /*指向下一个邻接点的指针域*/}EdgeNode; /*边表结点*///顶点表的结点结构可描述为:typedef struct vnode /*顶点表结点*/{int num; /*课程号*/char name[20]; /*课程名*/int chour; /*课程的学分*/int indegree; /*顶点的入度*/EdgeNode * firstedge; /*边表头指针*/}VNode;//AOV网的类型可描述如下:typedef struct{VNode AdjList[MaxVerNum]; /*邻接表*/int n, e; /*顶点数和边数*/}AOVGraph; /*AOV网是以邻接表方式存储的类型*/ 2、主模块的流程以及各子模块的主要功能主模块:负责调控整个程序,提示功能项,根据用户选择调用相应子模块。
输入模块:根据用户输入的信息建立有向图的邻接表存储,为后续课程安排做铺垫。
编排模块:根据前一个过程创建的邻接表生成拓扑排序,然后根据课程数和平均学分安排课程到各学期。
三、详细设计1、各模块的伪代码void input(AovGraph *A){char na[15];cout<<" 请输入课程数目__"<<endl;cin>>A->n;while(A->n>99||A->n<1){cout<<"课程科目数不正确,请重新输入!"<<endl;cin>>A->n;}for(int i=1;i<=A->n;i++)A->AdjList[i].firstedge=NULL;cout<<" 请输入边数__"<<endl;cin>>A->e;cin.get();for( i=1;i<=A->n;i++){cout<<"请输入第"<<i<<"科课程的课程号"<<endl;cin>>A->AdjList[i].num;cin.get();cout<<"请输入第"<<i<<"科课程的课程名"<<endl;cin.getline(A->AdjList[i].name,15);cout<<"请输入第"<<i<<"科课程的学分"<<endl;cin>>A->AdjList[i].chour;cout<<"请输入第"<<i<<"科课程结点的入度"<<endl;cin>>A->AdjList[i].indegree;cin.get();}for(i=1;i<=A->n;i++){cout<<"请输入"<<A->AdjList[i].name<<"的相邻后续课程数"<<endl;cin>>c;cin.get();while(!(c>=0&&c<=100)){cout<<"输入错误,请重新输入!";cin>>c;}if(c==0)continue;cout<<"请输入第1个相邻的后续课程的课程名"<<endl;cin.getline(na,15);p=new EdgeNode;p->adjvex=search(na,A);A->AdjList[i].firstedge=p;p->next=NULL;for(int j=2;j<=c;j++){cout<<"请输入第"<<j<<"个相邻的后续课程的课程名"<<endl;cin.getline(na,15);t=new EdgeNode;t->adjvex=search(na,A);t->next=NULL;p->next=t;p=t;}}}int* BP(AovGraph *A,int*T,int *l){EdgeNode *p,*q;T=new int[A->n];int a,v=0;//v记录每学期总学分double k,x; //k保存科目数的平均数x保存的学分的平均值int *z=new int [A->n];//栈的存储int i=-1,t=-1,h=0;//h记录学分总和l记录各学期之前科目总数for(int j=1;j<=A->n;j++){if(A->AdjList[j].indegree==0)z[++i]=j;h=h+A->AdjList[j].chour;}while(i>=0){a=z[i];i--;T[++t]=a;p=A->AdjList[a].firstedge;while(p){A->AdjList[p->adjvex].indegree--;if(A->AdjList[p->adjvex].indegree==0)z[++i]=p->adjvex;q=p;p=p->next;delete q;}}k=A->n/7;x=h/7;l[0]=0;l[7]=A->n;for(j=1;j<7;j++){l[j]=k*j;if(l[j]==k*j)continue;//l[j]++;for(int w=l[j-1];w<l[j];w++)v=v+A->AdjList[T[w]].chour;if(fabs(v+A->AdjList[T[w]].chour-x)<fabs(v-x)){l[j]++;}v=0;}cout<<"编排成功!!"<<endl;cout<<endl;return T;}void print(AovGraph *A,int *T,int *l){int h;fstream infile;infile.open("E:\\课表.txt",ios::out);if(!infile){cout<<"文件不能打开!!"<<endl;return;}for(int i=1;i<=7;i++){h=0;infile<<"第"<<i<<"学期:";for(int j=l[i-1];j<l[i];j++){infile<<" "<<A->AdjList[T[j]].name<<" ";h=h+A->AdjList[T[j]].chour;}infile<<"本学期总学分为:"<<h<<endl;}cout<<"文件已经写入到E:\\课表.txt中"<<endl;}void show(AovGraph *A,int *T,int *l){int h;for(int i=1;i<=7;i++){h=0;cout<<"第"<<i<<"学期:";for(int j=l[i-1];j<l[i];j++){cout<<" "<<A->AdjList[T[j]].name<<" ";h=h+A->AdjList[T[j]].chour;}cout<<"本学期总学分为:"<<h<<endl;}}2、函数调用关系主函数输入函数编排函数屏幕输出文件输出四、调试分析1.调试中遇到的问题及对问题的解决方法调试中,如果输入的总学科数能被7整除则课程安排时最理想的方式是每学期科目平均,所以在这种情况下,我便直接按照平均分配安排好了。
教学计划编制问题课程设计报告

教学计划编制问题课程设计报告课程设计(论文)题目名称教学计划编制问题课程名称数据结构课程设计学生姓名学号系、专业信息工程系、通信工程类指导教师2012年12 月23 日摘要教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编制的基本依据和课程安排的具体形式。
是稳定教学秩序、提高教学质量的重要保证。
从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。
随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。
因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提高教育教学水平。
教学计划编制中的思路:一是明确培养目标;二是注重学科设置的整体性、统一性和灵活性、全面性;三是与学分制改革有机结合。
教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有很好的应用价值。
使用C程序设计语言,研究开发教学计划编制系统Web应用系统。
关键词:教学计划;编制;培养目标;管理目录1 问题描述 ---------------------------------------------------------------------------------------------- 12 需求分析 ---------------------------------------------------------------------------------------------- 23 概要设计 ------------------------------------------------------- 23.1抽象数据类型定义 ---------------------------------------- 2 3.2模块划分------------------------------------------------- 2 4 详细设计 ------------------------------------------------------- 34.1数据类型的定义 ------------------------------------------ 4 4.2主要模块的算法描述 -------------------------------------- 55 测试分析 ------------------------------------------------------- 86 课程设计总结 ------------------------------------------------- 106.1问题和解决的方法及经验教训、心得体会﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍106.2 致谢 ---------------------------------------------------- 11参考文献 -------------------------------------------------------- 11附录(源程序清单) --------------------------------------------- 121 问题描述大学的每个专业都要制定教学计划。
编制教学计划的课程设计

编制教学计划的课程设计一、课程目标知识目标:1. 学生能掌握教学计划的基本构成要素,理解其在教学过程中的重要性。
2. 学生能够明确本学科课程标准中各年级的知识点和能力要求,并能在教学计划中予以体现。
3. 学生能结合教材内容,制定出符合学生认知发展水平和兴趣的教学目标。
技能目标:1. 学生能够运用分析、综合、评价等方法,合理设置教学活动的顺序和时长。
2. 学生能够根据不同学生的学习特点,设计出具有针对性的教学策略和评价方法。
3. 学生通过小组合作,学会在教学计划中有效整合各种教学资源,提高教学效果。
情感态度价值观目标:1. 学生能够认识到教学计划对于提升教学质量和学生学习效果的重要性,形成严谨的教学态度。
2. 学生在教学计划制定过程中,培养团队协作精神,学会尊重和倾听他人意见。
3. 学生通过本课程的学习,激发对教育事业的热爱,树立正确的教育观念。
分析课程性质、学生特点和教学要求,本课程将目标分解为具体的学习成果,包括:理解教学计划的基本概念、掌握教学计划制定的方法、具备教学计划实施和评价的能力等。
后续教学设计和评估将围绕这些具体学习成果展开,确保学生能够达到预期的学习效果。
二、教学内容1. 教学计划基本概念:包括教学计划定义、作用、类型及相互关系。
2. 教学计划构成要素:学习目标、教学内容、教学方法、教学评价、教学资源等。
3. 教学目标制定:依据学科课程标准,结合教材内容,明确各年级教学目标。
4. 教学内容组织:按照教材章节,梳理知识点,划分教学重点和难点。
5. 教学方法选择:根据学生特点,选择适当的教学方法,如讲授、讨论、实践等。
6. 教学评价设计:制定评价标准,选择评价方法,如测试、观察、作业等。
7. 教学进度安排:明确各阶段教学任务,合理分配教学时间,确保教学效果。
8. 教学资源整合:利用教材、网络、实物等资源,丰富教学内容,提高教学效果。
具体教学大纲如下:第一周:教学计划基本概念及构成要素第二周:教学目标制定与教学内容组织第三周:教学方法选择与教学评价设计第四周:教学进度安排与教学资源整合教学内容与教材紧密关联,确保科学性和系统性,同时注重实践性,使学生在学习过程中能够充分掌握教学计划制定的方法和技巧。
课程设计报告范文

课程设计报告范文一、课程设计的背景和目标本次课程设计是在课程名称课程的基础上进行的,旨在通过实际项目的实践,让我们更深入地理解和应用所学的理论知识,提高我们的实践能力和解决问题的能力。
课程设计的目标主要包括以下几个方面:1、加深对课程相关的核心概念或技术的理解和掌握。
2、培养我们的系统设计和开发能力,能够从需求分析到系统实现的全过程进行规划和实施。
3、提高我们的团队协作和沟通能力,学会在团队中发挥自己的优势,共同完成任务。
4、培养我们的创新思维和独立思考能力,能够在设计过程中提出新颖的解决方案。
二、课程设计的任务和要求(一)任务描述我们的课程设计任务是开发一个具体的系统名称系统,该系统需要具备列举系统的主要功能和特点等功能。
(二)要求1、系统的功能要完整,能够满足设计任务书中提出的各项需求。
2、系统的界面要简洁美观,操作方便,具有良好的用户体验。
3、系统的代码要规范、清晰,具有良好的可读性和可维护性。
4、课程设计报告要详细、准确,能够清晰地阐述系统的设计思路、实现过程和测试结果。
三、课程设计的方案选择和设计(一)方案选择在课程设计的初期,我们对系统的实现方案进行了充分的调研和讨论。
经过比较和分析,最终选择了具体的方案名称方案,主要基于以下考虑:1、该方案能够很好地满足系统的功能需求,具有较高的可行性和可扩展性。
2、我们对该方案所涉及的技术和工具比较熟悉,能够降低开发的难度和风险。
3、相关的技术资料和开源代码比较丰富,便于我们学习和参考。
(二)系统设计1、系统架构设计系统采用了具体的架构模式,如 B/S 架构、C/S 架构等架构,分为列举系统的主要模块,如前端模块、后端模块、数据库模块等等模块。
各模块之间通过描述模块之间的通信方式和接口进行通信和协作。
2、数据库设计根据系统的功能需求,设计了合理的数据库结构。
数据库中包含了列举主要的数据库表和字段等表,通过描述表之间的关联关系建立了表之间的关联。
3、界面设计系统的界面设计遵循了简洁美观、操作方便的原则。
课程设计编写报告

课程设计编写报告一、教学目标本课程的教学目标是让学生掌握《XX学科》的基本概念、原理和方法,提高他们的分析和解决问题的能力。
具体目标如下:1.知识目标:(1)掌握XX学科的基本概念和原理;(2)了解XX学科的发展历程和现状;(3)熟悉XX学科的研究方法和手段。
2.技能目标:(1)能够运用XX学科的基本原理分析问题和解决问题;(2)能够运用XX学科的研究方法进行科学探究;(3)能够运用XX学科的知识撰写论文和报告。
3.情感态度价值观目标:(1)培养对XX学科的兴趣和热情;(2)培养科学精神和创新意识;(3)树立正确的科学观和价值观。
二、教学内容本课程的教学内容主要包括XX学科的基本概念、原理和方法。
具体安排如下:1.第一章:XX学科的基本概念和原理(1)XX学科的定义和发展历程;(2)XX学科的基本原理和定律;(3)XX学科的研究方法和手段。
2.第二章:XX学科的应用和实践(1)XX学科在生活中的应用;(2)XX学科在相关领域的应用;(3)XX学科的实验技术和设备。
3.第三章:XX学科的发展趋势和前景(1)XX学科的最新研究成果;(2)XX学科的发展前景和挑战;(3)XX学科在国家战略和经济社会发展中的作用。
三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
具体安排如下:1.讲授法:用于传授基本概念、原理和方法,引导学生掌握XX学科的基本知识。
2.讨论法:通过小组讨论和课堂讨论,培养学生的思考能力和团队合作精神。
3.案例分析法:通过分析典型案例,让学生了解XX学科在实际中的应用和解决问题的方式。
4.实验法:学生进行实验,培养学生的实践能力和科学探究精神。
四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:选用《XX学科导论》作为主教材,辅助以《XX学科实验指导书》等参考资料。
2.参考书:提供《XX学科研究进展》等相关书籍,供学生深入学习和参考。
课程设计报告 课程设计报告书(优秀7篇)

课程设计报告课程设计报告书(优秀7篇)(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如合同协议、条据文书、策划方案、总结报告、党团资料、读书笔记、读后感、作文大全、教案资料、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as contract agreements, documentary evidence, planning plans, summary reports, party and youth organization materials, reading notes, post reading reflections, essay encyclopedias, lesson plan materials, other sample essays, etc. If you want to learn about different formats and writing methods of sample essays, please stay tuned!课程设计报告课程设计报告书(优秀7篇)在不断进步的时代,需要使用报告的情况越来越多,报告中提到的所有信息应该是准确无误的。
课程设计的步骤和报告规范 (1)

第一章课程设计的步骤和报告规范课程设计的步骤:一、问题分析和任务定义在设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么?对所需完成的任务作出明确的回答。
二、系统设计系统设计分为逻辑设计和详细设计两步。
逻辑设计指的是,对问题描述中的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义软件模块结构图;详细设计则为定义相应的存储结构,并写出各函数模块的伪码算法。
三、编码实现和调试四、总结和整理课程设计报告课程设计报告规范:课程设计报告的开头应给出题目、专业、班级、学号、姓名、指导老师和完成日期,并包括以下十个内容:一、问题描述二、基本要求三、数据结构的设计四、软件模块结构图五、程序流程图六、源程序七、调试分析八、测试数据九、用户使用手册十、心得体会第二章课程设计选题1、文本文件单词的检索与计数问题描述:要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。
该设计要求可分为三个部分实现:其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。
(1)建立文本文件(2)给定单词的计数(3)检索单词出现在文本文件中的行号、次数及其位置。
2、火车票销售问题描述:试编制一个简单的火车票销售系统,可完成售票、退票、车票剩余情况查询等功能。
每张车票包含车次、座位等信息。
3、DES加密解密算法的实现问题描述:DES算法处理的数据对象是一组64比特的明文串。
设该明文串为m=m1m2…m64 (mi=0或1)。
明文串经过56比特的密钥K来加密,最后生成长度为64比特的密文E。
然后将密文E解密,还原成明文m。
初中数学课程教学计划编制(含示范课课程设计、学科学习情况总结)

初中数学课程教学计划编制第一篇范文:初中数学课程教学计划编制一、教学计划编制的背景与意义随着我国教育改革的深入推进,初中数学课程教学计划编制的重要性日益凸显。
教学计划作为数学教学的基本遵循,对于指导教师进行有效的教学活动,提高教学质量,促进学生的全面发展具有重要的现实意义。
因此,编制符合新课程标准、适应学生实际情况的初中数学课程教学计划,是每一位初中数学教师面临的重要任务。
二、教学计划编制的原则1.符合课程标准:教学计划应全面体现课程标准的精神,确保教学内容、教学目标、教学方法等与课程标准的要求相一致。
2.关注学生个体差异:教学计划应充分考虑学生的认知水平、兴趣、学习习惯等因素,制定有针对性的教学策略,促进每个学生的个性发展。
3.重视知识体系与能力培养:教学计划应注重数学知识的系统性,加强对学生数学思维能力、创新能力的培养。
4.强调实践与探究:教学计划应鼓励学生参与数学实践活动,培养学生的动手操作能力、合作交流能力和问题解决能力。
5.注重教学评价:教学计划应合理设计评价方式,全面、准确地了解学生的学习状况,为教学改进提供有效依据。
三、教学计划编制的具体内容1.教学目标:明确本学期或本学年的教学目标,从知识与技能、过程与方法、情感态度与价值观等方面进行具体阐述。
2.教学内容:根据课程标准,梳理出具体的教学内容,包括章节划分、重点难点、教学方法等。
3.教学安排:合理分配教学时间,确保各个章节、各个教学环节的教学时间充足,避免教学内容过于紧凑或过于宽松。
4.教学方法:根据学生的实际情况,选择合适的教学方法,如讲解法、引导法、探究法等。
5.教学评价:设计多元化、动态的评价方式,包括课堂表现、作业完成情况、考试成绩等,全面评价学生的学习效果。
6.教学反思:在教学过程中,教师应不断进行自我反思,发现教学中的不足,及时调整教学计划,提高教学质量。
四、教学计划编制的实施与调整1.学期初,教师应根据课程标准和学生实际情况,制定详细的教学计划,并在教研组内进行交流、讨论,形成共识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教学计划编制问题课程设计报告书学院、系:软件学院专业:软件工程学生姓名:学号:设计题目:教学计划编制问题起迄日期:xx年12月9日-xx年12月20日指导教师: xx 年12月20 日1需求分析1、在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息、2、本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程、3、测试数据:学期总数:6;学分上限:9;本专业共开设12门课,课程号从C00到C11,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。
2概要设计1、抽象数据类型图的定义如下:ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集、数据关系R:R={VR}VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在直接先修关系}基本操作P:void CreatGraph(ALGraph *);void FindInDegree(ALGraph , int * );intTopologicalOrder(ALGraph G,AdjList R,struct Namename[])int LocateVex(ALGraph G, VertexType u)/* 查找图中某个顶点位置 */ }ADT Graph2、栈的定义如下:ADT Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,…n,n>=0} 数据关系:R1={﹤ai-1 ai﹥|ai-1,ai∈D,i=2,…,n}基本操作:void InitStack (SqStack *S);int StackEmpty(SqStack S);void Push(SqStack *S, int );int Pop(SqStack *S, int *e);}ADT Stack3、本程序有两个模块,调用关系简单:主程序模块→ 拓扑排序模块3系统完成功能及功能框图end采用第二种策略:使课程尽可能地集中在前几个学期中根据教学计划中的课程及其关系和学分定义图的顶点和边的结构体创建图CreateGraph():结合先修关系的AOV网,采用邻接链表存储菜单OUTPUT():显示代号所对应课程及课程的先修课程前插法main拓扑排序TopoSort(G):将课程排序后并决定出每学期所学课程输出图G的信息Display(G):将图的顶点和弧边输出图3、1系统功能框图0C11 ^5 ^11 ^111067 ^6 ^4 ^72 ^1134 ^9 ^1C22C33C44C55C66C7^7C8^8C99C1010C1111C12^ 图3、2 邻接表对每个顶点求入度,并存入数组InDegree[i]中(i=0…n)初始化栈Stack,Counter=0Return OKReturn ERROR依次将入度为0的顶点存入栈中对以i号顶点为尾弧的每个邻接点的入度减1,并将入度减1后为零的顶点号压入栈中,输出i,计数器加1(Counter++)推出栈顶的一个元素(入度为零的顶点号)至i,输出i,计数器加1(Counter++)堆栈是否为空?n个顶点全输出 Y Y N Y N Y 图3、3 拓扑排序流程图C1C4C5C7C2C3C8C9C12C10C11C6 图3、4 课程先修关系图4 详细设计1、图的邻接表的存储表示,即结构体的定义:typedef struct ArcNode{int AdjOfV; // 该弧所指向的顶点的位置struct ArcNode *next; //指向下一条弧的指针}ArcNode;typedef char VertexType[MAXOfNAME]; typedef struct //链接表{VertexType data; //顶点信息int grades; //存储学分信息ArcNode *first; //指向第一条依附该顶点的弧的指针}VNode, AdjList[MAX_VER]; // 头结点typedefstruct{AdjList ver; //vertices 存储课程名int vexnum, arcnum; // 图的当前顶点数和弧数}ALGraph;2、建立图的邻接链表:printf("请输入下列课程的先修课程(无先修课程输入0 结束后也输入0)\n"); for (h=0;h<G、vexnum;++h)// 构造表结点链表,利用前插法 { printf("%s的先修课程:",G、ver[h]、data); scanf("%s",va);getchar(); while (va[0]!='0'){ i = LocateVex(G, va); //弧头 j = h; //弧尾 p = (ArcNode*)malloc(sizeof(ArcNode)); p->AdjOfV = j; p->next = G、ver[i]、first; // 插在表头 G、ver[i]、first = p; scanf("%s",va); getchar(); }3、输出图的顶点和边:printf("%d个顶点", G、vexnum); for (i = 0;i < G、vexnum;++i)printf("%4s", G、ver[i]、data); printf(" \n%d条弧边:\n",G、arcnum); for (i = 0;i < G、vexnum;i++){ p = G、ver[i]、first; while (p){ printf("%s---->%s\n",G、ver[i]、data,G、ver[p->AdjOfV]、data); p = p->next; } }4、通过栈实现拓扑排序:intTopologicalOrder(ALGraph G,AdjList R,struct Name name[]) {int i, k, j = 0, count, indegree[MAX_VER]; SqStack S;ArcNode *p;FindInDegree(G, indegree); // 对各顶点求入度InitStack(S); // 初始化栈for (i = 0;i < G、vexnum;++i) //建零入度顶点栈Sif (!indegree[i])Push(S, i); // 入度为0者进栈count = 0; // 对输出顶点计数while (!StackEmpty(S)){ Pop(S, i);printf("%s(%d学分),",G、ver[i]、data,G、ver[i]、grades);R[j++] = G、ver[i]; //将当前的拓扑序列保存起来++count; // 输出i号顶点并计数for (p =G、ver[i]、first; p; p=p->next)// 对i号顶点的每个邻接点的入度减1{ k = p->AdjOfV;if (!(--indegree[k]))// 若入度减为0,则入栈Push(S, k);}}if (count < G、vexnum){printf("此有向图有回路无法完成拓扑排序");return0;}else printf( " 为一个拓扑序列");printf("\n");intq=1,Z=0;while (q <= TotalOfTerms){int C = R[Z]、grades ;printf("\n第%d个学期应学课程:",q);while (C <= MaxScores){C = C + R[Z+1]、grades;if (Z < G、vexnum) { CmpOfStr(R[Z]、data,name,N);/*让C1~C12分别与12门课程对应起来*/++Z;}}printf("\n");if (q ==TotalOfTerms)printf( "\nOK Over!");q++;}return1;/**/}5、主程序和其他伪码算法:void main(){ ALGraph G; AdjList R;Struct name;name[N]={{"C1"},{"C2"},{"C3"},{"C4"},{"C5"},{"C6"},{"C7"},{"C8"},{"C9"},{"C10"},{"C11"},{"C12"}}; printf("***************教学计划编制问题**************\n" );printf( "请以课件9-2上课程先序图为例输入学期总数:");scanf("%d",&TotalOfTerms); getchar(); printf("请输入学期的学分上限(8或9):"); scanf("%d",&MaxScores); getchar(); CreateGraph(G); Display(G);TopologicalOrder(G,R,name);}int InitStack(SqStack &S) /*栈的初始化*/{ S、a= (int *)malloc(StackofNUM *sizeof(int));if (!S、a)exit(-1);S、top =S、a;S、size=StackofNUM;return1;}int StackEmpty(SqStack S)/*判断栈是否为空*/{ if (S、top == S、a)return1;else return 0;}int Push(SqStack &S, int x)/*入栈*/ {if (S、top1);S、top =S、a +S、size;S、size +=StackforMore;}*S、top++ = x;return1;}int Pop(SqStack &S, int &x)/*出栈*/{ if (S、top == S、a)return 0;x = *--S、top; return1;}int LocateVex(ALGraph G, VertexType u)/* 查找图中某个顶点位置 */ { int i; for (i = 0;i < G、vexnum;++i) if (strcmp(u,G、ver[i]、data)==0)return i;return>AdjOfV = j; p->next = G、ver[i]、first; // 插在表头 G、ver[i]、first = p; scanf("%s",va); getchar(); } } return1;}void Display(ALGraph G)/* 输出图G的信息*/{ int i; ArcNode *p; printf("有向图\n"); printf("%d个顶点", G、vexnum); for (i = 0;i < G、vexnum;++i)printf("%4s", G、ver[i]、data); printf(" \n%d 条弧边:\n",G、arcnum); for (i = 0;i < G、vexnum;i++) { p = G、ver[i]、first; while (p){ printf("%s---->%s\n",G、ver[i]、data,G、ver[p->AdjOfV]、data); p = p->next; } }} voidFindInDegree(ALGraph G, int indegree[])/*求顶点的入度*/{ int i; ArcNode *p; for (i = 0;i < G、vexnum;i++)indegree[i] = 0; for (i = 0;i < G、vexnum;i++){ p = G、ver[i]、first; while (p){ indegree[p->AdjOfV]++; p = p->next; } }}struct Name{ char c[20];}name;void CmpOfStr(VertexTypestr,struct Name name[],int n)/*让C1~C12分别与12门课程对应起来*/{ if(strcmp(str,name[0]、c)==0)printf(" C程序设计"); if(strcmp(str,name[1]、c)==0)printf(" 模拟数字电路");if(strcmp(str,name[2]、c)==0)printf(" 数据结构");if(strcmp(str,name[3]、c)==0)printf(" C++面向对象 ");if(strcmp(str,name[4]、c)==0)printf(" 大学英语 ");if(strcmp(str,name[5]、c)==0)printf(" 计算机组成原理"); if(strcmp(str,name[6]、c)==0)printf(" 传感器原理");if(strcmp(str,name[7]、c)==0)printf(" 软件工程导论");if(strcmp(str,name[8]、c)==0)printf(" 高等数学");if(strcmp(str,name[9]、c)==0)printf(" 线性代数");if(strcmp(str,name[10]、c)==0)printf(" 大学物理基础"); if(strcmp(str,name[11]、c)==0)printf(" 电工技术"); }4 界面设计5 源代码#include<stdio、h>#include<stdlib、h>#include<math、h>#include<string、h>#define N12#define MAXOfNAME3 //最多字符个数#define MAX_VER100 //最大顶点数#define StackofNUM20 //存储空间初始分配量#define StackforMore5 // 存储空间分配增量int TotalOfTerms ; //学期总数int MaxScores;typedef struct SqStack{int *a;int*top;int size; //分配的存储空间}SqStack;typedef struct ArcNode{int AdjOfV; // 该弧所指向的顶点的位置struct ArcNode *next; //指向下一条弧的指针}ArcNode;typedef char VertexType[MAXOfNAME];typedef struct //链接表{VertexType data; //顶点信息int grades; //存储学分信息ArcNode *first; //指向第一条依附该顶点的弧的指针}VNode, AdjList[MAX_VER]; // 头结点typedef struct{AdjList ver; //vertices 存储课程名int vexnum, arcnum; // 图的当前顶点数和弧数}ALGraph; //学分上限int InitStack(SqStack S)/*栈的初始化*/{S、a= (int *)malloc(StackofNUM *sizeof(int));if (!S、a)exit(-1);S、top =S、a;S、size=StackofNUM;return1;}int StackEmpty(SqStack S)/*判断栈是否为空*/{if (S、top == S、a)return1;else return 0;}int Push(SqStack S, int x)/*入栈*/{if (S、top1);S、top =S、a +S、size;S、size +=StackforMore;}*S、top++ = x;return1;}int Pop(SqStack S, int x)/*出栈*/{if (S、top == S、a)return 0;x = *--S、top; return1;}int LocateVex(ALGraph G, VertexType u)/* 查找图中某个顶点位置 */{ int i; for (i = 0;i < G、vexnum;++i) if (strcmp(u,G、ver[i]、data)==0)return i;return>AdjOfV = j; p->next = G、ver[i]、first; // 插在表头 G、ver[i]、first = p; scanf("%s",va); getchar(); } } return1;}void Display(ALGraph G)/* 输出图G的信息*/{ int i; ArcNode *p; printf("有向图\n"); printf("%d个顶点", G、vexnum); for (i = 0;i < G、vexnum;++i)printf("%4s", G、ver[i]、data); printf(" \n%d 条弧边:\n",G、arcnum); for (i = 0;i < G、vexnum;i++) { p = G、ver[i]、first; while (p){ printf("%s---->%s\n",G、ver[i]、data,G、ver[p->AdjOfV]、data); p = p->next; } }}voidFindInDegree(ALGraph G, int indegree[])/*求顶点的入度*/{ int i; ArcNode *p; for (i = 0;i < G、vexnum;i++)indegree[i] = 0; for (i = 0;i < G、vexnum;i++){ p = G、ver[i]、first; while (p){ indegree[p->AdjOfV]++; p = p->next; } }}struct Name{ char c[20];}name;void CmpOfStr(VertexTypestr,struct Name name[],int n)/*让C1~C12分别与12门课程对应起来*/{ if(strcmp(str,name[0]、c)==0)printf(" c程序设计"); if(strcmp(str,name[1]、c)==0)printf(" 模拟数字电路");if(strcmp(str,name[2]、c)==0)printf(" 数据结构");if(strcmp(str,name[3]、c)==0)printf(" C++面向对象 ");if(strcmp(str,name[4]、c)==0)printf(" 大学英语 ");if(strcmp(str,name[5]、c)==0)printf(" 计算机组成原理");if(strcmp(str,name[6]、c)==0)printf(" 传感器原理");if(strcmp(str,name[7]、c)==0)printf(" 软件工程导论 ");if(strcmp(str,name[8]、c)==0)printf(" 高等数学");if(strcmp(str,name[9]、c)==0)printf(" 线性代数");if(strcmp(str,name[10]、c)==0)printf(" 大学物理基础");if(strcmp(str,name[11]、c)==0)printf(" 电工技术");}int TopologicalOrder(ALGraph G,AdjList R,struct Namename[]){int i, k, j = 0, count, indegree[MAX_VER];charq=1,Z=0;SqStack S;ArcNode *p;FindInDegree(G, indegree); // 对各顶点求入度InitStack(S); // 初始化栈for (i = 0;i < G、vexnum;++i)//建零入度顶点栈Sif (!indegree[i])Push(S, i); // 入度为0者进栈count = 0; // 对输出顶点计数while (!StackEmpty(S)){Pop(S, i);printf("%s(%d学分),",G、ver[i]、data,G、ver[i]、grades);R[j++] = G、ver[i]; //将当前的拓扑序列保存起来++count; // 输出i号顶点并计数for (p =G、ver[i]、first; p; p=p->next)// 对i号顶点的每个邻接点的入度减1{k = p->AdjOfV;if (!(--indegree[k]))// 若入度减为0,则入栈Push(S, k);}}if (count < G、vexnum){printf("此有向图有回路无法完成拓扑排序");re第 1 页共 1 页。