(完整版)C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)畢業(yè)課程設(shè)計_第1頁
(完整版)C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)畢業(yè)課程設(shè)計_第2頁
(完整版)C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)畢業(yè)課程設(shè)計_第3頁
(完整版)C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)畢業(yè)課程設(shè)計_第4頁
(完整版)C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)畢業(yè)課程設(shè)計_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【【【上海力學(xué)院】C++據(jù)結(jié)構(gòu)作業(yè)課程設(shè)計——【校園導(dǎo)游咨詢停車場管理】娃娃們可以收著以后用絕對純手工打造內(nèi)含類模塊一維指針數(shù)組(謹(jǐn)以此程序供大家參考。運行結(jié)果后面有貼圖)目錄【】校園導(dǎo)游咨詢序設(shè)計源代碼及截圖【】停車場管理—案一程序計源代碼及圖【】停車場管理—案二程序計源代碼及圖##############1】【【校園導(dǎo)游咨詢】】####################該園導(dǎo)游咨詢系統(tǒng)沒有輸入值,所有信息是都在classMGraph的構(gòu)造函中傳輸?shù)模倚@景點信息皆為

景點信息。請大家注意,直接從文章copy到visualstutio中會出現(xiàn)中文字符,注意刪除,推薦大家在一行語句的分號后面,點出光標(biāo),按一下delete鍵,然后按一下enter鍵,完成visualstutio的動對齊,這樣程序看起來一目了然,更易于操作和更)【問題描述】設(shè)計一個校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)?!净疽蟆?1)設(shè)計你所在學(xué)校校園平面圖,所含景點不少于10個。以圖中頂點表示校內(nèi)各景點存放景點名稱代號簡介等信息以邊表示路徑存放路徑長度等相關(guān)信息。(2)為來訪客人提供中任意景點相關(guān)信息的查詢。(3)為來訪客人提供中任意景點的問路查詢,即查詢?nèi)我鈨蓚€景點之間的一個最短的簡單路徑?!具x作內(nèi)容】(6)擴(kuò)充每個景點的接景點的方向等信息,使得路徑查詢結(jié)果能提供詳盡的導(dǎo)向信息。**************************【以下為類的定義】********************************#include<iostream>#include<iomanip>usingnamespacestd;constintMaxSize=18;constintINFINITY=65535;大值無窮classdirection;template<classT>classMGraph;template<classT>classVertexNode義頭結(jié)點friendclassMGraph<T>;public:intvex;頂點名稱vexname;頂點稱vexinf;點信息directiondir;存放頂點方位信息的direction類的dir。};classdirectionpublic:intln;存放在方向中的橫坐標(biāo),表示東西intcol;存放在方向圖中的縱坐標(biāo),表示南北};template<classT>classMGraph定義無向圖的鄰接矩陣public:構(gòu)造函數(shù),初始化具有頂點的圖voidprintvexname();示所有景點及景點代號voidprintvexinf(int顯代號為i點的名稱及信息voidi,intj);顯示景點i~j的最路徑方案信息voidprintdir(inti,int顯示景點到j(luò)方向信息如向東100m向南”VertexNode<T>adjlist[MaxSize];存放景點全部信息的景點類數(shù)組intvertexNum,arcNum;圖的頂點數(shù)和邊數(shù)voidRoot(intp,int遞歸尋找間最短路徑intPath[MaxSize][MaxSize],Dist[MaxSize][MaxSize];建Path和Dist分別存放兩點間最短路徑的前驅(qū)節(jié)點,兩點間最短路徑長度int存路徑intkkk;Line[]數(shù)組的標(biāo)記private:vertex[MaxSize];存放圖中頂點的數(shù)組int存圖中邊的數(shù)組};*************************【以下為類的實現(xiàn)即類函數(shù)的定義】***********************************template<classT>MGraph<T>::MGraph()a[]為景點代號b[]為景點名稱,為景點信息d[]為景點方位信息的橫坐標(biāo),e[]景點方位信息的縱坐標(biāo)s[]為存放景點鄰接矩陣信息的一維數(shù)組,根據(jù)其對稱性可以用公式賦值給二維數(shù)組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[]={"南校區(qū)正門,"理實驗樓"南區(qū)圖書館,"大學(xué)生活動中心,"教師辦公樓醫(yī)務(wù)室及留學(xué)生公寓"大禮堂用于舉辦各種文藝演","校區(qū)第4教學(xué)樓","實習(xí)基地,計算機(jī)房等","國際交流中心,教職工餐","南校區(qū)第3教學(xué)樓,"南校區(qū)第教學(xué)樓,"南校區(qū)第1教學(xué)樓,"北校區(qū)圖書館","校區(qū)第教學(xué)樓,"北校區(qū)第4教學(xué)樓,"北校區(qū)第教學(xué)樓","北校區(qū)第1教學(xué)樓,"校區(qū)正門};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];根據(jù)的對稱性一維數(shù)組中的數(shù)據(jù)賦給二維數(shù)組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與之的南北東西關(guān)系在的哪邊?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";*****************************【以下為主函數(shù)】**************************************intfuncchoice()系統(tǒng)功能擇頁面intchoice;cout<<"=============================================================="<<endl;迎進(jìn)入校園導(dǎo)游咨詢平臺"<<endl;1--示校園所有景點信息"<<endl;2--詢校園景點信息"<<endl;3--路查詢系統(tǒng)<<endl;4--出導(dǎo)游資訊平臺"<<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】【停車場管理系統(tǒng)【方案一程】】#############(ps該程序有漏洞,若將要離開的車輛是停于便道上的,則對該車進(jìn)行駛離操作時程序內(nèi)部有錯誤數(shù)據(jù)雖然做了函數(shù)完成這一功能但因時間有限沒能及時查找更正,現(xiàn)在懶得改了。。。大家將就看吧。不過運行是可以的)【問題描述】設(shè)停車場是一個可停放汽車的通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序依次由北向南排(大門在最南端最先到達(dá)的第一輛車信放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候一旦有車開走則排在便道上的第一輛車即可開入當(dāng)停車場內(nèi)某輛車要離開時在它之后進(jìn)入的車輛必須先退出車場為它讓路待該輛車開出大門外其他車輛再按原次序進(jìn)入車場院每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進(jìn)行管理的模擬程序?!净疽蟆恳詶DM停車場以隊列模擬車場外的便道照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項汽到達(dá)或“離去”信息汽車牌照號碼以及到達(dá)或離去的時刻對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置若是車輛離去則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)?!緶y試數(shù)據(jù)】設(shè),輸入數(shù)據(jù)為(A5)(A2)(,3,)(A,),(A,5,),(D,2,35),(,4,40),E,,)。其中:A表示達(dá)(Arrival);表離去(Departure);E表示輸入結(jié)束()。**************************【以下為類的定義】*************************************#include<iostream>usingnamespacestd;constintMax=2;車庫最大量constdoubleprice=30;每小時的費用思想:(報告第四頁)我的系統(tǒng)界面,輸入信息為:(到達(dá)離開退出);車牌號;時刻因此,我的停車場類分成車輛到達(dá)和車輛離開兩個主要的函數(shù)實現(xiàn)。車輛到達(dá),有入棧和入隊。車輛離開有出棧,出隊和入棧操作。因此我又編寫入棧的類,隊的類。與行友元。**************************************定義***********************************************class車的信息類public:time;計費時間intnumber;車牌號car*next;放car型元素的數(shù)組初始地址};classcarstack棧(停場)的類friendclassparkingmanagement;parkingmanagement訪問carstack類中所有成員public:carstack();造函數(shù),棧的初始化intempty();判斷棧否為空intfull();斷棧是否為滿car*s;存放car類型棧元素的數(shù)組初始地址inttop;棧頂指針};classcarqueue列(便道)的類friendclassparkingmanagement;parkingmanagement訪問carstack類中所有成員public:構(gòu)造函數(shù),隊的初始化intfull();斷隊列是否為滿car*front,*rear;存放car型隊列元素的數(shù)組初始地址};classpublic:intpushstack(carstack&cs,intcnum,double入棧,cs棧進(jìn)行調(diào)整,返回棧內(nèi)位置voidpopstack(carstack&cs,int出,cs棧內(nèi)進(jìn)調(diào)整,根據(jù)車牌號把車彈出棧將出棧的number賦值intpopstacknumber()將出棧car的time賦值給doublepopstacktime(),返回值!intpushqueue(carqueue&cq,intcnum,doublectime);入隊隊內(nèi)進(jìn)行調(diào)整,返回隊內(nèi)位置intpopqueue(carqueue&cq);出隊隊內(nèi)進(jìn)行調(diào)整,返回汽車車牌號void&cs,carqueue&cq,intcnum,double車輛到達(dá),根據(jù)輸入的車牌號、到達(dá)時間,變更函數(shù)參數(shù);并cout車位信息voidleave(carstack&cs,carqueue&cq,intcnum,double車輛離開,根據(jù)輸入的車牌號找到汽車,并進(jìn)行出棧操作、出隊操作和入棧操作;并cout停留時間和收費情況voiddeletequeue(carqueue&cq,inti);刪除cq過道中第i輛車intpopstacknumber;專門存放棧的時候返回的車牌號popstacktime;專門存放出棧的時候返回的時刻};**********************************以下為類的實現(xiàn)】************************************構(gòu)函數(shù),棧的初始化top=-1;s=newcar[Max];創(chuàng)建car類型棧元素的數(shù)組if(s==NULL)cout<<"??臻g分配不成!"<<endl;exit(1);int判斷棧是否為構(gòu)造函數(shù),隊列的初始化rear=front=NULL;intparkingmanagement::pushstack(carstack&cs,intcnum,doublectime)入棧,棧內(nèi)進(jìn)行調(diào)整,返回棧內(nèi)位置從1開始,top從0始cout<<"停車場已滿!"<<endl;Max;elsecs.top++;(cs.s[cs.top]).number=cnum;cnum賦給棧頂位置的的車牌號s是car類型棧元素的數(shù)組(cs.s[cs.top]).time=ctime;將ctime賦棧頂位置的車的入棧時間,是car類型棧元素的數(shù)組(cs.top+1);返回棧內(nèi)位置加,即停車場內(nèi)車位從1號開始voidparkingmanagement::popstack(carstack&cs,intcnum)棧,cs棧內(nèi)進(jìn)行調(diào)整,根據(jù)車牌號把車彈出棧將出棧的number賦值intpopstacknumber將出棧car的time賦值給doublepopstacktime,無返回值!inti;carp;stemp;定義一個carstack類型的臨時存放出棧元素的棧for(i=0;i<=cs.top;i++)if((cs.s[i]).number==cnum)break;當(dāng)要出棧的車的車牌號=棧內(nèi)的車牌號元素時,跳出循環(huán)p=cs.s[i];要出棧的元素賦給car類的p存放while(cs.top>i)stemp.s[++(stemp.top)]=cs.s[(cs.top)--];棧的元素數(shù)組逐個賦給臨時棧將這個車牌號信息傳給intpopstacknumber()將該車的時間信息傳給doublepopstacktime()棧頂指針回到原來位置while(stemp.top>=0)臨時棧出棧的元素逐個賦給原棧,完成先退再進(jìn)的工作intparkingmanagement::pushqueue(carqueuecnum,doublectime)入隊,隊內(nèi)行調(diào)整,返回隊內(nèi)位置carint用于記錄車在過道上的位置信息,因隊列為鏈?zhǔn)降?,所以進(jìn)行循環(huán)累加p=newcar;創(chuàng)一個car類型的指針p->number=cnum;p->time=ctime;首先將指向存放car類元素的數(shù)組初始地址置空if(cq.front==NULL)一次入隊要判斷頭結(jié)點是否為空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)出,隊內(nèi)進(jìn)行調(diào)整返回汽車車牌號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)車輛到達(dá),根據(jù)輸入的車牌號、到達(dá)時間,變更函數(shù)參數(shù);并cout位信息intpos;if(!(cs.full()))果棧未滿,車輛停入停車場intfl(0),i;義一個從0開始的標(biāo)記for(i=0;i<=cs.top;i++)if(cs.s[i].number==cnum)果到達(dá)的車的車牌號=棧內(nèi)已有車輛的車牌號fl=1;fl1break;如果到達(dá)的車的車牌號!棧內(nèi)已有車輛的車牌號cout<<"輸入錯誤!請重輸入!else入棧,返回車位信息cout<<"該停車場還有空,請到<<pos<<"號車位進(jìn)行泊車"<<endl;else如果棧滿,車輛暫停便道pos=pushqueue(cq,cnum,ctime);入隊返回車位信息cout<<"該停車場已滿,將車停到便道號車位上"<<endl;voidparkingmanagement::leave(carstackcnum,doublectime)車輛離開,根據(jù)輸入的車牌號找到汽車,并進(jìn)行出棧操作、出隊操作和入棧操作;并cout停留時間和收費情況inti,flag(0),pstack,count(1),outcarnum;,入數(shù)據(jù)為:(A1,5),(,2,),******************************************************(,320),A4,),(A,,),********************************************************(D,,),(D,,),(,0,0)。*********************************************************其中:A表示到(Arrival);表示離去(Departure);表示輸結(jié)束()。***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<<"您的輸入有誤,重新輸入!【】【停車場管理系統(tǒng)【方案二程序】】##############(ps本方案與方案一有同樣的問題,就是在對道上的車進(jìn)行駛離操作時,數(shù)據(jù)錯誤,同樣的理由,沒有改正。如果有細(xì)心娃娃幫忙指點改正,在此感激啦)*************************【以下為類定義】************************************#includeusingnamespacestd;constintMaxSize=2;停車場最多能停2輛車template<classclasscarStack;template<classT>定義模板類structNode過停車的隊列所需鏈?zhǔn)浇Y(jié)點carnum;義車牌號類型Node<T>*next;此處<T>也可以省略};template<classclasscarinfofriendclasscarStack;public:carnum;車intcartime;停車時間};template<classT>classcarQueuefriendclasscarStack;public:carQueue();構(gòu)造函數(shù),初始化一個空的鏈隊列int將素x入隊并返回其在隊內(nèi)的位置(從1開始)DeQueue();將隊頭鏈?zhǔn)浇Y(jié)點出隊并返回汽車車牌號voiddeletequeue(int將隊內(nèi)低i個元素刪除,即便道上i位的汽車駛離boolEmpty();判斷鏈隊列是否為空Node<T>*front,*rear;};template<classclasscarStackfriendclasscarinfo;public:;構(gòu)造函數(shù),棧的初始化,停車場容量為【】voidPushcar(Tcnum,intctime);有車停入停車場intPopcar(Toutcnum,intoutctime);將第cnum輛出棧并返回其停車時間(i;template<classcarQueue<T>::DeQueue()Node<T>*p;if(front==NULL)cout<<"便道上沒車";elsep=front;front=front->next;隊頭元素所在結(jié)點摘鏈p->carnum;將出隊進(jìn)棧的車從隊列里刪除template<classboolcarQueue<T>::Empty()判斷是否為空,為空則返回,不為空則返回0front==NULL;template<classT>carStack<T>::carStack()構(gòu)造棧算法:top(-1)建立一個最大尺寸為size的空棧S=newcarinfo<T>[MaxSize];建存儲棧的數(shù)組if(S==NULL)配不成功cerr<<"態(tài)存儲失敗!"<<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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論