c++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì) 】停車場管理】
《c++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì) 】停車場管理】》由會員分享,可在線閱讀,更多相關(guān)《c++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì) 】停車場管理】(18頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、C++/數(shù)據(jù)結(jié)構(gòu) 大作業(yè)/課程設(shè)計(jì)——【校園導(dǎo)游咨詢】【停車場管理】娃娃們可以收著以后用 絕對純手工打造 內(nèi)含類模塊/一維指針數(shù)組(謹(jǐn)以此程序供大家參考。運(yùn)行結(jié)果后面有貼圖) 目錄 【1】校園導(dǎo)游咨詢 程序設(shè)計(jì)源代碼 及 截圖 【2】停車場管理——方案一 程序設(shè)計(jì)源代碼 及 截圖 【3】停車場管理——方案二 程序設(shè)計(jì)源代碼 及 截圖 ##############【1】【【校園導(dǎo)游咨詢】】#################### (ps:該校園導(dǎo)游咨詢系統(tǒng)沒有輸入值,所有信息是都在class MGraph的構(gòu)造函數(shù)中傳輸?shù)?,且校園景點(diǎn)信息皆為【【上海電力學(xué)院】】景點(diǎn)信息。請大
2、家注意,直接從文章copy到visual stutio中會出現(xiàn)中文字符,注意刪除,推薦大家在一行語句的分號后面,點(diǎn)出光標(biāo),按一下delete鍵,然后按一下enter鍵,完成visual stutio的自動對齊,這樣程序看起來一目了然,更易于操作和更改) 【問題描述】 設(shè)計(jì)一個(gè)校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)。 【基本要求】 (1)設(shè)計(jì)你所在學(xué)校的校園平面圖,所含景點(diǎn)不少于10個(gè)。以圖中頂點(diǎn)表示校內(nèi)各景點(diǎn),存放景點(diǎn)名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。 (2)為來訪客人提供圖中任意景點(diǎn)相關(guān)信息的查詢。 (3)為來訪客人提供圖中任意景點(diǎn)的問路查詢,
3、即查詢?nèi)我鈨蓚€(gè)景點(diǎn)之間的一個(gè)最短的簡單路徑。
【選作內(nèi)容】
(6)擴(kuò)充每個(gè)景點(diǎn)的鄰接景點(diǎn)的方向等信息,使得路徑查詢結(jié)果能提供詳盡的導(dǎo)向信息。
**************************【以下為類的定義】********************************
#include
4、class MGraph;
template 5、 T>
class MGraph//定義無向圖的鄰接矩陣
{
public:
MGraph();
//構(gòu)造函數(shù),初始化具有n個(gè)頂點(diǎn)的圖
void printvexname();//顯示所有景點(diǎn)及景點(diǎn)代號
void printvexinf(int i);//顯示代號為i景點(diǎn)的名稱及信息
void printroad(int i,int j);//顯示景點(diǎn)i~j的最短路徑方案信息
void printdir(int i,int j);//顯示景點(diǎn)i到j(luò)的方向信息,如“向東100m,向南200m”
VertexNode 6、信息的 景點(diǎn)類數(shù)組
int vertexNum,arcNum; //圖的頂點(diǎn)數(shù)和邊數(shù)
void Root(int p,int q);//遞歸尋找pq間的最短路徑
int Path[MaxSize][MaxSize],Dist[MaxSize][MaxSize];//創(chuàng)建Path和Dist分別存放兩點(diǎn)間最短路徑的前驅(qū)節(jié)點(diǎn),兩點(diǎn)間最短路徑長度
int Line[MaxSize];//Line存放路徑
int kkk;//Line[]數(shù)組的標(biāo)記
private:
T vertex[MaxSize]; //存放圖中頂點(diǎn)的數(shù)組
int arc[MaxSize][MaxSize];//存放 7、圖中邊的數(shù)組
};
*************************【以下為類的實(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[]={"南門","實(shí)驗(yàn)樓","南圖","大活","睿思樓","大禮堂",
"南4教","知行樓","國交樓","南3教","南2教","南1教",
"北圖","北3教","北4教","北2教","北1教","北門"};
char* c[]={"南校區(qū)正門","物理實(shí)驗(yàn)樓","南校區(qū)圖書館","大學(xué)生活動中心",
"教師辦公樓、醫(yī)務(wù)室及留學(xué)生公寓","大禮堂,用于舉辦各種文藝演出","南校區(qū)第4教學(xué)樓" 10、,"實(shí)習(xí)基地,計(jì)算機(jī)房等",
"國際交流中心,教職工餐廳","南校區(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;//臨時(shí)存放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<<"請輸入兩景點(diǎn)代號(我們將把最短路線反饋予您):";
cin>>i>>j;
mg.printroad(i,j);
}
else if(fc==4)
break;
else
cout<<"輸入有誤,請重新輸入!"< 21、駛離操作時(shí)程序內(nèi)部有錯(cuò)誤數(shù)據(jù),雖然做了函數(shù)完成這一功能,但因時(shí)間有限,沒能及時(shí)查找更正,現(xiàn)在懶得改了。。。大家將就看吧。不過運(yùn)行是可以的)
【問題描述】
設(shè)停車場是一個(gè)可停放n輛汽車的 長通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車信放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場院,每輛停放在車場的車在它離開停車場時(shí)必須 22、按它停留的時(shí)間長短交納費(fèi)用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。
【基本要求】
以棧模擬停車場,以隊(duì)列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號碼以及到達(dá)或離去的時(shí)刻。對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(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表示到達(dá)(Arrival);D表示離去(Departure);E表示輸入結(jié)束(End)。
**************************【以下為類的定義】*************************************
#include 24、號;時(shí)刻
//因此,我的停車場類分成車輛到達(dá)和車輛離開兩個(gè)主要的函數(shù)實(shí)現(xiàn)。
//車輛到達(dá),有入棧和入隊(duì)。車輛離開有出棧,出隊(duì)和入棧操作。
//因此我又編寫入棧的類,隊(duì)的類。與parkingmanagement進(jìn)行友元。
//**************************************類定義***********************************************
class car//車的信息類
{
public:
double time;//計(jì)費(fèi)時(shí)間
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//隊(duì)列(便道)的類
{
friend class parkingmanagement;//parki 26、ngmanagement能訪問carstack類中所有成員
public:
carqueue();//構(gòu)造函數(shù),隊(duì)列的初始化
int full();//判斷隊(duì)列是否為滿
car *front,*rear;//存放car類型隊(duì)列元素的數(shù)組初始地址
};
class parkingmanagement
{
public:
int pushstack(carstack &cs,int cnum,double ctime);//入棧,cs棧內(nèi)進(jìn)行調(diào)整,返回棧內(nèi)位置
void popstack(carstack &cs,int cnum);//出棧,cs棧內(nèi)進(jìn)行調(diào)整,
//根據(jù)車牌 27、號把車彈出棧,將出棧car的number賦值給int popstacknumber()
//將出棧car的time賦值給double popstacktime(),無返回值!
int pushqueue(carqueue &cq,int cnum,double ctime);//入隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回隊(duì)內(nèi)位置
int popqueue(carqueue &cq);//出隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回汽車車牌號
void arrival(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛到達(dá),
//根據(jù)輸入的車牌號、到達(dá)時(shí)間,變更函數(shù)參 28、數(shù);并cout車位信息
void leave(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛離開,
//根據(jù)輸入的車牌號找到汽車,并進(jìn)行出棧操作、出隊(duì)操作和入棧操作;
//并cout停留時(shí)間和收費(fèi)情況
void deletequeue(carqueue &cq,int i);//刪除cq過道中第i輛車
int popstacknumber;//專門存放出棧的時(shí)候返回的車牌號
double popstacktime;//專門存放出棧的時(shí)候返回的時(shí)刻
};
******************************* 29、***【以下為類的實(shí)現(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)進(jìn)行調(diào)整,返回棧內(nèi)位置
{
if(cs.top==Max-1)//Max從1開始,top從0開始
{
cout<<"停車場已滿!"< 31、棧時(shí)間,s是car類型棧元素的數(shù)組
return (cs.top+1);//返回棧內(nèi)位置加1,即停車場內(nèi)車位從1號開始
}
}
void parkingmanagement::popstack(carstack &cs,int cnum)//出棧,cs棧內(nèi)進(jìn)行調(diào)整,
//根據(jù)車牌號把車彈出棧,將出棧car的number賦值給int popstacknumber
//將出棧car的time賦值給double popstacktime,無返回值!
{
int i;
car p;
carstack stemp;//定義一個(gè)carstack類型的臨時(shí)存放出棧元素的棧
for(i= 32、0; i<=cs.top; i++)
if((cs.s[i]).number==cnum) break;//當(dāng)要出棧的車的車牌號=棧內(nèi)的車牌號元素時(shí),跳出循環(huán)
p=cs.s[i];//將要出棧的元素賦給car類型的p存放
while(cs.top>i)
stemp.s[++(stemp.top)]=cs.s[(cs.top)--];//出棧的元素?cái)?shù)組逐個(gè)賦給臨時(shí)棧
popstacknumber=p.number;//將這個(gè)車牌號信息傳給int popstacknumber()
popstacktime=p.time;//將該車的時(shí)間信息傳給double popstacktime() 33、
cs.top--;//棧頂指針回到原來位置
while(stemp.top>=0)
cs.s[++(cs.top)]=stemp.s[(stemp.top)--];//臨時(shí)棧出棧的元素逐個(gè)賦給原棧,完成先退再進(jìn)的工作
}
int parkingmanagement::pushqueue(carqueue &cq,int cnum,double ctime)//入隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回隊(duì)內(nèi)位置
{
car *p,*countp;
int count(1);//count用于記錄車在過道上的位置信息,因隊(duì)列為鏈?zhǔn)降?,所以進(jìn)行循環(huán)累加
p=new car;//創(chuàng)建一個(gè)car類型的 34、指針
p->number=cnum;
p->time=ctime;
p->next=NULL;//首先將指向存放car類型元素的數(shù)組初始地址置空
if (cq.front==NULL)//第一次入隊(duì)要判斷頭結(jié)點(diǎn)是否為空
{
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開始計(jì)?。。 ?
return count;
}
int parkingmanagement::popqueue(carqueue &cq)//出隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回汽車車牌號
{
car p;
p.number=((cq.front)->next)->number;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的車牌號賦給car類型的車信息
p.time=((cq.front)->next)->time;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的時(shí)刻
//賦給car類型的車信息
p. 36、next=((cq.front)->next)->next;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的指針
//賦給car類型的車信息的下一個(gè)元素的指針
return p.number;
cq.front=(cq.front)->next;
}
void parkingmanagement::arrival(carstack &cs,carqueue &cq,int cnum,double ctime)
//車輛到達(dá),根據(jù)輸入的車牌號、到達(dá)時(shí)間,變更函數(shù)參數(shù);并cout車位信息
{
int pos;
if(!(cs.full()))//如果棧未滿,車輛停入停車場
37、{
int fl(0),i;//定義一個(gè)從0開始的標(biāo)記fl
for(i=0;i<=cs.top;i++)
{
if(cs.s[i].number==cnum)//如果到達(dá)的車的車牌號=棧內(nèi)已有車輛的車牌號
{
fl=1;//fl記1
break;
}
}
if(fl==1)//如果到達(dá)的車的車牌號!=棧內(nèi)已有車輛的車牌號
cout<<"輸入錯(cuò)誤!請重新輸入!"< 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;//時(shí)間計(jì)算
outcarnum=popqueue(cq);//將便道上的第一輛車出隊(duì),入棧。并將其車牌號賦給outcarnum
pstack=pushstack(cs,outcarnum, 40、ctime);//將便道上的第一輛車,入棧
cout<<"該車在本停車場內(nèi)停留時(shí)間為"< 41、letequeue(cq,count);
if(count>Max)
{
cout<<"您的車在便道上的位置為"< 42、
j++;
}//找到第i個(gè)節(jié)點(diǎn)(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表示到達(dá)(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、*************【以下為類的實(shí)現(xiàn)】****************************************
template 51、/空隊(duì)列,【【【新結(jié)點(diǎn)既是隊(duì)頭,又是隊(duì)尾】】】關(guān)鍵是!front指向第一個(gè)結(jié)點(diǎn)
{
front=rear=s;
}
else
{
rear->next=s;//將結(jié)點(diǎn)s插入到隊(duì)尾
rear=s;
}
p=front;
while(p!=NULL)
{
i++;
p=p->next;
}//i即車在過道上的位置,【從1開始計(jì)!??!】
return i;
}
template 52、e
{
p=front;
front=front->next;//將隊(duì)頭元素所在結(jié)點(diǎn)摘鏈
}
return p->carnum;
delete p;//將出隊(duì)進(jìn)棧的車從隊(duì)列里刪除
}
template 53、[MaxSize];//創(chuàng)建存儲棧的數(shù)組
if(S==NULL) //分配不成功
{ cerr<<"動態(tài)存儲失敗!"< 54、T>::Popcar(T outcnum,int outctime)
{
int i,hour;
carStack Stemp;//建一個(gè)臨時(shí)模擬停車場
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物--人體的呼吸1-人教版課件
- 社會研究方法mpa論文寫作PPT培訓(xùn)課件
- 2020高考語文專題-圖文轉(zhuǎn)換漫畫答題技巧ppt課件
- 《語言表達(dá)之補(bǔ)寫語句》ppt課件
- 肺心病診斷及治療(與“肺動脈”有關(guān)的文檔共46張)
- 中考?xì)v史一輪專題復(fù)習(xí)壟斷資本主義時(shí)代的世界課件
- 重慶市結(jié)核病防治基本DOTS細(xì)則介紹
- 鋁的化合物(教育精品)
- 軸對稱(例1)(教育精品)
- 愛之鏈chuan(教育精品)
- bs71p44(教育精品)
- bh(教育精品)
- 北師大版小學(xué)五年級語文上冊《生命與水》課件
- 13白鵝ppt(教育精品)
- 荷葉圓圓 (5)課件