數(shù)據(jù)結(jié)構(gòu)實驗報告模擬停車場管理(含代碼)_第1頁
數(shù)據(jù)結(jié)構(gòu)實驗報告模擬停車場管理(含代碼)_第2頁
數(shù)據(jù)結(jié)構(gòu)實驗報告模擬停車場管理(含代碼)_第3頁
數(shù)據(jù)結(jié)構(gòu)實驗報告模擬停車場管理(含代碼)_第4頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.模擬停車場管理班級:物聯(lián)網(wǎng)姓名: XXX學(xué)號: XXXXXXX日期: 4 月 9 日一、需求分析1 、程序的功能描述按照從終端輸入的數(shù)據(jù)序列進行模擬管理。1 )狹道停車用棧來實現(xiàn),并且用的順序棧,等車位的便道用隊列來實現(xiàn),并用鏈?zhǔn)酱鎯Α?)每一組輸入信息包含三個數(shù)據(jù)項,汽車的“到達”和“離去”的信息,汽車牌照號碼,汽車“到達”或“離去”的時刻。3 )對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出車輛在停車場內(nèi)或便道上的停車位置;若是車子離去,則輸出車輛在停車場內(nèi)停留的時間和繳納的費用。(假設(shè)在便道等車的時間不收費)4 )選作內(nèi)容:( 1)便道也是要收費的,僅僅比狹道收費便宜點。

2、( 2)狹道上的車可以直接開走。2、輸入 / 輸出的要求首先選擇操作的模塊,根據(jù)提示輸入車牌和到達時間,程序會告知是否停滿或者停車車位。車牌為10 個字符以內(nèi)的字符串,時間的輸入中間有冒號把時分隔開。3、測試數(shù)據(jù)1蘇 D5431:101蘇 Q1231 :201蘇 D1451 :30二、概要設(shè)計1 、本程序所用的抽象數(shù)據(jù)類型的定義 typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;/ 狹道的堆棧順序存儲1/15.typedef struct carCarNode *data;struct car *next;QueueNode;

3、/ 隊列的鏈?zhǔn)酱鎯ypedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar;/ 便道上等候的隊列定義2、主模塊的流程及各子模塊的主要功能1 車輛到達: int Arrival(SeqStackCar *Enter,LinkQueueCar *W)首先定義一個棧和隊列的結(jié)構(gòu)體指針為:*p ,*t。然后申請一個車輛信息的內(nèi)存空間,并把它賦給棧指針。車輛到達時就輸入車牌號,并通過if(Enter-toptop0)確保棧不空,然后用個while(1)確保輸入的車輛離開位置的合法性。如果不和法,顯示輸入有誤,要重新輸入。通過while

4、(Enter-toproom)判斷離開車輛的位置,如果是中間位置,就要再用一個棧前面臨時開出來的車,等要開出的車開出后,再把臨時棧的車看進車場內(nèi),并要調(diào)用PRINT(p,room);這個函數(shù)計算顯示費用。然后還要用if(W-head!=W-rear)&Enter-topleave.hour),&(p-leave.min);printf(n離開車輛的車牌號為 :);puts(p-num);printf(n其到達停車位時間);printf(n離開停車位時間為:);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf

5、(n應(yīng)交費用為 : %2.1f元,(B1-A1)*60+(B2-A2)*price+PRINTE(p,room);free(p);4/15.int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/進入便道或者狹道CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n請輸入車牌號 ( 例 : 豫 B1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場第%d位置 .,Enter-top);printf(n車輛

6、到達時間:);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stacktop=p;return(1);elseprintf(n該車須在便道等待! 有車位時進入車場);t=(QueueNode *)malloc(sizeof(QueueNode);進入隊列,調(diào)整指針;printf(請輸入進入便道的時間);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/車輛的離

7、開int room;CarNode *p,*t;QueueNode *q;if(Enter-top0)/判斷車場是否為空while(1)printf(n請輸入車在車場的位置/1-%d/ : ,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;else printf(n輸入有誤 , 請重輸 : );5/15.while(Enter-toproom)/把要刪除的車輛的前面的車開出來,進臨時棧。Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;E

8、nter-top-;p=Enter-stackEnter-top;/把要刪除的車輛節(jié)點賦給p。Enter-stackEnter-top=NULL;Enter-top-;while(Temp-top=1)/再把臨時棧里德車輛進停車場Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);/調(diào)用計費函數(shù)計費。 。if(W-head!=W-rear)&Enter-tophead-next;t=q-data;Enter-top+;scanf(%d:%d,&(t-

9、reach.hour),&(t-reach.min);/ t-leave .hour =t-reach.hour;/t-leave .min =t-reach.min;W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t;PRINTE(t,room);free(q);else printf(n便道里沒有車 .n);else printf(n車場里沒有車.);6/15.3、畫出函數(shù)的調(diào)用關(guān)系圖|-到達函數(shù) -|-離開函數(shù) -停車費用主函數(shù) -顯示車場里的情況|-顯示便道里的情況四、調(diào)試分析1 、調(diào)試中遇到的問題及

10、對問題的解決方法因為時間結(jié)構(gòu)體里的小時,分鐘都是用的是整型,所以如果出現(xiàn)1: 01 這個時間的話,會導(dǎo)致顯示列表是1: 1;這樣的話會造成人的誤解,同時會導(dǎo)致程序?qū)ν\嚴(yán)U納的費用計算錯誤。解決方法1:可以用數(shù)組和或者字符串來表示時間,但是問題來了,要是用字符串的話,算停車費有點問題,要廢上一段時間的,會提高復(fù)雜度。解決方案2:將輸出用右對齊方式,缺位的用0 補齊,這樣最快捷啦!2、算法的時間復(fù)雜度和空間復(fù)雜度由于沒有進行循環(huán)嵌套之類的運算,只有簡單的循環(huán)語句,所以時間復(fù)雜度T( O)=O( n), 在數(shù)據(jù)的存儲方面,除了車牌號用的是數(shù)組以外,便道用的是順序棧,這些是提前要申請一定的存儲空間的,

11、這樣非動態(tài)分配的存儲空間,在某些時候是會導(dǎo)致空間的浪費,增加其空間復(fù)雜度。其余的都是結(jié)構(gòu)體和鏈?zhǔn)酱鎯Φ年犃袑儆趧討B(tài)存儲。當(dāng)停車場的規(guī)模較小時,空間復(fù)雜度較小,隨著規(guī)模的增加,動態(tài)存儲的擴充,空間復(fù)雜度也隨之增加。五、 使用說明及測試結(jié)果(給出程序的使用說明、注意事項及不同情況的測試結(jié)果)時間以 24 進制計算, 停車時間不能跨越24 進制。車牌號是 10 個字符串以內(nèi), 不可溢出。7/15.第一個應(yīng)繳費用是在便道中的費用,第二個費用是總費用。六、源程序 (要求程序簡潔、清晰、主要語句帶注釋)代碼非本人寫,對其進行改進而已#include#include8/15.#include#define

12、MAX 3/停車場最大容量為3 輛,便于觀察#define price 0.05#define pricee 0.02typedef struct time/定義時間結(jié)構(gòu)體int hour;int min;Time;typedef struct node/定義車輛信息結(jié)構(gòu)體char num10;Time reach;Time leave;CarNode;typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;typedef struct carCarNode *data;struct car *next;QueueNode;type

13、def struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar;void InitStack(SeqStackCar *);int InitQueue(LinkQueueCar *);int Arrival(SeqStackCar *,LinkQueueCar *);void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);void List(SeqStackCar,LinkQueueCar);void main()SeqStackCar Enter,Temp;LinkQueueCar

