實驗二:停車場管理問題
一、 問題描述
1、實驗題目:
設停車場是乙個可停放n輛汽車的狹長通道,且只有乙個大門可供汽車進出。汽車停在停車場內按車輛到達時間的先後順序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在車場的最北端)。若停車場內已經停滿n輛車,那麼後來的車只能在門外的便道上等候。
一旦有車開走,則排在便道上的第一輛車即可進入。當停車場內某輛車要離開時,在它之後進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原來的次序進入車場。每輛停放在車場的車在它離開停車場時必須按它停留的時間長短繳納費用。
2、基本要求:
為停車場編制按上述要求進行管理的模擬程式。
3、測試資料:
設n=2,輸入資料為a』,1,5),(『a』,2,10),(『d』,1,15),(『a』,3,20),(『a』,4,25),(『a』,5,30),(『d』,2,35),
(『d』,4,40),(『e』,0,0)。對於每一輛車輸入的資料報括三個資料項:汽車「到達」或「離去」資訊,其車牌號碼及到達或離去的時刻,其中,『a』表示到達;『d』表示離去;『e』表示輸入結束。
例如:(『a』,1,5)表示1號牌照車在5這個時刻到達;(『d』,1,15)表示1號牌照車在15這個時刻離去。
二、 需求分析
1、本程式是模擬現實生活中的停車場管理系統,有較強的實用性,及較高的可靠性。
2、該程式具有友好的使用者介面,操作多樣,管理方面。
3、使用者根據提示選擇相應的操作,並根據提示輸入每輛車的資訊。
三、 概要設計
1、停車場的管理流程分析:
①當車輛進入停車場時,首先檢查停車場是否已滿,若未滿,車輛進入停車場,若已滿,車輛進入便道等候。
②當車輛要求離開時,先讓在它之後進入的車輛退出停車場為它讓路,再讓該車退出停車場,之後,讓路的所有車輛再按其原來進入停車場的次序進入停車場。再檢查便道上是否還有車等候,有車則讓最先等候的那輛車進入停車場。
2、資料結構分析
由於停車場只有乙個大門,當停車場內某輛車要離開時,在它之後的車輛必須先退出停車場為它讓路,先進停車場的後退出,符合「先進後出」的特點,所以用乙個棧來模擬停車場。
當停車場滿了後,後來的車輛都要到便道上等候,先排隊的車輛先離開便道進入停車場,符合佇列的「先進先出」的特點,所以用乙個佇列來模擬便道。
由於停車場中的車輛可以隨時離開,當車輛要離開時,在它後面的車輛都要先退出停車場,所以要再設定乙個輔助棧來模擬車輛退出停車場。
綜上所述,求解本題用到了兩個棧和乙個佇列。棧以順序結構模擬,佇列一鏈式結構模擬。
①抽象資料型別的定義
#define parking struct parking
adt parking
資料關係:r
}adt parking;
#define assistant struct assistant
adt assistant
資料關係:r
}adt assistant;
#define qnode struct qnode
adt qnode
資料關係:r
}adt qnode;
#define linkqueue struct linkqueue
adt linkqnode
資料關係:r
}adt linknode;
②自定義函式
void print_parking(parking *p)//列印停車場中所停的車輛資訊
void in_parking(parking *p,int c,int t)//進入停車場
void in_linkqueue(linkqueue *l,int c,int t)//進入便道
void take_out(parking *p,assistant *a,int c,int t)//車要離開停車場
void linkqueue_to_parking(linkqueue *l,parking *p,int t)/*便道上的車進入停車場*/
void operate(parking *p,assistant *a,linkqueue *l)//對停車場程式的操作
}③本程式的保護模組
結構體模組
主程式模組
自定義函式模組
呼叫關係:
3、程式設計
主要演算法的程式流程圖:
print_parking( )的演算法流程圖:
take_out( )的演算法流程圖:
四、詳細設計
1、抽象資料型別的定義與實現
①模擬停車場的順序棧
#define parking struct parking
parking/*停車場用順序棧來模擬,存放停車的車牌號,進入停車場的時間*/
; ②模擬車輛退出停車場時的順序輔助棧
#define assistant struct assistant
assistant/*輔助棧,用於存放退出停車場的車輛資訊*/
;③模擬便道的鏈式佇列
#define qnode struct qnode
#define linkqueue struct linkqueue
qnode/*鏈隊的結點型別*/
void in_parking(parking *p,int c,int t)//進入停車場
void in_linkqueue(linkqueue *l,int c,int t)//進入便道
void take_out(parking *p,assistant *a,int c,int t)//車要離開停車場
{int i, m=0;
while(p->car_num[m]!=c)
停車場管理系統
華北電力大學 實驗報告 實驗名稱 停車場管理 課程名稱 資料結構 停車場管理系統 1 問題描述 停車場內有乙個可停放n輛汽車的狹長通道,且只有乙個大門可供汽車進出。汽車在停車場內按車輛到達時的先後順序,依次由北向南排列 大門在最南端,最先到達的第一車輛停放在車輛的最北端 若車場內已停滿n輛汽車則後來...
停車場管理系統簡介
停車場管理系統是以一種高效 公正準確 科學經濟的停車場管理工具,實現停車場對於車輛動態和靜態的綜合管理。系統以感應卡為載體,通過感應卡記錄車輛進出資訊,利用計算機管理手段確定停車場的計費金額,結合工業自動化控制技術控制機電一體化外圍裝置,從而管理進出停車場的各種車輛。由於科技的日新月異不斷更新,為了...
停車場系統方案
目錄第一節停車場管理系統的分類 2 第二節停車場智慧型管理系統 2 一 系統的組成 2 二 與國內其它品牌對比優勢 3 三 管理體制 4 2 1系統使用的智慧卡種類 4 2 2收費制式 5 2 3計費 收費方式 5 2 4收費標準 5 四 系統安全保證措施 5 五 系統主要功能 6 1 自動道閘 6...