中南民族大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)方案_第1頁
中南民族大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)方案_第2頁
中南民族大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)方案_第3頁
中南民族大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)方案_第4頁
中南民族大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理系統(tǒng)方案_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 . . . 停車場管理模擬1. 需求分析1.總體要求設(shè)停車場是一個可停放N輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在南端,最先到達(dá)的第一輛車停放在停車場的最北端),若停車場已停了n輛汽車,則后來的汽車只能在門外的通道上等候,一旦有車開走,則排在通道上的第一輛車即可開入;當(dāng)停車場每輛車要離開時,在它之后進入的車輛必須先退出停車場為其讓路,待該輛車開出大門,其他車輛再按原次序進入停車場。請為停車場編寫按上述要求進行管理的模擬程序。2.分析1 用棧來表示停車場,用隊列來表示停車道。2 用戶需輸入車輛的必要信息,如車輛的到達(dá)或離開,汽

2、車牌號以與到達(dá)或離去的時刻。停車場的容量與單位時間的停車費由編程序者自行設(shè)置,結(jié)構(gòu)需輸出車輛停車所需繳納的費用。3 本程序要求對車輛的動態(tài)能夠輸出具體的信息容,包括停車或離開的時間,位置,與所需繳納的停車費。4 測試數(shù)據(jù)為:N=2,輸入數(shù)據(jù)為:(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á),D表示離去,E表示輸入結(jié)束。5. 程序執(zhí)行的命令為:1. 創(chuàng)建棧和隊列。 2.對車輛的行為進行相應(yīng)的處理。 3.輸出車輛的信息。三 概要設(shè)計1、 本程序基本模塊(

3、1) 主程序部分: int main() /讀入文件數(shù)據(jù)/文件讀入判斷/第一次輸入數(shù)據(jù)不需要檢測 /處理車輛到達(dá)模塊; /處理車輛離開模塊;2.停車場模擬的抽象數(shù)據(jù)類型定義typedef struct Elem/定義車輛數(shù)據(jù)結(jié)構(gòu)類型int carnum;/車牌號int time;/停車時刻Elem;typedef struct Elem *base; Elem *top; int stacksize;/棧大小Sqstack;void initStack(Sqstack &S)/建一個停車場空棧/傳入?yún)?shù):stack 棧結(jié)構(gòu)/傳出參數(shù):分配有存空間的棧結(jié)構(gòu)/初始化棧int push(Sqstac

4、k &S,Elem &e)/插入元素/輸入?yún)?shù):S棧結(jié)構(gòu),e要入棧的節(jié)點/完成入棧操作int lengthstack(Sqstack S)/求棧的長度/返回棧的長度int pop(Sqstack &S,Elem &e)/輸入?yún)?shù)S棧結(jié)構(gòu),e要出棧的節(jié)點/完成出棧操作void initqueue(LinkQueue &Q)/構(gòu)造一個車道空隊列/傳入?yún)?shù)Q要初始化的隊列/傳出參數(shù):Q帶有頭結(jié)點的隊列/初始化隊列void enqueue(LinkQueue &Q,int carnum,int time)/車道入隊操作/傳入?yún)?shù):Q隊列,carnumber,time 要入隊的數(shù)據(jù)/完成入棧操作int

5、lengthqueue(LinkQueue Q)/求車道隊列長度/返回隊的長度void dequeue(LinkQueue &Q,Elem &e)/從對頭離隊操作,并返回其值/傳入?yún)?shù):Q隊列結(jié)構(gòu),e的節(jié)點數(shù)據(jù)/刪除隊頭void carin(Sqstack &S,LinkQueue &Q,Elem car)/進場函數(shù)/傳入?yún)?shù):S棧結(jié)構(gòu),Q隊列結(jié)構(gòu),car的節(jié)點數(shù)據(jù)int k=0;/檢測信號,當(dāng)值為k=0時表示棧和隊中都找不到該車牌號/賦值為棧底 /在棧中尋找是否有同一編號的車 /找到了有同一編號的車/如果在棧中未找到,在隊列中查找/隊頭 /找不到繼續(xù)找/棧和隊列中都找不到一樣車牌號,執(zhí)行入棧

