




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 實驗二 停車場管理 班級:A0712 學號:12 姓名:冷清淼 成績:_指導教師簽名:_一、問題描述設停車場是一個可停放n輛車的狹長通道,且只有一個大門可供汽車進出。在停車場內,汽車按到達的先后次序,由北向南依次排列(假設大門在最南端)。若停車場內已停滿n輛車,則后來的汽車需在門外的便道上等候,當有車開走時,便道上的第一輛車即可開入。當停車場內某輛車要離開時,在它之后進入的車輛必須先退出停車場為它讓路,待該輛車開出大門后,其他車輛再按原次序返回車場。每輛車離開停車場時,應按其停留時間的長短交費(在便道上停留的時間不收費)。設計要求:1模擬上述管理過程。要求以順序棧模擬停車場,以鏈隊列模擬便道
2、。2從終端讀入汽車到達或離去的數據,每組數據包括三項:(1)是“到達”還是“離開”;(2)汽車牌照號碼;(3)“到達”或“離開”的時刻。3與每組輸入信息相應的輸出信息為:如果是到達的車輛,則輸出其在停車場中或便道上的位置;如果是離去的車輛,則輸出其在停車場中停留的時間和應交的費用。二、算法說明1數據結構說明(1)用到兩個堆棧:一個為車場棧;另一個為臨時棧temptypedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模擬車場*/(2) 一個隊列結構,存儲便道車輛信息: typedef struct Node QueueNo
3、de *head; QueueNode *rear; LinkQueueCar; /*模擬便道*/2算法說明(1) 功能模塊說明:停車場管理系統含有三個模塊,即:車輛到達、離開、列表顯示 圖1 (2)以模塊為單位分析算法 1、“到達”模塊:到達時有兩種情況,即車場是否滿,未滿則直接進入停車場;滿時,到便道等待。如圖2。 圖2 2.“離開”模塊:離開時,當車庫為空時,提示沒有車,結束;否則車輛離開。如圖3。 圖3 3. “顯示”模塊:顯示模塊有兩個顯示選項,即:車場與便道。如圖4。圖4三、測試結果(一)測試用例(說明:測試用例要合理并且足夠,既要有正確用例,也要有錯誤用例,同時檢驗程序的正確性和
4、強壯性)1第一組測試用例(1)測試輸入:停車場的車輛離開,如下表:服務選擇車牌號/車位到達/離開時間1QH05815:251AB12318:451EA64223:15220:30210:65(錯誤) (2)測試目的:測試離開方法時間格式控制以及費用計算是否正確。(3)正確輸出:第一次離開的是AB123,應交費3.45元。第二次時,當在輸入65時,應該提示輸入錯誤,重輸。(4)實際輸出: (5)錯誤原因:第一個錯誤是在計算時,一個數字錯了;第二個是沒有對時間格式控制。(6)當前狀態:已改正2第二組測試用例(1)測試輸入:連續6輛車到達,如下表: 服務選擇 車牌號 到達時間1A8828 7:561
5、S22968:251WW6668:451HK45615:501GH99912:301DD55513:40(2) 測試目的:測試到達方法與列表顯示方法能否正確完成。(3)正確輸出:先到達的五輛車先進入停車場,最后到達的一輛在便道等候。(4)實際輸出:(5)錯誤原因:沒有作出時間先后的判斷,而是先輸入先進入。(6)當前狀態:待修改3第三組測試用例(1)測試輸入:接上一步輸入離開信息,下表:服務選擇離開車位離開時間便道車進入時間2313:3013:40(2)測試目的:測試離開方法功能是否成功以及便道進入車場是否正確。(3)正確輸出:輸出3號車位的車輛離開信息清單,便道1號車進入停車場。(4)實際輸出
6、:(5) 錯誤原因:沒有錯誤。 (6)當前狀態:通過(二)測試結果分析 此停車管理系統基本可能實現一個小的停車場的管理,其“到達”與“離開”方法都相對比較完整,以及結算清單明了。盡管在時間先后上有出現混亂,但當其用到實際應用時,那個時間先后就可以避免了。但在輸入數據時,要按照嚴格的格式輸入,否則有可能出現死去或崩潰。若本系統能加上保存功能就更好了,因為一個系統在使用過程中總會關機等,而此系統的缺點卻是沒有保存功能,關閉之后就要重新建立了。會慢慢完善。附錄:源代碼/系統說明:本系統適應于小型停車場,且停車時間在一天之內的短期停放停車場。/在此系統中,車庫容量設置為5,便于測試。在實際使用中可以對
7、容量大小按實際情況設置。#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 5 /*車庫容量,可以根據實際情況改變*/#define price 0.01 /*一輛車每分鐘費用,可變*/typedef struct timeint hour; int min;Time; /*時間結點*/typedef struct node char num10; Time reach; Time leave;CarNode; /*車輛信息結點*
8、/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 A
9、rrival(SeqStackCar *,LinkQueueCar *); /*車輛到達*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開*/void List(SeqStackCar,LinkQueueCar); /*顯示信息*/ void PRINT(CarNode *p,int room); /*輸出離開車輛的信息清單*/void main()system("color F2"); /*設置系統顏色,本系統為白底綠字f2*/SeqStackCar Enter,Temp; LinkQueue
10、Car Wait; int ch; InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時棧*/ InitQueue(&Wait); /*初始化通道*/ while(1) cout<<" 歡迎使用本停車管理系統 "<<endl;cout<<"*"<<endl;cout<<" - 1. 車輛到達 - "<<endl; cout<<" - 2. 車輛離開 - &q
11、uot;<<endl; cout<<" - 3. 列表顯示 - "<<endl; cout<<" - 4. 退出系統 - "<<endl; cout<<"*"<<endl;cout<<"!說明:請注意正確輸入時間,在輸入“時”后,按“ENTER”或者“空格”,再輸入“分”。不要為非數字!"<<endl;cout<<"請選擇所需要的服務! (1-4)."<<endl;
12、 while(1) cin>>ch; if(ch>=1&&ch<=4)break; else cout<<"輸入錯誤!請選擇:(1-4)."<<endl; switch(ch) case 1:Arrival(&Enter,&Wait);break; /*車輛到達*/ case 2:Leave(&Enter,&Temp,&Wait);break; /*車輛離開*/ case 3:List(Enter,Wait);break; /*列表顯示信息*/ case 4:exit(0
13、); /*退出主程序*/ default: break;void InitStack(SeqStackCar *s) /*初始化棧*/ int i; s->top=0; for(i=0;i<=MAX;i+) s->stacks->top=NULL;int InitQueue(LinkQueueCar *Q) /*初始化便道*/Q->head=(QueueNode *)malloc(sizeof(QueueNode); if(Q->head!=NULL)Q->head->next=NULL; Q->rear=Q->head; retur
14、n(1); else return(-1);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); cout<<"請輸入車牌號(例:A1234):"<<endl; gets(p->num); if(Enter->top<MAX) /*車場未滿,車進車場*/Enter->top+; cout<<"車輛在
15、車場第"<<Enter->top <<"位置!"<<endl; cout<<"請輸入到達時間:(小時:分鐘)"<<endl; cin>>p->reach.hour; while(p->reach.hour<0|p->reach.hour>23) /控制時間格式正確 cout<<"輸入錯誤!"<<endl; cout<<"請重輸入到達時間的時(0-23)!"<
16、<endl; cin>>p->reach.hour;cin>>p->reach.min; while(p->reach.min<0|p->reach.min>59) /控制分鐘輸入正確 cout<<"輸入錯誤!"<<endl; cout<<"請重輸入到達時間的分(0-59)!"<<endl; cin>>p->reach.min; Enter->stackEnter->top=p; return(1); else
17、/*車場已滿,車進便道*/ cout<<"車場已滿,請在便道等待!"<<endl; t=(QueueNode *)malloc(sizeof(QueueNode); t->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; /*判斷車場
18、內是否有車*/ if(Enter->top>0) /*有車*/ while(1) /*輸入離開車輛的信息*/ cout<<"請輸入車在車場的位置1-"<<Enter->top<<":"cin>>room; if(room>=1&&room<=Enter->top) break; while(Enter->top>room) /*車輛離開*/Temp->top+; /*臨時通道棧頂指針*/ Temp->stackTemp->to
19、p=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-&
20、gt;top=NULL; Temp->top-; PRINT(p,room); if(W->head!=W->rear)&&Enter->top<MAX) /*車站是未滿*/ /*便道的車輛進入車場*/q=W->head->next; p=q->data; /*p指向鏈隊頭*/ Enter->top+; cout<<"便道的"<<p->num<<"號車進入車場第"<<Enter->top<<"位置!&qu
21、ot;<<endl; cout<<"請輸入現在的時間如(小時:分鐘):"<<endl;cin>>p->reach.hour; if(p->reach.hour<0|p->reach.hour>23) cout<<"輸入錯誤!"<<endl; cout<<"請重輸入到達時間的時(0-23)!"<<endl; cin>>p->reach.hour; cin>>p->reach.m
22、in; if(p->reach.min<0|p->reach.min>59) cout<<"輸入錯誤!"<<endl; cout<<"請重輸入到達時間的分(0-59)!"<<endl; cin>>p->reach.min; Enter->stackEnter->top=p; W->head->next=q->next; if(q=W->rear) W->rear=W->head; free(q); /*釋放q地址*/
23、else cout<<"便道里沒有車!"<<endl; /*便道沒車*/ else cout<<"車場里沒有車!"<<endl; /*車場沒車*/void PRINT(CarNode *p,int room) /*輸出離開車輛的信息清單*/ int A1,A2,B1,B2; cout<<"請輸入離開的時間:(小時:分鐘)"<<endl; cin>>p->leave.hour; while(p->leave.hour<0|p->l
24、eave.hour>23)cout<<"輸入錯誤!"<<endl; cout<<"請重輸入離開的時間的時(0-23)"<<endl; cin>>p->leave.hour;B1=p->leave.hour; cin>>p->leave.min;if(p->leave.min<0|p->leave.min>59) cout<<"輸入錯誤!"<<endl; cout<<"請重
25、輸入到達時間的分(0-59)!"<<endl; cin>>p->leave.min; cout<<endl<<"離開車輛的車牌號為:"<<endl; puts(p->num); cout<<"其到達時間為: "<<p->reach.hour<<":"<<p->reach.min<<endl; cout<<"離開時間為: "<<p->l
26、eave.hour<<":"<<p->leave.min<<endl; A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min;cout<<"應交費用為: "<<(B1-A1)*60+(B2-A2)+1440)%1440*price<<"元!"<<endl; free(p);void List1(SeqStackCar *S) /*列表顯示車
27、場信息*/ cout<<"您選擇的是車場停車情況!"<<endl;int i; if(S->top>0) /*判斷車站內是否有車*/ cout<<" 位置 到達時間 車牌號"<<endl; for(i=1;i<=S->top;i+)cout<<" "<<i<<" "<<S->stacki->reach.hour<<":"<<S->stacki->reach.min<<" "<<S->stacki->num<<endl; else cout<<"車場里沒有車!"<<endl;void List2(LinkQueueCar *W) /*列表顯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年轉租房合同協議書模板
- 2025建筑工程防水補漏合同
- 2024年太陽能電池背膜投資申請報告代可行性研究報告
- 2025辦公室租賃合同「范本」
- 2025年廣州市教育行業職工勞動合同
- 2025合作伙伴經營合同
- 租賃合同簽訂流程優化與風險管理考核試卷
- 2025寫字樓租賃合同范本參考
- 2025工程合同管理 高速公路工程建設合同索賠研究
- 2025智能鎖購買合同范本
- 浙江公路技師學院教師招聘考試真題2022
- 氨吹脫塔單元設計示例
- 中國移動-安全-L3
- 骨齡評測方法課件
- GB/T 42314-2023電化學儲能電站危險源辨識技術導則
- 人教小學數學五年級下冊綜合與實踐《怎樣通知最快》示范公開課教學課件
- 海陸熱力性質差異的說課課件
- 科學院大學博士入學復試匯報個人介紹PPT模板
- 迎春杯2023年-2023年中高年級初賽復賽試題真題整理
- GB/T 6322-1986光滑極限量規型式和尺寸
- GB/T 31052.5-2015起重機械檢查與維護規程第5部分:橋式和門式起重機
評論
0/150
提交評論