停車場(chǎng)管理實(shí)驗(yàn)報(bào)告.doc_第1頁(yè)
停車場(chǎng)管理實(shí)驗(yàn)報(bào)告.doc_第2頁(yè)
停車場(chǎng)管理實(shí)驗(yàn)報(bào)告.doc_第3頁(yè)
停車場(chǎng)管理實(shí)驗(yàn)報(bào)告.doc_第4頁(yè)
停車場(chǎng)管理實(shí)驗(yàn)報(bào)告.doc_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

.HUNAN UNIVERSITY課程實(shí)驗(yàn)報(bào)告題目:停車場(chǎng)管理學(xué)生姓名: 學(xué)生學(xué)號(hào):專業(yè)班級(jí):指導(dǎo)老師: 完成日期: 一 需求分析1. 輸入形式 第一次輸入一個(gè)正整數(shù),代表停車場(chǎng)容量大小。然后輸入三個(gè)值,分別為字符、正整數(shù)、正整數(shù),中間用空格隔開,分別代表車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼以及到達(dá)或離去的時(shí)刻。其中字符必須為“A,D,E”三者之一。 輸入格式為:“A 1 5”、“D 1 15”和“E 0 0“。 當(dāng)用戶輸入的字符不是ADE或者輸入的不是正整數(shù)時(shí),提示用戶輸入錯(cuò)誤并重新輸入2. 輸出形式 若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。 (注:本程序中默認(rèn)停車一小時(shí)收費(fèi)10元)3. 程序功能本程序可通過(guò)用戶輸入的車輛信息,輸出該車的停車位置或者停車時(shí)間及應(yīng)繳費(fèi)用4. 測(cè)試數(shù)據(jù)請(qǐng)輸入停車場(chǎng)容量:5A 1 1 車停在停車場(chǎng)第 1 個(gè)位置A 2 2 車停在停車場(chǎng)第 2 個(gè)位置 A 6 6 車停在停車場(chǎng)第 3 個(gè)位置D 1 4 停車時(shí)間:3 繳納費(fèi)用:¥30D 2 6 停車時(shí)間:3 繳納費(fèi)用:¥30F C 19.5 輸入有誤,請(qǐng)重新輸入E 0 0 二 概要設(shè)計(jì)1. 抽象數(shù)據(jù)類型將每輛車模擬成一個(gè)對(duì)象,每個(gè)對(duì)象具有車牌號(hào)時(shí)間等屬性,所以定義一個(gè)Car類存儲(chǔ)這些信息class Carpublic: int CarNumber;/車牌號(hào)碼 int ArriveTime;/到達(dá)時(shí)間 int LeaveTime;/離開時(shí)間使用棧模擬停車場(chǎng),其ADT設(shè)計(jì):ADT stack 數(shù)據(jù)對(duì)象:Car類 數(shù)據(jù)關(guān)系:線性關(guān)系 基本操作: void clear();/棧的初始化 bool push(const Car& item);/棧的插入操作 bool pop(Car& it);/棧的刪除操作 bool topValue(Car& it)/棧的頂層元素 int length() constreturn size;/棧的實(shí)際長(zhǎng)度使用隊(duì)列模擬場(chǎng)外通道,其ADT設(shè)計(jì)如下: ADT Queue 數(shù)據(jù)對(duì)象:Car類 數(shù)據(jù)關(guān)系:線性關(guān)系 基本操作: void clear();/隊(duì)列的初始化 bool enqueue(const Car& it);/入隊(duì) bool dequeue(Car& it);/出隊(duì) int length() constreturn size;/隊(duì)列的長(zhǎng)度 2.算法基本思想 在該程序中,對(duì)停車場(chǎng)和場(chǎng)外通中每輛車停車的編號(hào)而言,他們有唯一的第一個(gè)元素和最后一個(gè)元素,而且除第一個(gè)元素以外的每個(gè)元素都有唯一的后繼,除最后一個(gè)元素以外的每個(gè)元素都有唯一的前驅(qū)。因此這些元素具有線性關(guān)系。而且,對(duì)于停車場(chǎng)里面的汽車,他們邏輯次序是“先進(jìn)后出,后進(jìn)先出“的,且只在表頭作插入和刪除,所以可以使用棧來(lái)模擬停車場(chǎng)。而在場(chǎng)外通道中的汽車,他們是”先進(jìn)先出”的,在一端插入另一端刪除操作,所以可以用隊(duì)列來(lái)模擬場(chǎng)外通道。當(dāng)汽車離開時(shí),在它之后進(jìn)入的車輛必須先退出再按原次序進(jìn)入停車場(chǎng),所以需要定義另外一個(gè)臨時(shí)棧存儲(chǔ)這些元素。(本算法按用戶輸入的順序進(jìn)行車輛的停放,不是按車牌號(hào)碼依次停放) (1)當(dāng)有汽車需要進(jìn)停車場(chǎng)停車時(shí),進(jìn)行入棧操作,若停車場(chǎng)已滿,即棧已滿,則將車停在場(chǎng)外通道里,進(jìn)行入隊(duì)操作,并記下此時(shí)的時(shí)間ArriveTime; (2)當(dāng)有汽車需要離開停車場(chǎng)時(shí),對(duì)該車對(duì)應(yīng)的元素進(jìn)行出棧操作,并將后面進(jìn)來(lái)的車輛所對(duì)應(yīng)的元素進(jìn)行出棧操作,將這些元素(除了需要離開的車對(duì)應(yīng)的元素)存入另外一個(gè)棧,即為需要離開停車場(chǎng)的車讓道,并記下此時(shí)的時(shí)間LeaveTime; (3)在需要離開停車場(chǎng)的車成功離開停車場(chǎng)時(shí),將存儲(chǔ)在臨時(shí)棧的那些元素按照原來(lái)的順序依次插入原來(lái)的棧; (4) 如果隊(duì)列不為空(即停車場(chǎng)場(chǎng)外通道上有車,這些車需要進(jìn)入停車場(chǎng)停車),進(jìn)行入棧操作,即進(jìn)行(1)操作;(5)通過(guò)LeaveTime 與ArriveTime的差計(jì)算停車時(shí)間和停車費(fèi)用(本程序默認(rèn)停車每小時(shí)10元);3.程序基本流程 程序由個(gè)基本模塊組成: 輸入模塊:輸入停車場(chǎng)的容量和車輛的相關(guān)信息; 停車模塊:根據(jù)車的信息,將該車對(duì)應(yīng)的元素進(jìn)行入棧操作; 離開模塊:根據(jù)車的信息,將該車對(duì)應(yīng)的元素進(jìn)行出棧操作,并將后面的元素存入一個(gè)臨時(shí)棧中; 輸出模塊:輸出該車停車位置或停車費(fèi)用;三 詳細(xì)設(shè)計(jì)1. 物理數(shù)據(jù)類型 停車場(chǎng)容量為正整數(shù),使用整型數(shù)據(jù)存儲(chǔ)n; 對(duì)于剩下的輸入使用字符型、整型、整型存儲(chǔ),并將相應(yīng)數(shù)據(jù)存入Car類class Carpublic: int CarNumber;/車牌號(hào)碼 int ArriveTime;/到達(dá)時(shí)間 int LeaveTime;/離開時(shí)間定義一個(gè)Link類用來(lái)存儲(chǔ)元素值element及下一個(gè)存儲(chǔ)表中下一個(gè)節(jié)點(diǎn)指針的next域,其ADT設(shè)計(jì)如下: template class Link public: Car element; Link *next; Link(const Car & elemval, Link* nextval = NULL) element = elemval; next = nextval; Link(Link *nextval = NULL) next = nextval; ;由于停車場(chǎng)容量一定,即??臻g大小不變,所以可以選用順序表實(shí)現(xiàn)棧class AStck:public Stack/ private: int size;/棧的長(zhǎng)度 int top;/棧頂元素Car *listArray;/ 順序表保存棧元素 public: AStack(int sz)size=sz;top=0;listArray=new Carsz; /構(gòu)造函數(shù) AStack()delete listArray; /析構(gòu)函數(shù)void clear()top=0;/棧的清空 bool push(const Car&item) if(top=size) return false; elselistArraytop+=item; return true; /棧的插入 bool pop(Car& item) if(top=0) return false; elseitem=listArray-top;return true; /棧的刪除 bool topValue(Car & it) const if(top=0) return false; else it=listArraytop-1; return true; /獲取棧頂元素 int length()const return top; /棧的長(zhǎng)度 ;由于該隊(duì)列中元素添加操作和刪除操作比較多,所以使用鏈?zhǔn)疥?duì)列實(shí)現(xiàn)隊(duì)列:template class Queue :public Link private:int size;Link* front;Link* rear; public: LQueue(int sz)front=NULL; rear=NULL;size=0 Lqueue()deletefront; deleterear; void clear() while(front!=NULL) rear=front; front=front-next; delete rear; rear=NULL;size=0; /隊(duì)列的清空 bool enqueue(const Car& it) if(rear=NULL) front=rear=new Link(it NULL); else rear-next=new Link(it ,NULL); rear=rear-next; size+; return true;/入隊(duì)bool dequeue(Car& it) if(size=0) return false; it=front-element;Link* ltemp=front;front=front-nextdelete ltemp;if(front=NULL) rear=NULL;siz-;return true;/出隊(duì)int length() const return size; /隊(duì)列的長(zhǎng)度 2. 算法具體步驟(park為停車場(chǎng)對(duì)應(yīng)的棧,out指臨時(shí)棧,line指隊(duì)列)char c; input(c);/輸入汽車停車或者離開或者結(jié)束;input(num);/輸入汽車編號(hào)input(time);/輸入汽車進(jìn)入或離開時(shí)間Car C100;/Car的對(duì)象數(shù)組while(1) /停車 switch(c)case(A)/進(jìn)入停車場(chǎng) if(park is FULL) /停車場(chǎng)已滿 enqueue(Cnum-1);output(line.length()/輸出停車位置else park.push(Ca - 1);Ca - 1.ArriveTime = b;Ca - 1.carNumber = a;output(park.length())/輸出停車位置 break; case(D)/離開 Ca - 1.LeaveTime = b; Ca - 1.carNumber = a; /進(jìn)來(lái)與離開時(shí)間 for (int i = 0; i a - 1; i+)/為要離開的車開道 park.pop(Ci);/ 先刪除前面的元素 out.push(Ci);/將前面的元素存至臨時(shí)棧中 park.topValue(Ci);/ while(out.length()!=0)/將車復(fù)原 for (int i = 0; i a - 1; i+) out.pop(Ci); park.push(Ci); if(line.length()!=0)/將在通道內(nèi)的車停進(jìn)停車場(chǎng) for (int j = a; j a + line.length() - 1; j+)line.dequeue(Cj);park.push(Cj);output(Ca - 1.LeaveTime - Ca - 1.ArriveTime); /輸出停留時(shí)間 output(10*(Ca - 1.LeaveTime - Ca - 1.ArriveTime); /輸出停車費(fèi)用break;case E:return 0;/輸入E時(shí)結(jié)束 3. 算法時(shí)空分析在該程序中,棧的插入的時(shí)間復(fù)雜度為(1),而對(duì)棧中元素進(jìn)行刪除時(shí),需要對(duì)該元素后面的所有元素都進(jìn)行刪除,并將他們存入另外一個(gè)臨時(shí)棧中,到該元素順利刪除完畢時(shí)又重新存入原棧中,所以棧的刪除的時(shí)間復(fù)雜度為(n2);4.輸入輸出格式(停車費(fèi)用每小時(shí)10元)輸入:5A 1 1 A 6 6 D 1 4 E 0 0 輸出:車停在停車場(chǎng)第 1個(gè)位置車停在場(chǎng)外通道第 2 個(gè)位置停車時(shí)間:3 繳納費(fèi)用:¥30四 調(diào)試分析在使用類模板時(shí),第一次沒(méi)有使用模板參數(shù)列表,導(dǎo)致程序運(yùn)行出錯(cuò),后來(lái)將Car改成class Car后糾正了這個(gè)錯(cuò)誤五 測(cè)試結(jié)果程序測(cè)試時(shí)界面截圖如下:六 用戶使用說(shuō)明1. 本程序用來(lái)處理停車場(chǎng)的問(wèn)題;2. 運(yùn)行程序后,需要要求進(jìn)行輸入,如若輸入錯(cuò)誤,系統(tǒng)提示輸入錯(cuò)誤請(qǐng)重新輸入,第一次輸入停車場(chǎng)容量,接下來(lái)請(qǐng)輸入車輛相關(guān)信息;3. 車輛相關(guān)信息中用空格隔開,第一個(gè)輸入A或D或E,分別表示停車,車離開停車場(chǎng)和結(jié)束程序,第二個(gè)輸入車牌號(hào)碼,第三個(gè)輸入到達(dá)停車場(chǎng)時(shí)間或離開停車場(chǎng)時(shí)間。七 實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn),我掌握了棧和隊(duì)列的ADT設(shè)計(jì),以及如何用它們來(lái)解決問(wèn)題附錄代碼:#include using namespace std; int judge(); class Car public: int carNumber; int ArriveTime; int LeaveTime; ; class Stack private: int size; int top; Car*listArray; public: int maxsize() return size; ; Stack(int sz) size = sz; top = 0; listArray = new Carsz; Stack() delete listArray; void clear() top = 0; void push(const Car&it) if (top = size) ; else listArraytop+ = it; void pop(Car&it) if (top = 0); else it=listArray-top; void topValue(Car&it)const if (top = 0) ; else it=listArraytop - 1; int length() return top; ; template class Link public: Car element; Link *next; Link(const Car & elemval, Link* nextval = NULL) element = elemval; next = nextval; Link(Link *nextval = NULL) next = nextval; ; template class Queue :public Link private: int size; Link* front; Link* rear; public: Queue() front = NULL; rear = NULL; size = 0; Queue() deletefront; deleterear; ; void clear() while (front != NULL) rear = front; front = front-next; delete rear; rear = NULL; size = 0; /隊(duì)列的清空 void enqueue(const Car& it) if (rear =NULL) front = rear =new Link(it,NULL) ; else rear-next = new Link(it, NULL); rear = rear-next; size+; /入隊(duì) void dequeue(Car& it) if (size = 0) ; it = front-element; Link* ltemp = front; front = front-next; delete ltemp; if (front = NULL) rear = NULL; size-; /出隊(duì) int length() const return size; ;/隊(duì)列的長(zhǎng)度 int main() int n; cout 請(qǐng)輸入停車場(chǎng)容量:; n=judge(); while (n = 0) cout 輸入有誤,請(qǐng)重新輸入。n請(qǐng)輸入停車場(chǎng)容量:; n = judge(); Car C100; Stack park = Stack(n); Stack out = Stack(n); Queue line; Car topCar; while (1) /停車 char c;/停車or離開 int a;/汽車車牌號(hào)碼 int b;/到達(dá)時(shí)間or離開時(shí)間 cout cab; switch (c) case A: if (park.length()n + 1) park.push(Ca - 1); Ca - 1.ArriveTime = b; Ca - 1.carNumber = a; cout 該車停在第停車場(chǎng)第 park.length() 個(gè)位置n; else

溫馨提示

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

評(píng)論

0/150

提交評(píng)論