停車場管理系統(tǒng)C語言實現(xiàn)_第1頁
停車場管理系統(tǒng)C語言實現(xiàn)_第2頁
停車場管理系統(tǒng)C語言實現(xiàn)_第3頁
停車場管理系統(tǒng)C語言實現(xiàn)_第4頁
停車場管理系統(tǒng)C語言實現(xiàn)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一問題描述實驗題目:設停車場是一個可停放 n 輛汽車的狹長通道,且只有一個大門可供汽車進 出。汽車在停車場按車輛到達時間的先后順序, 依次由北向南排列 (大門在最南 端,最先到達的第一輛車停放在車場的最北端) 。若停車場已經(jīng)停滿 n 輛車,那 么后來的車只能在門外的便道上等候。 一旦有車開走, 則排在便道上的第一輛車 即可開入。 當停車場某輛車要離開時, 在它之后進入的車輛必須先退出車場為它 讓路,待該輛車開出大門外, 其他車輛再按原次序進入車場。 每輛停放在車場的 車在它離開停車場時必須按它停留的時間長短繳納費用。 試為停車場編制按上述 要求進行管理的模擬程序。 要求:根據(jù)各結點的信息,調(diào)用

2、相應的函數(shù)或者語句,將結點入棧入隊,出?;?者出隊。二需求分析程序所能達到的基本可能:程序以棧模擬停車場, 以隊列模擬車場外的便道, 按照從終端讀入數(shù)據(jù)的序 列進行模擬管理。棧以順序結構實現(xiàn),隊列以鏈表結構實現(xiàn)。同時另設一個棧, 臨時停放為給要離去的汽車讓路而從停車場退出來的汽車。 輸入數(shù)據(jù)按到達或離 去的時刻有序。當輸入數(shù)據(jù)包括數(shù)據(jù)項為汽車的“到達” (A表示)信息,汽 車標識(牌照號)以及到達時刻時, 應輸出汽車在停車場或者便道上的停車位置; 當輸入數(shù)據(jù)包括數(shù)據(jù)項為汽車的“離去” (D表示)信息,汽車標識(牌照號) 以及離去時刻時, 應輸出汽車在停車場停留的時間和應繳納的費用 (便道上停留

3、 的時間不收費);當輸入數(shù)據(jù)項為(P,0,0)時,應輸出停車場的車數(shù);當輸 入數(shù)據(jù)項為(W, 0, 0)時,應輸出候車場車數(shù); 當輸入數(shù)據(jù)項為 (E, 0, 0),退出程序;若輸入數(shù)據(jù)項不是以上所述,就輸出 ERROR!。輸入輸出形式及輸入值圍:程序運行后進入循環(huán), 顯示提示信息:“Please input the state,number and time of the car: ”,提示用戶輸入車輛信息( “到達”或者“離開” ,車牌編號, 到達或者離開的時間) 。若車輛信息為“到達”,車輛信息開始進棧(模擬停車場), 當棧滿,會顯示棧滿信息:“The parking place is f

4、ull! ”,同時車輛進隊列(模 擬停車場旁便道),并顯示該進入便道車輛的車牌編號,讓用戶知道該車的具體 位置;若車輛信息為“離開” ,會顯示該車進入停車場的時間以及相應的停車費 用,若該車較部分車早進停車場, 這部分車需先退出停車場, 暫時進入一個新棧 為其讓道, 會顯示進入新棧的車輛的車牌編號及其入停車場的時間, 當待離開車 離開停車場后,這部分車會重新進入停車場, 同時便道上的第一輛車進入停車場; 若輸入(P,0,0),會顯示停車場的車數(shù);若輸入( W,0, 0),會顯示便道 上的車數(shù);若輸入(E,0,0),程序會跳出循環(huán),同時程序結束;若輸入為其 他字母,程序會顯示“ ERRO!R”報

5、錯。若便道上沒有車輛??浚瑫@示便道為空 的信息:用戶每輸入一組數(shù)據(jù), 程序就會根據(jù)相應輸入給出輸出。 輸入值第一個 必須為字母,后兩個為數(shù)字。測試數(shù)據(jù)要求: 用戶輸入字母時,輸入大寫或小寫,都可以被該程序識別,正常運行。但要 求用戶輸入數(shù)據(jù)時,三個數(shù)據(jù)項之間必須用逗號相分隔開。三概要設計為了實現(xiàn)上述功能,該程序以棧模擬停車場以及臨時停放為給要離去的汽車讓路而從停車場退出來的汽車的場地, 以隊列模擬車場外的便道, 因此需要棧和 隊列這兩個抽象數(shù)據(jù)類型棧抽象數(shù)據(jù)類型定義:ADT SqStack數(shù)據(jù)對象: D=ai,bi,ci,di |ai int, bi int, ci int, di char

