c++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計 】停車場管理】
《c++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計 】停車場管理】》由會員分享,可在線閱讀,更多相關(guān)《c++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計 】停車場管理】(18頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、C++/數(shù)據(jù)結(jié)構(gòu) 大作業(yè)/課程設(shè)計——【校園導(dǎo)游咨詢】【停車場管理】娃娃們可以收著以后用 絕對純手工打造 內(nèi)含類模塊/一維指針數(shù)組(謹(jǐn)以此程序供大家參考。運行結(jié)果后面有貼圖) 目錄 【1】校園導(dǎo)游咨詢 程序設(shè)計源代碼 及 截圖 【2】停車場管理——方案一 程序設(shè)計源代碼 及 截圖 【3】停車場管理——方案二 程序設(shè)計源代碼 及 截圖 ##############【1】【【校園導(dǎo)游咨詢】】#################### (ps:該校園導(dǎo)游咨詢系統(tǒng)沒有輸入值,所有信息是都在class MGraph的構(gòu)造函數(shù)中傳輸?shù)?,且校園景點信息皆為【【上海電力學(xué)院】】景點信息。請大
2、家注意,直接從文章copy到visual stutio中會出現(xiàn)中文字符,注意刪除,推薦大家在一行語句的分號后面,點出光標(biāo),按一下delete鍵,然后按一下enter鍵,完成visual stutio的自動對齊,這樣程序看起來一目了然,更易于操作和更改) 【問題描述】 設(shè)計一個校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)。 【基本要求】 (1)設(shè)計你所在學(xué)校的校園平面圖,所含景點不少于10個。以圖中頂點表示校內(nèi)各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。 (2)為來訪客人提供圖中任意景點相關(guān)信息的查詢。 (3)為來訪客人提供圖中任意景點的問路查詢,
3、即查詢?nèi)我鈨蓚€景點之間的一個最短的簡單路徑。
【選作內(nèi)容】
(6)擴充每個景點的鄰接景點的方向等信息,使得路徑查詢結(jié)果能提供詳盡的導(dǎo)向信息。
**************************【以下為類的定義】********************************
#include
4、class MGraph;
template 5、 T>
class MGraph//定義無向圖的鄰接矩陣
{
public:
MGraph();
//構(gòu)造函數(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(luò)的方向信息,如“向東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分別存放兩點間最短路徑的前驅(qū)節(jié)點,兩點間最短路徑長度
int Line[MaxSize];//Line存放路徑
int kkk;//Line[]數(shù)組的標(biāo)記
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ū)圖書館","大學(xué)生活動中心",
"教師辦公樓、醫(yī)務(wù)室及留學(xué)生公寓","大禮堂,用于舉辦各種文藝演出","南校區(qū)第4教學(xué)樓" 10、,"實習(xí)基地,計算機房等",
"國際交流中心,教職工餐廳","南校區(qū)第3教學(xué)樓","南校區(qū)第2教學(xué)樓","南校區(qū)第1教學(xué)樓",
"北校區(qū)圖書館","北校區(qū)第3教學(xué)樓","北校區(qū)第4教學(xué)樓","北校區(qū)第2教學(xué)樓",
"北校區(qū)第1教學(xué)樓","北校區(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之間的南北東西關(guān)系 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、駛離操作時程序內(nèi)部有錯誤數(shù)據(jù),雖然做了函數(shù)完成這一功能,但因時間有限,沒能及時查找更正,現(xiàn)在懶得改了。。。大家將就看吧。不過運行是可以的)
【問題描述】
設(shè)停車場是一個可停放n輛汽車的 長通道,且只有一個大門可供汽車進出。汽車在停車場內(nèi)按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車信放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場院,每輛停放在車場的車在它離開停車場時必須 22、按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。
【基本要求】
以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達”或“離去”信息、汽車牌照號碼以及到達或離去的時刻。對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。
【測試數(shù)據(jù)】
設(shè)n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,15),(A,3,20),(A,4,25),( 23、A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到達(Arrival);D表示離去(Departure);E表示輸入結(jié)束(End)。
**************************【以下為類的定義】*************************************
#include 24、號;時刻
//因此,我的停車場類分成車輛到達和車輛離開兩個主要的函數(shù)實現(xiàn)。
//車輛到達,有入棧和入隊。車輛離開有出棧,出隊和入棧操作。
//因此我又編寫入棧的類,隊的類。與parkingmanagement進行友元。
//**************************************類定義***********************************************
class car//車的信息類
{
public:
double time;//計費時間
int number;//車牌號
car *next;//存放car類型元素的數(shù)組初始 25、地址
};
class carstack//棧(停車場)的類
{
friend class parkingmanagement;//parkingmanagement能訪問carstack類中所有成員
public:
carstack();//構(gòu)造函數(shù),棧的初始化
int empty();//判斷棧是否為空
int full();//判斷棧是否為滿
car *s;//存放car類型棧元素的數(shù)組初始地址
int top;//棧頂指針
};
class carqueue//隊列(便道)的類
{
friend class parkingmanagement;//parki 26、ngmanagement能訪問carstack類中所有成員
public:
carqueue();//構(gòu)造函數(shù),隊列的初始化
int full();//判斷隊列是否為滿
car *front,*rear;//存放car類型隊列元素的數(shù)組初始地址
};
class parkingmanagement
{
public:
int pushstack(carstack &cs,int cnum,double ctime);//入棧,cs棧內(nèi)進行調(diào)整,返回棧內(nèi)位置
void popstack(carstack &cs,int cnum);//出棧,cs棧內(nèi)進行調(diào)整,
//根據(jù)車牌 27、號把車彈出棧,將出棧car的number賦值給int popstacknumber()
//將出棧car的time賦值給double popstacktime(),無返回值!
int pushqueue(carqueue &cq,int cnum,double ctime);//入隊,隊內(nèi)進行調(diào)整,返回隊內(nèi)位置
int popqueue(carqueue &cq);//出隊,隊內(nèi)進行調(diào)整,返回汽車車牌號
void arrival(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛到達,
//根據(jù)輸入的車牌號、到達時間,變更函數(shù)參 28、數(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()//構(gòu)造函數(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棧內(nèi)進行調(diào)整,返回棧內(nèi)位置
{
if(cs.top==Max-1)//Max從1開始,top從0開始
{
cout<<"停車場已滿!"< 31、棧時間,s是car類型棧元素的數(shù)組
return (cs.top+1);//返回棧內(nèi)位置加1,即停車場內(nèi)車位從1號開始
}
}
void parkingmanagement::popstack(carstack &cs,int cnum)//出棧,cs棧內(nèi)進行調(diào)整,
//根據(jù)車牌號把車彈出棧,將出棧car的number賦值給int popstacknumber
//將出棧car的time賦值給double popstacktime,無返回值!
{
int i;
car p;
carstack stemp;//定義一個carstack類型的臨時存放出棧元素的棧
for(i= 32、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ù)組逐個賦給臨時棧
popstacknumber=p.number;//將這個車牌號信息傳給int popstacknumber()
popstacktime=p.time;//將該車的時間信息傳給double popstacktime() 33、
cs.top--;//棧頂指針回到原來位置
while(stemp.top>=0)
cs.s[++(cs.top)]=stemp.s[(stemp.top)--];//臨時棧出棧的元素逐個賦給原棧,完成先退再進的工作
}
int parkingmanagement::pushqueue(carqueue &cq,int cnum,double ctime)//入隊,隊內(nèi)進行調(diào)整,返回隊內(nèi)位置
{
car *p,*countp;
int count(1);//count用于記錄車在過道上的位置信息,因隊列為鏈?zhǔn)降?,所以進行循環(huán)累加
p=new car;//創(chuàng)建一個car類型的 34、指針
p->number=cnum;
p->time=ctime;
p->next=NULL;//首先將指向存放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++;
coun 35、tp=countp->next;
}//count即車在過道上的位置,【從1開始計?。?!】
return count;
}
int parkingmanagement::popqueue(carqueue &cq)//出隊,隊內(nèi)進行調(diào)整,返回汽車車牌號
{
car p;
p.number=((cq.front)->next)->number;//cq隊里,從cq.front開始指向下一個元素的車牌號賦給car類型的車信息
p.time=((cq.front)->next)->time;//cq隊里,從cq.front開始指向下一個元素的時刻
//賦給car類型的車信息
p. 36、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開始的標(biāo)記fl
for(i=0;i<=cs.top;i++)
{
if(cs.s[i].number==cnum)//如果到達的車的車牌號=棧內(nèi)已有車輛的車牌號
{
fl=1;//fl記1
break;
}
}
if(fl==1)//如果到達的車的車牌號!=棧內(nèi)已有車輛的車牌號
cout<<"輸入錯誤!請重新輸入!"< 38、< 39、unt(1),outcarnum;
double hour;
car *p;
for(i=0;i<=cs.top;i++)
if((cs.s[i]).number==cnum)
{
flag=1;
break;
}
if(flag)//如果輸入的車牌號與棧內(nèi)已有車輛的車牌號一致
{
popstack(cs,cnum);//出棧操作
hour=ctime-popstacktime;//時間計算
outcarnum=popqueue(cq);//將便道上的第一輛車出隊,入棧。并將其車牌號賦給outcarnum
pstack=pushstack(cs,outcarnum, 40、ctime);//將便道上的第一輛車,入棧
cout<<"該車在本停車場內(nèi)停留時間為"< 41、letequeue(cq,count);
if(count>Max)
{
cout<<"您的車在便道上的位置為"< 42、
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、t<<"= 歡迎光臨! ="< 44、調(diào)試程序******設(shè)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表示離去(Depart 45、ure);E表示輸入結(jié)束(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,cartime);
46、
else if(acc=='E')
break;
else
cout<<"您的輸入有誤,請重新輸入!"< 47、ce std;
const int MaxSize=2;//停車場內(nèi)最多能停2輛車
template 48、
};
template 49、
template 50、*************【以下為類的實現(xiàn)】****************************************
template 51、/空隊列,【【【新結(jié)點既是隊頭,又是隊尾】】】關(guān)鍵是!front指向第一個結(jié)點
{
front=rear=s;
}
else
{
rear->next=s;//將結(jié)點s插入到隊尾
rear=s;
}
p=front;
while(p!=NULL)
{
i++;
p=p->next;
}//i即車在過道上的位置,【從1開始計?。?!】
return i;
}
template 52、e
{
p=front;
front=front->next;//將隊頭元素所在結(jié)點摘鏈
}
return p->carnum;
delete p;//將出隊進棧的車從隊列里刪除
}
template 53、[MaxSize];//創(chuàng)建存儲棧的數(shù)組
if(S==NULL) //分配不成功
{ cerr<<"動態(tài)存儲失??!"< 54、T>::Popcar(T outcnum,int outctime)
{
int i,hour;
carStack Stemp;//建一個臨時模擬停車場
int Stop=-1;
for(i=0;i<=top;i++)
if(outcnum==S[i].carnum)
break;
while(top>i)
Stemp.S[++Stop]=S[top--];
hour=outctime-S[top].cartime;
return hour;
top--;
while(Stop>=0)
S[++top]=Stemp.S[Stop--];
}
template 55、lass T>
bool carStack 56、ext;
delete q;
}
}
******************************【以下為主函數(shù)】***************************************
void outputpark()//系統(tǒng)功能選擇頁面,輸入泊車信息
{
cout<<"======================================================================"< 57、dl;
cout<<"======================================================================"< 58、rrive>>carnum>>cartime;
if(arrive=='A')
{
if(cs.top!=MaxSize-1)//停車場內(nèi)有空位可以駛?cè)?
{
cs.Pushcar(carnum,cartime);
cout<<"請駛?cè)胪\噲龅?< 59、(cs.S[i].carnum==carnum)
{
flag=1;
break;
}
if(flag)
{
int hour;
hour=cs.Popcar(carnum,cartime);
cout<<"您的"< 60、錄該車便道內(nèi)的位置
Node
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備采購常用的四種評標(biāo)方法
- 車間員工管理須知(應(yīng)知應(yīng)會)
- 某公司設(shè)備維護保養(yǎng)工作規(guī)程
- 某企業(yè)潔凈車間人員進出管理規(guī)程
- 企業(yè)管理制度之5S管理的八個口訣
- 標(biāo)準(zhǔn)化班前會的探索及意義
- 某企業(yè)內(nèi)審員考試試題含答案
- 某公司環(huán)境保護考核管理制度
- 現(xiàn)場管理的定義
- 員工培訓(xùn)程序
- 管理制度之生產(chǎn)廠長的職責(zé)與工作標(biāo)準(zhǔn)
- 某公司各級專業(yè)人員環(huán)保職責(zé)
- 企業(yè)管理制度:5S推進與改善工具
- XXX公司環(huán)境風(fēng)險排查及隱患整改制度
- 生產(chǎn)車間基層管理要點及建議