實(shí)驗(yàn)報告停車場管理_第1頁
實(shí)驗(yàn)報告停車場管理_第2頁
實(shí)驗(yàn)報告停車場管理_第3頁
實(shí)驗(yàn)報告停車場管理_第4頁
實(shí)驗(yàn)報告停車場管理_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn) 停車場管理姓名:曹國君 梁辰 唐琪皓 黃悅 班級:信息1班 學(xué)號:09125676 09125675 09125672 09125673 實(shí)驗(yàn)時間:第5周1.問題描述 設(shè)停車場內(nèi)只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后開入得車輛必須先退出車場為它讓路,待該車輛開出大門外,其他車輛再按原次序進(jìn)入車場,每輛停放在車場的車在

2、它離開停車場時必須按照它停留的時間長短交納費(fèi)用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。2. 數(shù)據(jù)結(jié)構(gòu)設(shè)計 由于停車場的停車位有限,只有一個入口,且通道狹長,當(dāng)停車場內(nèi)某輛車要離開時,在它之后開入得車輛必須先退出車場為它讓路,順序棧的結(jié)構(gòu)符合停車場的需求。若車場內(nèi)已停滿,車輛再外排隊(duì)等候,隊(duì)伍不限長度,可以使用鏈?zhǔn)疥?duì)列進(jìn)行模擬。輸入:停車位數(shù),停車費(fèi)單價,進(jìn)入或離去,車牌號,進(jìn)入或離去時間輸出:進(jìn)入:輸出停在停車場或者便道上的位置 離去:輸出停留在停車場上的時間(離開時間-進(jìn)入停車場的時間)及費(fèi)用為了滿足以上的要求,至少需要記錄進(jìn)入時間以及車牌號template<class Elem

3、Type>class SqStack protected:/ 順序棧的數(shù)據(jù)成員:int top;/ 棧頂指針 int maxSize; struct Set /定義一個結(jié)構(gòu)體,可以存放兩個數(shù)據(jù) ElemType num; ElemType time; ;/ 棧最大容量 Set *elems; template <class ElemType>struct Node / 數(shù)據(jù)成員:ElemType data1,data2;/ 兩個數(shù)據(jù)域Node<ElemType> *next;/ 指針域/ 構(gòu)造函數(shù):Node();/ 無參數(shù)的構(gòu)造函數(shù)Node(ElemType it

4、em1,ElemType item2 ,Node<ElemType> *link = NULL);/已知數(shù)數(shù)據(jù)元素值和指針建立結(jié)構(gòu);3. 程序設(shè)計(1)頭文件由于數(shù)據(jù)域的改變,創(chuàng)建,插入,刪除等函數(shù)都需要增加一個數(shù)據(jù)域的處理。順序棧:public:/ 抽象數(shù)據(jù)類型方法聲明及重載編譯系統(tǒng)默認(rèn)方法聲明:SqStack(int size = DEFAULT_SIZE);/ 構(gòu)造函數(shù)virtual SqStack();/ 析構(gòu)函數(shù)int Length() const;/ 求棧長度 bool Empty() const;/ 判斷棧是否為空void Clear();/ 將棧清空void Tra

