課程設計方案停車場管理系統(tǒng)_第1頁
課程設計方案停車場管理系統(tǒng)_第2頁
課程設計方案停車場管理系統(tǒng)_第3頁
課程設計方案停車場管理系統(tǒng)_第4頁
課程設計方案停車場管理系統(tǒng)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學號 1011200142數(shù)據(jù)結構課程設計停車場管理系統(tǒng)起止日期:年月至年月日學生姓名班級 指 導 教 師 (簽 字 >年月日7 / 19停車場管理系統(tǒng)一、引言3二、系統(tǒng)總體設計31、設計思路32、系統(tǒng)總體框架圖53、系統(tǒng)流程圖5三、詳細設計71、車輛停車函數(shù)及流程圖72、車輛離開函數(shù)及流程圖83、列表顯示車場信息函數(shù)及流程圖94、列表顯示便道信息105 列表顯示菜單函數(shù)及流程圖11四、總結12參考文獻12五、附錄13一、引言隨著現(xiàn)代化信息技術的發(fā)展,人民生活水平快速提高,汽車的數(shù)量也飛速增長,于此同時,停車問題越來越受人們的關注,為了使停車場有效管理,停車場管理的信息化成為必然。我們可

2、以利用所學的知識,編寫一個停車場管理系統(tǒng),以提高管理的效率,提升停車場的競爭力。本次課程設計,我運用C語言編寫停車場管理系統(tǒng),主要實現(xiàn)汽車停車,離開,收費,停車信息查詢,顯示等功能,主要實現(xiàn)方式是用棧和隊列。下面對棧和隊列進行一下簡單介紹。棧 <stack )是一種僅允許在一端進行插入和刪除運算的線性表。棧中允許插入和刪除的那一端,稱為棧頂<top )。棧頂?shù)牡谝粋€元素稱為棧頂元素。棧中不可以插入和刪除的那一端稱為棧底。在一個棧中插入元素,即把新元素放到當前棧頂元素的上面,使其稱為新的棧頂元素,即進棧<push)。從一個棧中刪除一個元素,即把棧頂元素刪除掉,使其下面的元素成為

3、新的棧頂元素,稱為出棧<pop)。棧遵循后進先出的原則,即后進棧的元素必先出棧。其中順序棧是利用一組地址連續(xù)的存儲單元依次存放從棧底到棧頂?shù)脑?。在C語言中,可以用一維數(shù)組描述順序棧中數(shù)據(jù)元素的存儲區(qū)域,并預設一個數(shù)組的最大空間。棧底設置在0 下標端,棧頂隨著插入和刪除元素而變化,可以用一個整形變量top 來指示棧頂?shù)奈恢?。隊列是一種限定在表的一端進行插人而另一端進行刪除的線性表,與棧相反,隊列遵循先進先出的原則。允許刪除的一端,稱為隊頭<front )。允許插入的一端稱為隊尾<rear )。向隊列中插入新的元素稱為入隊,新元素進隊后就成為了新的隊尾元素;從隊列中刪除元素,稱

4、為出隊,元素離隊后,其后繼元素就成為了新的隊頭元素。其中鏈隊列就是用鏈表表示的隊列,需要兩個分別指示隊頭和隊尾的指針<分別稱為頭指針和尾指針)。為了操作方便,給鏈隊列添加一個頭結點,并令頭指針指向頭結點,尾指針指向隊尾元素結點,判斷隊列為空的條件是頭指針和尾指針均指向頭結點。停車場的管理系統(tǒng)正好利用棧和隊列的這些特點來實現(xiàn)模擬停車場和便道。停車場管理主要實現(xiàn)以下幾個功能:< 1)、停車場車位的劃分。< 2)、車輛進出管理及收費功能。< 3)、停車場車輛信息查詢功能。< 4)、退出系統(tǒng)。1 、設計思路停車場采用棧式結構,便道采用隊列結構<即便道就是等候隊列)。

5、停車場的管理流程如下:<1)當車輛要進入停車場時,檢查停車場是否已滿,如果未滿則車輛進棧<車輛進入停車場);如果停車場已滿,則車輛進入等候隊列<車輛進入便道等待)。<2)當車輛要求出棧時,該車到棧頂?shù)哪切┸囅瘸鰲?lt;在它之后進入的車輛必須先退出車場為它讓路),在讓該車出棧,其他車輛再按原次序進棧<進入車場)。當車輛出棧完畢后,檢查等候隊列<便道)中是否有車,有車則從隊頭取出,壓入棧中。用棧模擬停車場,用隊列模擬便道,按照從終讀入的輸人數(shù)據(jù)序列的進行模擬管理,每一組輸入數(shù)據(jù)包含三個數(shù)據(jù)項:汽車到達或汽車離去的信息,汽車車牌號以及汽車到達或離去的時刻。每次輸

