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

下載本文檔

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

文檔簡介

1、. . . . 課程設(shè)計報告課程名稱:課程名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計題目設(shè)計題目: 停車場管理系統(tǒng) 系系 別:別: 計 算 機 系 專專 業(yè):業(yè):組組 別:別:學生學生: :學學 號號: :起止日期起止日期: : 年 月 日 年 月 日 指導教師指導教師: :目 錄第一章需求分析.11.1 課程設(shè)計任務(wù)與要求 .11.1.1 題目 .11.1.2 問題描述 .1. . . . 1 / 221.1.3 基本要求 .11.1.4 測試數(shù)據(jù) .11.2 課程設(shè)計思想 .11.3 運行環(huán)境與開發(fā)工具.2第二章概要設(shè)計.22.1 停車場管理流程.22.2 主要模塊設(shè)計.22.3 程序流程與框圖 .42

2、.4 設(shè)計方法與其原理 .4第三章詳細設(shè)計.53.1 抽象數(shù)據(jù)類型定義.53.2 數(shù)據(jù)類型定義.73.3 主要模塊的程序描述 .8第四章 調(diào)試與操作說明.14第五章 課程設(shè)計總結(jié)與體會.18第六章 致.18第七章參考文獻.19第八章 附錄.19. . . . 1 / 22第一章 需求分析1.1 課程設(shè)計任務(wù)與要求1.1.1 題目:停車場管理1.1.2 問題描述設(shè)停車場是一個可停放 n 輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場按車輛到達時間的先后順序,依次由北向南排列(大門在南端,最先到達的第一輛車停放在停車場的最北端) ,若停車場已停了 n 輛汽車,則后來的汽車只能在門外的通

3、道上等候,一旦有車開走,收排在通道上的第一輛車即可開入;當停車場每輛車要離開時,在它之后進入的車輛必須先退出停車場為其讓路,待該輛車開出大門,其他車輛再按原次序進入停車場,每輛停放在停車場的車在它離開停車場時必須按它停留在停車場的時間長短交納停車費。試為停車場編寫按上述要求進行管理的模擬程序。1.1.3 基本要求要求以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理;要求處理的數(shù)據(jù)元素包括三個數(shù)據(jù)項:汽車“到達”或“離去”信息、汽車牌照與到達或離去的時刻;該系統(tǒng)完成以下功能:若是車輛到達,則輸出汽車在停車場或便道上的停車位置;若是車離去,則輸出汽車在停車場停留的時

4、間和應(yīng)交納的費用(在便道上停留的時間不收費) ;要求棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表實現(xiàn)。1.1.4 測試數(shù)據(jù)設(shè) n=2,輸入數(shù)據(jù)為:(A ,1,5) , (A ,2,10) , (D ,1,15) ,(A ,3,20) , (A ,4,25) , (D ,2,35) , (D ,4,40) , (E ,0,0) 。其中A表示到達, D表示離開, E表示輸入結(jié)束。1.2 課程設(shè)計思想此停車場管理系統(tǒng)是在一個狹長的通道上的,而且只有一個大門可以供車輛進出,并且要實現(xiàn)停車場某輛車要離開時,在它之后進入停車場的車都必須先退出停車場為它讓路,待其開出停車場后,這些車輛再依原來的次序進場的功能,就可以設(shè)計兩

5、個堆棧,其中一個堆棧用來模擬停車場,另一個堆棧用來. . . . 2 / 22模擬臨時停車場,該臨時停車場用來存放當有車輛離開時,原來停車場為其讓路的車輛。至于當停車場已滿時,需要停放車輛的通道可以用一個鏈隊列來實現(xiàn)。當停車場開走一輛車時,通道上便有一輛車進入停車場,此時只需要改變通道上車輛結(jié)點的連接方式就可以了,使通道上第一輛車進入停車場這個堆棧,并且使通道上原來的第二輛車成為通道上的第一輛車,此時只需將模擬通道的鏈隊列的頭結(jié)點連到原來的第二輛車上就可以了。1.3 運行環(huán)境與開發(fā)工具該停車場管理系統(tǒng)程序運用 C 語言編寫,其編譯環(huán)境在 Microsoft Visual C+ 6.0。第二章