5、verse(void (*Visit)(const ElemType &) const;/ 遍歷棧Status Push(const ElemType &e,const ElemType &t);/ 入棧Status Top(ElemType &e,ElemType &t) const;/ 取頂元素Status Pop(ElemType &e,ElemType &e);/ 出棧SqStack(const SqStack<ElemType> &copy);/ 復(fù)制構(gòu)造函數(shù)SqStack<ElemType> &

6、amp;operator =(const SqStack<ElemType> &copy); / 賦值語句重載鏈?zhǔn)疥?duì)列:public:LinkQueue();/ 無參數(shù)的構(gòu)造函數(shù)virtual LinkQueue();/ 析構(gòu)函數(shù)int Length() const;/ 求隊(duì)列長度 bool Empty() const;/ 判斷隊(duì)列是否為空void Clear();/ 將隊(duì)列清空void Traverse(void (*Visit)(const ElemType &) const ;/ 遍歷隊(duì)列Status DelQueue(ElemType &e,Elem

7、Type &t);/ 出隊(duì)操作Status GetHead(ElemType &e,ElemType &t) const;/ 取隊(duì)頭操作Status EnQueue(const ElemType &e,const ElemType &t);/ 入隊(duì)操作LinkQueue(const LinkQueue<ElemType> &copy);/ 復(fù)制構(gòu)造函數(shù)LinkQueue<ElemType> &operator =(const LinkQueue<ElemType> &copy);/ 賦值語句重載

8、(2) 輔助函數(shù) 當(dāng)車輛離開時,輸入車牌號與離開時間,如果該車輛在停車場中,則在其之后的車輛需要暫時離開停車場為其讓路,返回其進(jìn)入停車場的時間,并判別為真;如果該車輛不存在停車場中,則判別為假。int depart(const int &a,const int &n,SqStack<int> &p,bool &dans) /返回進(jìn)入時間 SqStack<int> park1(n); /建立一個臨時棧int tmpn,tmpt,count=0,atime,i; dop.Pop(tmpn,tmpt); park1.Push(tmpn,tmpt

9、); count+; /計數(shù)器用來記錄讓開的車數(shù) while(tmpn!=a&&!p.Empty(); /如果棧頂車牌不符合條件,而且棧不為空,把棧頂元素彈出后放入臨時棧中 if(tmpn=a) /如果找到了該車 dans=1; /判別為真 park1.Pop(tmpn,tmpt); /該車輛離開 count-; else dans=0; /如果遍歷仍找不到車,則判別為假 atime=tmpt; for(int i=0;i<count;i+) /讓路的車重新返回停車場 park1.Pop(tmpn,tmpt); p.Push(tmpn,tmpt); return atim

10、e; /返回進(jìn)入時間 為了避免輸入重復(fù)的車牌號,輸入的離開時間小于進(jìn)入時間,設(shè)計了遍歷功能供使用者參考template <class ElemType>void SqStack<ElemType>:Traverse(void (*Visit)(const ElemType &) const/ 操作結(jié)果:從棧頂?shù)綏5滓来螌5拿總€元素調(diào)用函數(shù)(*visit)for (int Pos = top-1; Pos >=0 ; Pos-)/ 從棧底到棧頂對棧的每個元素調(diào)用函數(shù)(*visit)cout<<"車牌:"(*Visit)(el

11、emsPos.num); cout<<"到達(dá)時間:"(*Visit)(elemsPos.time); cout<<endl; (3)主程序#include"assistance.h"#include"sq_stack.h"#include"lk_queue.h"int depart(const int &a,const int &n,SqStack<int> &p,bool &dans) SqStack<int> park1(n);in

12、t tmpn,tmpt,count=0,atime,i; dop.Pop(tmpn,tmpt); park1.Push(tmpn,tmpt); count+; while(tmpn!=a&&!p.Empty(); if(tmpn=a) dans=1; park1.Pop(tmpn,tmpt); count-; else dans=0; atime=tmpt; for(int i=0;i<count;i+) park1.Pop(tmpn,tmpt); p.Push(tmpn,tmpt); return atime; int main() int n=0,time,num,t

13、mp,oldtime; double prix; /停車單價 bool si; /判別車輛是否存在 char jug='P' cout<<"歡 迎 使 用 停 車 場 管 理 系 統(tǒng)"<<endl; while(n<1) cout<<"請輸入停車場的車位數(shù):"<<endl; cin>>n; LinkQueue<int> hallway; SqStack<int> park(n); cout<<"請輸入每分鐘停車費(fèi):"&

14、lt;<endl; cin>>prix; while(jug!='E') /選擇界面 cout<<"A.車輛到達(dá)"<<endl; cout<<"D.車輛離開"<<endl; cout<<"L.查看停車場情況"<<endl; /遍歷停車場情況 cout<<"E.退出程序"<<endl; cin>>jug; switch(jug) case 'A': /進(jìn)入 co

15、ut<<"請輸入車牌號與達(dá)到時間: "<<endl; cin>>num>>time; if(park.Length()!=n) /停車場沒滿 park.Push(num,time); cout<<"車牌號為 "<<num<<" 的車輛進(jìn)入停車場時間:"<<time<<"分鐘,位置:"<<park.Length()<<endl; /進(jìn)入停車場Else /停車場滿 hallway.EnQu

16、eue(num,time);cout<<"停車場已滿,車牌號為 "<<num<<" 的車輛進(jìn)入停車場外便道時間:"<<time<<"分鐘,位置:"<<hallway.Length()<<endl; /進(jìn)入便道排隊(duì)continue; case 'D': /離開 if(!park.Empty() /停車場有車輛 cout<<"請輸入車牌號與離開時間: "<<endl; cin>>num

17、>>time; oldtime=depart(num,n,park,si); /記錄進(jìn)入時間,判定其存在 if(si) /存在則輸出 cout<<"車牌號為 "<<num<<" 的車輛進(jìn)入停車場時間:"<<oldtime<<",離開時間為:"<<time<<"停留時間:"<<time-oldtime<<"分鐘,費(fèi)用:"<<(time-oldtime)*prix<

18、;<endl; if(!hallway.Empty() /如果有車輛在便道內(nèi)等候 hallway.DelQueue(num,tmp); park.Push(num,time); cout<<"車牌號為 "<<num<<" 的車輛進(jìn)入停車場時間:"<<time<<"分鐘,位置:"<<park.Length()<<endl; /隊(duì)列的隊(duì)首進(jìn)入棧,并輸出相關(guān)信息 else cout<<"停車場內(nèi)沒有該車輛"<<

19、;endl; /輸入的車牌號不存在于棧內(nèi) else cout<<"停車場內(nèi)沒有任何車輛"<<end /棧為空時,不用輸入離開車輛的信息 continue; case 'L': cout<<"停車場出入口(南)"<<endl; park.Traverse(Write<int>); /遍歷停車場占用的車位 cout<<endl; continue; cout<<"再 見"<<endl; /程序結(jié)束 system("pause"); return 0;停車場管理數(shù)據(jù)測試次數(shù)輸入輸出車位數(shù)單價到達(dá)離去信息時刻車牌號位置停留時間費(fèi)用125 A 51車位1 A 102車位2 D 1511050 A 203車位2 A 254便道位1 A 305便道位2 D 35225125 D 404525 E 00220.5 A 51車位1 A 102車位2 A 153便道位1 A 204便道位2 A 255便道位3 D 3022010 A 356便道位3 D 403105 D 4514020 E 00315 A 51車位1 A 102便道位1 D 152 A 153便道位2 D 25120100 D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論