停車場管理課程設計與源程序文件_第1頁
停車場管理課程設計與源程序文件_第2頁
停車場管理課程設計與源程序文件_第3頁
停車場管理課程設計與源程序文件_第4頁
停車場管理課程設計與源程序文件_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、停車場管理系統(tǒng)、課程設計項目 : 停車場管理系統(tǒng)二、課程設計目的:以棧模擬停車場,以隊列車場外的便道,按照從終端輸入的數據序列進行模擬 管理。每一組數據包括三個數據項:汽車“到達”或“離去”信息、汽車牌號碼、 以及到達或離去的時刻。對每一組數據進行操作后的信息為:若是車輛到達,則輸 出汽車在停車場的內或便道上的位置:若是車輛離去則輸出汽車在停車場內的停留 時間和應繳納的費用 (在便道上的停留時間不收費) 。棧以順序結構實現, 隊列以鏈 表結構實現。三、課程設計內容:(一 ) 需求分析1 本演示程序中, CarNum ,CarTime ,price 應為任意的,輸入一個值賦給 初始報數上限 st

2、acksize ,程序自動保存車輛的車牌號和時間 (到達, 離開,結束),當車輛要進入棧時,檢查停車場是否已滿,如果未滿則車輛進棧(車輛進入 停車場);如果停車場已滿,則車輛進入等候隊列(車輛進入便道等候) 。當 車輛要求出棧時,該車到棧頂的那些車輛先彈出棧(在它之后進入的車輛必 須先退出車場為它讓路) ,再讓該車出棧,其他車輛再按原次序進棧(進入車 場)。當車輛出棧完畢后,檢查等候隊列(便道)中是否有車,有車則從隊列頭取出一輛車壓入棧中2 演示程序以用戶和計算機的對話方式執(zhí)行,即在計算機終端上顯示“提示信息”之后,由用戶在鍵盤上輸入三個數據相(汽車“到達”或“離去”信息、 車牌號碼、以及到達

3、或離去的時刻) ,程序根據其輸入再輸出相關信息。3 程序執(zhí)行的命令包括:(1)用棧模擬停車場,用隊列模擬車場外的便道,按照從終端讀入的輸入 數據序列進行模擬管理;(2)每一組輸入數據包括三個數據項:汽車到達或離去的信息,汽車牌號 碼以及到達或離去的時刻;( 3) 每次輸入完進行輸出操作:若是車輛到達,輸出汽車在停車場內或 便道上的停車位置;若是車輛離去,輸出停留時間和應繳納的費(在 便道上停留的時間不收費) ;(4)E:結束。4 測試數據(1 )停車場最多停車輛數: 1 單位時間內的價格: 5 到達或離去信息( A:到達 D :離去 E :結束),車牌號,時刻: A 12345 1車牌號為 1

4、2345 的車停在 1 處 到達或離去信息( A:到達 D :離去 E :結束),車牌號,時刻: A 12345 1車牌號 12345 的車已停車場或便道上,請重新輸入!到達或離去信息( A:到達 D :離去 E :結束),車牌號,時刻:A 54321 1停車場已停滿。車牌號為 54321 的車停在便道 1 處 到達或離去信息( A:到達 D :離去 E :結束),車牌號,時刻: D 56624 2停車場內沒有車牌號為 56624 的車!到達或離去信息( A :到達 D :離去 E :結束),車牌號,時刻:D 12345 2車牌號為 12345 的車停車費用為 5便道上的車牌號為 54321

5、的車駛進停車場 1 處D 54321 0 輸入時間有誤,請重新輸入 到達或離去信息( A:到達 D :離去 E :結束),車牌號,時刻:(二) 概要設計為了實現上述操作,其中棧以順序結構實現,隊列以鏈表結構實現1 基本操作:typedef structSElemType :車輛的車牌號和時間typedef struct SqStack :定義棧停車場車輛信息typedef struct QNode : 模擬車站void InitStack(SqStack *s,int n) : 初始化棧 (車站) void Push(SqStack *s,int num, int time):元素進棧void

6、 Pop(SqStack *s,int *num,int *time):元素出棧int StackEmpty(SqStack *s) :空棧int StackFull(SqStack *s) :滿棧typedef struct LinkQueue : 定義隊列(車場外的便道) int QueueEmpty(LinkQueue *Q): 初始化隊列void InitQueue(LinkQueue *Q):元素進隊列void EnQueue(LinkQueue *Q, int num): 元素出隊列void DeQueue(LinkQueue *Q, int *num):刪完之后為空列表int I

