C數(shù)據(jù)結構 大作業(yè)課程設計 】【停車場管理】
《C數(shù)據(jù)結構 大作業(yè)課程設計 】【停車場管理】》由會員分享,可在線閱讀,更多相關《C數(shù)據(jù)結構 大作業(yè)課程設計 】【停車場管理】(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、C++/數(shù)據(jù)結構 大作業(yè)/課程設計——【校園導游咨詢】【停車場管理】娃娃們可以收著以后用 絕對純手工打造 內含類模塊/一維指針數(shù)組(謹以此程序供大家參考。運行結果后面有貼圖) 目錄 【1】校園導游咨詢 程序設計源代碼 及 截圖 【2】停車場管理——方案一 程序設計源代碼 及 截圖 【3】停車場管理——方案二 程序設計源代碼 及 截圖 ##############【1】【【校園導游咨詢】】#################### (ps:該校園導游咨詢系統(tǒng)沒有輸入值,所有信息是都在class MGraph的構造函數(shù)中傳輸?shù)?,且校園景點信息皆為【【上海電力學院】】景點信息。請大
2、家注意,直接從文章copy到visual stutio中會出現(xiàn)中文字符,注意刪除,推薦大家在一行語句的分號后面,點出光標,按一下delete鍵,然后按一下enter鍵,完成visual stutio的自動對齊,這樣程序看起來一目了然,更易于操作和更改) 【問題描述】 設計一個校園導游程序,為來訪的客人提供各種信息查詢服務。 【基本要求】 (1)設計你所在學校的校園平面圖,所含景點不少于10個。以圖中頂點表示校內各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關信息。 (2)為來訪客人提供圖中任意景點相關信息的查詢。 (3)為來訪客人提供圖中任意景點的問路查詢,
3、即查詢任意兩個景點之間的一個最短的簡單路徑。
【選作內容】
(6)擴充每個景點的鄰接景點的方向等信息,使得路徑查詢結果能提供詳盡的導向信息。
**************************【以下為類的定義】********************************
#include
4、class MGraph;
template 5、 T>
class MGraph//定義無向圖的鄰接矩陣
{
public:
MGraph();
//構造函數(shù),初始化具有n個頂點的圖
void printvexname();//顯示所有景點及景點代號
void printvexinf(int i);//顯示代號為i景點的名稱及信息
void printroad(int i,int j);//顯示景點i~j的最短路徑方案信息
void printdir(int i,int j);//顯示景點i到j的方向信息,如“向東100m,向南200m”
VertexNode 6、信息的 景點類數(shù)組
int vertexNum,arcNum; //圖的頂點數(shù)和邊數(shù)
void Root(int p,int q);//遞歸尋找pq間的最短路徑
int Path[MaxSize][MaxSize],Dist[MaxSize][MaxSize];//創(chuàng)建Path和Dist分別存放兩點間最短路徑的前驅節(jié)點,兩點間最短路徑長度
int Line[MaxSize];//Line存放路徑
int kkk;//Line[]數(shù)組的標記
private:
T vertex[MaxSize]; //存放圖中頂點的數(shù)組
int arc[MaxSize][MaxSize];//存放 7、圖中邊的數(shù)組
};
*************************【以下為類的實現(xiàn) 即類函數(shù)的定義】***********************************
template 8、,0,
0,0,0,0,2,3,0,
0,0,0,0,2,3,1,0,
0,0,2,0,2,0,0,2,0,
4,0,2,0,0,0,0,0,1,0,
0,0,0,0,0,0,0,0,0,2,0,
1,0,0,0,0,0,0,0,0,0,2,0,
0,0,0,0,0,0,0,0,0,3,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,2,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,
0,0,0,0,0 9、,0,0,0,0,0,0,0,4,4,0,0,2,0};
int a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
char* b[]={"南門","實驗樓","南圖","大活","睿思樓","大禮堂",
"南4教","知行樓","國交樓","南3教","南2教","南1教",
"北圖","北3教","北4教","北2教","北1教","北門"};
char* c[]={"南校區(qū)正門","物理實驗樓","南校區(qū)圖書館","大學生活動中心",
"教師辦公樓、醫(yī)務室及留學生公寓","大禮堂,用于舉辦各種文藝演出","南校區(qū)第4教學樓" 10、,"實習基地,計算機房等",
"國際交流中心,教職工餐廳","南校區(qū)第3教學樓","南校區(qū)第2教學樓","南校區(qū)第1教學樓",
"北校區(qū)圖書館","北校區(qū)第3教學樓","北校區(qū)第4教學樓","北校區(qū)第2教學樓",
"北校區(qū)第1教學樓","北校區(qū)正門"};
int d[]={8,6,4,4,1,0,0,1,3,4,6,8,4,3,2,3,5,8};
int e[]={8,8,8,10,8,10,7,6,6,6,6,6,3,1,0,0,0,2};
int i,j;
vertexNum=18;
arcNum=30;
for(i=0;i 11、list[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 12、T>::printvexname()
{
int i;
for(i=0;i 13、
{
int dx,nb;//臨時存放i與j之間的南北東西關系 j在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<<"向東"< 14、te 15、um;q++)
Dist[p][q]=arc[p][q];//鄰接矩陣賦值
for(k=0;k 16、===================================================\n";
cout<<"從"< 17、ne[m];
cout<<"-->";
printdir(item1-1,item1);
cout<<"-->"< 18、"=============================================================="< 19、ut<<"請輸入要選擇的功能號:";
cin>>choice;
return choice;
}
void main()
{
MGraph 20、>>i;
mg.printvexinf(i);
}
else if(fc==3)
{
int i,j;
mg.printvexname();
cout<<"請輸入兩景點代號(我們將把最短路線反饋予您):";
cin>>i>>j;
mg.printroad(i,j);
}
else if(fc==4)
break;
else
cout<<"輸入有誤,請重新輸入!"< 21、該車進行駛離操作時程序內部有錯誤數(shù)據(jù),雖然做了函數(shù)完成這一功能,但因時間有限,沒能及時查找更正,現(xiàn)在懶得改了。。。大家將就看吧。不過運行是可以的)
【問題描述】
設停車場是一個可停放n輛汽車的 長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車信放在車場的最北端),若車場內已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場院,每輛停放在車場的車在它離開停車 22、場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。
【基本要求】
以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達”或“離去”信息、汽車牌照號碼以及到達或離去的時刻。對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出汽車在停車場內或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內停留的時間和應交納的費用(在便道上停留的時間不收費)。棧以順序結構實現(xiàn),隊列以鏈表結構實現(xiàn)。
【測試數(shù)據(jù)】
設n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,15),(A,3,20),(A,4,2 23、5),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到達(Arrival);D表示離去(Departure);E表示輸入結束(End)。
**************************【以下為類的定義】*************************************
#include 24、);車牌號;時刻
//因此,我的停車場類分成車輛到達和車輛離開兩個主要的函數(shù)實現(xiàn)。
//車輛到達,有入棧和入隊。車輛離開有出棧,出隊和入棧操作。
//因此我又編寫入棧的類,隊的類。與parkingmanagement進行友元。
//**************************************類定義***********************************************
class car//車的信息類
{
public:
double time;//計費時間
int number;//車牌號
car *next;//存放car類型元素的 25、數(shù)組初始地址
};
class carstack//棧(停車場)的類
{
friend class parkingmanagement;//parkingmanagement能訪問carstack類中所有成員
public:
carstack();//構造函數(shù),棧的初始化
int empty();//判斷棧是否為空
int full();//判斷棧是否為滿
car *s;//存放car類型棧元素的數(shù)組初始地址
int top;//棧頂指針
};
class carqueue//隊列(便道)的類
{
friend class parkingmanagement;//p 26、arkingmanagement能訪問carstack類中所有成員
public:
carqueue();//構造函數(shù),隊列的初始化
int full();//判斷隊列是否為滿
car *front,*rear;//存放car類型隊列元素的數(shù)組初始地址
};
class parkingmanagement
{
public:
int pushstack(carstack &cs,int cnum,double ctime);//入棧,cs棧內進行調整,返回棧內位置
void popstack(carstack &cs,int cnum);//出棧,cs棧內進行調整,
// 27、根據(jù)車牌號把車彈出棧,將出棧car的number賦值給int popstacknumber()
//將出棧car的time賦值給double popstacktime(),無返回值!
int pushqueue(carqueue &cq,int cnum,double ctime);//入隊,隊內進行調整,返回隊內位置
int popqueue(carqueue &cq);//出隊,隊內進行調整,返回汽車車牌號
void arrival(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛到達,
//根據(jù)輸入的車牌號、到達時間,變 28、更函數(shù)參數(shù);并cout車位信息
void leave(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛離開,
//根據(jù)輸入的車牌號找到汽車,并進行出棧操作、出隊操作和入棧操作;
//并cout停留時間和收費情況
void deletequeue(carqueue &cq,int i);//刪除cq過道中第i輛車
int popstacknumber;//專門存放出棧的時候返回的車牌號
double popstacktime;//專門存放出棧的時候返回的時刻
};
*************************** 29、*******【以下為類的實現(xiàn)】************************************
carstack::carstack()//構造函數(shù),棧的初始化
{
top=-1;
s=new car[Max];//創(chuàng)建car類型棧元素的數(shù)組
if(s==NULL)
{
cout<<"??臻g分配不成功!"< 30、;
}
int parkingmanagement::pushstack(carstack &cs,int cnum,double ctime)//入棧,cs棧內進行調整,返回棧內位置
{
if(cs.top==Max-1)//Max從1開始,top從0開始
{
cout<<"停車場已滿!"< 31、的車的入棧時間,s是car類型棧元素的數(shù)組
return (cs.top+1);//返回棧內位置加1,即停車場內車位從1號開始
}
}
void parkingmanagement::popstack(carstack &cs,int cnum)//出棧,cs棧內進行調整,
//根據(jù)車牌號把車彈出棧,將出棧car的number賦值給int popstacknumber
//將出棧car的time賦值給double popstacktime,無返回值!
{
int i;
car p;
carstack stemp;//定義一個carstack類型的臨時存放出棧元素的棧
fo 32、r(i=0; i<=cs.top; i++)
if((cs.s[i]).number==cnum) break;//當要出棧的車的車牌號=棧內的車牌號元素時,跳出循環(huán)
p=cs.s[i];//將要出棧的元素賦給car類型的p存放
while(cs.top>i)
stemp.s[++(stemp.top)]=cs.s[(cs.top)--];//出棧的元素數(shù)組逐個賦給臨時棧
popstacknumber=p.number;//將這個車牌號信息傳給int popstacknumber()
popstacktime=p.time;//將該車的時間信息傳給double popstackti 33、me()
cs.top--;//棧頂指針回到原來位置
while(stemp.top>=0)
cs.s[++(cs.top)]=stemp.s[(stemp.top)--];//臨時棧出棧的元素逐個賦給原棧,完成先退再進的工作
}
int parkingmanagement::pushqueue(carqueue &cq,int cnum,double ctime)//入隊,隊內進行調整,返回隊內位置
{
car *p,*countp;
int count(1);//count用于記錄車在過道上的位置信息,因隊列為鏈式的,所以進行循環(huán)累加
p=new car;//創(chuàng)建一個ca 34、r類型的指針
p->number=cnum;
p->time=ctime;
p->next=NULL;//首先將指向存放car類型元素的數(shù)組初始地址置空
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++;
35、countp=countp->next;
}//count即車在過道上的位置,【從1開始計?。?!】
return count;
}
int parkingmanagement::popqueue(carqueue &cq)//出隊,隊內進行調整,返回汽車車牌號
{
car p;
p.number=((cq.front)->next)->number;//cq隊里,從cq.front開始指向下一個元素的車牌號賦給car類型的車信息
p.time=((cq.front)->next)->time;//cq隊里,從cq.front開始指向下一個元素的時刻
//賦給car類型的車信息 36、
p.next=((cq.front)->next)->next;//cq隊里,從cq.front開始指向下一個元素的指針
//賦給car類型的車信息的下一個元素的指針
return p.number;
cq.front=(cq.front)->next;
}
void parkingmanagement::arrival(carstack &cs,carqueue &cq,int cnum,double ctime)
//車輛到達,根據(jù)輸入的車牌號、到達時間,變更函數(shù)參數(shù);并cout車位信息
{
int pos;
if(!(cs.full()))//如果棧未滿,車輛停入停 37、車場
{
int fl(0),i;//定義一個從0開始的標記fl
for(i=0;i<=cs.top;i++)
{
if(cs.s[i].number==cnum)//如果到達的車的車牌號=棧內已有車輛的車牌號
{
fl=1;//fl記1
break;
}
}
if(fl==1)//如果到達的車的車牌號!=棧內已有車輛的車牌號
cout<<"輸入錯誤!請重新輸入!"< 38、cout< 39、k,count(1),outcarnum;
double hour;
car *p;
for(i=0;i<=cs.top;i++)
if((cs.s[i]).number==cnum)
{
flag=1;
break;
}
if(flag)//如果輸入的車牌號與棧內已有車輛的車牌號一致
{
popstack(cs,cnum);//出棧操作
hour=ctime-popstacktime;//時間計算
outcarnum=popqueue(cq);//將便道上的第一輛車出隊,入棧。并將其車牌號賦給outcarnum
pstack=pushstack(cs,outcar 40、num,ctime);//將便道上的第一輛車,入棧
cout<<"該車在本停車場內停留時間為"< 41、
deletequeue(cq,count);
if(count>Max)
{
cout<<"您的車在便道上的位置為"< 42、xt;
j++;
}//找到第i個節(jié)點(i從1開始)
if(!p || !p->next)
cout<<"i不合法";
else
{
q=p->next;
p->next=q->next;
delete q;
}
}
*******************************【以下是主程序】************************************
void print()
{
cout<<"= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ="< 43、
cout<<"= 歡迎光臨! ="< 44、****調試程序******設n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,15),*********************************
//*********************(A,3,20),(A,4,25),(A,5,30),***********************************
//*********************(D,2,35),(D,4,40),(E,0,0)。************************************
//*********************其中:A表示到達(Arrival);D表示離去(De 45、parture);E表示輸入結束(End)。***
void main()
{
char acc;
int carnum;
double cartime;
parkingmanagement park;
carstack cars;
carqueue carq;
while(1)
{
print();
cin>>acc>>carnum>>cartime;
if(acc=='A')
park.arrival(cars,carq,carnum,cartime);
else if(acc=='D')
park.leave(cars,carq,carnum,cartim 46、e);
else if(acc=='E')
break;
else
cout<<"您的輸入有誤,請重新輸入!"< 47、amespace std;
const int MaxSize=2;//停車場內最多能停2輛車
template 48、//停車時間
};
template 49、
};
template 50、*******************【以下為類的實現(xiàn)】****************************************
template 51、NULL)//空隊列,【【【新結點既是隊頭,又是隊尾】】】關鍵是!front指向第一個結點
{
front=rear=s;
}
else
{
rear->next=s;//將結點s插入到隊尾
rear=s;
}
p=front;
while(p!=NULL)
{
i++;
p=p->next;
}//i即車在過道上的位置,【從1開始計?。?!】
return i;
}
template 52、;
else
{
p=front;
front=front->next;//將隊頭元素所在結點摘鏈
}
return p->carnum;
delete p;//將出隊進棧的車從隊列里刪除
}
template 53、nfo 54、Stack 55、late 56、t=q->next;
delete q;
}
}
******************************【以下為主函數(shù)】***************************************
void outputpark()//系統(tǒng)功能選擇頁面,輸入泊車信息
{
cout<<"======================================================================"< 57、)"< 58、cin>>arrive>>carnum>>cartime;
if(arrive=='A')
{
if(cs.top!=MaxSize-1)//停車場內有空位可以駛入
{
cs.Pushcar(carnum,cartime);
cout<<"請駛入停車場的"< 59、+)
if(cs.S[i].carnum==carnum)
{
flag=1;
break;
}
if(flag)
{
int hour;
hour=cs.Popcar(carnum,cartime);
cout<<"您的"< 60、pos用來記錄該車便道內的位置
Node
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。