




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
模擬停車場管理班級:物聯(lián)網(wǎng) 姓名:XXX 學(xué)號:XXXXXXX 日期:4月9日一、需求分析 1、程序的功能描述 按照從終端輸入的數(shù)據(jù)序列進(jìn)行模擬管理。 1)狹道停車用棧來實現(xiàn),并且用的順序棧,等車位的便道用隊列來實現(xiàn),并用鏈 式存儲。 2)每一組輸入信息包含三個數(shù)據(jù)項,汽車的“到達(dá)”和“離去”的信息,汽車牌 照號碼,汽車“到達(dá)”或“離去”的時刻。 3)對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出車輛在停車場內(nèi)或便道上的停車位置;若是車子離去,則輸出車輛在停車場內(nèi)停留的時間和繳納的費用。(假設(shè)在便道等車的時間不收費) 4)選作內(nèi)容:(1)便道也是要收費的,僅僅比狹道收費便宜點。 (2)狹道上的車可以直接開走。 2、 輸入/輸出的要求 首先選擇操作的模塊,根據(jù)提示輸入車牌和到達(dá)時間,程序會告知是否停滿或者停車車位。車牌為10個字符以內(nèi)的字符串,時間的輸入中間有冒號把時分隔開。3、 測試數(shù)據(jù) 1 蘇D543 1:10 1 蘇Q123 1:20 1 蘇D145 1:30二、概要設(shè)計 1、本程序所用的抽象數(shù)據(jù)類型的定義 typedef struct NODECarNode *stackMAX+1; int top;SeqStackCar;/狹道的堆棧順序存儲typedef struct carCarNode *data; struct car *next;QueueNode;/隊列的鏈?zhǔn)酱鎯ypedef struct NodeQueueNode *head; QueueNode *rear;LinkQueueCar;/便道上等候的隊列定義2、 主模塊的流程及各子模塊的主要功能 車輛到達(dá):int Arrival(SeqStackCar *Enter,LinkQueueCar *W)首先定義一個棧和隊列的結(jié)構(gòu)體指針為:*p , *t 。然后申請一個車輛信息的內(nèi)存空間,并把它賦給棧指針。 車輛到達(dá)時就輸入車牌號,并通過if(Enter-toptop0) 確保棧不空,然后用個while(1) 確保輸入的車輛離開位置的合法 性。如果不和法,顯示輸入有誤,要重新輸入。通過while(Enter-toproom) 判斷離開車輛的位置,如果是中間位置,就要再用一個棧前面臨時開出來的車,等要開出的車開出后,再把臨時棧的車看進(jìn) 車場內(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其到達(dá)停車位時間); printf(n離開停車位時間為:); 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)*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請輸入車牌號(例:豫B1234):); gets(p-num);if(Enter-toptop+; printf(n車輛在車場第%d位置.,Enter-top); printf(n車輛到達(dá)時間:); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stacktop=p; return(1);else printf(n該車須在便道等待!有車位時進(jìn)入車場); t=(QueueNode *)malloc(sizeof(QueueNode); 進(jìn)入隊列,調(diào)整指針;printf(請輸入進(jìn)入便道的時間); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /車輛的離開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 輸入有誤,請重輸: );while(Enter-toproom) / 把要刪除的車輛的前面的車開出來,進(jìn)臨時棧。Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; /把要刪除的車輛節(jié)點賦給p。 Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1) / 再把臨時棧里德車輛進(jìn)停車場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-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車場里沒有車.); 3、畫出函數(shù)的調(diào)用關(guān)系圖 |-到達(dá)函數(shù)-| |-離開函數(shù)-停車費用主函數(shù)-顯示車場里的情況 |-顯示便道里的情況四、調(diào)試分析 1、調(diào)試中遇到的問題及對問題的解決方法 因為時間結(jié)構(gòu)體里的小時,分鐘都是用的是整型,所以如果出現(xiàn)1:01這個時間的話,會導(dǎo)致顯示列表是1:1;這樣的話會造成人的誤解,同時會導(dǎo)致程序?qū)ν\嚴(yán)U納的費用計算錯誤。解決方法1:可以用數(shù)組和或者字符串來表示時間,但是問題來了,要是用字符串的話,算停車費有點問題,要廢上一段時間的,會提高復(fù)雜度。解決方案2:將輸出用右對齊方式,缺位的用0補(bǔ)齊,這樣最快捷啦!2、 算法的時間復(fù)雜度和空間復(fù)雜度 由于沒有進(jìn)行循環(huán)嵌套之類的運算,只有簡單的循環(huán)語句,所以時間復(fù)雜度T(O)=O(n),在數(shù)據(jù)的存儲方面,除了車牌號用的是數(shù)組以外,便道用的是順序棧,這些是提前要申請一定的存儲空間的,這樣非動態(tài)分配的存儲空間,在某些時候是會導(dǎo)致空間的浪費,增加其空間復(fù)雜度。其余的都是結(jié)構(gòu)體和鏈?zhǔn)酱鎯Φ年犃袑儆趧討B(tài)存儲。當(dāng)停車場的規(guī)模較小時,空間復(fù)雜度較小,隨著規(guī)模的增加,動態(tài)存儲的擴(kuò)充,空間復(fù)雜度也隨之增加。5、 使用說明及測試結(jié)果(給出程序的使用說明、注意事項及不同情況的測試結(jié)果) 時間以24進(jìn)制計算,停車時間不能跨越24進(jìn)制。車牌號是10個字符串以內(nèi),不可溢出。第一個應(yīng)繳費用是在便道中的費用,第二個費用是總費用。六、源程序(要求程序簡潔、清晰、主要語句帶注釋)代碼非本人寫,對其進(jìn)行改進(jìn)而已#include#include#include#define 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;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 歡迎使用停車場系統(tǒng).tnn); printf(nt# 1. 車輛到達(dá)登記.#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 InitQueue(LinkQueueCar *Q) / 隊列的初始化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) / 車輛收費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:%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) / 車輛收費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:%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)*price+PRINTE(p,room); free(p); / 車輛的到達(dá)登記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車輛到達(dá)時間:); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stackEnter-top=p; return(1);else printf(n該車須在便道等待!有車位時進(jìn)入車場); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t;printf(請輸入進(jìn)入便道的時間); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /車輛的離開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 輸入有誤,請重輸: );while(Enter-toproom) / 把要刪除的車輛的前面的車開出來,進(jìn)臨時棧。Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; /把要刪除的車輛節(jié)點賦給p。 Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1) / 再把臨時棧里德車輛進(jìn)停車場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+; printf(n便道的%s號車進(jìn)入車場第%d位置.,t-num,Enter-top); printf(n請輸入%s號車進(jìn)入車場的時間:,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車場里沒有車.); 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 進(jìn)境糧食檢疫管理辦法
- 迪拜旅行預(yù)算管理辦法
- 鄭州市建設(shè)用房管理辦法
- 郴州市民宿管理暫行辦法
- 酒店管理備用金管理辦法
- 重慶市施工現(xiàn)場管理辦法
- 銅川市殯葬管理暫行辦法
- 銀監(jiān)會系統(tǒng)賬戶管理辦法
- 銀行卡取消年費管理辦法
- 銷售管理辦法及見解心得
- 房屋定購協(xié)議書8篇
- 2025年北京市海淀區(qū)高一(下)期末考試數(shù)學(xué)試卷(含答案)
- 中式面點師考試試卷及答案
- 論語 學(xué)而 教學(xué)課件
- 巡察流程培訓(xùn)課件
- 新員工職業(yè)發(fā)展規(guī)劃課件
- 二手房基礎(chǔ)知識培訓(xùn)
- DB42T 1923-2022 城鎮(zhèn)瀝青路面冷補(bǔ)瀝青混合料施工技術(shù)規(guī)程
- 【中考真題】2025年北京市中考數(shù)學(xué)真題(含解析)
- 中國高尿酸血癥與痛風(fēng)診療指南(2024年)
- 浙江省臺州市2024-2025學(xué)年高一下學(xué)期6月期末英語試題
評論
0/150
提交評論