6、概要設(shè)計2.1 停車場管理流程:1當車輛要進入停車場時,檢查停車場是否已滿,如果未滿則車輛進入停車場;如果停車場已滿,則車輛進入便道等候。2當車輛要求出棧時,先讓在它之后進入停車場的車輛退出停車場為它讓路,再讓該車退出停車場,讓路的所有車輛再按其原來進入停車場的次序進入停車場。之后,再檢查在便道上是否有車等候,有車則讓最先等待的那輛車進入停車場。2.2 主要模塊設(shè)計2.2.1 此停車場管理系統(tǒng),主要分為以下六個模塊:(1)主程序模塊void main()初始化停車場;初始化讓路的臨時棧;初始化便道;輸出停車場管理主菜單:車輛到達、車輛離開與計費、查看停車場信息;(2)入場模塊. . . . 3

7、 / 22 int Arrival(SeqStackCar *,LinkQueueCar *)車場未滿,車進車場;車場已滿,車進便道;(3)出場模塊void Leave(SeqStackCar *Enter,SeqStackCar *Exit,LinkQueueCar *W)車輛離開停車場;(4)輸出模塊void List(SeqStackCar S,LinkQueueCar W)輸出停車場信息; (5)棧模塊實現(xiàn)棧的抽象數(shù)據(jù)類型(6)隊列模塊實現(xiàn)隊列的抽象數(shù)據(jù)類型2.2.2 在以上各個模塊中,出現(xiàn)的調(diào)用的函數(shù)為:void InitStack(SeqStackCar *s);int InitQ

8、ueue(LinkQueueCar *Q);void welcome();int Arrival(SeqStackCar *Enter,LinkQueueCar *W);void PRINT(CarNode *p);void Leave(SeqStackCar *Enter,SeqStackCar *Exit ,LinkQueueCar *W);void List1(SeqStackCar *S);void List2(LinkQueueCar *W);. . . . 4 / 22void List(SeqStackCar S,LinkQueueCar W);2.3 程序流程與框圖Arriva

9、l用戶界面主函數(shù)LeaveListExit主函數(shù)PRINTList1List2ListLeave圖 1 系統(tǒng)功能結(jié)構(gòu)圖2.4 設(shè)計方法與其原理對于此停車場管理系統(tǒng)的實現(xiàn),就是用兩個堆棧來分別模擬停車場以與停車場車輛為其它車輛讓路時退出停車的臨時停放地點。至于通道上車輛的停放則用一個鏈隊列來實現(xiàn),此時,通道上車輛的離開或者進入停車場只需改變此鏈隊列上的結(jié)點而已。對于要對停車場的車輛根據(jù)其停放時間收取相應(yīng)的停車費用,可以記錄下車輛進入以與離開停車場的時間,再用時間差乘以相應(yīng)的單價并且打印出最后的費用就可以實現(xiàn)了。. . . . 5 / 22第三章詳細設(shè)計31 抽象數(shù)據(jù)類型定義(1)棧的抽象數(shù)據(jù)類型

10、定義AST Stack數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,.,n, n0數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,.,n約定 an 端為棧頂,a1 端為棧底。基本操作: InitStack(&S) 操作結(jié)果:構(gòu)造一個空棧 S。DestroyStack(&S)初始條件:棧 S 已存在。操作結(jié)果:棧 S 被銷毀。ClearStack(&S)初始條件:棧 S 已存在。操作結(jié)果:將棧 S 清為空棧。StackEmpty(S)初始條件:棧 S 已存在。操作結(jié)果:若棧 S 為空棧,則返回 TRUE,否則 FALSE。StackLength(s)初始條件:棧 S 已