6、 ,0i=1,2,3,n,n數(shù)據(jù)關系: R=( ai,bi,di)| ai,bi,di D, ai,bi,di struct car;基本操作:Judge_Output(s,q,r)還是;/ 根據(jù) r 中車輛信息控制車輛是入棧 s入隊 q 以及相關操作A_cars(s,q, a)D_cars(s,q, d)輛; / 將到達車輛 a 的信息入棧 s 或者入隊 q; / 將待離開車輛 d 出棧 s,并將 q 中相應車入棧并進行相關的操作ADT SqStack隊列抽象數(shù)據(jù)類型定義:ADT LinkQueue數(shù)據(jù)對象: D=ai , bi , ci |ai Qnode *, bi Qnode*,ci

7、int ,i=1,2,3 ,n,n 0;數(shù)據(jù)關系: R= ;基本操作:棧sJudge_Output(s,q,r);/ 根據(jù) r 中車輛信息控制車輛是入A_cars(s,q, a) qD_cars(s,q, d)應車還是入隊 q 以及相關操作;/ 將到達車輛 a 的信息入棧 s 或者入隊;/ 將待離開車輛 d 出棧 s,并將 q 中相輛入棧并進行相關的操作ADT LinkQueue主要算法流程圖:I Judge_Output 算法流程圖:II A_cars 算法流程圖:開始TF車進停車場車進便道結束III D_cars 算法流程圖:開始該車是最后進T停車場的車F結賬離開在該車后進的車退 出停車場

8、后讓其結 賬離開便道上第一 輛車進停車 場結束本程序保護模塊: 主函數(shù)模塊棧單元模塊:實現(xiàn)棧的抽象數(shù)據(jù)類型隊列單元模塊:實現(xiàn)隊列的抽象數(shù)據(jù)類型調(diào)用關系:主函數(shù)模塊棧單元模塊隊列單元模塊四詳細設計相關頭文件庫的調(diào)用說明:#include#include#define MAXSIZE 14 #define n 2 #define fee 10元素類型、結點類型和結點指針類型: struct car char bb;int num;int time;struct rangweicarint num;int time;typedef struct stackkstruct rangweicar HMA

9、XSIZE;int topp;SqStackk;#define QNODE struct QnodeQNODE int data;QNODE *next;棧類型和隊列類型:typedef struct stackstruct car Gn;int top;SqStack;typedef struct linkqueueQNODE *front,*rear;int geshu;LinkQueue;/ 部分基本操作的偽碼實現(xiàn)void Judge_Output(SqStack *s,LinkQueue *q,struct car *r)if(*r).bb=E|(*r).bb=e) printf(ST