7、sExistS(SqStack *s,int num) :處理車輛是否到達車庫的情況 int IsExistQ(LinkQueue *Q,int num) :處理車輛是否到達便道的情況 void main() :主程序 本程序包含四個模塊: (1 ) 棧式車庫模塊 (2 ) 便道 隊列模塊 (3 ) 主程序模塊;系統(tǒng)框架圖:輸 入車庫便道(1) 輸入系統(tǒng),通過標準輸入,獲取用戶數據;(2) 輸出系統(tǒng),通過標準輸出,向用戶展數數據;(3) 車庫管理,當車庫沒有滿的時候,車就直接進去(4) 便道管理,當車庫滿了,車就進入便道,等有空位再進去框塊結構圖:便道管理 車庫管理說明:停車場是否已滿,如果未

8、滿則車輛進棧(車輛進入停車場) ;如果停車場已滿,則車輛進入等候隊列(車輛進入便道等候)系統(tǒng)流程圖:(三) 詳細設計1 元素類型,結點類型和指針類型:typedef structint CarNum;int CarTime;SElemType;typedef structSElemType *base,*top;int stacksize;int i;SqStack;typedef struct QNodeint CarNum;struct QNode *next; QNode,*QueuePtr; typedef structQueuePtr front,rear;int j;LinkQue

