《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)停車場(chǎng)管理系統(tǒng)(13頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
.
實(shí)驗(yàn)二 停車場(chǎng)管理
班級(jí):A0712 學(xué)號(hào):12 姓名:冷清淼 成績(jī):__________
指導(dǎo)教師簽名:__________
一、問(wèn)題描述
設(shè)停車場(chǎng)是一個(gè)可停放n輛車的狹長(zhǎng)通道,且只有一個(gè)大門可供汽車進(jìn)出。在停車場(chǎng)內(nèi),汽車按到達(dá)的先后次序,由北向南依次排列(假設(shè)大門在最南端)。若停車場(chǎng)內(nèi)已停滿n輛車,則后來(lái)的汽車需在門外的便道上等候,當(dāng)有車開(kāi)走時(shí),便道上的第一輛車即可開(kāi)入。當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后進(jìn)入的車輛必須先退出停車場(chǎng)為它讓路,待該輛車開(kāi)出大門后,其他車輛再按原次序返回車場(chǎng)。每輛車離開(kāi)停車場(chǎng)時(shí),應(yīng)按其停留時(shí)間的長(zhǎng)短交費(fèi)(在便道上停留的時(shí)間不收費(fèi))。
設(shè)計(jì)要求:
1.模擬上述管理過(guò)程。要求以順序棧模擬停車場(chǎng),以鏈隊(duì)列模擬便道。
2.從終端讀入汽車到達(dá)或離去的數(shù)據(jù),每組數(shù)據(jù)包括三項(xiàng):
(1)是“到達(dá)”還是“離開(kāi)”;
(2)汽車牌照號(hào)碼;
(3)“到達(dá)”或“離開(kāi)”的時(shí)刻。
3.與每組輸入信息相應(yīng)的輸出信息為:如果是到達(dá)的車輛,則輸出其在停車場(chǎng)中或便道上的位置;如果是離去的車輛,則輸出其在停車場(chǎng)中停留的時(shí)間和應(yīng)交的費(fèi)用。
二、算法說(shuō)明
1.?dāng)?shù)據(jù)結(jié)構(gòu)說(shuō)明
(1)用到兩個(gè)堆棧:一個(gè)為車場(chǎng)棧;另一個(gè)為臨時(shí)棧temp
typedef struct NODE{
CarNode *stack[MAX+1];
int top;
}SeqStackCar; /*模擬車場(chǎng)*/
(2) 一個(gè)隊(duì)列結(jié)構(gòu),存儲(chǔ)便道車輛信息:
typedef struct Node{
QueueNode *head;
QueueNode *rear;
}LinkQueueCar; /*模擬便道*/
2.算法說(shuō)明
(1) 功能模塊說(shuō)明:停車場(chǎng)管理系統(tǒng)含有三個(gè)模塊,即:車輛到達(dá)、離開(kāi)、列表顯示
圖1
(2)以模塊為單位分析算法
1、“到達(dá)”模塊:到達(dá)時(shí)有兩種情況,即車場(chǎng)是否滿,未滿則直接進(jìn)入停車場(chǎng);滿時(shí),到便道等待。如圖2。
圖2
2.“離開(kāi)”模塊:離開(kāi)時(shí),當(dāng)車庫(kù)為空時(shí),提示沒(méi)有車,結(jié)束;否則車輛離開(kāi)。如圖3。
圖3
3. “顯示”模塊:顯示模塊有兩個(gè)顯示選項(xiàng),即:車場(chǎng)與便道。如圖4。
圖4
三、測(cè)試結(jié)果
(一)測(cè)試用例(說(shuō)明:測(cè)試用例要合理并且足夠,既要有正確用例,也要有錯(cuò)誤用例,同時(shí)檢驗(yàn)程序的正確性和強(qiáng)壯性)
1.第一組測(cè)試用例
(1)測(cè)試輸入:停車場(chǎng)的車輛離開(kāi),如下表:
服務(wù)選擇
車牌號(hào)/車位
到達(dá)/離開(kāi)時(shí)間
1
QH058
15:25
1
AB123
18:45
1
EA642
23:15
2
2
0:30
2
1
0:65(錯(cuò)誤)
(2)測(cè)試目的:測(cè)試離開(kāi)方法時(shí)間格式控制以及費(fèi)用計(jì)算是否正確。
(3)正確輸出:第一次離開(kāi)的是AB123,應(yīng)交費(fèi)3.45元。第二次時(shí),當(dāng)在輸入65時(shí),應(yīng)該提示輸入錯(cuò)誤,重輸。
(4)實(shí)際輸出:
(5)錯(cuò)誤原因:第一個(gè)錯(cuò)誤是在計(jì)算時(shí),一個(gè)數(shù)字錯(cuò)了;第二個(gè)是沒(méi)有對(duì)時(shí)間格式控制。
(6)當(dāng)前狀態(tài):已改正
2.第二組測(cè)試用例
(1)測(cè)試輸入:連續(xù)6輛車到達(dá),如下表:
服務(wù)選擇
車牌號(hào)
到達(dá)時(shí)間
1
A8828
7:56
1
S2296
8:25
1
WW666
8:45
1
HK456
15:50
1
GH999
12:30
1
DD555
13:40
(2) 測(cè)試目的:測(cè)試到達(dá)方法與列表顯示方法能否正確完成。
(3)正確輸出:先到達(dá)的五輛車先進(jìn)入停車場(chǎng),最后到達(dá)的一輛在便道等候。
(4)實(shí)際輸出:
(5)錯(cuò)誤原因:沒(méi)有作出時(shí)間先后的判斷,而是先輸入先進(jìn)入。
(6)當(dāng)前狀態(tài):待修改
3.第三組測(cè)試用例
(1)測(cè)試輸入:接上一步輸入離開(kāi)信息,下表:
服務(wù)選擇
離開(kāi)車位
離開(kāi)時(shí)間
便道車進(jìn)入時(shí)間
2
3
13:30
13:40
(2)測(cè)試目的:測(cè)試離開(kāi)方法功能是否成功以及便道進(jìn)入車場(chǎng)是否正確。
(3)正確輸出:輸出3號(hào)車位的車輛離開(kāi)信息清單,便道1號(hào)車進(jìn)入停車場(chǎng)。
(4)實(shí)際輸出:
(5) 錯(cuò)誤原因:沒(méi)有錯(cuò)誤。
(6)當(dāng)前狀態(tài):通過(guò)
(二)測(cè)試結(jié)果分析
此停車管理系統(tǒng)基本可能實(shí)現(xiàn)一個(gè)小的停車場(chǎng)的管理,其“到達(dá)”與“離開(kāi)”方法都相對(duì)比較完整,以及結(jié)算清單明了。盡管在時(shí)間先后上有出現(xiàn)混亂,但當(dāng)其用到實(shí)際應(yīng)用時(shí),那個(gè)時(shí)間先后就可以避免了。但在輸入數(shù)據(jù)時(shí),要按照嚴(yán)格的格式輸入,否則有可能出現(xiàn)死去或崩潰。若本系統(tǒng)能加上保存功能就更好了,因?yàn)橐粋€(gè)系統(tǒng)在使用過(guò)程中總會(huì)關(guān)機(jī)等,而此系統(tǒng)的缺點(diǎn)卻是沒(méi)有保存功能,關(guān)閉之后就要重新建立了。會(huì)慢慢完善。
附錄:源代碼
///系統(tǒng)說(shuō)明:本系統(tǒng)適應(yīng)于小型停車場(chǎng),且停車時(shí)間在一天之內(nèi)的短期停放停車場(chǎng)。
//在此系統(tǒng)中,車庫(kù)容量設(shè)置為5,便于測(cè)試。在實(shí)際使用中可以對(duì)容量大小按實(shí)際情況設(shè)置。
#include
#include
#include
#include
#define MAX 5 /*車庫(kù)容量,可以根據(jù)實(shí)際情況改變*/
#define price 0.01 /*一輛車每分鐘費(fèi)用,可變*/
typedef struct time
{
int hour;
int min;
}Time; /*時(shí)間結(jié)點(diǎn)*/
typedef struct node
{
char num[10];
Time reach;
Time leave;
}CarNode; /*車輛信息結(jié)點(diǎn)*/
typedef struct NODE
{
CarNode *stack[MAX+1];
int top;
}SeqStackCar; /*模擬停車場(chǎng)*/
typedef struct car
{
CarNode *data;
struct car *next;
}QueueNode;
typedef struct Node
{
QueueNode *head;
QueueNode *rear;
}LinkQueueCar; /*模擬便道*/
/*方法聲明*/
void InitStack(SeqStackCar *); /*初始化棧*/
int InitQueue(LinkQueueCar *); /*初始化便道*/
int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達(dá)*/
void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開(kāi)*/
void List(SeqStackCar,LinkQueueCar); /*顯示信息*/
void PRINT(CarNode *p,int room); /*輸出離開(kāi)車輛的信息清單*/
void main()
{
system("color F2"); /*設(shè)置系統(tǒng)顏色,本系統(tǒng)為白底綠字f2*/
SeqStackCar Enter,Temp;
LinkQueueCar Wait;
int ch;
InitStack(&Enter); /*初始化車站*/
InitStack(&Temp); /*初始化讓路的臨時(shí)棧*/
InitQueue(&Wait); /*初始化通道*/
while(1)
{
cout<<" ※※※※ @歡迎使用本停車管理系統(tǒng) @ ※※※※ "<>ch;
if(ch>=1&&ch<=4)break;
else cout<<"輸入錯(cuò)誤!請(qǐng)選擇:(1-4)."<top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
int InitQueue(LinkQueueCar *Q) /*初始化便道*/
{
Q->head=(QueueNode *)malloc(sizeof(QueueNode));
if(Q->head!=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return(1);
}
else return(-1);
}
int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/
{
CarNode *p;
QueueNode *t;
p=(CarNode *)malloc(sizeof(CarNode));
flushall();
cout<<"請(qǐng)輸入車牌號(hào)(例:A1234):"<num);
if(Enter->toptop++;
cout<<"車輛在車場(chǎng)第"<top <<"位置!"<>p->reach.hour;
while(p->reach.hour<0||p->reach.hour>23) //控制時(shí)間格式正確
{
cout<<"輸入錯(cuò)誤!"<>p->reach.hour;
}
cin>>p->reach.min;
while(p->reach.min<0||p->reach.min>59) //控制分鐘輸入正確
{
cout<<"輸入錯(cuò)誤!"<>p->reach.min;
}
Enter->stack[Enter->top]=p;
return(1);
}
else /*車場(chǎng)已滿,車進(jìn)便道*/
{
cout<<"車場(chǎng)已滿,請(qǐng)?jiān)诒愕赖却?"<data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return(1);
}
}
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開(kāi)*/
{
int room;
CarNode *p;
QueueNode *q;
/*判斷車場(chǎng)內(nèi)是否有車*/
if(Enter->top>0) /*有車*/
{
while(1) /*輸入離開(kāi)車輛的信息*/
{
cout<<"請(qǐng)輸入車在車場(chǎng)的位置1--"<top<<":";
cin>>room;
if(room>=1&&room<=Enter->top) break;
}
while(Enter->top>room) /*車輛離開(kāi)*/
{
Temp->top++; /*臨時(shí)通道棧頂指針*/
Temp->stack[Temp->top]=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;
Enter->top--;
}
p=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;
Enter->top--;
while(Temp->top>=1) /*判斷臨時(shí)通道上是否有車*/
{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
Temp->top--;}
PRINT(p,room);
if((W->head!=W->rear)&&Enter->tophead->next;
p=q->data; /*p指向鏈隊(duì)頭*/
Enter->top++;
cout<<"便道的"<num<<"號(hào)車進(jìn)入車場(chǎng)第"<top<<"位置!"<>p->reach.hour;
if(p->reach.hour<0||p->reach.hour>23)
{
cout<<"輸入錯(cuò)誤!"<>p->reach.hour;
}
cin>>p->reach.min;
if(p->reach.min<0||p->reach.min>59)
{
cout<<"輸入錯(cuò)誤!"<>p->reach.min;
}
Enter->stack[Enter->top]=p;
W->head->next=q->next;
if(q==W->rear) W->rear=W->head;
free(q); /*釋放q地址*/
}
else cout<<"便道里沒(méi)有車!"<>p->leave.hour;
while(p->leave.hour<0||p->leave.hour>23)
{
cout<<"輸入錯(cuò)誤!"<>p->leave.hour;
B1=p->leave.hour;
}
cin>>p->leave.min;
if(p->leave.min<0||p->leave.min>59)
{
cout<<"輸入錯(cuò)誤!"<>p->leave.min;
}
cout<num);
cout<<"其到達(dá)時(shí)間為: "<reach.hour<<":"<reach.min<leave.hour<<":"<leave.min<reach.hour;
A2=p->reach.min;
B1=p->leave.hour;
B2=p->leave.min;
cout<<"應(yīng)交費(fèi)用為: "<<(((B1-A1)*60+(B2-A2))+1440)%1440*price<<"元!"<top>0) /*判斷車站內(nèi)是否有車*/
{
cout<<" 位置 到達(dá)時(shí)間 車牌號(hào)"<top;i++)
{
cout<<" "<stack[i]->reach.hour<<":"<stack[i]->reach.min<<" "<stack[i]->num<head->next;
if(W->head!=W->rear) /*判斷通道上是否有車*/
{
cout<<"等待車輛的車牌號(hào)碼為:"<data->num);
cout<data->num<next;
j++;
} //開(kāi)始時(shí)顯示不正確,沒(méi)有按照正常輸出
}
else cout<<"便道里沒(méi)有車!";
}
void List(SeqStackCar S,LinkQueueCar W) /*列表界面*/
{
int flag,tag;
flag=1;
while(flag) /*列表顯示循環(huán)控制*/
{
cout<<"請(qǐng)選擇您要顯示信息! (1-3):"<>tag;
if(tag>=1||tag<=3) break;
else cout<<"輸入錯(cuò)誤!請(qǐng)選擇 (1-3):"<
下載提示(請(qǐng)認(rèn)真閱讀)
- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
文檔包含非法信息?點(diǎn)此舉報(bào)后獲取現(xiàn)金獎(jiǎng)勵(lì)!
下載文檔到電腦,查找使用更方便
10
積分
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
-
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
停車場(chǎng)管理系統(tǒng)
數(shù)據(jù)結(jié)構(gòu)
課程設(shè)計(jì)
停車場(chǎng)
管理
系統(tǒng)
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶書(shū)面授權(quán),請(qǐng)勿作他用。
鏈接地址:http://m.zhongcaozhi.com.cn/p-12930465.html