6、操作;/棧未滿void carleave(Sqstack &S,LinkQueue &Q,Elem car)/車輛退出函數(shù)/傳入?yún)?shù):S棧結(jié)構(gòu),Q隊列結(jié)構(gòu),car的節(jié)點數(shù)據(jù)/在棧中沒有找到與要離開的車/先在棧中尋找;/在棧中找到/備用棧/先在棧中尋找;/其他車退出停車場暫存在零時棧/棧中有車離開,將隊列中的車進入棧中 /離隊,并返回數(shù)據(jù)e/棧中沒找到要離開的車/在隊列中找到要離開的車 四 詳細(xì)設(shè)計1、 程序整體流程2、 程序函數(shù)調(diào)用關(guān)系3、 汽車離開,到達(dá)流程圖5.源代碼#include #include #include#define OVERFLOW -2 #define ERROR 0#

7、define N 2 /停車場的容量設(shè)為2#define price 5/將單位時間的停車費設(shè)為5using namespace std;typedef struct Elem/定義車輛數(shù)據(jù)結(jié)構(gòu)類型int carnum;/車牌號int time;/停車時刻Elem;typedef structElem *base;Elem *top;int stacksize;Sqstack;void initStack(Sqstack &S)/建一個停車場空棧S.base=(Elem*)malloc(N*sizeof(Elem);if(!S.base) exit(OVERFLOW);S.top=S.base

8、;S.stacksize=N;int push(Sqstack &S,Elem &e)/插入元素Elem *temp;if(S.top-S.base=S.stacksize)/棧滿,退出return 1;elsetemp=S.top;temp-carnum=e.carnum;temp-time=e.time;S.top+;return 0;int lengthstack(Sqstack S)/求棧的長度return S.top-S.base;int pop(Sqstack &S,Elem &e) /若棧不空,則刪除S的棧頂元素,用E返回其值,并返回OK;否則返回ERRORif(S.top=S.

9、base)return ERROR;e=*-S.top;return 1;typedef struct QNode/定義車道隊列struct QNode *next;Elem Qelem;QNode,*QueuePtr;typedef struct/隊頭指針,隊尾指針QueuePtr front;QueuePtr rear;LinkQueue;void initqueue(LinkQueue &Q)/構(gòu)造一個車道空隊列Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);if(!Q.front)exit(OVERFLOW);Q.front-next=Q.r