6、完,進行輸出操作:若是車輛到達,輸出汽車在停車場內或者便道上停車的信息;若是車輛離去,輸出停留時間和需繳納的費用<在便道上停留的時間不收費),其中棧以順序結構實現(xiàn),隊列以鏈表結構實現(xiàn)。2、系統(tǒng)總體框架圖圖 1 系統(tǒng)總體框圖3 、系統(tǒng)流程圖實現(xiàn)對一級菜單:模擬停車場,便道,實現(xiàn)車輛停車、離開、列表顯示停車場信息、退出系統(tǒng)功能的控制,調用各個子函數(shù)。程序流程圖如圖2 所示。2 主函數(shù)流程圖# / 191 、車輛停車函數(shù)及流程圖車輛停車函數(shù)實現(xiàn):記錄停車信息包括車輛車牌號、停車時刻、停車車位等。其流程如圖3 所示3 車輛停車流程圖9 / 192 、車輛離開函數(shù)及流程圖車輛離開函數(shù)主要實現(xiàn):記錄

7、車輛離開的信息,以及便道上的車是否進入11 / 193 、列表顯示車場信息函數(shù)及流程圖該函數(shù)主要判斷停車場是否有車,如果有車就顯示停車場車輛的信息,沒車顯示無車。其流程如圖5 所示。5 列表顯示停車場信息流程圖4、列表顯示便道信息判斷便道上是否有車,如果有車,輸出車輛的車牌號,如果沒有車,顯示無車,其流程如圖6 所示13 / 196 列表顯示便道信息5 列表顯示菜單函數(shù)及流程圖示實現(xiàn)列表顯示功能的控制,調用顯示停車場信息、便道信息的函數(shù),程序流程圖如圖7 所示7 列表顯示菜單及流圖17 / 19四、總結通過本次課程設計,我對數(shù)據(jù)結構的理解進一步加深,我理解和掌握了每一段程序代碼的功能及含義,并

8、且能夠實現(xiàn)模擬停車場管理的主要功能:利用棧實現(xiàn)車的入庫問題,利用隊列完成車在便道上停放的問題,主要是通過棧和隊列的初始化,調用等函數(shù)來模擬停車問題。學習數(shù)據(jù)結構,我學會如何將所學的知識運用到實際中,解決一些實際的問題,這才是學習的根本。當然在實驗中我也遇到了不少實際性的問題,比如車輛停車的時間hour 限制在 24 小時, min 限制在 60 分鐘之內,如果加入日期計算就更好了;在便道上等待的車輛,車主不可能無限制的等待,應該編寫一個便道上車輛離開的函數(shù)更合理些。編寫的程度要與實際有聯(lián)系,這就不能只依賴于課本,還要聯(lián)系實際多多思考,重復調試,不斷改進,才能編出一個符合實際的有價值的系統(tǒng)。參考

9、文獻1 馮燕,陳越. 數(shù)據(jù)結構課程設計M. 第一版 . 浙江大學出版社,20072 李春葆,尹為民,李蓉蓉. 數(shù)據(jù)結構教程上機指導. 第三版 . 清華大學出版社,2008五、附錄#include "stdio.h"#include "stdlib.h"#include "string.h"#define MAX 2/ 車庫容量#define price 0.2/ 停車收費按分計typedefstruct time int hour 。int min 。 Time。/ 時間結點typedefstruct node char num10