9、ue;2 每個模塊的分析:1)主程序模塊:void main()int n ;int price;char info;int num,time,e1,e2;int isexits,isexitq;SqStack st1,st2;LinkQueue Q;SElemType *p,*s;printf( 請輸入停車場最多停車輛數: n);scanf(%d,&n);printf( 請輸入單位時間內的價格: n);scanf(%d,&price);InitStack(&st1,n);InitStack(&st2,n);InitQueue(&Q);printf(n 請輸入到達或離去信息( A:到達 D :

10、離去 E:結束),車牌號, 時刻: n);scanf(%s %d %d,&info,&num,&time);while(info!=E)switch(info)case A:isexits=IsExistS(&st1,num); / 判斷車牌號為 num 的車是否已在停 車場或便道isexitq=IsExistQ(&Q,num);if(!isexits&!isexitq)if(st1.top -st1.base CarNum !=num;p-) if(p=st1.base-1)printf( 停車場內沒有車牌號為 %d 的車! n,num); elsefor(s=st1.top -1;s!=p

11、;s-)Pop(&st1,&e1,&e2);Push(&st2,e1,e2);Pop(&st1,&e1,&e2);if(timee2)printf( 輸入時間有誤,請重新輸入! n); Push(&st1,e1,e2);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);elseprintf( 車牌號為 %d 的車停車費用為 %dn,e1,(time-e2)*price);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);if(Q.front !=Q.rear&st

12、1.top-st1.base base=(SElemType *)malloc(n*sizeof(SElemType);s-top=s-base;s-stacksize=n;s-i =0;int StackEmpty(SqStack *s)if (s-base=s-top);return 1;void Push(SqStack *s,int num, int time) if(s-top-s-bases-stacksize)return ;s-top-CarNum=num;s-top-CarTime=time;s-top+;s-i+;void Pop(SqStack *s,int *num,i

13、nt *time)if(s-top=s-base)return ;*num=(s-top-1)-CarNum;*time=(s-top-1)-CarTime;s-top-;s-i-;int StackFull(SqStack *s)if(s-top-s-base=s-stacksize);return 1;int IsExistS(SqStack *s,int num)/判斷是可以進車庫不SElemType *p;p=s-base ;while(ptop )if(p-CarNum =num)return 1;elsep+;return 0;(3) 便道(隊列)模塊void InitQueue(

14、LinkQueue *Q)Q-front=Q-rear=(QueuePtr)malloc(sizeof(QueuePtr);Q-front-next=NULL;Q-j=0;int QueueEmpty(LinkQueue *Q)return (Q-front=Q-rear);void EnQueue(LinkQueue *Q, int num)QNode *p;p=(QueuePtr)malloc(sizeof(QueuePtr);p-CarNum=num;p-next=NULL;Q-rear-next=p;Q-rear=p;Q-j+;void DeQueue(LinkQueue *Q, in

15、t *num)QNode *p;if(Q-front=Q-rear)return ;p=Q-front-next;*num=p-CarNum;Q-front-next=p-next;if(Q-rear=p)Q-rear=Q-front;/ 刪完之后為空列表的情況Q-j-;int IsExistQ(LinkQueue *Q,int num)/進入便道的車QNode *p;if(Q-j=0)return 0;p=Q-front -next ;while(p !=NULL)if(p-CarNum =num)return 1;elsep=p-next ;return 0;3 完整的程序: #inclu

16、de#include#include#include typedef structint CarNum;int CarTime;SElemType;typedef structSElemType *base,*top;int stacksize;int i;SqStack;typedef struct QNodeint CarNum;struct QNode *next;QNode,*QueuePtr; typedef structQueuePtr front,rear;int j;LinkQueue;void InitStack(SqStack *s,int n)s-base=(SElemT

17、ype *)malloc(n*sizeof(SElemType); s-top=s-base;s-stacksize=n;s-i =0;int StackEmpty(SqStack *s)if (s-base=s-top);return 1;void Push(SqStack *s,int num, int time) if(s-top-s-bases-stacksize) return ;s-top-CarNum=num;s-top-CarTime=time;s-top+;s-i+;void Pop(SqStack *s,int *num,int *time)if(s-top=s-base)

18、return ;*num=(s-top-1)-CarNum;*time=(s-top-1)-CarTime;s-top-;s-i-;int StackFull(SqStack *s)if(s-top-s-base=s-stacksize);return 1;void InitQueue(LinkQueue *Q)Q-front=Q-rear=(QueuePtr)malloc(sizeof(QueuePtr);Q-front-next=NULL;Q-j=0;int QueueEmpty(LinkQueue *Q)return (Q-front=Q-rear);void EnQueue(LinkQ

19、ueue *Q, int num)QNode *p; p=(QueuePtr)malloc(sizeof(QueuePtr); p-CarNum=num;p-next=NULL;Q-rear-next=p;Q-rear=p;Q-j+;void DeQueue(LinkQueue *Q, int *num)QNode *p;if(Q-front=Q-rear)return ;p=Q-front-next;*num=p-CarNum;Q-front-next=p-next;if(Q-rear=p)Q-rear=Q-front;/ 刪完之后為空列表的情況Q-j-;int IsExistS(SqSta

20、ck *s,int num)SElemType *p;p=s-base ;while(ptop )if(p-CarNum =num)return 1;elsep+;return 0;int IsExistQ(LinkQueue *Q,int num)QNode *p;if(Q-j=0)return 0;p=Q-front -next ; while(p !=NULL) if(p-CarNum =num) return 1;elsep=p-next ;return 0;int main()int n ;int price;char info2;int num,time,e1,e2;int ise

21、xits,isexitq;SqStack st1,st2;LinkQueue Q;SElemType *p,*s;printf( 請輸入停車場最多停車輛數: n);scanf(%d,&n);printf( 請輸入單位時間內的價格: n);scanf(%d,&price);InitStack(&st1,n);InitStack(&st2,n);InitQueue(&Q);printf(n 請輸入到達或離去信息( A:到達 D :離去 E :結束),車牌號,時刻: n);scanf(%s%d%d,&info,&num,&time);while(info0!=E)switch(info0)case

22、A:isexits=IsExistS(&st1,num); / 判斷車牌號為 num 的車是否已在停車場或便 道isexitq=IsExistQ(&Q,num);if(!isexits&!isexitq)if(st1.top -st1.base CarNum !=num;p-)if(p=st1.base-1)printf( 停車場內沒有車牌號為 %d 的車! n,num);elsefor(s=st1.top -1;s!=p;s-)Pop(&st1,&e1,&e2);Push(&st2,e1,e2);Pop(&st1,&e1,&e2);if(timee2)printf( 輸入時間有誤,請重新輸入

23、! n);Push(&st1,e1,e2);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);elseprintf( 車牌號為 %d 的車停車費用為 %dn,e1,(time-e2)*price);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);if(Q.front !=Q.rear&st1.top-st1.base n )DeQueue(&Q,&e1);/ printf( 請輸入車牌為 %d 的車從便道上駛入停車場的時間: n,e1);/scanf(%d,&t

24、ime);Push(&st1,e1,time);printf( 便道上的車牌號為 %d 的車駛入停車場 %d 處n,e1,st1.i );break;/switchprintf(n 請輸入到達或離去信息( A:到達 D :離去 E:結束),車牌號,時刻:n);scanf(%s%d%d,&info,&num,&time);printf( 結束! n);(四 ) 程序使用說明及測試結果1 程序使用說明( 1)本程序的運行環(huán)境為 VC6.0 。(2)進入演示程序后即顯示提示信息:停車場最多停車輛數: n=單位時間內的價格: price=到達或離去信息( A:到達 D :離去 E :結束),車牌號,時

25、刻: 輸入第一部車的 info=A 、 num1 、time 車牌號為 num1 的車停在 1 處到達或離去信息( A:到達 D :離去 E:結束),車牌號,時刻: 輸入第二部車的 info=A 、num2 、time 車牌號為 num2 的車停在 2 處到達或離去信息( A:到達 D :離去 E:結束),車牌號,時刻: 輸入第 n 部車的 info=A 、numn 、time 車牌號為 numn 的車停在 n 處到達或離去信息( A:到達 D :離去 E:結束),車牌號,時刻: 輸入第 n+1 部車的 info=A 、num 、time停車場已停滿。車牌號為 num n+1 的車停在便道 1 處到達或離去信息( A:到達 D :離去 E:結束),車牌號,時刻:輸入車的 info=D 、num 、time車牌號為 num 的車停車費用為 (time-e2)*price 便道上的車牌號為 num n+1 的車駛進停車場 1 處2 測試結果停車場最多停車輛數: 1單位時間內的價格: 5到達或離去信息( A:到達 D :離去 E :結束),車牌號,時刻:A 12345 1車牌號

溫馨提示

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

評論

0/150

提交評論