10、OP!n);else if(*r).bb=P|(*r).bb=p)printf(The number of parking cars is %dn,(s-top)+1);else if(*r).bb=W|(*r).bb=w)printf(The number of waiting cars is %dn,q-geshu);else if(*r).bb=A|(*r).bb=a)A_cars(s,q,*r);else if(*r).bb=D|(*r).bb=d)D_cars(s,q,*r);elseprintf(ERROR!n);A_cars(SqStack *s,LinkQueue *q,str

11、uct car a)QNODE *t;if(s-top!=n-1)(s-top)+;(s-Gs-top).bb=a.bb;(s-Gs-top).num=a.num;(s-Gs-top).time=a.time;elseprintf(The parking place is full!n);t=(QNODE *)malloc(sizeof(QNODE);t-data=a.num;t-next=NULL;q-rear-next=t;roadq-rear=t;printf(the number of the car in the accessis:%dn,q-rear-data);q-geshu+;

12、int D_cars(SqStack *s,LinkQueue *q,struct car d)int i,j,l;float x,y;QNODE *p;SqStackk *k;if(d.num=(s-Gs-top).num)x=d.time-(s-Gs-top).time;y=fee*x;printf(The time is %.2f hours,the fee is %.2f yuann,x,y);if(q-geshu=0)printf(The queue is empty!n);return 0;elsep=q-front-next;q-front-next=p-next;(s-Gs-t

13、op).num=p-data;(s-Gs-top).time=d.time;free(p);q-geshu-;if(q-front-next=NULL)q-rear=q-front;return 1;elsefor(i=0;itop);i+)if(s-Gi).num!=d.num) continue;else break;if(i=(s-top)printf(ERROR!n);return -1;x=d.time-(s-Gi).time;y=fee*x;printf(The time is %.2f hours,the fee is %.2f yuann,x,y);k=(SqStackk *)

14、malloc(sizeof(SqStackk);k-topp=-1;for(j=(s-top);ji;j-)k-topp+; (k-Hk-topp).num=(s-Gj).num;(k-Hk-topp).time=(s-Gj).time;s-top-;for(l=0;ltopp);l+)printf(the information(number and time) in the new stack is:n);printf(%d,%dn,(k-Hl).num,(k-Hl).time);s-top-;while(k-topp=0)s-top+;(s-Gs-top).bb=A;(s-Gs-top)

15、.num=(k-Hk-topp).num;(s-Gs-top).time=(k-Hk-topp).time;k-topp-;if(q-geshu=0)printf(The access road is empty!n); return 2;elses-top+;p=q-front-next; q-front-next=p-next;(s-Gs-top).num=p-data;(s-Gs-top).time=d.time;free(p);q-geshu-; if(q-front-next=NULL) q-rear=q-front;return 3;主函數(shù)的偽碼:main()SqStack *s;

16、LinkQueue *q;QNODE *p;struct car aaMAXSIZE;int i;s=(SqStack *)malloc(sizeof(SqStack);s-top=-1;q=(LinkQueue *)malloc(sizeof(LinkQueue);p=(QNODE *)malloc(sizeof(QNODE); p-next=NULL;q-front=q-rear=p;q-geshu=0;printf(*n);printf(*n);printf(停車場管理系統(tǒng)printf(printf(*n);*n);for(i=0;iMAXSIZE;i+)printf(Please in

17、put the state,number and time of the car:n); scanf(%c,%d,%d,&(aai.bb),&(aai.num),&(aai.time); getchar();Judge_Output(s,q,&aai);if(aai.bb=E|aai.bb=e) break;5. 函數(shù)調(diào)用關系:五測試分析:1. 出現(xiàn)問題及解決辦法:該程序是四個程序調(diào)試中最順利的一個, 只在一個地方上出了問題, 就是輸 入字符時由于回車鍵也是字符,回車鍵總會被讀入,導致經(jīng)常輸出“ERRO!R”。后來找到原因后在 scanf 函數(shù)后緊接著加了一個 getchar ();語句后就恢

18、復了 正常方法優(yōu)缺點分析 : 優(yōu)點:用棧和隊列來模擬停車場讓整個問題顯得簡單,易于實現(xiàn); 缺點:棧和隊列這兩個數(shù)學模型用在停車場管理上還是有失妥當?shù)模?現(xiàn)實中停車 場出口入口不可能為同一處, 不可能當一輛車要離開, 在它后面進來的車必須為 它讓路,因此無法用棧的“后進先出”原則來模擬;而且沒有考慮便道上的車在 等待過程中可以中途開走等情況, 而這些都無法用隊列的 “先進先出” 原則來模 擬。主要算法的時間和空間復雜度分析:( 1)由于算法 Judge_Output 函數(shù)根據(jù)判斷條件,每次只選擇一個程序段執(zhí)行, 所以其時間復雜度是 O(1) ;( 2)由于算法 A_cars 函數(shù)根據(jù)判斷條件,

19、將數(shù)據(jù)入?;蛉腙犃?, 所以其時間復 雜度也是 O(1) ;(3)由于算法 D_cars 函數(shù)在出棧數(shù)據(jù)不在最頂端時需將 n個數(shù)據(jù)先出該棧, 再 入新棧,再回舊棧的操作,故其時間復雜度是 O(n) ;( 4)所有算法的空間復雜度都是 O(1) 。六使用說明 程序運行后用戶根據(jù)提示一次輸入車輛的狀態(tài)信息, 車牌編號, 時間,程序 會根據(jù)車輛的狀態(tài)信息調(diào)用相應的函數(shù),并輸出用戶想得到的信息。 七調(diào)試結果輸入數(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),(P,0,0),(W,0,0),(F,0,0

20、),(E,0,0)輸出數(shù)據(jù): 1號車停放時間為 10小時,收費 100元;2號車停放時間為 25小時, 收費 250元;4 號車停放 5 小時,收費 50元;此時停車場有兩輛車,便道上無 車。若停車場已滿,則會顯示停車場已滿的信息;若便道上無車等待停車,會顯 示便道上無車的信息; 若中途有車離開, 需其后的車讓道, 會顯示進入臨時停車 場的車輛的信息;若輸入( F,0,0),輸出“ERRO!R”;若輸入(E,0,0), 程序結束。運行結果截屏:八附錄調(diào)用的頭文件庫聲明 */用該結構體來存放車的狀態(tài),編號和時間信息 */源程序文件清單: #include /* #include #define

21、MAXSIZE 14 #define n 2 #define fee 10 struct car /* char bb;int num;int time; typedef struct stackstruct car Gn;int top;SqStack; struct rangweicar int num; int time; typedef struct stack/*/*/*用該棧來模擬停車場 */用該結構體來存放臨時讓出的車輛的編號以及時間信息用該棧來模擬臨時讓出的車輛的??繄龅?*/struct rangweicar HMAXSIZE; int topp;SqStackk;#defi

22、ne QNODE struct Qnode QNODE int data; /*QNODE *next;typedef struct linkqueue /*QNODE *front,*rear;int geshu; LinkQueue; void Judge_Output(SqStack *s,LinkQueue *q,struct car *r) /* 輛信息調(diào) if(*r).bb=E|(*r).bb=e) printf(STOP!n); else if(*r).bb=P|(*r).bb=p) 數(shù)*/鏈隊結點的類型 */用該鏈隊來模擬便道*/*/*/該算法通過傳遞來的車用相關函數(shù)實現(xiàn)操作

23、*/ 若車輛狀態(tài)為 E,終止程序 */若車輛狀態(tài)為P,輸出停車場車輛printf(The number of parking cars is %dn,(s-top)+1); else if(*r).bb=W|(*r).bb=w) /* 若車輛狀態(tài)為 */ printf(The number of waiting cars is %dn,q-geshu); else if(*r).bb=A|(*r).bb=a) 數(shù)*/ A_cars(s,q,*r);else if(*r).bb=D|(*r).bb=d) 數(shù)*/ D_cars(s,q,*r);else printf(ERROR!n); W,輸出便

24、道車輛數(shù)/*/*/*A_cars(SqStack *s,LinkQueue *q,struct car a) /* 輛的操若車輛狀態(tài)為若車輛狀態(tài)為A,調(diào)用 A_cars 函D,調(diào)用 D_cars 函若車輛狀態(tài)為其他字母,報錯 */該算法實現(xiàn)對車輛狀態(tài)為到達的車QNODE *t;if(s-top!=n-1)牌編(s-top)+;(s-Gs-top).bb=a.bb;(s-Gs-top).num=a.num; (s-Gs-top).time=a.time; else/*作*/若停車場還沒有滿,則車進停車場,并存入車輛的狀態(tài),車號和到達時間信息 */printf(The parking place

25、is full!n); /* 車的車牌編t=(QNODE *)malloc(sizeof(QNODE); t-data=a.num;t-next=NULL; q-rear-next=t;q-rear=t;printf(the number of the car in the access road is:%dn,q-rear-data); q-geshu+; int D_cars(SqStack *s,LinkQueue *q,struct car d) 開的車 int i,j,l;float x,y; QNODE *p;SqStackk *k; if(d.num=(s-Gs-top).num

26、) /* x=d.time-(s-Gs-top).time;y=fee*x; /*若停車場已滿,車進便道,并顯示該號,同時記錄便道車輛數(shù)目 */*該算法實現(xiàn)車輛狀態(tài)為離輛的操作 */若待離開車為最后進停車場的車的情況 */直接計算停車時間,費用并離去*/printf(The time is %.2f hours,the fee is %.2f yuann,x,y); if(q-geshu=0)printf(The queue is empty!n); return 0; Else p=q-front-next;/*若便道上無車,函數(shù)返回 */*若便道上有車,第一輛車進停車場*/q-front-

27、next=p-next; (s-Gs-top).num=p-data;(s-Gs-top).time=d.time; free(p);q-geshu-; if(q-front-next=NULL) q-rear=q-front; /*return 1;/*并存入其車牌編號及進停車場的時間 */若此時便道上無車,返回 1*/Else /* 待離開的車不是最后進停車場的那輛車的情況 */ for(i=0;itop);i+) /* 先找到待離開車在停車場中的位置 */ if(s-Gi).num!=d.num) continue;else break; if(i=(s-top) printf(ERRO

28、R!n); return -1; x=d.time-(s-Gi).time; /* 計算待離開車的停車時間并計算費用 */ y=fee*x;printf(The time is %.2f hours,the fee is %.2f yuann,x,y);k=(SqStackk *)malloc(sizeof(SqStackk); /* 設立一個新棧臨時停放為該車離 開而讓k-topp=-1; 路的車輛 */ for(j=(s-top);ji;j-)k-topp+; (k-Hk-topp).num=(s-Gj).num;(k-Hk-topp).time=(s-Gj).time;s-top-;for(l=0;ltopp);l+)printf(the information(number and time) in the new stack is:n);printf(%d,%dn,(k-Hl).num

溫馨提示

  • 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

提交評論