




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教学计划的编制设计报告 教学计划的编制设计报告数据结构课程设计报告 一、需求分析在教学课程的安排中,人工进行排课的方式不仅工作量巨大,而且可用性不强,出错的概率大,耗费时间长,由此,该软件应运而生。 对于每个不同的学校来说,有不同的排课规则,但唯一不变的就是课程不允许有冲突,该冲突具体指,课程间有一定的先修关系,这种限制可以通过计算机的快速处理信息的能力迅速解决,以达到人们的日常需求。 由于每个规则的不同,软件必须可以通过修改相应的参数以达到不同的效果,例如学分限制、课程信息更新等诸多问题。 该软件具体实现了学分限制、课程添加、课程关系添加、课程删除的修改功能,在一定程度上满足了普遍需求。 二、概要设计1主要功能调用(Main函数)int main()WeleInfo();Print_Help();while(true)string Command;coutCommand;Small2Big(Command);/将命令修改为大写字母if(Command=HELP)Print_Help();else if(Command=RF)ReadFile();else if(Command=TP)TopologicalSort();else if(Command=GETTOPORDER)PrintTopologicalOrder();else if(Command=GETLISTEN)PrintListenList();else if(Command=GETINFO)GetInfo();else if(Command=ADD)AddNewOne();else if(Command=ADDRELATION)AddRelation();else if(Command=UPDAtAFILE)UpDataFile();else if(Command=SETMAX)SetMaxScore();else if(Command=DELETE)Delete();else if(Command=EXIT)break;else if(Command=EXITANDSAVE)1ExitAndSave();break;else if(Command=SETMAXSCORE)SetMaxScore();else cout命令无法识别,请重新输入。 ListenList;/保存课程表信息double NowScore=0;/记录当前正在安排课程的学期的学分double MAX=12;/最大学分限制2double MIN=1000;/修改最大学分限制时的最少学分限制,保护拓扑排序的顺利进行3函数关系调用图 三、详细设计1保存课程信息的结构体定义struct Info;Info(string_Number,string_Name,double_Score)string Number;/序号string Name;/名称double Score;/学分bool Flag;/判断条件,用于拓扑排序vectorPrior;/保存该节点的先修课程vectorNext;/保存该节点的后继课程Number=_Number;Name=_Name;Score=_Score;Flag=false;2主要函数(初始化函数、读取文件函数及拓扑排序函数) (1)初始化函数(深拷贝)void Initialization()cout正在初始化.second-Number,Listen_Iterator-second-Name,Listen_Iterator-second-Score);Listen_TranscriptListen_Iterator-first=transcript_Transcript;/拷贝Listen中各元素的前驱和后继至Listen_Transcript for(map:iterator Listen_Iterator=Listen.begin();Listen_TranscriptListen_Iterator-first-Next.push_back(Listen_Transcript(*Next_Iterator)-Number);Listen_TranscriptListen_Iterator-first-Prior.push_back(Listen_Transcript(*Prior_Iterator)-Number);cout初始化已完成!second-Prior.begin();Prior_Iterator!=Listen_Iterator-second-Prior.end();Prior_Iterator+)for(vector:iterator Next_Iterator=Listen_Iterator-second-Next.begin();Next_Iterator!=Listen_Iterator-second-Next.end();Next_Iterator+)Listen_Iterator!=Listen.end();Listen_Iterator+) (2)读取文件函数void ReadFile()/对外接口cout正在读取文件. NumberNameScore;if(Number=0&Name=0&Score=0)break;Info*transcript=new Info(Number,Name,Score);ListenNumber=transcript;if(ScoreMAX;freopen_s(&stream,CON,r,stdin);/返回控制台输入cinBeginEnd;if(Begin=0&End=0)break;ListenBegin-Next.push_back(ListenEnd);/添加“先-后”的关系ListenEnd-Prior.push_back(ListenBegin);/添加“后-先”的关系 (3)拓扑排序函数void TopologicalSort()Initialization();cout正在进行拓扑排序并生成课表.second-Prior;vector&next=Listen_Transcript_Iterator-second-Next;TopologicalOrder.push_back(ListenListen_Transcript_Iterator-first);for(vector:iterator p=next.begin();p!=next.end();p+)Listen_Transcript.erase(Listen_Transcript_Iterator);(*p)-Flag=true;EraseFromPrior(p,Listen_Transcript_Iterator-second-Name); (4)拓扑排序中的查找函数FindNoPriorOne();map:iterator FindNoPriorOne(map&Goal)map:iterator Goal_Iterator;for(Goal_Iterator=Goal.begin();Goal_Iterator!=Goal.end();Goal_Iterator+)5if(Goal_Iterator-second-Prior.empty()=true&Goal_Iterator-second-Flag=false)return Goal_Iterator;if(Goal.empty()return Goal.end();for(Goal_Iterator=Goal.begin();Goal_Iterator!=Goal.end();Goal_Iterator+)Goal_Iterator-second-Flag=false;if(Goal_Iterator-second-Prior.empty()=true&Goal_Iterator-second-Flag=false)return Goal_Iterator;for(Goal_Iterator=Goal.begin();Goal_Iterator!=Goal.end();Goal_Iterator+)return Goal.end();3设置或修改信息函数、 (1)设置最大学分限制void SetMaxScore();MAX=max;cout设置成功!如需永久生效,请输入UpDataFile进行操作max)if(max0)break;else if(max=0)return;else if(max (2)添加课程信息void AddNewOne()if(Listen.empty()cout系统中没有课程信息!number)string number_Transcript=number;Small2Big(number_Transcript);6if(number_Transcript=OVER)else if(number=0)cout请输入非零的值(原因零是本程序的默认终止符);else if(Listennumber!=NULL)cout该序号已存在,请重新输入课程序号;else break;cout已放弃添加课程!name)coutscore)Info*transcript=new Info(number,name,score);Listennumber=transcript;if(score;char c;cinc;if(c=Y|c=y)UpDataFile();else if(c=N|c=n)cout已放弃永久添加!MAX)cout已超过一学期最大选修学分,该课程将无法安排入课表,请重新输入;else break;string name_Transcript=name;Small2Big(name_Transcript);if(name_Transcript=OVER)else if(name=0)cout请输入非零的值(原因零是本程序的默认终止符);else if(IsRepetition(name)=true)cout该名称已存在,请重新输入课程序号;else break;cout已放弃添加课程! (3)添加课程间关系void AddRelation()endl;elsePrintNowListen();coutbegin)string begin_Transcript=begin;Small2Big(begin_Transcript);if(begin_Transcript=OVER)break;else cinend;if(begin=0|end=0)cout请输入非零序号(输入格式先修序号空格后修序号输入else if(Listenbegin!=NULL&Listenend!=NULL)else coutNext.push_back(Listenend);Listenend-Prior.push_back(Listenbegin);cout这两门课程间已建立先修关系! (4)删除课程信息void Delete()PrintNowListen();coutNum)string Num_Transcript=Num;Small2Big(Num_Transcript);if(Num_Transcript=Over)break;else if(ListenNum=NULL)coutfirst!=Num)Goal+;Listen.erase(Goal);cout已成功删除该课程!Next;vector&prior=Goal-Prior;/遍历对象后继for(vector:iterator next_Iterator=next.begin();next_Iterator!=next.end();next_Iterator+)/遍历对象前驱for(vector:iterator prior_Iterator=prior.begin();prior_Iterator!=prior.end();prior_Iterator+)/遍历前驱的后继,并找到要删除的位置vector:iterator p=(*prior_Iterator)-Next.begin();while(*p)-Number!=Goal-Number)p+;(*prior_Iterator)-Next.erase(p);/遍历后继的前驱,并找到要删除的位置vector:iterator p=(*next_Iterator)-Prior.begin();while(*p)-Number!=Goal-Number)p+;(*next_Iterator)-Prior.erase(p);4更新函数(本地文件)void UpData()cout正在写入文件.:iterator p=Listen.begin();p!=Listen.end();p+)coutfirstNameScoresecond-Next.empty()continue;elsevector&next=p-second-Next;for(vector:iterator q=next.begin();q!=next.end();q+)coutfirstNumber (1)获取全部信息void GetInfo()cout (70) (70) (2)获取课程信息void PrintNowListen()cout当前课程列表 (70):iterator p=Listen.begin();p!=Listen.end();p+)10coutfirstfirst.size()NameName.size()Score (70) (3)获取课程先修关系void PrintListenRelation()cout课程间的先修关系表:iterator p=Listen.begin();p!=Listen.end();p+)cout (70)firstfirst.size()Name;vector&next=p-second-Next;for(vector:reverse_iterator q=next.rbegin();q!=next.rend();q+)coutName;cout (4)获取当前课表void PrintListenList()cout课表信息如下:size_type i=0;i:size_type k=0;k (13)NameName.size()ScoreScore;cout未生成课表!(请输入TP进行拓扑排序并生成课表) (70)Score;cout第 (70) (70) (5)获取拓扑排序信息void PrintTopologicalOrder()if(TopologicalOrder.empty()cout拓扑序列如下:iterator p=TopologicalOrder.begin();p!=TopologicalOrder.end();p+)cout;coutNumberName;cout未进行拓扑排序!(请输入TP进行拓扑排序) (70) (70)确认用户输入-返回输入后的结果。 输出是类似的,在此不再重复。 ?功能函数同样需要提供对外接口函数,但由于该功能的特殊性(或许在功能函数执行后,还需要提示输入),这些提示性的信息应该简洁明了,统一进行规划,即拥有多少输入和输出,都要将其扩展为具体函数。 C+提供的指向函数的指针,很好的可以解决这个问题。 ?辅助功能函数在功能函数进行的时候,辅助函数最好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国葡萄糖醛酸钠市场分析及竞争策略研究报告
- 2025至2030年中国美白嫩肤液市场分析及竞争策略研究报告
- 2025至2030年中国电子测量头市场分析及竞争策略研究报告
- 2025至2030年中国汽车门锁市场分析及竞争策略研究报告
- 2025至2030年中国枕式糖果全自动包装机市场分析及竞争策略研究报告
- 2025至2030年中国散热风扇扇框市场分析及竞争策略研究报告
- 2025至2030年中国导轴与支承单元市场分析及竞争策略研究报告
- 2025至2030年中国卧式自吸无堵塞排污泵市场分析及竞争策略研究报告
- 2025至2030年中国全频电子除垢仪市场分析及竞争策略研究报告
- 2025至2030年中国乳脂离心机市场分析及竞争策略研究报告
- GB/T 15452-2009工业循环冷却水中钙、镁离子的测定EDTA滴定法
- 一二三四级应急响应流程图参考模板范本
- 《等离子弧焊》教学课件
- 电动车棚施工方案及工艺方法
- 前台交接班记录表
- 油气藏类型、典型的相图特征和识别实例
- COMSOL 4.4 模拟螺线管线圈产生的磁场分布
- 气相催化加氢法生产1.5万吨年苯胺车间工艺设计
- 三位数显示计时器定时器数电课程设计报告书
- 凹凸棒石(千土之王、万用之土)
- 大气污染控制工程课程设计_某工厂布袋除尘器的设计
评论
0/150
提交评论