已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模擬停車(chē)場(chǎng)管理班級(jí):物聯(lián)網(wǎng) 姓名:XXX 學(xué)號(hào):XXXXXXX 日期:4月9日一、需求分析 1、程序的功能描述 按照從終端輸入的數(shù)據(jù)序列進(jìn)行模擬管理。 1)狹道停車(chē)用棧來(lái)實(shí)現(xiàn),并且用的順序棧,等車(chē)位的便道用隊(duì)列來(lái)實(shí)現(xiàn),并用鏈 式存儲(chǔ)。 2)每一組輸入信息包含三個(gè)數(shù)據(jù)項(xiàng),汽車(chē)的“到達(dá)”和“離去”的信息,汽車(chē)牌 照號(hào)碼,汽車(chē)“到達(dá)”或“離去”的時(shí)刻。 3)對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車(chē)輛到達(dá),則輸出車(chē)輛在停車(chē)場(chǎng)內(nèi)或便道上的停車(chē)位置;若是車(chē)子離去,則輸出車(chē)輛在停車(chē)場(chǎng)內(nèi)停留的時(shí)間和繳納的費(fèi)用。(假設(shè)在便道等車(chē)的時(shí)間不收費(fèi)) 4)選作內(nèi)容:(1)便道也是要收費(fèi)的,僅僅比狹道收費(fèi)便宜點(diǎn)。 (2)狹道上的車(chē)可以直接開(kāi)走。 2、 輸入/輸出的要求 首先選擇操作的模塊,根據(jù)提示輸入車(chē)牌和到達(dá)時(shí)間,程序會(huì)告知是否停滿(mǎn)或者停車(chē)車(chē)位。車(chē)牌為10個(gè)字符以?xún)?nèi)的字符串,時(shí)間的輸入中間有冒號(hào)把時(shí)分隔開(kāi)。3、 測(cè)試數(shù)據(jù) 1 蘇D543 1:10 1 蘇Q123 1:20 1 蘇D145 1:30二、概要設(shè)計(jì) 1、本程序所用的抽象數(shù)據(jù)類(lèi)型的定義 typedef struct NODECarNode *stackMAX+1; int top;SeqStackCar;/狹道的堆棧順序存儲(chǔ)typedef struct carCarNode *data; struct car *next;QueueNode;/隊(duì)列的鏈?zhǔn)酱鎯?chǔ)typedef struct NodeQueueNode *head; QueueNode *rear;LinkQueueCar;/便道上等候的隊(duì)列定義2、 主模塊的流程及各子模塊的主要功能 車(chē)輛到達(dá):int Arrival(SeqStackCar *Enter,LinkQueueCar *W)首先定義一個(gè)棧和隊(duì)列的結(jié)構(gòu)體指針為:*p , *t 。然后申請(qǐng)一個(gè)車(chē)輛信息的內(nèi)存空間,并把它賦給棧指針。 車(chē)輛到達(dá)時(shí)就輸入車(chē)牌號(hào),并通過(guò)if(Enter-toptop0) 確保棧不空,然后用個(gè)while(1) 確保輸入的車(chē)輛離開(kāi)位置的合法 性。如果不和法,顯示輸入有誤,要重新輸入。通過(guò)while(Enter-toproom) 判斷離開(kāi)車(chē)輛的位置,如果是中間位置,就要再用一個(gè)棧前面臨時(shí)開(kāi)出來(lái)的車(chē),等要開(kāi)出的車(chē)開(kāi)出后,再把臨時(shí)棧的車(chē)看進(jìn) 車(chē)場(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)車(chē)輛的車(chē)牌號(hào)為:); puts(p-num); printf(n其到達(dá)停車(chē)位時(shí)間); printf(n離開(kāi)停車(chē)位時(shí)間為:); 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)*price+PRINTE(p,room);free(p);int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/進(jìn)入便道或者狹道 CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(n請(qǐng)輸入車(chē)牌號(hào)(例:豫B1234):); gets(p-num);if(Enter-toptop+; printf(n車(chē)輛在車(chē)場(chǎng)第%d位置.,Enter-top); printf(n車(chē)輛到達(dá)時(shí)間:); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stacktop=p; return(1);else printf(n該車(chē)須在便道等待!有車(chē)位時(shí)進(jìn)入車(chē)場(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) /車(chē)輛的離開(kāi)int room; CarNode *p,*t; QueueNode *q;if(Enter-top0) / 判斷車(chē)場(chǎng)是否為空 while(1) printf(n請(qǐng)輸入車(chē)在車(chē)場(chǎng)的位置/1-%d/:,Enter-top); scanf(%d,&room); if(room=1&roomtop) break; else printf(n 輸入有誤,請(qǐng)重輸: );while(Enter-toproom) / 把要?jiǎng)h除的車(chē)輛的前面的車(chē)開(kāi)出來(lái),進(jìn)臨時(shí)棧。Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; /把要?jiǎng)h除的車(chē)輛節(jié)點(diǎn)賦給p。 Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1) / 再把臨時(shí)棧里德車(chē)輛進(jìn)停車(chē)場(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-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)有車(chē).n);else printf(n車(chē)場(chǎng)里沒(méi)有車(chē).); 3、畫(huà)出函數(shù)的調(diào)用關(guān)系圖 |-到達(dá)函數(shù)-| |-離開(kāi)函數(shù)-停車(chē)費(fèi)用主函數(shù)-顯示車(chē)場(chǎng)里的情況 |-顯示便道里的情況四、調(diào)試分析 1、調(diào)試中遇到的問(wèn)題及對(duì)問(wèn)題的解決方法 因?yàn)闀r(shí)間結(jié)構(gòu)體里的小時(shí),分鐘都是用的是整型,所以如果出現(xiàn)1:01這個(gè)時(shí)間的話(huà),會(huì)導(dǎo)致顯示列表是1:1;這樣的話(huà)會(huì)造成人的誤解,同時(shí)會(huì)導(dǎo)致程序?qū)ν\?chē)?yán)U納的費(fèi)用計(jì)算錯(cuò)誤。解決方法1:可以用數(shù)組和或者字符串來(lái)表示時(shí)間,但是問(wèn)題來(lái)了,要是用字符串的話(huà),算停車(chē)費(fèi)有點(diǎn)問(wèn)題,要廢上一段時(shí)間的,會(huì)提高復(fù)雜度。解決方案2:將輸出用右對(duì)齊方式,缺位的用0補(bǔ)齊,這樣最快捷啦!2、 算法的時(shí)間復(fù)雜度和空間復(fù)雜度 由于沒(méi)有進(jìn)行循環(huán)嵌套之類(lèi)的運(yùn)算,只有簡(jiǎn)單的循環(huán)語(yǔ)句,所以時(shí)間復(fù)雜度T(O)=O(n),在數(shù)據(jù)的存儲(chǔ)方面,除了車(chē)牌號(hào)用的是數(shù)組以外,便道用的是順序棧,這些是提前要申請(qǐng)一定的存儲(chǔ)空間的,這樣非動(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ē)場(chǎng)的規(guī)模較小時(shí),空間復(fù)雜度較小,隨著規(guī)模的增加,動(dòng)態(tài)存儲(chǔ)的擴(kuò)充,空間復(fù)雜度也隨之增加。5、 使用說(shuō)明及測(cè)試結(jié)果(給出程序的使用說(shuō)明、注意事項(xiàng)及不同情況的測(cè)試結(jié)果) 時(shí)間以24進(jìn)制計(jì)算,停車(chē)時(shí)間不能跨越24進(jìn)制。車(chē)牌號(hào)是10個(gè)字符串以?xún)?nèi),不可溢出。第一個(gè)應(yīng)繳費(fèi)用是在便道中的費(fèi)用,第二個(gè)費(fèi)用是總費(fèi)用。六、源程序(要求程序簡(jiǎn)潔、清晰、主要語(yǔ)句帶注釋?zhuān)┐a非本人寫(xiě),對(duì)其進(jìn)行改進(jìn)而已#include#include#include#define MAX 3 / 停車(chē)場(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 / 定義車(chē)輛信息結(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;typedef 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 Wait; int ch;system(color 4A); InitStack(&Enter); InitStack(&Temp); InitQueue(&Wait); while(1) printf(n 歡迎使用停車(chē)場(chǎng)系統(tǒng).tnn); printf(nt# 1. 車(chē)輛到達(dá)登記.#tn); printf(nt# 2. 車(chē)輛離開(kāi)登記.#tn); printf(nt# 3. 車(chē)輛列表顯示.#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 InitQueue(LinkQueueCar *Q) / 隊(duì)列的初始化Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1);float PRINTE(CarNode *p,int room) / 車(chē)輛收費(fèi)int A1,A2,B1,B2;printf(n車(chē)輛離開(kāi)便道的時(shí)間:); scanf(%d:%d,&(p-leave.hour),&(p-leave.min); printf(n離開(kāi)車(chē)輛的車(chē)牌號(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-A1)*60+(B2-A2)*pricee);return(B1-A1)*60+(B2-A2)*pricee); free(p);void PRINT(CarNode *p,int room) / 車(chē)輛收費(fèi)int A1,A2,B1,B2;printf(n車(chē)輛離開(kāi)的時(shí)間:); scanf(%d:%d,&(p-leave.hour),&(p-leave.min); printf(n離開(kāi)車(chē)輛的車(chē)牌號(hào)為:); puts(p-num); printf(n其到達(dá)停車(chē)位時(shí)間為: %d:%d,p-reach.hour,p-reach.min); printf(n離開(kāi)停車(chē)位時(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)*price+PRINTE(p,room); free(p); / 車(chē)輛的到達(dá)登記int Arrival(SeqStackCar *Enter,LinkQueueCar *W) CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(n請(qǐng)輸入車(chē)牌號(hào)(例:豫B1234):); gets(p-num);if(Enter-toptop+; printf(n車(chē)輛在車(chē)場(chǎng)第%d位置.,Enter-top); printf(n車(chē)輛到達(dá)時(shí)間:); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stackEnter-top=p; return(1);else printf(n該車(chē)須在便道等待!有車(chē)位時(shí)進(jìn)入車(chē)場(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,LinkQueueCar *W) /車(chē)輛的離開(kāi)int room; CarNode *p,*t; QueueNode *q;if(Enter-top0) / 判斷車(chē)場(chǎng)是否為空 while(1) printf(n請(qǐng)輸入車(chē)在車(chē)場(chǎng)的位置/1-%d/:,Enter-top); scanf(%d,&room); if(room=1&roomtop) break; else printf(n 輸入有誤,請(qǐng)重輸: );while(Enter-toproom) / 把要?jiǎng)h除的車(chē)輛的前面的車(chē)開(kāi)出來(lái),進(jìn)臨時(shí)棧。Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; /把要?jiǎng)h除的車(chē)輛節(jié)點(diǎn)賦給p。 Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1) / 再把臨時(shí)棧里德車(chē)輛進(jìn)停車(chē)場(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+; printf(n便道的%s號(hào)車(chē)進(jìn)入車(chē)場(chǎng)第%d位置.,t-num,Enter-top); printf(n請(qǐng)輸入%s號(hào)車(chē)進(jìn)入車(chē)場(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)有車(chē).n);else printf(n車(chē)場(chǎng)里沒(méi)有車(chē).); void List1(SeqStackCar *S) /顯示車(chē)場(chǎng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煙草行業(yè)信用卡銷(xiāo)售規(guī)范
- 旅游服務(wù)擔(dān)保承諾書(shū)擔(dān)保合同
- 摩托車(chē)租賃結(jié)束轉(zhuǎn)租條款
- 宗教場(chǎng)所無(wú)障礙設(shè)施服務(wù)標(biāo)準(zhǔn)
- 安防物業(yè)招投標(biāo)要點(diǎn)
- 醫(yī)療信息系統(tǒng)外包運(yùn)營(yíng)
- 銀行信貸資金申請(qǐng)指南
- 臨時(shí)環(huán)保產(chǎn)業(yè)發(fā)展借款管理辦法
- 機(jī)場(chǎng)酒店經(jīng)理招聘合同
- 外籍顧問(wèn)咨詢(xún)服務(wù)聘用合同
- 穿越河流工程定向鉆專(zhuān)項(xiàng)施工方案
- 地球物理學(xué)進(jìn)展投稿須知
- 機(jī)床精度檢驗(yàn)標(biāo)準(zhǔn) VDI3441 a ISO230-2
- 社會(huì)主義新農(nóng)村建設(shè)建筑廢料利用探究
- 解析電力施工項(xiàng)目的信息化管理
- 火炬介紹 音速火炬等
- 制劑申請(qǐng)書(shū)(共16頁(yè))
- 《質(zhì)量守恒定律》評(píng)課稿
- 人教版七年級(jí)上冊(cè)地理《第4章居民與聚落 第3節(jié)人類(lèi)的聚居地——聚落》課件
- 對(duì)縣委常委班子及成員批評(píng)意見(jiàn)范文
- 數(shù)據(jù)中心IDC項(xiàng)目建議書(shū)
評(píng)論
0/150
提交評(píng)論