10、ear-next=NULL;void enqueue(LinkQueue &Q,int carnum,int time)/車道入隊操作QueuePtr p=(QueuePtr)malloc(sizeof(QNode);p-Qelem.carnum=carnum;p-Qelem.time=time;p-next=NULL;Q.rear-next=p;Q.rear=p;int lengthqueue(LinkQueue Q)/求車道隊列長度int i=0;QueuePtr p;p=Q.front-next;while(p!=Q.rear)i+;p=p-next;i+;return i;void d

11、equeue(LinkQueue &Q,Elem &e)/從對頭離隊操作,并返回其值QueuePtr p=(QueuePtr)malloc(sizeof(QNode);if(Q.front=Q.rear)cout車道中沒有車輛!next;e=p-Qelem;Q.front-next=p-next;if(Q.rear=p) Q.rear=Q.front;free(p);void carin(Sqstack &S,LinkQueue &Q,Elem car)/進場函數(shù)int k=0;/檢測信號,當(dāng)值為k=0時表示棧和隊中都找不到該車牌號QueuePtr r;Elem *temp;temp=S.ba

12、se;/賦值為棧底while(temp!=S.top)if(temp-carnum=car.carnum)/在棧中尋找是否有同一編號的車cout該車號在停車場中已存在,請重新輸入!next; /隊頭 while(r&r-Qelem.carnum!=car.carnum)r=r-next;/找不到繼續(xù)找if(r&r-Qelem.carnum=car.carnum)cout該車號在車道中已存在,請重新輸入!carnum=car.carnum;S.top-time=car.time;S.top+;coutcarnum號車于car.time時刻進入停車場lengthstack(S)號車位!endl;e

13、lseenqueue(Q,car.carnum,car.time);/棧滿已滿,把車安排在車道隊列中cout停車場已滿,請car.carnum號車在便車道lengthqueue(Q)稍等!carnum=car.carnum)int temp_cost;temp_cost=(car.time-temp-time)*price;ture=1;/在棧中找到coutcar.carnum號車在car.time時刻離開,停車時間為time刻鐘,應(yīng)交停車費用為:temp_costcarnum=e.carnum;S.top-time=car.time;S.top+;cout請便道的第一輛車牌號為e.carnu

14、m的車輛轉(zhuǎn)入停車場,停車位置為lengthstack(S)號,停車時刻為:car.timenext; /隊頭while(r&r-Qelem.carnum!=car.carnum)p=r;r=r-next;if(r&r-Qelem.carnum=car.carnum)/在隊列中找到要離開的車 ture=2;cout便道Qelem.carnum號車離開,不收取費用!next=r-next;free(r);/直接從隊列離開 if(ture=0)cout沒有該輛車!endl;int main()char c; int j=0,temp_time,i=1;/i=0,判斷臨時記錄時間的temp_time應(yīng)

15、該去該次的值,還是上次的值。j=0,表示第一次輸入數(shù)據(jù),不需要檢測數(shù)據(jù)是否正確LinkQueue Q;Sqstack S;Elem car;initqueue (Q);initStack(S);ifstream infile; cout歡迎使用停車場管理系統(tǒng)!endl;cout請稍等!信息正在載入,endl;system(PAUSE);/暫停函數(shù),模擬仿真infile.open(aaa.txt); /讀入文件數(shù)據(jù)if(infile.fail()/文件讀入判斷coutccar.carnumcar.time)if(j=1)if(S.top=S.base)cout停車場中沒有車!endl;else

16、if(car.timetemp_time&c!=E)/temp_time還是記錄上次的值cout您輸入的時間有誤,請重新輸入!endl;i=0;elsetemp_time=car.time;i=1;if(i=1) /正確的數(shù)據(jù)if(c=A)/到達(dá)carin(S,Q,car);else if(c=D) if(S.top=S.base) cout停車場中沒有車!endl;elsecarleave(S,Q,car);j=1;if(j=0)/第一次輸入數(shù)據(jù)不需要檢測if(c=A)/到達(dá)carin(S,Q,car);else if(c=D) cout停車場中沒有車!endl;j=1;temp_time=

17、car.time;if(c=E) cout輸入結(jié)束!endl;break;infile.close() ;return 0;五 調(diào)試分析1. 程序執(zhí)行調(diào)試時,讀取文件失敗,原因是“aaa.txt”文件放錯了位置2. 在數(shù)據(jù)輸入檢測時,經(jīng)常出現(xiàn)車號重復(fù)報錯信息,這時候得考慮這個檢測信號放置情況。3. 車道停車不收費,時間卻被一直計入計費時間,這時考慮調(diào)用值情況。4.本程序循環(huán)用的很多,找車,排隊,等等六 測試結(jié)果1.模擬仿真,進入登錄界面并載入信息,按任意鍵進入下一個界面。2.清屏函數(shù)去除不必要的信息,顯示主要容:七 用戶使用說明用戶將數(shù)據(jù)寫入aaa.txt的文件中,文件中的數(shù)據(jù)格式是A 1 5

18、A 2 10D 1 15A 3 20A 4 25A 5 30D 2 35D 4 40E 0 0其中A表示到達(dá),D表示離去,E表示輸入結(jié)束。這種格式,且其中的數(shù)據(jù)都必須是英文字符,然后執(zhí)行文件即可。八 . 課程設(shè)計總結(jié)通過此次實驗我深刻了解到數(shù)據(jù)結(jié)構(gòu)的真正用處,這是一門純屬于設(shè)計的科目,它需用把理論變?yōu)樯蠙C調(diào)試。老師會給我們講了一些設(shè)計的思想,順著老師的思路,來完成自己的設(shè)計,但是當(dāng)自己采用剛學(xué)的知識點編寫程序時卻感到十分棘手,有時表現(xiàn)在想不到適合題意的算法,有時表現(xiàn)在算法想出來后,只能將書本上原有的程序段謄寫到自己的程序中再加以必要的連接以完成程序的編寫。當(dāng)為停車場編寫棧,為車道編寫隊列遇到了很多自己都不了解的茫點,想了很久,還是想不出改怎么完善,但是程序還是得繼續(xù)下去,我多次請教了同學(xué),逐漸能自己找出錯誤,并加以改正,讀取數(shù)據(jù)文件那段編碼中,自己認(rèn)為用getlin函

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論