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è)計(131頁珍藏版)》請在裝配圖網(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)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車信放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場院,每輛停放在車場的車在它離開停車 22、場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。
【基本要求】
以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達(dá)”或“離去”信息、汽車牌照號碼以及到達(dá)或離去的時刻。對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場內(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,2 23、5),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到達(dá)(Arrival);D表示離去(Departure);E表示輸入結(jié)束(End)。
**************************【以下為類的定義】*************************************
#include 24、);車牌號;時刻
//因此,我的停車場類分成車輛到達(dá)和車輛離開兩個主要的函數(shù)實現(xiàn)。
//車輛到達(dá),有入棧和入隊。車輛離開有出棧,出隊和入棧操作。
//因此我又編寫入棧的類,隊的類。與parkingmanagement進行友元。
//**************************************類定義***********************************************
class car//車的信息類
{
public:
double time;//計費時間
int number;//車牌號
car *next;//存放car類型元素的 25、數(shù)組初始地址
};
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;//p 26、arkingmanagement能訪問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)整,
// 27、根據(jù)車牌號把車彈出棧,將出棧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);//車輛到達(dá),
//根據(jù)輸入的車牌號、到達(dá)時間,變 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()//構(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類型的臨時存放出棧元素的棧
fo 32、r(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ù)組逐個賦給臨時棧
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)//入隊,隊內(nèi)進行調(diào)整,返回隊內(nèi)位置
{
car *p,*countp;
int count(1);//count用于記錄車在過道上的位置信息,因隊列為鏈?zhǔn)降?,所以進行循環(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)//第一次入隊要判斷頭結(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++;
35、countp=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類型的車信息 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)
//車輛到達(dá),根據(jù)輸入的車牌號、到達(dá)時間,變更函數(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)//如果到達(dá)的車的車牌號=棧內(nèi)已有車輛的車牌號
{
fl=1;//fl記1
break;
}
}
if(fl==1)//如果到達(dá)的車的車牌號!=棧內(nèi)已有車輛的車牌號
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)//如果輸入的車牌號與棧內(nèi)已有車輛的車牌號一致
{
popstack(cs,cnum);//出棧操作
hour=ctime-popstacktime;//時間計算
outcarnum=popqueue(cq);//將便道上的第一輛車出隊,入棧。并將其車牌號賦給outcarnum
pstack=pushstack(cs,outcar 40、num,ctime);//將便道上的第一輛車,入棧
cout<<"該車在本停車場內(nèi)停留時間為"< 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、****調(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表示離去(De 45、parture);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,cartim 46、e);
else if(acc=='E')
break;
else
cout<<"您的輸入有誤,請重新輸入!"< 47、amespace std;
const int MaxSize=2;//停車場內(nèi)最多能停2輛車
template 48、//停車時間
};
template 49、
};
template 50、*******************【以下為類的實現(xiàn)】****************************************
template 51、NULL)//空隊列,【【【新結(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、;
else
{
p=front;
front=front->next;//將隊頭元素所在結(jié)點摘鏈
}
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)//停車場內(nèi)有空位可以駛?cè)?
{
cs.Pushcar(carnum,cartime);
cout<<"請駛?cè)胪\噲龅?< 59、+)
if(cs.S[i].carnum==carnum)
{
flag=1;
break;
}
if(flag)
{
int hour;
hour=cs.Popcar(carnum,cartime);
cout<<"您的"< 60、pos用來記錄該車便道內(nèi)的位置
Node 61、
break;
else
cout<<"您的輸入有誤,請重新輸入!"< 62、ity and authority of the party discipline, ensure that the party discipline and the laws and regulations for implementation in place. Throughout the discipline in the daily supervision and management
, strengthen supervision and inspection, from the thorough investigation of violations of disciplin 63、e behavior. Strengthen to key areas, key departments and key projects as well as the masses reflect the concentration of the units and departments for supervision. - strengthening supervision, discipline inspection and supervision of cadres to set an example for compliance with the < code > and < ru 64、le > is a man must be hexyl, blacksmith needs its own hardware. Discipline inspection organs as the executor of the party discipline, and supervisor of the defenders, for its supervision must be more strictly, discipline inspection and supervision of cadres to firmly establish the awareness of Party 65、 Constitution, sense of discipline and rules consciousness, politics loyalty, sense obey. Action speak Ji Ordinance to set an example of the regulations of the rule of law, strengthen supervision and accept the supervision of the firmness and consciousness, do comply with < > and < >. To firmly esta 66、blish the discipline must first be disciplined, the supervisor will be subject to the supervision of "concept, and consciously safeguard and implement party compasses party, take the lead in practicing" three strict real strict, so loyal, clean, play. To be good at learning, the Constitution and the < code > as morality, politics and brought to fruition; to implement < >, do not want to, dare not, not with disciplinary ruler to supervision; to discipline a ruler, often the control inspection, an
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外研版(一起)英語一年級上冊Module-5課件
- 外研版(一起)五上Module-10《Unit-1-You-should-tidy-your課件
- 認(rèn)識線段課件
- 患者病情評估培訓(xùn)完整
- 早產(chǎn)兒的護理教學(xué)
- 我們吃的食物安全嗎
- 鹽酸硫酸—浙教版九級科學(xué)上冊課件1
- 人工智能遺傳算法
- 硬質(zhì)景觀的細(xì)部處理龍湖
- 人教版小學(xué)二年級上冊數(shù)學(xué)8的乘法口訣
- 郵輪旅游世界郵輪產(chǎn)業(yè)經(jīng)濟的發(fā)展
- 如何繪制出高品質(zhì)的學(xué)科思維導(dǎo)圖
- 美國癲癇學(xué)會驚厥性癲癇持續(xù)狀態(tài)治療指南解讀
- 城市公共空間設(shè)計理論及方法課件
- (課件)正弦定理公開課