
数据结构课设教学计划编制问题.doc
25页-数据构造课程设计教学方案编制问题班级**2143201学生**周子健提交日期2021年1月19日成绩计算机与通信工程学院. 优选-. -设计要求:针对计算机系本科课程,根据课程之间的依赖关系〔如离散数学应在数据构造之前开设〕制定课程安排方案,并满足各学期课程数目大致一样。
1.1 课程设计目的本课程设计主要是针对计算机系本科课程,根据课程之间的依赖关系,制定课程安排方案,并满足各学期课程数目大致一样教学方案编制系统是基于C++的软件系统,通过建立AOV网,按学期对课程序号、课程代号、课程名称以及课程学分进展相应输出,并且保证用户实现自由选择专业选修课功能1.2 课程设计内容教学方案编制系统主要是处理课程之间的依赖关系表1.1列出了假设干门计算机系本科课程,其中有些课程不要求先修课程,例如,C1是独立于其他课程的根底课,而有些课程却需要有先修课程,比方,学完程序设计语言C++和离散数学后才能学习数据构造具体情况如表1.1所示表1.1 课程以及课程之间的依赖关系课程代号课程名称先修课程C1高等数学无C2计算机科学导论无C3离散数学C1C4程序设计语言C++C1、C2C5数据构造C3、C4C6计算机原理C2、C4C7数据库原理C4、C5、C6先修课程规定了课程之间的依赖关系,这种关系可以用AOV网来表示,其中顶点表示课程,弧表示依赖关系,如图1.1所示C1C7C6C4C5C3C2图1.1 表1.1对应的AOV网程序的主要功能是实现课程的排序,以满足同一学期所修的课程相互之间无依赖关系,并且已修完其所有先修课程。
另外,设置学分变量,控制每个学期的课程量根本均匀2 概要设计2.1 数据表示教学方案编制问题中,操作对象是课程课程之间的依赖关系用AOV网表示, AOV网的构造采用邻接表实现因此,本程序设计定义了两个类:课程类和邻接表类课程类〔Lesson〕添加了5个私有成员变量用来定义课程的5个属性:课程代号、课程名称、课程序号、课程学分以及是否被选择过的课程标记同时还定义了8个成员函数,已实现相关的操作功能邻接表类〔ALGraph〕定义了2个整型成员变量和1个构造体数组来存放顶点数、边数和顶点表同时还定义了4个成员函数实现用来实现AOV网的构造、删除、排序以及相关输出功能2.2 数据处理数据处理必须借助函数来实现本程序设计通过调用类的各种成员函数实现各种需要操作课程类〔Lesson〕的成员函数如表2.1所示表2.1 Lesson类的成员函数函数名称功能声明void SetLes()对课程各种属性进展赋值string GetNum()获得课程代号string GetName()获得课程名称float GetLesScore()获得课程学分int GetLesNo()获得课程序号bool GetSelect()获得是否选择过的标志变量void SetSelect()设置选择控制标志变量,以防止重复选课void SetName()单独定义设置课程名称的函数,以方便一些操作邻接表类〔ALGraph〕的成员函数如表2.2所示。
表2.2 ALGraph类的成员函数函数名称功能声明ALGraph()构造函数~ALGraph()析构函数void TopSort()实现AOV网中顶点的排序并进展相应的输出void BalanScore()平衡每次输出的顶点的数目3 详细设计3.1 课程类的定义课程类〔Lesson〕添加了5个私有成员变量:LesNum 〔课程代号〕、LesName〔课程名称〕、LesScore〔课程学分〕、LesNo〔课程序号〕以及Select〔是否被选择过的课程标记〕,分别用来定义课程的5个属性;同时还定义了8个成员函数:SetLes〔对课程各种属性进展赋值〕、GetNum〔获得课程代号〕、GetName〔获得课程名称〕、GetLesScore〔获得课程学分〕、GetLesNo〔获得课程序号〕、GetSelect〔获得是否选择过的标志变量〕、SetSelect〔设置选择控制标志变量〕和SetName〔单独定义设置课程名称〕,用来实现相关的操作功能计算机系一共有65门课程,其中相互之间存在依赖关系的课程有56门,另外9门为独立课程,不存在依赖关系Lesson B[65]定义课程类的对象数组,可以通过调用课程类的各种成员函数对65门课程的课程序号、课程代号、课程名称以及课程学分等等进展操作。
3.2 邻接表类的定义邻接表是一种顺序存储与存储相结合的存储方法在邻接表中存在两种结点构造:顶点表结点和边表结点,如图3.1所示adjlist ne*t Indegree verte* firstedge 顶点表结点边表结点图3.1邻接表表示的结点构造采用C++中的构造类型描述上述结点,用 C++中的类实现基于邻接表存储构造以下列图的各种数据类型和操作功能由于采用了C++的模板机制,邻接表中的数据元素可以是任意的在本次课程设计中,邻接表中的数据元素初始化为课程类对象3.3 重要函数的实现〔1〕邻接表构造函数ALGraph邻接表构造函数ALGraph(T a[],int n,int e,int edge[][73]),初始化一个有n个顶点、e条边和73个依赖关系的AOV网当定义一个邻接表类的对象时,调用该构造函数,通过实参与形参相结合,实现课程信息的存储,建立AOV网,实现课程及课程之间的关系流程图如图3.2所示初始化顶点表初始化边表,并在相应的边表中插入结点完毕运行图3.2 邻接表ALGraph的构造函数〔2〕邻接表成员函数TopSort邻接表成员函数TopSort(T OutLes[10][100],T B[65])按批次扫描AOV网,每次扫描后都将得到的入度为0的顶点依次存入数组的每行,同时对存入顶点的后继顶点进展入度减1操作。
不同批次扫描得到的顶点存在数组的不同列在此函数中通过用户的输入,还实现了专业课选择操作,并且实现了相关的输出功能邻接表成员函数TopSort流程图如图3.3所示所有顶点是否处理完.将入度为0的顶点入栈是否为空.用数组OutLes保存每次入栈的入度为0的顶点;并进展相应的调整将当前结点的后继结点减1输出课程名称对每个学期的课程量进展控制图3.3邻接表类成员函数TopSort否是否是运行完毕〔3〕邻接表类成员函数BalanScore邻接表类成员函数BalanScore(T OutLes[10][100],int count,int s,float score,T B[65])主要通过设置学分变量对每个学期的课程量进展控制,以实现不同学期的课程数目大致相等对于*个学期课程学分未到达最少修读学分的问题,主要通过插入独立课程补足学分解决,同时在插入的同时设置学分上限,以免超过学分修读范围最后将课程信息按不同学期依次进展输出邻接表类成员函数BalanScore流程图如图3.4所示运行学分是否>21.显示可以进展选择的课程信息进展选择学分是否在21~29总学分>29本次选择无效,重新选择输出课程信息完毕否是否是是否图3.4邻接表类成员函数BalanScore4 运行环境与测试结果4.1 运行环境在本课程设计中,系统开发平台为Windows *P,程序运行环境为Visual C++ 6.0,程序设计语言为C++。
Visual C++一般分为三个版本:学习版、专业版和企业版,不同版本适合于不同类型的应用开发实验中可以使用这三个版本的任意一种,在本课程设计中,以Visual C++ 6.0为编程环境Visual C++以拥有"语法高亮〞,IntelliSense〔自动编译功能〕以及高级除错功能而著称比方,它允许用户进展远程调试和单步执行等还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序其编译及建置系统以预编译头文件、最小重建功能及累加著称这些特征明显缩短程式编辑、编译及的时间花费,在大型软件方案上尤其显著Visual C++ 6.0秉承Visual C++ 以前版本的优异特性,为用户提供了一套良好的开发环境,主要包括文本编辑器、资源编辑器、工程创立工具和Debugger调试器等等用户可以在集成开发环境中创立工程,翻开工程,建立、翻开和编辑文本,编译、、运行和调试应用程序4.2 测试结果〔1〕对所有课程输出情况的测试在主函数运行初,先利用课程类定义了对象数组,通过对象数组调用了各种成员函数,实现对计算机系本科课程信息的总体输出同时,使用制表符和设置宽度函数,调整输出结果,使查看更清楚。
计算机系本科课程信息局部输出如图4.1所示图4.1局部本科课程输出〔2)对利用学分均匀每学期课程量的测试输出数组OutLes[10][100]第一行元素保存的课程名称,即第一学期课程名称,独立课程暂时不计入内如图4.2所示图4.2排序输出及已选学分学分未到达修读要求,根据提示选择可选的独立课程补足学分具体情况如图4.2、4.3和4.4所示图4.3提示输入选择课程的序号图4.4提示与选择当所选课程的学分已大于学分修读下限时,此时停顿选择,输出第1个学期的课程信息第1个学期的课程信息输出情况如图4.4所示图4.4第1个学期课程信息〔3〕对选择专业选修课的测试当排序输出过程中遇到专业选修课时,可以通过根据提示输入所选课来进展选择,如图4.5所示图4.5选择专业选修课〔4〕对计算机系本科课程安排方案的输出测试通过对课程排序、保存、判断、选择和插入等一系列操作,最终解决计算机系本科课程的编制的问题,并输出结果前3个学期的课程安排方案输出如图4.6、4.7和4.8所示图4.6第1个学期的课程安排方案图4.7第2个学期的课程安排方案图4.8第3个学期的课程安排方案5 课程设计心得体会;在这次课程设计中我又进一步地了解了数据构造中算法的核心思想的重要性,懂得了一个程序地好坏关键在于算法是否优秀,一个好的优秀的算法可以使我们的程序更加完善,平安性更高以及有更高的效率。
这次设计中我发现了自己的许多缺乏,如对指针的机制掌握的还不是很透彻,有的时候会出现指针指向错误以及空指针的错误,还有不能很好地分析自己算法地复杂。
