數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)(13頁珍藏版)》請在裝配圖網(wǎng)上搜索。
. 實驗二 停車場管理 班級:A0712 學(xué)號:12 姓名:冷清淼 成績:_指導(dǎo)教師簽名:_一、問題描述設(shè)停車場是一個可停放n輛車的狹長通道,且只有一個大門可供汽車進(jìn)出。在停車場內(nèi),汽車按到達(dá)的先后次序,由北向南依次排列(假設(shè)大門在最南端)。若停車場內(nèi)已停滿n輛車,則后來的汽車需在門外的便道上等候,當(dāng)有車開走時,便道上的第一輛車即可開入。當(dāng)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入的車輛必須先退出停車場為它讓路,待該輛車開出大門后,其他車輛再按原次序返回車場。每輛車離開停車場時,應(yīng)按其停留時間的長短交費(在便道上停留的時間不收費)。設(shè)計要求:1模擬上述管理過程。要求以順序棧模擬停車場,以鏈隊列模擬便道。2從終端讀入汽車到達(dá)或離去的數(shù)據(jù),每組數(shù)據(jù)包括三項:(1)是“到達(dá)”還是“離開”;(2)汽車牌照號碼;(3)“到達(dá)”或“離開”的時刻。3與每組輸入信息相應(yīng)的輸出信息為:如果是到達(dá)的車輛,則輸出其在停車場中或便道上的位置;如果是離去的車輛,則輸出其在停車場中停留的時間和應(yīng)交的費用。二、算法說明1數(shù)據(jù)結(jié)構(gòu)說明(1)用到兩個堆棧:一個為車場棧;另一個為臨時棧temptypedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模擬車場*/(2) 一個隊列結(jié)構(gòu),存儲便道車輛信息: typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模擬便道*/2算法說明(1) 功能模塊說明:停車場管理系統(tǒng)含有三個模塊,即:車輛到達(dá)、離開、列表顯示 圖1 (2)以模塊為單位分析算法 1、“到達(dá)”模塊:到達(dá)時有兩種情況,即車場是否滿,未滿則直接進(jìn)入停車場;滿時,到便道等待。如圖2。 圖2 2.“離開”模塊:離開時,當(dāng)車庫為空時,提示沒有車,結(jié)束;否則車輛離開。如圖3。 圖3 3. “顯示”模塊:顯示模塊有兩個顯示選項,即:車場與便道。如圖4。圖4三、測試結(jié)果(一)測試用例(說明:測試用例要合理并且足夠,既要有正確用例,也要有錯誤用例,同時檢驗程序的正確性和強壯性)1第一組測試用例(1)測試輸入:停車場的車輛離開,如下表:服務(wù)選擇車牌號/車位到達(dá)/離開時間1QH05815:251AB12318:451EA64223:15220:30210:65(錯誤) (2)測試目的:測試離開方法時間格式控制以及費用計算是否正確。(3)正確輸出:第一次離開的是AB123,應(yīng)交費3.45元。第二次時,當(dāng)在輸入65時,應(yīng)該提示輸入錯誤,重輸。(4)實際輸出: (5)錯誤原因:第一個錯誤是在計算時,一個數(shù)字錯了;第二個是沒有對時間格式控制。(6)當(dāng)前狀態(tài):已改正2第二組測試用例(1)測試輸入:連續(xù)6輛車到達(dá),如下表: 服務(wù)選擇 車牌號 到達(dá)時間1A8828 7:561S22968:251WW6668:451HK45615:501GH99912:301DD55513:40(2) 測試目的:測試到達(dá)方法與列表顯示方法能否正確完成。(3)正確輸出:先到達(dá)的五輛車先進(jìn)入停車場,最后到達(dá)的一輛在便道等候。(4)實際輸出:(5)錯誤原因:沒有作出時間先后的判斷,而是先輸入先進(jìn)入。(6)當(dāng)前狀態(tài):待修改3第三組測試用例(1)測試輸入:接上一步輸入離開信息,下表:服務(wù)選擇離開車位離開時間便道車進(jìn)入時間2313:3013:40(2)測試目的:測試離開方法功能是否成功以及便道進(jìn)入車場是否正確。(3)正確輸出:輸出3號車位的車輛離開信息清單,便道1號車進(jìn)入停車場。(4)實際輸出:(5) 錯誤原因:沒有錯誤。 (6)當(dāng)前狀態(tài):通過(二)測試結(jié)果分析 此停車管理系統(tǒng)基本可能實現(xiàn)一個小的停車場的管理,其“到達(dá)”與“離開”方法都相對比較完整,以及結(jié)算清單明了。盡管在時間先后上有出現(xiàn)混亂,但當(dāng)其用到實際應(yīng)用時,那個時間先后就可以避免了。但在輸入數(shù)據(jù)時,要按照嚴(yán)格的格式輸入,否則有可能出現(xiàn)死去或崩潰。若本系統(tǒng)能加上保存功能就更好了,因為一個系統(tǒng)在使用過程中總會關(guān)機等,而此系統(tǒng)的缺點卻是沒有保存功能,關(guān)閉之后就要重新建立了。會慢慢完善。附錄:源代碼/系統(tǒng)說明:本系統(tǒng)適應(yīng)于小型停車場,且停車時間在一天之內(nèi)的短期停放停車場。/在此系統(tǒng)中,車庫容量設(shè)置為5,便于測試。在實際使用中可以對容量大小按實際情況設(shè)置。#include#include#include#include#define MAX 5 /*車庫容量,可以根據(jù)實際情況改變*/#define price 0.01 /*一輛車每分鐘費用,可變*/typedef struct timeint hour; int min;Time; /*時間結(jié)點*/typedef struct node char num10; Time reach; Time leave;CarNode; /*車輛信息結(jié)點*/typedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模擬停車場*/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 *); /*車輛離開*/void List(SeqStackCar,LinkQueueCar); /*顯示信息*/ void PRINT(CarNode *p,int room); /*輸出離開車輛的信息清單*/void main()system(color F2); /*設(shè)置系統(tǒng)顏色,本系統(tǒng)為白底綠字f2*/SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時棧*/ InitQueue(&Wait); /*初始化通道*/ while(1) cout 歡迎使用本停車管理系統(tǒng) endl;cout*endl;cout - 1. 車輛到達(dá) - endl; cout - 2. 車輛離開 - endl; cout - 3. 列表顯示 - endl; cout - 4. 退出系統(tǒng) - endl; cout*endl;cout!說明:請注意正確輸入時間,在輸入“時”后,按“ENTER”或者“空格”,再輸入“分”。不要為非數(shù)字!endl;cout請選擇所需要的服務(wù)! (1-4).ch; if(ch=1&ch=4)break; else cout輸入錯誤!請選擇:(1-4).top=0; for(i=0;istacks-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請輸入車牌號(例:A1234):num); if(Enter-toptop+; cout車輛在車場第top 位置!endl; cout請輸入到達(dá)時間:(小時:分鐘)p-reach.hour; while(p-reach.hourreach.hour23) /控制時間格式正確 cout輸入錯誤!endl; cout請重輸入到達(dá)時間的時(0-23)!p-reach.hour;cinp-reach.min; while(p-reach.minreach.min59) /控制分鐘輸入正確 cout輸入錯誤!endl; cout請重輸入到達(dá)時間的分(0-59)!p-reach.min; Enter-stackEnter-top=p; return(1); else /*車場已滿,車進(jìn)便道*/ cout車場已滿,請在便道等待!data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開*/ int room; CarNode *p; QueueNode *q; /*判斷車場內(nèi)是否有車*/ if(Enter-top0) /*有車*/ while(1) /*輸入離開車輛的信息*/ cout請輸入車在車場的位置1-toproom; if(room=1&roomtop) break; while(Enter-toproom) /*車輛離開*/Temp-top+; /*臨時通道棧頂指針*/ Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1) /*判斷臨時通道上是否有車*/Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p,room); if(W-head!=W-rear)&Enter-tophead-next; p=q-data; /*p指向鏈隊頭*/ Enter-top+; cout便道的num號車進(jìn)入車場第top位置!endl; cout請輸入現(xiàn)在的時間如(小時:分鐘):p-reach.hour; if(p-reach.hourreach.hour23) cout輸入錯誤!endl; cout請重輸入到達(dá)時間的時(0-23)!p-reach.hour; cinp-reach.min; if(p-reach.minreach.min59) cout輸入錯誤!endl; cout請重輸入到達(dá)時間的分(0-59)!p-reach.min; Enter-stackEnter-top=p; W-head-next=q-next; if(q=W-rear) W-rear=W-head; free(q); /*釋放q地址*/ else cout便道里沒有車!endl; /*便道沒車*/ else cout車場里沒有車!endl; /*車場沒車*/void PRINT(CarNode *p,int room) /*輸出離開車輛的信息清單*/ int A1,A2,B1,B2; cout請輸入離開的時間:(小時:分鐘)p-leave.hour; while(p-leave.hourleave.hour23)cout輸入錯誤!endl; cout請重輸入離開的時間的時(0-23)p-leave.hour;B1=p-leave.hour; cinp-leave.min;if(p-leave.minleave.min59) cout輸入錯誤!endl; cout請重輸入到達(dá)時間的分(0-59)!p-leave.min; coutendl離開車輛的車牌號為:num); cout其到達(dá)時間為: reach.hour:reach.minendl; cout離開時間為: leave.hour:leave.minreach.hour; A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min;cout應(yīng)交費用為: (B1-A1)*60+(B2-A2)+1440)%1440*price元!endl; free(p);void List1(SeqStackCar *S) /*列表顯示車場信息*/ cout您選擇的是車場停車情況!top0) /*判斷車站內(nèi)是否有車*/ cout 位置 到達(dá)時間 車牌號endl; for(i=1;itop;i+)cout i stacki-reach.hour:stacki-reach.min stacki-numendl; else cout車場里沒有車!endl;void List2(LinkQueueCar *W) /*列表顯示便道信息*/ cout您選擇的是便道停車情況!head-next; if(W-head!=W-rear) /*判斷通道上是否有車*/cout等待車輛的車牌號碼為:endl; while(p!=NULL) /coutdata-num);coutj data-numnext;j+; /開始時顯示不正確,沒有按照正常輸出 else cout便道里沒有車!;void List(SeqStackCar S,LinkQueueCar W) /*列表界面*/int flag,tag; flag=1; while(flag) /*列表顯示循環(huán)控制*/cout請選擇您要顯示信息! (1-3):endl; cout-1.車場-endl;cout-2.便道-endl;cout-3.返回-tag; if(tag=1|tag=3) break; else cout輸入錯誤!請選擇 (1-3):endl;switch(tag)case 1:List1(&S);break; /*列表顯示車場信息*/ case 2:List2(&W);break; /*列表顯示便道信息*/ case 3:flag=0;break; default: break; .- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 停車場管理系統(tǒng) 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計 停車場 管理 系統(tǒng)
鏈接地址:http://italysoccerbets.com/p-12930465.html