(完整版)C++數據結構 大作業畢業課程設計_第1頁
(完整版)C++數據結構 大作業畢業課程設計_第2頁
(完整版)C++數據結構 大作業畢業課程設計_第3頁
(完整版)C++數據結構 大作業畢業課程設計_第4頁
(完整版)C++數據結構 大作業畢業課程設計_第5頁
已閱讀5頁,還剩74頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【【【上海力學院】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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論