11、存在。操作結(jié)果:返回 S 的元素個數(shù),既棧的長度。GetTop(S,&e)初始條件:棧 S 已存在且非空。操作結(jié)果:用 e 返回 S 的棧頂元素。Push(&S,e)初始條件:棧 S 已存在。操作結(jié)果:插入元素 e 為新的棧頂元素。Pop(&S,&e)初始條件:棧 S 已存在且非空。. . . . 6 / 22操作結(jié)果:刪除 S 的棧頂元素,并用 e 返回其值。StackTraverse(S,visit()初始條件:棧 S 已存在且非空。操作結(jié)果:從棧底到棧頂依次對 S 的每個數(shù)據(jù)元素調(diào)用函數(shù) visit()。一旦 visit()失敗,則操作失效。ADT Sta

12、ck(2)隊列的抽象數(shù)據(jù)類型定義ADT Queue數(shù)據(jù)對象:D=ai|aiElemSet,i=1,2,.,n,n0數(shù)據(jù)關(guān)系:R1=|ai-1,aiD,i=2,.,n約定其中 a1 端為隊列頭,an 為隊列尾?;静僮鳎篒nitQueue(&Q)操作結(jié)果:構(gòu)造一個空隊列 Q。DestroyQueue(&Q)初始條件:隊列 Q 已存在。操作結(jié)果:隊列 Q 被銷毀,不再存在。ClearQueue(&Q)初始條件:隊列 Q 已存在。操作結(jié)果:將 Q 清為空隊列。QueueEmpty(Q)初始條件:隊列 Q 已存在。操作結(jié)果:若 Q 為空隊列,則返回 TRUE,否則 FALSE。

13、QueueLength(Q)初始條件:隊列 Q 已存在。操作結(jié)果:返回 Q 的元素個數(shù),即隊列的長度。GetHead(Q,&e)初始條件:Q 為非空隊列。操作結(jié)果:用 e 返回的隊頭元素。EnQueue(&Q,e). . . . 7 / 22初始條件:隊列 Q 已存在。操作結(jié)果:插入元素 e 為 Q 的新的隊尾元素。DeQueue(&Q,&e)初始條件:Q 為非空隊列。操作結(jié)果:刪除 Q 的隊頭元素,并用 e 返回其值。QueueTraverse(Q,visit()初始條件:Q 已存在且非空。操作結(jié)果:從隊頭到隊尾,依次對 Q 的每個數(shù)據(jù)元素調(diào)用函數(shù) visit

14、()。一旦 visit() 失敗,則操作失敗。ADT Queue 32 數(shù)據(jù)類型定義#define MAX 2 /*存儲車庫最大容量*/#define price 3 /*每車每時刻費用*/typedef struct node int num10; int reachtime; int leavetime; CarNode; /*車輛信息結(jié)點*/ typedef struct NODE CarNode *stackMAX+1; int top; SeqStackCar; /*模擬車站*/ typedef struct car CarNode *data; struct car *next;

15、QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模擬通道*/. . . . 8 / 223.33.3 主要模塊的程序描述本程序主要分為四部分:(1)主函數(shù)模塊、 (2)車輛到達模塊、 (3)車輛離開模塊、 (4)顯示車輛信息模塊 主要程序:1主函數(shù)void main() SeqStackCar Enter,Exit; LinkQueueCar Wait; char ch;welcome(); InitStack(&Enter); /*初始化車站*/ InitStack(&a

16、mp;Exit); /*初始化讓路的臨時棧*/ InitQueue(&Wait); /*初始化通道*/while(1)system(CLS); printf(n*停車管理系統(tǒng)*); printf(nnttt1. 車輛到達 請選擇 A ); printf(nnttt2. 車輛離開 請選擇 D ); printf(nnttt3. 車輛信息 請選擇 I ); printf(nnttt4. 退出程序 請選擇 E );printf(n*); printf(nnttt 現(xiàn)在請選擇以上信息 : );while(1) . . . . 9 / 22 ch=getchar();printf(n); swi

17、tch(ch)case A:Arrival(&Enter,&Wait); break; /*車輛到達*/case D:Leave(&Enter,&Exit,&Wait); break; /*車輛離開*/case I:List(Enter,Wait); break; /*列表打印信息*/case E:exit(0);/*退出主程序*/default: break;system(CLS); printf(n*停車管理系統(tǒng)*); printf(nnttt1. 車輛到達 請選擇 A ); printf(nnttt2. 車輛離開 請選擇 D ); printf(n

18、nttt3. 車輛信息 請選擇 I ); printf(nnttt4. 退出程序 請選擇 E );printf(n*); printf(nnttt 現(xiàn)在請選擇以上信息 : ); (2)車輛到達模塊int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達*/. . . . 10 / 22 CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); printf(nnttt 停車場還有%d 停車位(若停車位為 0,車可先進入便道等待)n,MAX - Enter-top); prin

19、tf(ttt 請輸入到達車輛車牌: );scanf(%d,&(p-num); if(Enter-toptop+; printf(nttt 該車輛在停車場的位置是: %dn,Enter-top); printf(nttt 請輸入該車輛到達的時間: );scanf(%d,&(p-reachtime); Enter-stackEnter-top=p;return(1); else /*車場已滿,車進便道*/ printf(nttt 停車場已滿 該車輛需在便道上等待!n); system(pause); t=(QueueNode *)malloc(sizeof(QueueNode);

20、t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(-1);. . . . 11 / 22 (3)車輛離開模塊void Leave(SeqStackCar *Enter,SeqStackCar *Exit,LinkQueueCar *W) /*車輛離開*/ int room; CarNode *p,*t; QueueNode *q; /*判斷車場是否有車*/ if(Enter-top0) /*有車*/ while(1) /*輸入離開車輛的信息*/printf(ttt 停車場里停放的車輛總數(shù): %d,Enter-top);printf(n

21、nttt 請輸入要離開車輛的位置(1-%d): ,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;elseprintf(nnttt 離開車輛位置不存在 !n);while(Enter-toproom) /*車輛離開*/Exit-top+;Exit-stackExit-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-;. . . . 12 / 22p=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Ente

22、r-top-;while(Exit-top=1)Enter-top+;Enter-stackEnter-top=Exit-stackExit-top;Exit-stackExit-top=NULL;Exit-top-;PRINT(p,room); /*判斷通道上是否有車與車站是否已滿*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(nnttt 便道的%d 號車進入車場第%d 位置.,*t-num,Enter-top); printf(nnttt 請輸入現(xiàn)在的時間:); scanf(%d,&

23、;(t-reachtime); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q);else. . . . 13 / 22printf(nnttt 便道里沒有車.n); else printf(nnttt 車場里沒有車.n); /*沒車*/ system(pause);(4)顯示車輛信息模塊void List1(SeqStackCar *S) /*列表顯示車場信息*/ int i; if(S-top0) /*判斷車站是否有車*/ printf(nttt 車場:); printf(nntt

24、t 位置 到達時間 車牌號n);for(i=1;itop;i+) printf(%26d,i); printf(%6d,S-stacki-reachtime); printf(%10d,*S-stacki-num); printf(n); else printf(nttt 車場里沒有車n); system(pause); void List2(LinkQueueCar *W) /*列表顯示便道信息*/ QueueNode *p;. . . . 14 / 22 p=W-head-next; if(W-head!=W-rear) /*判斷通道上是否有車*/ printf(nttt 等待車輛的為: ); while(p!=NULL) printf(%10d,*p-data-num); p=p-next; pri

溫馨提示

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

評論

0/150

提交評論