14、Wait;int ch;system(color 4A);InitStack(&Enter);InitStack(&Temp);9/15.InitQueue(&Wait);while(1)printf(n歡迎使用停車場系統(tǒng). tnn);printf(nt# 1.車輛到達登記.#tn);printf(nt# 2.車輛離開登記.#tn);printf(nt# 3.車輛列表顯示.#tn);printf(nt# 4.退出系統(tǒng) .#tnn);while(1)printf(請選擇 : );scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;istacks-top=NULL;int

15、InitQueue(LinkQueueCar *Q)/隊列的初始化Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL;10/15.Q-rear=Q-head;return(1);else return(-1);float PRINTE(CarNode *p,int room)/車輛收費int A1,A2,B1,B2;printf(n車輛離開便道的時間:);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n離開車輛的車牌號為:);puts(p

16、-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-leave.hour;B2=p-leave.min;printf(n 應(yīng)交費用為 : %2.1f 元,(B1-A1)*60+(B2-A2)*pricee); return(B1-A1)*60+(B2-A2)*pricee);free(p);void PRINT(CarNode *p,int room)/車輛收費

17、int A1,A2,B1,B2;printf(n車輛離開的時間:);scanf(%d:%d,&(p-leave.hour),&(p-leave.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-leave.hour;B2=p-leave.min;printf(n應(yīng)交費用為 : %2.1f元,(B1-A

18、1)*60+(B2-A2)*price+PRINTE(p,room);free(p);/ 車輛的到達登記11/15.int Arrival(SeqStackCar *Enter,LinkQueueCar *W)CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n請輸入車牌號 ( 例 : 豫 B1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場第%d位置 .,Enter-top);printf(n車輛到達時間:);scanf(%d:%d,&(

19、p-reach.hour),&(p-reach.min);Enter-stackEnter-top=p;return(1);elseprintf(n該車須在便道等待! 有車位時進入車場);t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;printf(請輸入進入便道的時間);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,Li

20、nkQueueCar *W)/車輛的離開int room;CarNode *p,*t;QueueNode *q;if(Enter-top0)/判斷車場是否為空while(1)printf(n請輸入車在車場的位置/1-%d/ : ,Enter-top);12/15.scanf(%d,&room);if(room=1&roomtop) break;else printf(n輸入有誤 , 請重輸 : );while(Enter-toproom)/把要刪除的車輛的前面的車開出來,進臨時棧。Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-s

21、tackEnter-top=NULL;Enter-top-;p=Enter-stackEnter-top;/把要刪除的車輛節(jié)點賦給p。Enter-stackEnter-top=NULL;Enter-top-;while(Temp-top=1)/再把臨時棧里德車輛進停車場Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);/調(diào)用計費函數(shù)計費。 。if(W-head!=W-rear)&Enter-tophead-next;t=q-data;Enter-t

22、op+;printf(n便道的 %s號車進入車場第%d位置 .,t-num,Enter-top);printf(n 請輸入 %s號車進入車場的時間 :,t-num); scanf(%d:%d,&(t-reach.hour),&(t-reach.min);/ t-leave .hour =t-reach.hour;/t-leave .min =t-reach.min;W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t;PRINTE(t,room);free(q);else printf(n便道里沒有車 .n);else printf(n車場里沒有車.);13/15.void List1(SeqStackCar *S)/顯示車場里

溫馨提示

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

評論

0/150

提交評論