版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、程序設(shè)計與算法綜合訓(xùn)練設(shè)計報告2學(xué)號:E11514064姓名:汪泓章年級:大一專業(yè):計科項(xiàng)目名稱:停車場管理系統(tǒng)的設(shè)計與實(shí)現(xiàn):完成日期:2016年6月27日一.需求分析1.問題描述:設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場的最北端)。若停車場內(nèi)已經(jīng)停滿n輛車,那么后來的車只能在門外的便道上等候。一旦有車開走,則排在便道上的第一輛車即可開入。當(dāng)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場。每輛停放在車場
2、的車在它離開停車場時必須按它停留的時間長短繳納費(fèi)用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。2.基本要求:以棧模擬停車場,以隊(duì)列模擬車場外的便道,按照從終端讀入數(shù)據(jù)的序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項(xiàng):汽車的“到達(dá)"('A'表示)或“離去"('D表示)信息、汽車標(biāo)識(牌照號)以及到達(dá)或離去的時刻。對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或者便道上的停車位置;若是車輛離去,則輸出汽車在停車場停留的時間和應(yīng)繳納的費(fèi)用(便道上停留的時間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。(1) .程序所能達(dá)到的
3、基本可能:程序以棧模擬停車場,以隊(duì)列模擬車場外的便道,按照從終端讀入數(shù)據(jù)的序列進(jìn)行模擬管理。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。同時另設(shè)一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車。輸入數(shù)據(jù)按到達(dá)或離去的時刻有序。當(dāng)輸入數(shù)據(jù)包括數(shù)據(jù)項(xiàng)為汽車的“到達(dá)"('A'表示)信息,汽車標(biāo)識(牌照號)以及到達(dá)時刻時,應(yīng)輸出汽車在停車場內(nèi)或者便道上的停車位置;當(dāng)輸入數(shù)據(jù)包括數(shù)據(jù)項(xiàng)為汽車的“離去"('D'表示)信息,汽車標(biāo)識(牌照號)以及離去時刻時,應(yīng)輸出汽車在停車場停留的時間和應(yīng)繳納的費(fèi)用(便道上停留的時間不收費(fèi));當(dāng)輸入數(shù)據(jù)項(xiàng)為('
4、P',0,0)時,應(yīng)輸出停車場的車數(shù);當(dāng)輸入數(shù)據(jù)項(xiàng)為('W,0,0)時,應(yīng)輸出候車場車數(shù);當(dāng)輸入數(shù)據(jù)項(xiàng)為('E',0,0),退出程序;(2) .輸入輸出形式及輸入值范圍:程序運(yùn)行后進(jìn)入循環(huán),顯示提示信息:“請輸入停車場最大容量n=:",提示用戶輸入停車場最大容量,輸入后顯示提示信息:請輸入車輛信息,提示用戶輸入車輛信息(“到達(dá)”或者“離開”,車牌編號,到達(dá)或者離開的時間)。若車輛信息為“到達(dá)A”,車輛信息開始進(jìn)棧(模擬停車場),當(dāng)棧滿,車輛會進(jìn)隊(duì)列(模擬停車場旁便道),若車輛信息為“離開D”,會顯示該車進(jìn)入停車場的時間以及相應(yīng)的停車費(fèi)用,若該車較部分車
5、早進(jìn)停車場,這部分車需先退出停車場,暫時進(jìn)入一個新棧為其讓道,當(dāng)待離開車離開停車場后,這部分車會重新進(jìn)入停車場,同時便道上的第一輛車進(jìn)入停車場;若輸入('P',0,0),會顯示停車場的車數(shù);若輸入(W,0,0),會顯示便道上的車數(shù);若輸入('E',0,0),程序會跳出循環(huán),同時程序結(jié)束。用戶每輸入一組數(shù)據(jù),程序就會根據(jù)相應(yīng)輸入給出輸出。輸入值第一個必須為字母,后兩個為數(shù)字,中間用逗號隔開二.概要設(shè)計1 .所用到得數(shù)據(jù)結(jié)構(gòu)及其ADT為了實(shí)現(xiàn)上述功能,該程序以順序棧模擬停車場以及臨時停放為給要離去的汽車讓路而從停車場退出來的汽車的場地,以鏈表隊(duì)列模擬車場外的便道,因
6、此需要棧和隊(duì)列這兩個抽象數(shù)據(jù)類型。順序棧數(shù)據(jù)類型定義typedefstructStackstructNodedataMaxSize;inttop;intnum;SqStack;基本操作:SqStack*Init_SeqStack()/置空棧intISEmpty_SeqStack(SqStack*s)判斷棧是否為空,棧為空返回1intISFULL_SeqStack(SqStack*s,intn)判斷棧是否已滿,若棧滿返回1voidPush_SeqStack(SqStack*p,structNodes)/入棧intPOP_SeqStack(SqStack*s,structNodecar)/出棧2
7、.鏈表隊(duì)列數(shù)據(jù)類型定義QNODE/隊(duì)列節(jié)點(diǎn)structNodedata;QNODE*next;typedefstructlinkqueue/隊(duì)列結(jié)構(gòu)體定義QNODE*front,*rear;intnum;LinkQueue;基本操作:LinkQueue*Init_LQueue()/創(chuàng)建空隊(duì)列intISEmpty_LQueue(LinkQueue*q)判斷隊(duì)列是否為空,隊(duì)列為空返回voidIN_Lqueue(LinkQueue*q,structNodes)/入隊(duì)structNodeOut_LQueue(LinkQueue*q)/出隊(duì)2.主程序流程及其模塊調(diào)用關(guān)系1)主程序模塊2)出棧3)判斷棧是
8、否為空4)判斷棧是否已滿5)判斷隊(duì)列是否為空6)出隊(duì)函數(shù)調(diào)用:main()函數(shù)中調(diào)用:ISFULL_SeqStack(parkstack,n),IN_Lqueue(parkqueue,car);Push_SeqStack(parkstack,car);t=POP_SeqStack(parkstack,car);ISEmpty_LQueue(parkqueue)=0;Push_SeqStack(parkstack,Out_LQueue(parkqueue);POP_SeqStack(SqStack*s,structNodecar)出棧函數(shù)中調(diào)用:Init_SeqStack();Push_SeqS
9、tack(p,s->datas->top);ISEmpty_SeqStack(p)=0三、詳細(xì)設(shè)計1.實(shí)現(xiàn)每個操作的偽碼1)主程序模塊intmain()SqStack*parkstack;/parkstack為表示停車場的棧LinkQueue*parkqueue;/parkqueue為表示便道的隊(duì)歹UstructNodecar;intn,a=0,t;/n為停車場棧的最大容量time_trawtime;structtm*timeinfo;time(&rawtime);timeinfo=localtime(&rawtime);parkstack=Init_SeqStac
10、k();parkqueue=Init_LQueue();printf("請輸入停車場最大容量n=n");scanf("%d",&n);printf("請輸入車輛信息n");scanf("%c,%d,%d",&car.AL,&car.NO,&car.time);while(car.AL!='E')if(car.AL='A')/汽車到達(dá)的情況if(ISFULL_SeqStack(parkstack,n)=1)/棧滿的情況IN_Lqueue(parkqueu
11、e,car);/進(jìn)入隊(duì)列等待printf("這輛車在門外便道上第外位置n",parkqueue->num);printf("n");printf("請輸入車輛信息n");elsePush_SeqStack(parkstack,car);/入棧printf("這輛車在停車場內(nèi)第d個位置n",parkstack->num);printf("n");printf("請輸入車輛信息n");if(car.AL='D')/汽車離開的情況t=POP_SeqSta
12、ck(parkstack,car);/出棧printf("這輛車停留時間為dn",t);printf("n");printf("請輸入車輛信息n");if(ISEmpty_LQueue(parkqueue)=0)/隊(duì)列不為空需要進(jìn)棧Push_SeqStack(parkstack,Out_LQueue(parkqueue);if(car.AL='P'&&car.NO=0&&car.time=0)/顯示停車場的車數(shù)printf("停車場的車數(shù)為dn",parkstack-
13、>num);printf("n");printf("請輸入車輛信息n");if(car.AL='WI&&car.NO=0&&car.time=0)/顯示候車場的車數(shù)printf("候車場的車數(shù)為dn",parkqueue->num);printf("n");printf("請輸入車輛信息n");scanf("%c,%d,%d",&car.AL,&car.NO,&car.time);printf(&qu
14、ot;輸入結(jié)束n");return1;2)置空棧模塊SqStack*Init_SeqStack()/置空棧SqStack*s;s=(SqStack*)malloc(sizeof(SqStack);s->top=-1;s->num=0;returns;3)創(chuàng)建空隊(duì)列模塊LinkQueue*Init_LQueue()/創(chuàng)建空隊(duì)列LinkQueue*q;QNODE*p;q=(LinkQueue*)malloc(sizeof(LinkQueue);p=(QNODE*)malloc(sizeof(QNODE);p->next=NULL;q->front=q->re
15、ar=p;q->num=0;returnq;4)判斷棧是否為空模塊/判斷棧是否為空,棧為空返回 1/判斷棧是否已滿,若棧滿返回1intISEmpty_SeqStack(SqStack*s)if(s->top=-1)return1;elsereturn0;5)判斷棧是否已滿模塊intISFULL_SeqStack(SqStack*s,intn)if(s->top=n-1)return1;elsereturn0;6)判斷隊(duì)列是否為空模塊/判斷隊(duì)列是否為空,隊(duì)列為空返回intISEmpty_LQueue(LinkQueue*q)if(q->front=q->rear)r
16、eturn1;elsereturn0;7)入隊(duì)模塊voidIN_Lqueue(LinkQueue*q,structNodes)/入隊(duì)QNODE*p;p=(QNODE*)malloc(sizeof(QNODE);p->data=s;q->num+;p->next=NULL;q->rear->next=p;q->rear=p;8)入棧模塊voidPush_SeqStack(SqStack*p,structNodes)/入棧p->top+;p->datap->top=s;p->num+;9)出棧模塊intPOP_SeqStack(SqSta
17、ck*s,structNodecar)/出棧SqStack*p;intt;p=Init_SeqStack();while(s->datas->top.NO!=car.NO)找到車牌號為P.NO的車,Push_SeqStack(p,s->datas->top);s->top-;s->num-;t=car.time-s->datas->top.time;s->top-;s->num-;while(ISEmpty_SeqStack(p)=0)Push_SeqStack(s,p->datap->top);p->top-;p-
18、>num-;returnt;10)出隊(duì)模塊structNodeOut_LQueue(LinkQueue*q)/出隊(duì)QNODE*p;p=q->front->next;q->front->next=p->next;q->num-;if(q->front->next=NULL)q->rear=q->front;returnp->data;free(p);四、測試與分析1 .設(shè)計與調(diào)試過程中遇到的問題分析、體會1)編寫代碼時,由于對棧和隊(duì)列不熟悉,經(jīng)常會一些問題,該程序定義了車輛信息,停車場的順序棧,便道上的鏈表隊(duì)列,所以在函數(shù)代
19、值時會出現(xiàn)代值的問題,例如在出棧的程序POP_SeqStack(SqStack*s,structNodecar)中一開始在s->datas->top.NO!=car.NO這句話中我編的代碼是s->data.NO!=car.NO'程序報錯.NO':leftoperandpointsto'struct',use'->',這就是因?yàn)槎x的太多了,忘記了當(dāng)初定義的停車場棧是:structNodedataMaxSize;就是像程序中s->datas->top.time這樣的定義因?yàn)樘L了經(jīng)常會搞混,再次像IN_Lqueu
20、e(parkqueue,car);,Push_SeqStack(parkstack,car);這種涉及函數(shù)調(diào)用的尤其要注意代的應(yīng)該是什么。2 .主要算法的時間復(fù)雜度分析主函數(shù)中對每次輸入的車輛信息只選擇其中一個執(zhí)行,時間復(fù)雜度O(1);空間復(fù)雜度O(1);入棧入隊(duì)列函數(shù)根據(jù)判斷條件將數(shù)據(jù)入?;蛉腙?duì)列,時間復(fù)雜度O(1);空間復(fù)雜度O(1);出棧數(shù)據(jù)不在最頂端需將n個數(shù)據(jù)先出該棧,再入新棧,再回舊棧,時間復(fù)雜度O(n);空間復(fù)雜度O(1);3 .測試數(shù)據(jù).設(shè)n=2,輸入數(shù)據(jù)為:('A',1,5),('A',2,10),('D',1,15),(
21、9;A',3,20),('A',4,25),('A',5,30),('D',2,35),('D',4,40),('E',0,0)。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號碼及到達(dá)或離去的時刻,其中,'A'表示到達(dá);D表示離去,'E'表示輸入結(jié)束。其中:('A',1,5)表示1號牌照車在5這個時刻到達(dá),而('D',1,15)表示1號牌照車在15這個時刻離去。4 .測試結(jié)果停車場管理程序青選擇(A,D,E):A15青輸入
22、車牌號:進(jìn)場的時刻:該車應(yīng)停在第1號車道.停車場管理程序青選擇(比D,E);A210青輸入車牌號,進(jìn)場的時刻:該車應(yīng)停在第猾車道.停車場管理程序青選擇D115青輸入車牌號工出場的時刻:停車費(fèi)為20,占用車位數(shù)為1停車場管理程序青選擇A320青輸入車牌號:進(jìn)場的時刻:該車應(yīng)停在第2號車道.1停車場管理程序請選擇(A,D,E):A425請輸入車牌號;進(jìn)場的時刻:該車應(yīng)停在第*號車道.停車場管理程序請選擇(A,D,E):D235請輸入車牌號:出場的時刻:停車費(fèi)為50,占用車位數(shù)為2停車場管理程序請選擇(A,D,E);E005 .總結(jié)在這個程序中還有一個問題,就是定義的結(jié)構(gòu)體數(shù)組有些多,容易混亂,所以
23、我選擇每定義一個結(jié)構(gòu)體都將其畫出一個圖,這樣編寫的時候就不至于太混亂。這個停車管理系統(tǒng)的設(shè)計過程,還是慢慢在適應(yīng)模塊化程序的編寫,但有的程序還是喜歡寫在一起,使得一個子程序會很長,這個問題希望在之后的問題再繼續(xù)慢慢改進(jìn)6 .附錄:源程序清單#include<stdio.h>#include<stdlib.h>#include<malloc.h>/函數(shù)返回狀態(tài)代碼# defineOK1# defineERROR0# defineTRUE1# defineFALSE0# defineINFEASIBLE-1# defineOVERFLOW-2# defineSI
24、ZE5停車場位置數(shù)typedefintStatus;/棧,模擬停車場typedefstructCar1/車intnumber;/汽車車號intar_time;/汽車到達(dá)時間CarNode;typedefstruct停車場CarNode*base;停車場的堆棧底CarNode*top;/停車場的堆棧頂intstacksize;Park;/隊(duì)列,模擬便道typedefstructCar2/車intnumber;/汽車車號intar_time;/汽車到達(dá)時間structCar2*next;*CarPtr;typedefstruct便道CarPtrfront;/便道的隊(duì)列的對頭CarPtrrear;/
25、便道的隊(duì)列的隊(duì)尾intlength;Shortcut;StatusInitStack(Park&P)初始化停車場P.base=(CarNode*)malloc(SIZE*sizeof(Car1);if(!P.base)exit(OVERFLOW);P.top=P.base;P.stacksize=0;returnOK;StatusPush(Park&P,CarNodee)/車進(jìn)入停車場*P.top+=e;+P.stacksize;returnOK;StatusPop(Park&P,CarNode&e)/車離開停車場if(P.top=P.base)printf(&
26、quot;停車場為空.");elsee=*-P.top;-P.stacksize;returnOK;StatusInitQueue(Shortcut&S)初始化便道S.front=S.rear=(CarPtr)malloc(sizeof(Car2);if(!S.front|!S.rear)exit(OVERFLOW);S.front->next=NULL;S.length=0;returnOK;StatusEnQueue(Shortcut&S,intnumber,intar_time)/車進(jìn)入便道CarPtrp;p=(CarPtr)malloc(sizeof(C
27、ar2);if(!p)exit(OVERFLOW);p->number=number;p->ar_time=ar_time;p->next=NULL;S.rear->next=p;S.rear=p;+S.length;returnOK;StatusDeQueue(Shortcut&S,CarPtr&w)車離開便道if(S.length=0)printf("通道為空.");elsew=S.front->next;S.front->next=S.front->next->next;-S.length;returnO
28、K;StatusArrival(Park&P,Shortcut&S)對進(jìn)站車輛的處理intnumber,ar_time;printf("請輸入車牌號:”);scanf("%d",&number);printf("進(jìn)場的時刻:");scanf("%d",&ar_time);if(P.stacksize<SIZE)CarNodec;c.number=number;c.ar_time=ar_time;Push(P,c);printf("該車應(yīng)彳亭在第%d號車道.n",P.stacksize);elseEnQueue(S,number,ar_time);printf("停車場已滿,請暫時停在便道的第d個位置.n",S.length);returnOK;StatusLeave(Park&P,Park&P1,Shortcut&S)對離站車輛的處理intnumber,le_time,flag=1,money,ar_time;printf("請輸入車牌號:”);scanf("%d",&number);printf("出場的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LS/T 1235-2024糧食倉房分類分級
- 2025-2030年中國高硬脆材料加工行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報告
- 2025-2030年中國全鋼子午胎行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報告
- 在2024年歲末年初安全生產(chǎn)工作會議上的講話
- 2020-2025年中國物流自動化行業(yè)市場前景預(yù)測及投資方向研究報告
- 廣東省深圳市鹽田區(qū)2023-2024學(xué)年五年級上學(xué)期英語期末試卷
- 五年級數(shù)學(xué)(小數(shù)除法)計算題專項(xiàng)練習(xí)及答案匯編
- 應(yīng)急移動雷達(dá)塔 5米玻璃鋼接閃桿 CMCE電場補(bǔ)償器避雷針
- 快易冷儲罐知識培訓(xùn)課件
- 2025年人教版英語五年級下冊教學(xué)進(jìn)度安排表
- 2024-2025學(xué)年北京房山區(qū)初三(上)期末英語試卷
- 2024年三年級英語教學(xué)工作總結(jié)(修改)
- 咖啡廳店面轉(zhuǎn)讓協(xié)議書
- 期末(試題)-2024-2025學(xué)年人教PEP版英語六年級上冊
- 鮮奶購銷合同模板
- 申論公務(wù)員考試試題與參考答案(2024年)
- DB4101T 9.1-2023 反恐怖防范管理規(guī)范 第1部分:通則
- 2024-2030年中國公安信息化建設(shè)與IT應(yīng)用行業(yè)競爭策略及投資模式分析報告
- 2024年加油站場地出租協(xié)議
- 南寧房地產(chǎn)市場月報2024年08月
- 2024年金融理財-擔(dān)保公司考試近5年真題附答案
評論
0/150
提交評論