版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【【【上海力学院】C++据结构作业课程设计——【校园导游咨询停车场管理】娃娃们可以收着以后用绝对纯手工打造内含类模块一维指针数组(谨以此程序供大家参考。运行结果后面有贴图)目录【】校园导游咨询序设计源代码及截图【】停车场管理—案一程序计源代码及图【】停车场管理—案二程序计源代码及图##############1】【【校园导游咨询】】####################该园导游咨询系统没有输入值,所有信息是都在classMGraph的构造函中传输的,且校园景点信息皆为
景点信息。请大家注意,直接从文章copy到visualstutio中会出现中文字符,注意删除,推荐大家在一行语句的分号后面,点出光标,按一下delete键,然后按一下enter键,完成visualstutio的动对齐,这样程序看起来一目了然,更易于操作和更)【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。【基本要求】(1)设计你所在学校校园平面图,所含景点不少于10个。以图中顶点表示校内各景点存放景点名称代号简介等信息以边表示路径存放路径长度等相关信息。(2)为来访客人提供中任意景点相关信息的查询。(3)为来访客人提供中任意景点的问路查询,即查询任意两个景点之间的一个最短的简单路径。【选作内容】(6)扩充每个景点的接景点的方向等信息,使得路径查询结果能提供详尽的导向信息。**************************【以下为类的定义】********************************#include<iostream>#include<iomanip>usingnamespacestd;constintMaxSize=18;constintINFINITY=65535;大值无穷classdirection;template<classT>classMGraph;template<classT>classVertexNode义头结点friendclassMGraph<T>;public:intvex;顶点名称vexname;顶点称vexinf;点信息directiondir;存放顶点方位信息的direction类的dir。};classdirectionpublic:intln;存放在方向中的横坐标,表示东西intcol;存放在方向图中的纵坐标,表示南北};template<classT>classMGraph定义无向图的邻接矩阵public:构造函数,初始化具有顶点的图voidprintvexname();示所有景点及景点代号voidprintvexinf(int显代号为i点的名称及信息voidi,intj);显示景点i~j的最路径方案信息voidprintdir(inti,int显示景点到j方向信息如向东100m向南”VertexNode<T>adjlist[MaxSize];存放景点全部信息的景点类数组intvertexNum,arcNum;图的顶点数和边数voidRoot(intp,int递归寻找间最短路径intPath[MaxSize][MaxSize],Dist[MaxSize][MaxSize];建Path和Dist分别存放两点间最短路径的前驱节点,两点间最短路径长度int存路径intkkk;Line[]数组的标记private:vertex[MaxSize];存放图中顶点的数组int存图中边的数组};*************************【以下为类的实现即类函数的定义】***********************************template<classT>MGraph<T>::MGraph()a[]为景点代号b[]为景点名称,为景点信息d[]为景点方位信息的横坐标,e[]景点方位信息的纵坐标s[]为存放景点邻接矩阵信息的一维数组,根据其对称性可以用公式赋值给二维数组arc[][]ints[]={0,1,0,0,2,0,0,1,0,0,2,0,0,2,0,0,0,0,};inta[]={};b[]={"南门","实验楼","图,"大活"睿思楼,"大礼堂","南4教知行楼,"国交楼","教,"南2教"南1教","北图,"北3教,"北教","北2教","北1教,"北门};c[]={"南校区正门,"理实验楼"南区图书馆,"大学生活动中心,"教师办公楼医务室及留学生公寓"大礼堂用于举办各种文艺演","校区第4教学楼","实习基地,计算机房等","国际交流中心,教职工餐","南校区第3教学楼,"南校区第教学楼,"南校区第1教学楼,"北校区图书馆","校区第教学楼,"北校区第4教学楼,"北校区第教学楼","北校区第1教学楼,"校区正门};intd[]={};inte[]={2};intarcNum=30;adjlist[i].vex=a[i];adjlist[i].vexname=b[i];adjlist[i].vexinf=c[i];adjlist[i].dir.ln=d[i];adjlist[i].dir.col=e[i];for(i=0;i<vertexNum;初始化邻接矩阵for(j=0;j<vertexNum;j++)arc[i][j]=arc[j][i]=s[(i*(i+1))2+j];根据的对称性一维数组中的数据赋给二维数组arc[][]template<classvoidMGraph<T>::printvexname()inti;cout<<adjlist[i].vex<<"template<classvoidcout<<i<<""<<adjlist[i].vexname<<":"<<adjlist[i].vexinf<<endl;template<classvoidi,intintdx,nb;临时存放i与之的南北东西关系在的哪边?dx=adjlist[j].dir.col-adjlist[i].dir.col;nb=adjlist[j].dir.ln-adjlist[i].dir.ln;if(dx>0)即j在i的东边cout<<"向东,elsecout<<"向西<<dx*(0-100)<<"m,即j在的边cout<<"向南<<nb*100<<"m";elsecout<<"向北<<nb*(0-100)<<"m";template<classvoidMGraph<T>::Root(intp,intq)if(Path[p][q]>0)Root(p,Path[p][q]);Root(Path[p][q],q);elsekkk++;template<classvoidi,intintp,q,m,k,item1,item2;for(p=0;p<vertexNum;p++)for(q=0;q<vertexNum;q++)Dist[p][q]=arc[p][q];接矩阵赋值for(k=0;k<vertexNum;k++)for(p=0;p<vertexNum;p++)if(Dist[p][k]>0)for(q=0;q<vertexNum;q++)if(Dist[k][q]>0)if(((Dist[p][q]>Dist[p][k]+Dist[k][q])||(Dist[p][q]==0))&&(p!=q))Dist[p][q]=Dist[p][k]+Dist[k][q];Path[p][q]=k;cout<<"\n=====================================================\n";cout<<"从"<<adjlist[i].vexname<<"到"<<adjlist[j].vexname<<"的最短路径为:kkk=2;Root(i,j);cout<<"-->";printdir(i,item2);cout<<"-->"<<adjlist[item2].vexname;for(m=3;m<=kkk-1;m++)item1=Line[m];cout<<"-->";printdir(item1-1,item1);cout<<"-->"<<adjlist[item1].vexname;cout<<"\n=====================================================\n";*****************************【以下为主函数】**************************************intfuncchoice()系统功能择页面intchoice;cout<<"=============================================================="<<endl;迎进入校园导游咨询平台"<<endl;1--示校园所有景点信息"<<endl;2--询校园景点信息"<<endl;3--路查询系统<<endl;4--出导游资讯平台"<<endl;cout<<"=============================================================="<<endl;cout<<"请输入要选择的能号:";cin>>choice;choice;voidmain()MGraph<char*>intfuncchoice();intfc;while(1)fc=funcchoice();if(fc==1)inti;for(i=0;i<mg.vertexNum;i++)mg.printvexinf(i);elseif(fc==2)inti;mg.printvexname();cout<<endl<<"输入所要查询景点代号:";cin>>i;mg.printvexinf(i);elseif(fc==3)intmg.printvexname();cout<<"请输入两景点代(我们将把最短路线反馈予您):";mg.printroad(i,j);elseif(fc==4)break;elsecout<<"输入有误,请重输入!运行测试图##############2】【停车场管理系统【方案一程】】#############(ps该程序有漏洞,若将要离开的车辆是停于便道上的,则对该车进行驶离操作时程序内部有错误数据虽然做了函数完成这一功能但因时间有限没能及时查找更正,现在懒得改了。。。大家将就看吧。不过运行是可以的)【问题描述】设停车场是一个可停放汽车的通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序依次由北向南排(大门在最南端最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候一旦有车开走则排在便道上的第一辆车即可开入当停车场内某辆车要离开时在它之后进入的车辆必须先退出车场为它让路待该辆车开出大门外其他车辆再按原次序进入车场院每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。【基本要求】以栈模拟停车场以队列模拟车场外的便道照从终端读入的输入数据序列进行模拟管理每一组输入数据包括三个数据项汽到达或“离去”信息汽车牌照号码以及到达或离去的时刻对每一组输入数据进行操作后的输出信息为若是车辆到达,则输出汽车在停车场内或便道上的停车位置若是车辆离去则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。【测试数据】设,输入数据为(A5)(A2)(,3,)(A,),(A,5,),(D,2,35),(,4,40),E,,)。其中:A表示达(Arrival);表离去(Departure);E表示输入结束()。**************************【以下为类的定义】*************************************#include<iostream>usingnamespacestd;constintMax=2;车库最大量constdoubleprice=30;每小时的费用思想:(报告第四页)我的系统界面,输入信息为:(到达离开退出);车牌号;时刻因此,我的停车场类分成车辆到达和车辆离开两个主要的函数实现。车辆到达,有入栈和入队。车辆离开有出栈,出队和入栈操作。因此我又编写入栈的类,队的类。与行友元。**************************************定义***********************************************class车的信息类public:time;计费时间intnumber;车牌号car*next;放car型元素的数组初始地址};classcarstack栈(停场)的类friendclassparkingmanagement;parkingmanagement访问carstack类中所有成员public:carstack();造函数,栈的初始化intempty();判断栈否为空intfull();断栈是否为满car*s;存放car类型栈元素的数组初始地址inttop;栈顶指针};classcarqueue列(便道)的类friendclassparkingmanagement;parkingmanagement访问carstack类中所有成员public:构造函数,队的初始化intfull();断队列是否为满car*front,*rear;存放car型队列元素的数组初始地址};classpublic:intpushstack(carstack&cs,intcnum,double入栈,cs栈进行调整,返回栈内位置voidpopstack(carstack&cs,int出,cs栈内进调整,根据车牌号把车弹出栈将出栈的number赋值intpopstacknumber()将出栈car的time赋值给doublepopstacktime(),返回值!intpushqueue(carqueue&cq,intcnum,doublectime);入队队内进行调整,返回队内位置intpopqueue(carqueue&cq);出队队内进行调整,返回汽车车牌号void&cs,carqueue&cq,intcnum,double车辆到达,根据输入的车牌号、到达时间,变更函数参数;并cout车位信息voidleave(carstack&cs,carqueue&cq,intcnum,double车辆离开,根据输入的车牌号找到汽车,并进行出栈操作、出队操作和入栈操作;并cout停留时间和收费情况voiddeletequeue(carqueue&cq,inti);删除cq过道中第i辆车intpopstacknumber;专门存放栈的时候返回的车牌号popstacktime;专门存放出栈的时候返回的时刻};**********************************以下为类的实现】************************************构函数,栈的初始化top=-1;s=newcar[Max];创建car类型栈元素的数组if(s==NULL)cout<<"栈空间分配不成!"<<endl;exit(1);int判断栈是否为构造函数,队列的初始化rear=front=NULL;intparkingmanagement::pushstack(carstack&cs,intcnum,doublectime)入栈,栈内进行调整,返回栈内位置从1开始,top从0始cout<<"停车场已满!"<<endl;Max;elsecs.top++;(cs.s[cs.top]).number=cnum;cnum赋给栈顶位置的的车牌号s是car类型栈元素的数组(cs.s[cs.top]).time=ctime;将ctime赋栈顶位置的车的入栈时间,是car类型栈元素的数组(cs.top+1);返回栈内位置加,即停车场内车位从1号开始voidparkingmanagement::popstack(carstack&cs,intcnum)栈,cs栈内进行调整,根据车牌号把车弹出栈将出栈的number赋值intpopstacknumber将出栈car的time赋值给doublepopstacktime,无返回值!inti;carp;stemp;定义一个carstack类型的临时存放出栈元素的栈for(i=0;i<=cs.top;i++)if((cs.s[i]).number==cnum)break;当要出栈的车的车牌号=栈内的车牌号元素时,跳出循环p=cs.s[i];要出栈的元素赋给car类的p存放while(cs.top>i)stemp.s[++(stemp.top)]=cs.s[(cs.top)--];栈的元素数组逐个赋给临时栈将这个车牌号信息传给intpopstacknumber()将该车的时间信息传给doublepopstacktime()栈顶指针回到原来位置while(stemp.top>=0)临时栈出栈的元素逐个赋给原栈,完成先退再进的工作intparkingmanagement::pushqueue(carqueuecnum,doublectime)入队,队内行调整,返回队内位置carint用于记录车在过道上的位置信息,因队列为链式的,所以进行循环累加p=newcar;创一个car类型的指针p->number=cnum;p->time=ctime;首先将指向存放car类元素的数组初始地址置空if(cq.front==NULL)一次入队要判断头结点是否为空cq.front=cq.rear=p;else尾插法插入元素p->next=(cq.rear)->next;(cq.rear)->next=p;cq.rear=(cq.rear)->next;countp=(cq.front)->next;while(countp!=NULL)}count即在过道上的位置,【从开始!!!】intparkingmanagement::popqueue(carqueue&cq)出,队内进行调整返回汽车车牌号carp;p.number=((cq.front)->next)->number;cq队里,从cq.front开指向下一个元素的车牌号赋给car类型的车信息p.time=((cq.front)->next)->time;cq队从cq.front开指向下一个元素的时刻赋给car类型的车信息p.next=((cq.front)->next)->next;cq队里cq.front开始指向下一个元素的指针赋给car类型的车信息的下一个元素的指针p.number;cq.front=(cq.front)->next;void&cs,carqueue&cq,intcnum,doublectime)车辆到达,根据输入的车牌号、到达时间,变更函数参数;并cout位信息intpos;if(!(cs.full()))果栈未满,车辆停入停车场intfl(0),i;义一个从0开始的标记for(i=0;i<=cs.top;i++)if(cs.s[i].number==cnum)果到达的车的车牌号=栈内已有车辆的车牌号fl=1;fl1break;如果到达的车的车牌号!栈内已有车辆的车牌号cout<<"输入错误!请重输入!else入栈,返回车位信息cout<<"该停车场还有空,请到<<pos<<"号车位进行泊车"<<endl;else如果栈满,车辆暂停便道pos=pushqueue(cq,cnum,ctime);入队返回车位信息cout<<"该停车场已满,将车停到便道号车位上"<<endl;voidparkingmanagement::leave(carstackcnum,doublectime)车辆离开,根据输入的车牌号找到汽车,并进行出栈操作、出队操作和入栈操作;并cout停留时间和收费情况inti,flag(0),pstack,count(1),outcarnum;,入数据为:(A1,5),(,2,),******************************************************(,320),A4,),(A,,),********************************************************(D,,),(D,,),(,0,0)。*********************************************************其中:A表示到(Arrival);表示离去(Departure);表示输结束()。***voidmain()characc;intcarnum;cartime;park;cars;carqueuecarq;while(1)print();if(acc=='A')park.arrival(cars,carq,carnum,cartime);elseif(acc=='D')elseif(acc=='E')break;elsecout<<"您的输入有误,重新输入!【】【停车场管理系统【方案二程序】】##############(ps本方案与方案一有同样的问题,就是在对道上的车进行驶离操作时,数据错误,同样的理由,没有改正。如果有细心娃娃帮忙指点改正,在此感激啦)*************************【以下为类定义】************************************#includeusingnamespacestd;constintMaxSize=2;停车场最多能停2辆车template<classclasscarStack;template<classT>定义模板类structNode过停车的队列所需链式结点carnum;义车牌号类型Node<T>*next;此处<T>也可以省略};template<classclasscarinfofriendclasscarStack;public:carnum;车intcartime;停车时间};template<classT>classcarQueuefriendclasscarStack;public:carQueue();构造函数,初始化一个空的链队列int将素x入队并返回其在队内的位置(从1开始)DeQueue();将队头链式结点出队并返回汽车车牌号voiddeletequeue(int将队内低i个元素删除,即便道上i位的汽车驶离boolEmpty();判断链队列是否为空Node<T>*front,*rear;};template<classclasscarStackfriendclasscarinfo;public:;构造函数,栈的初始化,停车场容量为【】voidPushcar(Tcnum,intctime);有车停入停车场intPopcar(Toutcnum,intoutctime);将第cnum辆出栈并返回其停车时间(i;template<classcarQueue<T>::DeQueue()Node<T>*p;if(front==NULL)cout<<"便道上没车";elsep=front;front=front->next;队头元素所在结点摘链p->carnum;将出队进栈的车从队列里删除template<classboolcarQueue<T>::Empty()判断是否为空,为空则返回,不为空则返回0front==NULL;template<classT>carStack<T>::carStack()构造栈算法:top(-1)建立一个最大尺寸为size的空栈S=newcarinfo<T>[MaxSize];建存储栈的数组if(S==NULL)配不成功cerr<<"态存储失败!"<<endl;exit(1);stdlib.top==MaxSize-1;template<classT>voidcarQueue<T>::deletequeue(inti)Node<T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年河池市金城江区城管协管人员招聘考试参考试题及答案详解
- 2026年鹤壁市山城区(中小学、幼儿园)教师招聘笔试备考试题及答案详解
- 2026年山西省吕梁市(中小学、幼儿园)教师招聘笔试参考题库及答案详解
- 2026年乌鲁木齐市头屯河区(中小学、幼儿园)教师招聘笔试参考试题及答案详解
- 2026年山东省泰安市(中小学、幼儿园)教师招聘笔试参考试题及答案详解
- 2026年广州市天河区(中小学、幼儿园)教师招聘考试参考试题及答案详解
- 2026年兰州市红古区城管协管人员招聘笔试备考题库及答案详解
- 2026年邵阳市大祥区城管协管人员招聘考试备考试题及答案详解
- 2025年白城市洮北区城管协管人员招聘笔试试题及答案详解
- 2026年济南市历下区城管协管人员招聘考试模拟试题及答案详解
- 《算力标准体系建设指南(2025版)》
- 认知障碍的评估
- 2026年生产安全事故应急预案模版
- GB/T 47168-2026烟花爆竹玩具
- 2025年移动政企项目交付经理岗位笔试及答案
- 小学道德与法治生活化情境创设课题报告教学研究课题报告
- 食物巧储存课件
- 神经内科患者及家属健康教育核心内容
- 美容师培训课件大纲
- DB36-T 1691-2022 水运工程生态环境监测技术规范 第2部分:运营期
- 肿瘤标志物检测与临床应用专家共识
评论
0/150
提交评论