



版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.模擬停車場(chǎng)管理班級(jí):物聯(lián)網(wǎng)姓名: XXX學(xué)號(hào): XXXXXXX日期: 4 月 9 日一、需求分析1 、程序的功能描述按照從終端輸入的數(shù)據(jù)序列進(jìn)行模擬管理。1 )狹道停車用棧來(lái)實(shí)現(xiàn),并且用的順序棧,等車位的便道用隊(duì)列來(lái)實(shí)現(xiàn),并用鏈?zhǔn)酱鎯?chǔ)。2)每一組輸入信息包含三個(gè)數(shù)據(jù)項(xiàng),汽車的“到達(dá)”和“離去”的信息,汽車牌照號(hào)碼,汽車“到達(dá)”或“離去”的時(shí)刻。3 )對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出車輛在停車場(chǎng)內(nèi)或便道上的停車位置;若是車子離去,則輸出車輛在停車場(chǎng)內(nèi)停留的時(shí)間和繳納的費(fèi)用。(假設(shè)在便道等車的時(shí)間不收費(fèi))4 )選作內(nèi)容:( 1)便道也是要收費(fèi)的,僅僅比狹道收費(fèi)便宜點(diǎn)。
2、( 2)狹道上的車可以直接開(kāi)走。2、輸入 / 輸出的要求首先選擇操作的模塊,根據(jù)提示輸入車牌和到達(dá)時(shí)間,程序會(huì)告知是否停滿或者停車車位。車牌為10 個(gè)字符以內(nèi)的字符串,時(shí)間的輸入中間有冒號(hào)把時(shí)分隔開(kāi)。3、測(cè)試數(shù)據(jù)1蘇 D5431:101蘇 Q1231 :201蘇 D1451 :30二、概要設(shè)計(jì)1 、本程序所用的抽象數(shù)據(jù)類型的定義 typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;/ 狹道的堆棧順序存儲(chǔ)1/15.typedef struct carCarNode *data;struct car *next;QueueNode;
3、/ 隊(duì)列的鏈?zhǔn)酱鎯?chǔ)typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar;/ 便道上等候的隊(duì)列定義2、主模塊的流程及各子模塊的主要功能1 車輛到達(dá): int Arrival(SeqStackCar *Enter,LinkQueueCar *W)首先定義一個(gè)棧和隊(duì)列的結(jié)構(gòu)體指針為:*p ,*t。然后申請(qǐng)一個(gè)車輛信息的內(nèi)存空間,并把它賦給棧指針。車輛到達(dá)時(shí)就輸入車牌號(hào),并通過(guò)if(Enter-toptop0)確保棧不空,然后用個(gè)while(1)確保輸入的車輛離開(kāi)位置的合法性。如果不和法,顯示輸入有誤,要重新輸入。通過(guò)while
4、(Enter-toproom)判斷離開(kāi)車輛的位置,如果是中間位置,就要再用一個(gè)棧前面臨時(shí)開(kāi)出來(lái)的車,等要開(kāi)出的車開(kāi)出后,再把臨時(shí)棧的車看進(jìn)車場(chǎng)內(nèi),并要調(diào)用PRINT(p,room);這個(gè)函數(shù)計(jì)算顯示費(fèi)用。然后還要用if(W-head!=W-rear)&Enter-topleave.hour),&(p-leave.min);printf(n離開(kāi)車輛的車牌號(hào)為 :);puts(p-num);printf(n其到達(dá)停車位時(shí)間);printf(n離開(kāi)停車位時(shí)間為:);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf
5、(n應(yīng)交費(fèi)用為 : %2.1f元,(B1-A1)*60+(B2-A2)*price+PRINTE(p,room);free(p);4/15.int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/進(jìn)入便道或者狹道CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n請(qǐng)輸入車牌號(hào) ( 例 : 豫 B1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場(chǎng)第%d位置 .,Enter-top);printf(n車輛
6、到達(dá)時(shí)間:);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stacktop=p;return(1);elseprintf(n該車須在便道等待! 有車位時(shí)進(jìn)入車場(chǎng));t=(QueueNode *)malloc(sizeof(QueueNode);進(jìn)入隊(duì)列,調(diào)整指針;printf(請(qǐng)輸入進(jìn)入便道的時(shí)間);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/車輛的離
7、開(kāi)int room;CarNode *p,*t;QueueNode *q;if(Enter-top0)/判斷車場(chǎng)是否為空while(1)printf(n請(qǐng)輸入車在車場(chǎng)的位置/1-%d/ : ,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;else printf(n輸入有誤 , 請(qǐng)重輸 : );5/15.while(Enter-toproom)/把要?jiǎng)h除的車輛的前面的車開(kāi)出來(lái),進(jìn)臨時(shí)棧。Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;E
8、nter-top-;p=Enter-stackEnter-top;/把要?jiǎng)h除的車輛節(jié)點(diǎn)賦給p。Enter-stackEnter-top=NULL;Enter-top-;while(Temp-top=1)/再把臨時(shí)棧里德車輛進(jìn)停車場(chǎng)Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);/調(diào)用計(jì)費(fèi)函數(shù)計(jì)費(fèi)。 。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便道里沒(méi)有車 .n);else printf(n車場(chǎng)里沒(méi)有車.);6/15.3、畫(huà)出函數(shù)的調(diào)用關(guān)系圖|-到達(dá)函數(shù) -|-離開(kāi)函數(shù) -停車費(fèi)用主函數(shù) -顯示車場(chǎng)里的情況|-顯示便道里的情況四、調(diào)試分析1 、調(diào)試中遇到的問(wèn)題及
10、對(duì)問(wèn)題的解決方法因?yàn)闀r(shí)間結(jié)構(gòu)體里的小時(shí),分鐘都是用的是整型,所以如果出現(xiàn)1: 01 這個(gè)時(shí)間的話,會(huì)導(dǎo)致顯示列表是1: 1;這樣的話會(huì)造成人的誤解,同時(shí)會(huì)導(dǎo)致程序?qū)ν\嚴(yán)U納的費(fèi)用計(jì)算錯(cuò)誤。解決方法1:可以用數(shù)組和或者字符串來(lái)表示時(shí)間,但是問(wèn)題來(lái)了,要是用字符串的話,算停車費(fèi)有點(diǎn)問(wèn)題,要廢上一段時(shí)間的,會(huì)提高復(fù)雜度。解決方案2:將輸出用右對(duì)齊方式,缺位的用0 補(bǔ)齊,這樣最快捷啦!2、算法的時(shí)間復(fù)雜度和空間復(fù)雜度由于沒(méi)有進(jìn)行循環(huán)嵌套之類的運(yùn)算,只有簡(jiǎn)單的循環(huán)語(yǔ)句,所以時(shí)間復(fù)雜度T( O)=O( n), 在數(shù)據(jù)的存儲(chǔ)方面,除了車牌號(hào)用的是數(shù)組以外,便道用的是順序棧,這些是提前要申請(qǐng)一定的存儲(chǔ)空間的,
11、這樣非動(dòng)態(tài)分配的存儲(chǔ)空間,在某些時(shí)候是會(huì)導(dǎo)致空間的浪費(fèi),增加其空間復(fù)雜度。其余的都是結(jié)構(gòu)體和鏈?zhǔn)酱鎯?chǔ)的隊(duì)列屬于動(dòng)態(tài)存儲(chǔ)。當(dāng)停車場(chǎng)的規(guī)模較小時(shí),空間復(fù)雜度較小,隨著規(guī)模的增加,動(dòng)態(tài)存儲(chǔ)的擴(kuò)充,空間復(fù)雜度也隨之增加。五、 使用說(shuō)明及測(cè)試結(jié)果(給出程序的使用說(shuō)明、注意事項(xiàng)及不同情況的測(cè)試結(jié)果)時(shí)間以 24 進(jìn)制計(jì)算, 停車時(shí)間不能跨越24 進(jìn)制。車牌號(hào)是 10 個(gè)字符串以內(nèi), 不可溢出。7/15.第一個(gè)應(yīng)繳費(fèi)用是在便道中的費(fèi)用,第二個(gè)費(fèi)用是總費(fèi)用。六、源程序 (要求程序簡(jiǎn)潔、清晰、主要語(yǔ)句帶注釋)代碼非本人寫,對(duì)其進(jìn)行改進(jìn)而已#include#include8/15.#include#define
12、MAX 3/停車場(chǎng)最大容量為3 輛,便于觀察#define price 0.05#define pricee 0.02typedef struct time/定義時(shí)間結(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歡迎使用停車場(chǎng)系統(tǒng). tnn);printf(nt# 1.車輛到達(dá)登記.#tn);printf(nt# 2.車輛離開(kāi)登記.#tn);printf(nt# 3.車輛列表顯示.#tn);printf(nt# 4.退出系統(tǒng) .#tnn);while(1)printf(請(qǐng)選擇 : );scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;istacks-top=NULL;int
15、InitQueue(LinkQueueCar *Q)/隊(duì)列的初始化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)/車輛收費(fèi)int A1,A2,B1,B2;printf(n車輛離開(kāi)便道的時(shí)間:);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n離開(kāi)車輛的車牌號(hào)為:);puts(p
16、-num);printf(n其到達(dá)便道時(shí)間為: %d:%d,p-reach.hour,p-reach.min);printf(n 離開(kāi)便道時(shí)間為 : %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)交費(fèi)用為 : %2.1f 元,(B1-A1)*60+(B2-A2)*pricee); return(B1-A1)*60+(B2-A2)*pricee);free(p);void PRINT(CarNode *p,int room)/車輛收費(fèi)
17、int A1,A2,B1,B2;printf(n車輛離開(kāi)的時(shí)間:);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n離開(kāi)車輛的車牌號(hào)為:);puts(p-num);printf(n其到達(dá)停車位時(shí)間為: %d:%d,p-reach.hour,p-reach.min);printf(n離開(kāi)停車位時(shí)間為: %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)交費(fèi)用為 : %2.1f元,(B1-A
18、1)*60+(B2-A2)*price+PRINTE(p,room);free(p);/ 車輛的到達(dá)登記11/15.int Arrival(SeqStackCar *Enter,LinkQueueCar *W)CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n請(qǐng)輸入車牌號(hào) ( 例 : 豫 B1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場(chǎng)第%d位置 .,Enter-top);printf(n車輛到達(dá)時(shí)間:);scanf(%d:%d,&(
19、p-reach.hour),&(p-reach.min);Enter-stackEnter-top=p;return(1);elseprintf(n該車須在便道等待! 有車位時(shí)進(jìn)入車場(chǎng));t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;printf(請(qǐng)輸入進(jìn)入便道的時(shí)間);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,Li
20、nkQueueCar *W)/車輛的離開(kāi)int room;CarNode *p,*t;QueueNode *q;if(Enter-top0)/判斷車場(chǎng)是否為空while(1)printf(n請(qǐng)輸入車在車場(chǎng)的位置/1-%d/ : ,Enter-top);12/15.scanf(%d,&room);if(room=1&roomtop) break;else printf(n輸入有誤 , 請(qǐng)重輸 : );while(Enter-toproom)/把要?jiǎng)h除的車輛的前面的車開(kāi)出來(lái),進(jìn)臨時(shí)棧。Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-s
21、tackEnter-top=NULL;Enter-top-;p=Enter-stackEnter-top;/把要?jiǎng)h除的車輛節(jié)點(diǎn)賦給p。Enter-stackEnter-top=NULL;Enter-top-;while(Temp-top=1)/再把臨時(shí)棧里德車輛進(jìn)停車場(chǎng)Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);/調(diào)用計(jì)費(fèi)函數(shù)計(jì)費(fèi)。 。if(W-head!=W-rear)&Enter-tophead-next;t=q-data;Enter-t
22、op+;printf(n便道的 %s號(hào)車進(jìn)入車場(chǎng)第%d位置 .,t-num,Enter-top);printf(n 請(qǐng)輸入 %s號(hào)車進(jìn)入車場(chǎng)的時(shí)間 :,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便道里沒(méi)有車 .n);else printf(n車場(chǎng)里沒(méi)有車.);13/15.void List1(SeqStackCar *S)/顯示車場(chǎng)里
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 積累經(jīng)驗(yàn)2024國(guó)際商業(yè)美術(shù)設(shè)計(jì)師考試試題及答案
- 白人警察面試題及答案
- 助理廣告師考試全能選手方案試題及答案
- 新理念商業(yè)美術(shù)設(shè)計(jì)師考試試題及答案
- 數(shù)字印花技術(shù)在紡織品中的應(yīng)用試題及答案
- 助理廣告師考試考生必讀的試題及答案
- 檢驗(yàn)員應(yīng)注意的安全工作規(guī)范試題及答案
- 2024年助理廣告師考試高效復(fù)習(xí)的策略與方法試題及答案
- 兌紡織品檢驗(yàn)員證書(shū)考試的心態(tài)建設(shè) 試題及答案
- 時(shí)事競(jìng)賽考試題及答案
- 新概念英語(yǔ)青少版-2B全單元課件-unit-25(共32張)
- 初中八年級(jí)上冊(cè)信息技術(shù)《用Python編程》教學(xué)設(shè)計(jì)
- 施工項(xiàng)目安全交底確認(rèn)書(shū)
- 國(guó)際機(jī)票后端引擎緩存系統(tǒng)架構(gòu)
- 貴州干部履歷表(2023版)
- 消火栓月檢查表
- 高血壓腦病-PPT課件
- 人防工程竣工資料(全套)
- 《電子病歷模板》word版參考模板
- 30萬(wàn)噸年煤制甲醇變換工段初步設(shè)計(jì)
- (高清版)JGJ123-2012既有建筑地基基礎(chǔ)加固技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論