停車場管理系統(tǒng)數(shù)據(jù)結(jié)構課設報告_第1頁
停車場管理系統(tǒng)數(shù)據(jù)結(jié)構課設報告_第2頁
停車場管理系統(tǒng)數(shù)據(jù)結(jié)構課設報告_第3頁
停車場管理系統(tǒng)數(shù)據(jù)結(jié)構課設報告_第4頁
停車場管理系統(tǒng)數(shù)據(jù)結(jié)構課設報告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/數(shù)據(jù)結(jié)構課程設計停車場管理系統(tǒng)目錄TOC\o"1-2"\h\u一、課設目的2二、問題描述2三、基本要求2四、詳細設計3〔1原理分析3〔2功能模塊3〔3用戶手冊6〔4流程圖6〔5測試用例7〔6測試目的7〔7測試要求7五、程序源碼7六、測試結(jié)果13七、課設總結(jié)15八、參考文獻15一、課設目的了解并掌握數(shù)據(jù)結(jié)構與算法的設計方法.具備初步的獨立分析和設計能力;初步掌握軟件開發(fā)過程中的問題分析.系統(tǒng)設計.程序編碼.測試等基本方法和技能;提高綜合應用所學的理論知識和方法獨立分析和解決問題的能力;訓練用系統(tǒng)的觀點和軟件開發(fā)和一般規(guī)范進行軟件開發(fā).培養(yǎng)軟件工作者所應具有的科學的工作方法和作風。二、問題描述設停車場內(nèi)只有一個可停放n輛汽車的狹長通道.且只有一個大門可供汽車進出。汽車在停車場內(nèi)按車輛到達時間的先后順序.依次由北向南排列〔大門在最南端.最先到達的第一輛車停放在車場的最北端.若車場內(nèi)已停滿n輛汽車.則后來的汽車只能在門外的便道上等候.一旦有車開走.則排在便道上的第一輛車即可開入;當停車場內(nèi)某輛車要離開時.在它之后開入的車輛必須先退出車場為它讓路.待該輛車開出大門外.其它車輛再按原次序進入車場.每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。三、基本要求以棧模擬停車場.以隊列模擬車場外的便道.按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車"到達"或"離去"信息、汽車牌照號碼及到達或離去的時刻.對每一組輸入數(shù)據(jù)進行操作后的輸出數(shù)據(jù)為:若是車輛到達.則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車離去.則輸出汽車在停車場內(nèi)停留的時間和應交納的費用〔在便道上停留的時間不收費。棧以順序結(jié)構實現(xiàn).隊列以鏈表實現(xiàn)。詳細設計〔1原理分析:棧是一種只能在一段進行輸入和輸出操作的線性表.表尾稱為棧頂.表頭稱為棧底。棧的主要特點是"后進先出".即后進棧的元素先處理.停車場的容量即為棧的存儲空間。隊列是限定僅能在表的一段進行插入.在表的另一端進行刪除的線性表。隊列中可以插入的一段稱為隊尾.可以刪除的一端稱為隊首。隊列的主要特點是"先進先出"。停車場管理系統(tǒng)是充分利用數(shù)據(jù)結(jié)構中棧和隊列的思想實現(xiàn)的.用到兩個堆棧.一個用來模擬停車場.另一個為臨時棧.存儲為離開停車場的車輛讓道的其他車輛;一個隊列結(jié)構.存儲便道的車輛信息。typedefstruct{//定義棧.表示停車場CarNode*base;//停車場的堆棧底CarNode*top;//停車場的堆棧頂intstacksize;//停車場的容量}Park;typedefstruct{//定義隊列.表示便道CarPtrfront;//便道的隊列的隊頭CarPtrrear;//便道的隊列的隊尾intlength;}Shortcut;〔2功能模塊:車輛到達:a、若棧不滿.車輛進棧.停到停車場;b、若棧滿.車輛入隊.停到便道;StatusArrival<Park&P,Shortcut&S>{intnumber,ar_time;//對進站車輛的處理:printf<"請輸入車牌號:">;//記錄車牌號.時間.并根據(jù)停車場scanf<"%d",&number>;//是否滿來判斷入棧還是入隊列printf<"進場的時刻:">;scanf<"%d",&ar_time>;if<P.stacksize<SIZE>{CarNodec;c.number=number;c.ar_time=ar_time;Push<P,c>;printf<"該車應停在第%d號車道.\n",P.stacksize>;}else{EnQueue<S,number,ar_time>;printf<"停車場已滿,請暫時停在便道的第%d個位置.\n",S.length>;}returnOK;}車輛離開:如果隊列不空且棧不滿.隊列上的車出隊入棧。StatusLeave<Park&P,Park&P1,Shortcut&S>{intnumber,le_time,flag=1,money,ar_time;//對離站車輛的處理:printf<"請輸入車牌號:">;//記錄車牌號.時間.停車費用scanf<"%d",&number>;printf<"出場的時刻:">;scanf<"%d",&le_time>;CarNodee,m;CarPtrw;while<P.stacksize>{Pop<P,e>;if<e.number==number>{flag=0;money=<le_time-e.ar_time>*PRICE;ar_time=e.ar_time;break;}Push<P1,e>;//后面的車開出停車場讓路.進入備用棧}while<P1.stacksize>{Pop<P1,e>;Push<P,e>;//備用棧中的車開入停車場}if<flag==0>{if<S.length!=0>{DeQueue<S,w>;m.ar_time=le_time;m.number=w->number;Push<P,m>;//便道中的車開入停車場free<w>;printf<"車牌號為%d的車已由便道進入停車場\n",m.number>;}printf<"停車費為%d,占用車位數(shù)為%d\n",money,P.stacksize>;}else{printf<"停車場不存在牌號為%d的車\n",number>;}returnOK;}〔3用戶手冊:①輸出菜單選項;請選擇<A,D,E>:②如果選擇A.即車輛到達:若棧不滿.車輛進棧.停到停車場;若棧滿.車輛入隊.停到便道;③如果選擇D.即車輛離開:計算時間及費用;如果隊列不空且棧不滿.隊列上的車出隊入棧;④如果選擇E.則退出程序。〔4流程圖:圖一、函數(shù)關系調(diào)用圖圖二、操作流程圖〔5測試用例:〔‘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。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車"到達"或"離去"信息、汽車牌照號碼及到達或離去的時刻.其中.‘A’表示到達.‘D’表示離去.‘E’表示輸入結(jié)束。〔6測試目的:測試菜單顯示方法.到達方法和離開方法能否正確完成.時間和費用計算是否正確?!?測試要求:測試用例要合理并足夠.既要有正確用例.也要有錯誤用例.檢驗程序的正確性和健壯性。五、程序源碼#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineOK1//函數(shù)返回狀態(tài)代碼.宏定義#defineERROR0#defineTRUE1#defineFALSE0#defineINFEASIBLE-1#defineOVERFLOW-2#defineSIZE2//停車場位置數(shù)#definePRICE2typedefintStatus;//棧,模擬停車場typedefstructCar1{//定義一個結(jié)構體來表示停車場中的車intnumber;//汽車車號intar_time;//汽車到達時間}CarNode;typedefstruct{//定義棧.表示停車場CarNode*base;//停車場的堆棧底CarNode*top;//停車場的堆棧頂intstacksize;//停車場的容量}Park;typedefintStatus;//隊列,模擬便道typedefstructCar2{//用另一個結(jié)構體來表示便道中停放的車intnumber;//汽車車號intar_time;//汽車到達時間structCar2*next;}*CarPtr;typedefstruct{//定義隊列.表示便道CarPtrfront;//便道的隊列的隊頭CarPtrrear;//便道的隊列的隊尾intlength;}Shortcut;StatusInitStack<Park&P>{//初始化停車場P.base=<CarNode*>malloc<SIZE*sizeof<Car1>>;if<!P.base>exit<OVERFLOW>;P.top=P.base;P.stacksize=0;returnOK;}StatusPush<Park&P,CarNodee>{//車進入停車場.棧的輸入操作*P.top++=e;++P.stacksize;returnOK;}StatusPop<Park&P,CarNode&e>{if<P.top==P.base>//車離開停車場.棧的輸出操作printf<"停車場為空.">;else{e=*--P.top;--P.stacksize;}returnOK;}StatusInitQueue<Shortcut&S>{S.front=S.rear=<CarPtr>malloc<sizeof<Car2>>;//初始化便道if<!S.front||!S.rear>exit<OVERFLOW>;S.front->next=NULL;S.length=0;returnOK;}StatusEnQueue<Shortcut&S,intnumber,intar_time>{CarPtrp;//車進入便道.隊列的輸入操作p=<CarPtr>malloc<sizeof<Car2>>;if<!p>exit<OVERFLOW>;p->number=number;p->ar_time=ar_time;p->next=NULL;S.rear->next=p;S.rear=p;++S.length;returnOK;}StatusDeQueue<Shortcut&S,CarPtr&w>{if<S.length==0>//車離開便道.隊列的輸出操作printf<"通道為空.">;else{w=S.front->next;S.front->next=S.front->next->next;--S.length;}returnOK;}StatusArrival<Park&P,Shortcut&S>{intnumber,ar_time;//對進站車輛的處理:printf<"請輸入車牌號:">;//記錄車牌號.時間.并根據(jù)停車場scanf<"%d",&number>;//是否滿來判斷入棧還是入隊列printf<"進場的時刻:">;scanf<"%d",&ar_time>;if<P.stacksize<SIZE>{CarNodec;c.number=number;c.ar_time=ar_time;Push<P,c>;printf<"該車應停在第%d號車道.\n",P.stacksize>;}else{EnQueue<S,number,ar_time>;printf<"停車場已滿,請暫時停在便道的第%d個位置.\n",S.length>;}returnOK;}StatusLeave<Park&P,Park&P1,Shortcut&S>{intnumber,le_time,flag=1,money,ar_time;//對離站車輛的處理:printf<"請輸入車牌號:">;//記錄車牌號.時間.停車費用scanf<"%d",&number>;printf<"出場的時刻:">;scanf<"%d",&le_time>;CarNodee,m;CarPtrw;while<P.stacksize>{Pop<P,e>;if<e.number==number>{flag=0;money=<le_time-e.ar_time>*PRICE;ar_time=e.ar_time;break;}Push<P1,e>;//后面的車開出停車場讓路.進入備用棧}while<P1.stacksize>{Pop<P1,e>;Push<P,e>;//備用棧中的車開入停車場}if<flag==0>{if<S.length!=0>{DeQueue<S,w>;m.ar_time=le_time;m.number=w->number;Push<P,m>;//便道中的車開入停車場free<w>;printf<"車牌號為%d的車已由便道進入停車場\n",m.number>;}printf<"停車費為%d,占用車位數(shù)為%d\n",money,P.stacksize>;}else{printf<"停車場不存在牌號為%d的車\n",number>;}returnOK;}intmain<>{intm=1;charflag;//選項ParkP,Q;ShortcutS;InitStack<P>;InitStack<Q>;InitQueue<S>;while<

溫馨提示

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

評論

0/150

提交評論