




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、. . . . 實驗2 停車場管理系統班級: 信B0811 學號: 15號 : 段增鋒 指導教師簽名: 成績:_一、問題描述設停車場是一個可停放n輛車的狹長通道,且只有一個大門可供汽車進出。在停車場,汽車按到達的先后次序,由北向南依次排列(假設大門在最南端)。若停車場已停滿n輛車,則后來的汽車需在門外的便道上等候,當有車開走時,便道上的第一輛車即可開入。當停車場某輛車要離開時,在它之后進入的車輛必須先退出停車場為它讓路,待該輛車開出大門后,其他車輛再按原次序返回車場。每輛車離開停車場時,應按其停留時間的長短交費(在便道上停留的時間不收費)。設計要求:1模擬上述管理過程。要求以順序棧模擬停車場,
2、以鏈隊列模擬便道。2從終端讀入汽車到達或離去的數據,每組數據包括三項:(1)是“到達”還是“離去”;(2)汽車牌照;(3)“到達”或“離去”的時刻。二、算法說明typedef struct time int hour; int min;Time;/定義結構體變量Timetypedef struct node char num6; /用字符數組來存放車牌 Time reach; /車輛到達時間 Time leave; /車輛離去時間CarNode;typedef struct NODE CarNode *stackMAX+1;/用來存放棧中元素的一維數組 int top; /棧指針SeqStac
3、kCar;/定義順序棧typedef struct car CarNode *data; /數據域 struct car *next;/指向下一個結點QueueNode;/鏈隊的結點類型typedef struct Node QueueNode *front;/隊首指針 QueueNode *rear; /隊尾指針LinkQueueCar;/定義鏈隊列類型2算法說明使用死循環和選擇結構實現菜單項,使用棧與隊列實現停車場管理的各項功能,如棧的進棧、出棧,隊列的入隊、出隊等操作。三、測試結果第一組測試用例:1測試輸入:5或字母回車2測試目的:程序的健壯性3正確輸出:輸入字母出現死循環,輸入數字提示
4、選擇(14)4實際輸出:輸入字母出現死循環,輸入數字提示選擇(14) 5錯誤原因:無6當前狀態:通過第二組測試用例:1測試輸入:1回車2測試目的:能否實現停車場車輛到達登記(數據能夠真正進棧)3正確輸出:(1 回車請輸入車牌號(例:贛 B0689):贛1234回車 )車輛在車場第1位置. (回車 車輛到達時間:3:05) 4實際輸出:(1 回車請輸入車牌號(例:贛 B0689):贛1234回車) 車輛在車場第1位置. (回車 車輛到達時間:3:05)5錯誤原因:無 6當前狀態:已修改第三組測試用例:1測試輸入:1回車2測試目的:能否實現停車場車輛到達登記(數據能夠真正進棧)3正確輸出:(1 回
5、車請輸入車牌號(例:贛 B0689):贛234回車) 車輛在車場第2位置. (回車 車輛到達時間:3:08) 4實際輸出:(1 回車請輸入車牌號(例:贛 B0689):贛234回車) 車輛在車場第2位置.( 回車 車輛到達時間:3:08)5錯誤原因:無 6當前狀態:已修改第四組測試用例:1測試輸入:1回車2測試目的:能否實現停車場車輛到達登記(數據能夠真正進棧)3正確輸出:(1 回車請輸入車牌號(例:贛 B0689):贛34回車) 車輛在車場第3位置. (回車 車輛到達時間:3:10)4實際輸出:(1 回車請輸入車牌號(例:贛 B0689):贛34回車) 車輛在車場第3位置. (回車 車輛到達
6、時間:3:10)5錯誤原因:無 6當前狀態:已修改第五組測試用例:1測試輸入:1回車2測試目的:能否實現停車場車輛到達登記(數據能夠真正進棧)3正確輸出:該車需在便道等待,有車位是進入車場。4實際輸出:該車需在便道等待,有車位是進入車場。5錯誤原因:無 6當前狀態:已修改第六組測試用例:1測試輸入:2 回車2測試目的:車輛離開并且登記是否能夠通過(車從臨時棧中退出) 3正確輸出:(輸入離開車場位置:2 車輛離開的時間:3:20 離開車輛的車牌號:贛234)其到達時間為:3:8離開時間:3:20應交費用:0.60元 便道的贛56號車進入車場第3位置 4實際輸出:(輸入離開車場位置:2 車輛離開的
7、時間:3:20 離開車輛的車牌號:贛234)其到達時間為:3:8離開時間:3:20應交費用:0.60元 便道的贛56號車進入車場第3位置5錯誤原因:無6當前狀態:已修改(按車牌離開未能實現)第七組測試用例:1測試輸入:3 回車2測試目的:車輛列表的顯示功能的實現(隊列的輸出)3正確輸出:請選擇(1|2|3) 1.車場列表 2.便道列表 3返回主菜單4實際輸出:請選擇(1|2|3) 1.車場列表 2.便道列表 3返回主菜單 5錯誤原因:無6當前狀態:修改第八組測試用例:1測試輸入:1 回車2測試目的:車場列表的顯示功能 3正確輸出:車場位置 到達時間 車牌 1 3:5 贛1234 2 3:10
8、贛34 3 (輸入的時間)贛564實際輸出:車場位置 到達時間 車牌 1 3:5 贛1234 2 3:10 贛34 3 (輸入的時間) 贛56 5錯誤原因:無(第四輛車在便道等候,在上一步輸入的時間)6當前狀態:修改第九組測試用例:1測試輸入:2 回車2測試目的:便道列表的顯示功能(隊列的輸出)3正確輸出:(如果便道無車)便道里沒有車。(反之)顯示車輛的信息 4實際輸出:(如果便道無車)便道里沒有車。(反之)顯示車輛的信息 5錯誤原因:無6當前狀態:修改第十組測試用例:1測試輸入:3 回車2測試目的:能否返回主菜單3正確輸出:(能返回)主菜單4實際輸出:(能返回)主菜單 5錯誤原因:無6當前狀
9、態:通過第十一組測試用例:1測試輸入:4 回車2測試目的:程序的退出功能的檢測3正確輸出:退出系統4實際輸出:退出系統 5錯誤原因:無6當前狀態:通過測試結果分析:該系統較完善的實現了停車場管理的各項功能,通過使用棧與隊列,能夠較快的實現停車場的車輛的進場與車場的進車場、退出等操作。掌握棧的“后進先出”隊列的“先進先出”原理。附錄:源代碼源代碼列在附錄中,要求程序風格清晰易理解,有充分的注釋,有意義的注釋行少于代碼的30%將不能得分。#include<stdio.h>#include<stdlib.h>#include<string.h>#define MA
10、X 3 /停車場最多的停車數#define price 0.05 /每單位時間停車費用typedef struct time int hour; int min;Time;/定義結構體變量Timetypedef struct node char num6; /用字符數組來存放車牌 Time reach; /車輛到達時間 Time leave; /車輛離去時間CarNode;typedef struct NODE CarNode *stackMAX+1;/用來存放棧中元素的一維數組 int top; /棧指針SeqStackCar;/定義順序棧typedef struct car CarNode
11、 *data; /數據域 struct car *next;/指向下一個結點QueueNode;/鏈隊的結點類型typedef struct Node QueueNode *front;/隊首指針 QueueNode *rear; /隊尾指針LinkQueueCar;/定義鏈隊列類型void InitStack(SeqStackCar *); /初始化順序棧int InitQueue(LinkQueueCar *); /初始化鏈隊列int Arrival(SeqStackCar *,LinkQueueCar *); /車輛到達函數的定義void Leave(SeqStackCar *,SeqS
12、tackCar *,LinkQueueCar *); /車輛離去函數的定義void List(SeqStackCar,LinkQueueCar); /輸出棧和隊列中的元素/主函數模塊void main() SeqStackCar Enter,Temp;/定義車輛進棧變量Enter,和存放臨時棧變量Temp LinkQueueCar Wait; /定義車輛在便道等待變量 Wait int ch; InitStack(&Enter); /初始化 InitStack(&Temp); InitQueue(&Wait);/初始化 while(1) /* 菜單1 */printf(
13、"*歡迎進入停車場管理系統*n"); printf("n1. 車輛到達登記"); printf(" 2. 車輛離開登記"); printf(" 3. 車輛列表顯示"); printf(" 4. 退出系統n");while(1) scanf("%d",&ch); /從鍵盤輸入你選擇的菜單項 if(ch>=1&&ch<=4)break; else printf("n請選擇: 14."); switch(ch) case 1:
14、Arrival(&Enter,&Wait);break; case 2:Leave(&Enter,&Temp,&Wait);break; case 3:List(Enter,Wait);break; case 4:exit(0); 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) /* 初始化
15、隊列,建立一個空隊列 */ Q->front=(QueueNode *)malloc(sizeof(QueueNode); if(Q->front!=NULL) Q->front->next=NULL; Q->rear=Q->front; return(1); else return(-1);/溢出/車輛到達模塊int Arrival(SeqStackCar *Enter,LinkQueueCar *W) CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode);/為p結點分配空間 flush
16、all(); printf("n請輸入車牌號(例:贛B0689):"); gets(p->num); /輸入車牌號 if(Enter->top<MAX) Enter->top+; printf("n車輛在車場第%d位置.",Enter->top); printf("n車輛到達時間:"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min);/輸入到達時間 Enter->stackEnter->top=p;
17、 return(1); else printf("n該車須在便道等待!有車位時進入車場n"); t=(QueueNode *)malloc(sizeof(QueueNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return(1); /車輛離開模塊void PRINT(CarNode *p,int room) int A1,A2,B1,B2; printf("n車輛離開的時間:"); scanf("%d:%d",&(p->
18、;leave.hour),&(p->leave.min); printf("n離開車輛的車牌號為:"); puts(p->num);/輸出車牌號 printf("n其到達時間為: %d:%d",p->reach.hour,p->reach.min); printf("離開時間為: %d:%d",p->leave.hour,p->leave.min); A1=p->reach.hour; /將p指向的車輛到達時間賦值給A1 A2=p->reach.min; B1=p->lea
19、ve.hour; B2=p->leave.min; printf("n應交費用為: %2.2f元",(B1-A1)*60+(B2-A2)*price);/計費 free(p);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) int room; CarNode *p,*t; QueueNode *q;if(Enter->top>0) while(1) printf("n請輸入車在車場的位置/1-%d/:",Enter->top);/輸入車場的位置 sc
20、anf("%d",&room); if(room>=1&&room<=Enter->top) break;while(Enter->top>room) Temp->top+; Temp->stackTemp->top=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; p=Enter->stackEnter->top; Enter->stackEnter->top=NUL
21、L; 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->front!=W->rear)&&Enter->top<MAX) /車輛在便道的相關操作如下 q=W->front->next; t=q->data; Enter->t
22、op+; printf("n便道的%s號車進入車場第%d位置.",t->num,Enter->top); printf("n請輸入%s號車進入車場的時間:"); scanf("%d:%d",&(t->reach.hour),&(t->reach.min); W->front->next=q->next; if(q=W->rear) W->rear=W->front; Enter->stackEnter->top=t; free(q);else printf("n便道里沒有車.n");else printf("n車場里沒有車."); void List1(SeqStackCar *S) int i; if(S->top>0) printf("n 車場位置 到達時間 車牌號n");for(i=1;i<=S->top;i+) printf(" %d ",i); printf(" %d:%d ",S->
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡安全防護技術培訓手冊
- 醫療行業疫情防控指南
- 2025年哈爾濱貨運從業考試試題及答案
- 網絡教育平臺課程開發與推廣策略
- 2025年煙臺貨運資格證考試題答案
- 藝術史論與作品欣賞練習題
- 數據恢復流程指南
- 2025年北京市第一次普通高中學業水平合格性考試歷史試題(原卷版+解析版)
- 2025年入黨積極分子測試題庫(含答案)
- 2025年人民警察執法資格考試法律專業知識考試題庫及答案(550題)
- YY/T 0606.3-2007組織工程醫療產品第3部分:通用分類
- GB/T 21566-2008危險品爆炸品摩擦感度試驗方法
- GB/T 17207-2012電子設備用固定電容器第18-1部分:空白詳細規范表面安裝固體(MnO2)電解質鋁固定電容器評定水平EZ
- 國開電大《人員招聘與培訓實務》形考任務4國家開放大學試題答案
- 臨時用電現場安全檢查表
- 豬營養體系課件
- 青少年模擬法庭劇本(敲詐勒索)
- 中考復習確定二次函數的解析式課件
- 萬用表校準報告
- 地鐵盾構法施工技術試題
- 高處作業審批表
評論
0/150
提交評論