10、。Time reach 。Time leave 。 CarNode。/ 車輛信息,包括車牌號,到達和離開時間typedefstruct NODECarNode*stackMAX+1。 int top 。 SeqStackCar。/ 用棧模擬車庫typedefstruct car CarNode * data 。struct car *next。 QueueNod。etypedefstruct Node QueueNode *front 。QueueNode *rear 。 LinkQueueCar。 / 用隊列模擬便道/* 函數(shù)聲明 */void InitStack(SeqStackCar *

11、 。 / 初始化棧int InitQueue(LinkQueueCar *。 / 初始化便道int Arrival(SeqStackCar * ,LinkQueueCar *。 / 車輛停車void Leave(SeqStackCar *,SeqStackCar * ,LinkQueueCar * 。 / 車輛離開 void List(SeqStackCar,LinkQueueCar 。 / 顯示存車信息void main(SeqStackCar Enter,Temp 。LinkQueueCar Wait 。int ch 。InitStack( &Enter> 。InitStac

12、k( &Temp>。InitQueue( &Wait>。while (1> printf("nn歡迎使用停車場管理系統(tǒng)27 / 19。printf("n1 車輛停車" >。printf("n2 車輛離開" >。printf("n3 列表顯示" >。printf("n4 退出系統(tǒng)n">。printf( "n停車費用: 0.2元 /分 "。printf("n*。printf( "n 請選擇您要服務的工程1-2-3

13、-4: " >。while (1> scanf( "%d", &ch>。if (ch >=1&&ch<=4>break。else printf( "n 請選擇:1-2-3-4" >。switch (ch>case 1:Arrival( &Enter, &Wait>。 break。 / 車輛停車case 2:Leave( &Enter, &Temp,&Wait>。 break。 / 車輛離開case 3:List(Enter

14、,Wait> 。 break。 / 列表打印信息case 4:exit(0> 。 / 退出主程序default : break。void InitStack(SeqStackCar * s>/ 初始化棧int i 。s->top =0。for (i =0。 i <=MAX。 i +>s->stacks ->top =NULL。int InitQueue(LinkQueueCar * Q>/ 初始化便道 Q-> front =(QueueNode* >malloc( sizeof (QueueNode>>。if (Q-

15、>front != NULL> Q-> front -> next =NULL。Q->rear =Q->front 。return (1>。 elsereturn ( - 1>。 void Display(CarNode * p, int room>/ 打印車場的信息 int A1,A2,B1,B2 。printf( "n 請輸入離開的時間/ *:*/:">。scanf( "%d:%d", &(p -> leave . hour>, &(p -> leave .

16、 min>>。printf( "n>> 離開車輛的車牌號:" >。puts(p -> num>。printf( "n>> 其到達時間為:%d:%d",p -> reach . hour,p -> reach . min>。printf( "n>> 離開時間為:%d:%d",p -> leave . hour,p ->leave . min>。A1=p->reach . hour。A2=p->reach . min。B1=p

17、->leave . hour。B2=p->leave . min。printf( "n>> 應交費用為:%.1f 元 n" ,(B1 -A1+24>%24*60+(B2-A2+60>%60>* price> 。free(p> 。int Arrival(SeqStackCar * Enter,LinkQueueCar *W>/ 車輛到達 CarNode *p。QueueNode *t 。p=(CarNode*>malloc( sizeof (CarNode>>。flushall(> 。prin

18、tf( "n 請輸入車牌號: " >。gets(p -> num>。if (Enter ->top <MAX> Enter -> top +。printf( "n 車輛在第%d號車位" ,Enter ->top> 。printf( "n 請輸入開始停車時間:/*:*/">。scanf( "%d:%d", &(p -> reach . hour>, &(p -> reach . min>>。Enter ->

19、stackEnter -> top =p。return (1>。else / 車位已滿,車進便道 printf( "n>> 車位已滿,請在便道等待!n" >。t =(QueueNode* >malloc( sizeof (QueueNode>>。t ->data =p。t -> next =NULL。W->rear ->next =t 。W->rear =t 。return (1>。 void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQu

20、eueCar*W>int room 。CarNode*p, *t 。QueueNode* q。if (Enter ->top >0>while (1> printf( "請輸入離開車的車位號/1-%d/" ,Enter ->top>。scanf( "%d", &room>。if (room>=1&&room<=Enter -> top> break。 while (Enter ->top >room>/ 車輛離開 Temp->top +

21、。Temp-> stackTemp ->top =Enter ->stackEnter -> top 。Enter ->stackEnter ->top =NULL。Enter ->top - 。p=Enter ->stackEnter -> top 。Enter ->stackEnter ->top =NULL。Enter ->top - 。while (Temp->top >=1> Temp->top +。Enter ->stackEnter ->top =Temp-> sta

22、ckTemp -> top 。Temp-> stackTemp ->top =NULL。Temp-> top - 。 Display(p,room> 。/ 判斷通道上是否有車及停車位是否已滿if (W->front != W->rear> &&Enter -> top <MAX> q=W-> front -> next。t =q-> data。Enter ->top +。printf( ">>便道車牌號為%s的車進入%d號車位停車" ,t -> num

23、,Enter -> top>。printf( "n 請輸入現(xiàn)在的時間/*:*/">。scanf( "%d:%d", &(t -> reach . hour>, &(t -> reach . min>>。W-> front ->next =q-> next 。if (q =W-> rear>W-> rear =W-> front 。Enter ->stackEnter ->top =t。free(q> 。 else printf( &

24、quot;>>便車道里沒有車n" >。 else printf( ">>車位里沒有車n" >。 void List1(SeqStackCar *S>int i 。if (S->top >0>printf( "n>> 車牌號車位停車時刻n" >。for (i =1。 i <=S-> top 。 i +> printf( " %s" ,S->stacki -> num>。printf( "%d",i> 。printf( "%d:%dn",

溫馨提示

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

評論

0/150

提交評論