




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編 號(hào): B學(xué) 號(hào)4 課 程 設(shè) 計(jì)教 學(xué) 院計(jì)算機(jī)課程名稱數(shù)據(jù)結(jié)構(gòu)與算法題 目用棧實(shí)現(xiàn)停車場(chǎng)管理專 業(yè)軟件工程班 級(jí)13級(jí)(1)班姓 名高敏同組人員嚴(yán)子璐 李佳恒 童靜 趙超 馮輝指導(dǎo)教師程細(xì)才2014年6月29日 (完成時(shí)間)目 錄一概述2二總體方案設(shè)計(jì)3三詳細(xì)設(shè)計(jì)4四程序的調(diào)試與運(yùn)行結(jié)果說(shuō)明5五課程設(shè)計(jì)總結(jié)6參考文獻(xiàn)7一 概述1.課程設(shè)計(jì)的目的 對(duì)學(xué)生數(shù)據(jù)結(jié)構(gòu)知識(shí)的全面綜合訓(xùn)練,把書(shū)上學(xué)到的知識(shí)用于解決實(shí)際問(wèn)題、培養(yǎng)今后軟件開(kāi)發(fā)工作所需的動(dòng)手實(shí)踐能力,包括問(wèn)題分析、總體結(jié)構(gòu)設(shè)計(jì),用戶界面的設(shè)計(jì)、程序設(shè)計(jì)時(shí)的基本技能和技巧,以及一整套軟件工作規(guī)范的訓(xùn)練和團(tuán)體協(xié)作精神的培養(yǎng)。2.課程設(shè)計(jì)的要
2、求(1)了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;(2)初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;(3)提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;(4)訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)二 總體方案設(shè)計(jì)一、問(wèn)題描述設(shè)停車場(chǎng)是一個(gè)可停放n輛車的狹長(zhǎng)通道,且只有一個(gè)大門可供汽車進(jìn)出。在停車場(chǎng)內(nèi),汽車按到達(dá)的先后次序,由北向南依次排列(假設(shè)大門在最南端)。若停車場(chǎng)內(nèi)已停滿n輛車,則后來(lái)的汽車需在門外的便道上等候,當(dāng)有車開(kāi)走時(shí),便道上的第一輛車即可開(kāi)入。當(dāng)停車場(chǎng)內(nèi)某輛車要離
3、開(kāi)時(shí),在它之后進(jìn)入的車輛必須先退出停車場(chǎng)為它讓路,待該輛車開(kāi)出大門后,其他車輛再按原次序返回車場(chǎng)。每輛車離開(kāi)停車場(chǎng)時(shí),應(yīng)按其停留時(shí)間的長(zhǎng)短交費(fèi)(在便道上停留的時(shí)間不收費(fèi))。設(shè)計(jì)要求:1模擬上述管理過(guò)程。要求以順序棧模擬停車場(chǎng),以鏈隊(duì)列模擬便道。2從終端讀入汽車到達(dá)或離去的數(shù)據(jù),每組數(shù)據(jù)包括三項(xiàng):(1)是“到達(dá)”還是“離開(kāi)”;(2)汽車牌照號(hào)碼;(3)“到達(dá)”或“離開(kāi)”的時(shí)刻。3與每組輸入信息相應(yīng)的輸出信息為:如果是到達(dá)的車輛,則輸出其在停車場(chǎng)中或便道上的位置;如果是離去的車輛,則輸出其在停車場(chǎng)中停留的時(shí)間和應(yīng)交的費(fèi)用。4遇到的難題,當(dāng)進(jìn)入4輛車,假如需要出車的序列為2,就必須按照棧出棧序列出車
4、,先出4,3,2然后3,4又入桟,這里的程序相對(duì)比較麻煩,通過(guò)和組員交流終于做出來(lái)了。二.各自分工 我負(fù)責(zé)的是編寫(xiě)部分代碼,如車輛的進(jìn)入函數(shù),運(yùn)用了棧的知識(shí)三 詳細(xì)設(shè)計(jì)算法說(shuō)明1數(shù)據(jù)結(jié)構(gòu)說(shuō)明(1)用到兩個(gè)堆棧:一個(gè)為車場(chǎng)棧;另一個(gè)為臨時(shí)棧temptypedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模擬車場(chǎng)*/(2) 一個(gè)隊(duì)列結(jié)構(gòu),存儲(chǔ)便道車輛信息: typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模擬便道*/2算法說(shuō)明(1) 功
5、能模塊說(shuō)明:停車場(chǎng)管理系統(tǒng)含有三個(gè)模塊,即:車輛到達(dá)、離開(kāi)、列表顯示 圖1 (2)以模塊為單位分析算法 1、“到達(dá)”模塊:到達(dá)時(shí)有兩種情況,即車場(chǎng)是否滿,未滿則直接進(jìn)入停車場(chǎng);滿時(shí),到便道等待。如圖2。 2.“離開(kāi)”模塊:離開(kāi)時(shí),當(dāng)車庫(kù)為空時(shí),提示沒(méi)有車,結(jié)束;否則車輛離開(kāi)。如圖3。 圖31. “顯示”模塊:顯示模塊有兩個(gè)顯示選項(xiàng),即:車場(chǎng)與便道。如圖4。四.程序的調(diào)試與運(yùn)行結(jié)果說(shuō)明(一)測(cè)試用例(說(shuō)明:測(cè)試用例要合理并且足夠,既要有正確用例,也要有錯(cuò)誤用例,同時(shí)檢驗(yàn)程序的正確性和強(qiáng)壯性)1第一組測(cè)試用例(1)測(cè)試輸入:停車場(chǎng)的車輛離開(kāi),如下表:服務(wù)選擇車牌號(hào)/車位到達(dá)/離開(kāi)時(shí)間1QH0581
6、5:251AB12318:451EA64223:15220:30210:65(錯(cuò)誤) (2)測(cè)試目的:測(cè)試離開(kāi)方法時(shí)間格式控制以及費(fèi)用計(jì)算是否正確。(3)正確輸出:第一次離開(kāi)的是AB123,應(yīng)交費(fèi)3.45元。第二次時(shí),當(dāng)在輸入65時(shí),應(yīng)該提示輸入錯(cuò)誤,重輸。(4)實(shí)際輸出: (5)錯(cuò)誤原因:第一個(gè)錯(cuò)誤是在計(jì)算時(shí),一個(gè)數(shù)字錯(cuò)了;第二個(gè)是沒(méi)有對(duì)時(shí)間格式控制。(6)當(dāng)前狀態(tài):已改正2第二組測(cè)試用例(1)測(cè)試輸入:連續(xù)6輛車到達(dá),如下表: 服務(wù)選擇 車牌號(hào) 到達(dá)時(shí)間1A8828 7:561S22968:251WW6668:451HK45615:501GH99912:301DD55513:40(2) 測(cè)
7、試目的:測(cè)試到達(dá)方法與列表顯示方法能否正確完成。(3)正確輸出:先到達(dá)的五輛車先進(jìn)入停車場(chǎng),最后到達(dá)的一輛在便道等候。(4)實(shí)際輸出:(5)錯(cuò)誤原因:沒(méi)有作出時(shí)間先后的判斷,而是先輸入先進(jìn)入。(6)當(dāng)前狀態(tài):待修改3第三組測(cè)試用例(1)測(cè)試輸入:接上一步輸入離開(kāi)信息,下表:服務(wù)選擇離開(kāi)車位離開(kāi)時(shí)間便道車進(jìn)入時(shí)間2313:3013:40(2)測(cè)試目的:測(cè)試離開(kāi)方法功能是否成功以及便道進(jìn)入車場(chǎng)是否正確。(3)正確輸出:輸出3號(hào)車位的車輛離開(kāi)信息清單,便道1號(hào)車進(jìn)入停車場(chǎng)。(4)實(shí)際輸出:(5) 錯(cuò)誤原因:沒(méi)有錯(cuò)誤。 (6)當(dāng)前狀態(tài):通過(guò)(二)測(cè)試結(jié)果分析 此停車管理系統(tǒng)基本可能實(shí)現(xiàn)一個(gè)小的停車場(chǎng)的
8、管理,其“到達(dá)”與“離開(kāi)”方法都相對(duì)比較完整,以及結(jié)算清單明了。盡管在時(shí)間先后上有出現(xiàn)混亂,但當(dāng)其用到實(shí)際應(yīng)用時(shí),那個(gè)時(shí)間先后就可以避免了。但在輸入數(shù)據(jù)時(shí),要按照嚴(yán)格的格式輸入,否則有可能出現(xiàn)死去或崩潰。若本系統(tǒng)能加上保存功能就更好了,因?yàn)橐粋€(gè)系統(tǒng)在使用過(guò)程中總會(huì)關(guān)機(jī)等,而此系統(tǒng)的缺點(diǎn)卻是沒(méi)有保存功能,關(guān)閉之后就要重新建立了。會(huì)慢慢完善。附錄:源代碼/系統(tǒng)說(shuō)明:本系統(tǒng)適應(yīng)于小型停車場(chǎng),且停車時(shí)間在一天之內(nèi)的短期停放停車場(chǎng)。/在此系統(tǒng)中,車庫(kù)容量設(shè)置為5,便于測(cè)試。在實(shí)際使用中可以對(duì)容量大小按實(shí)際情況設(shè)置。#include#include#include#include#define MAX 5
9、 /*車庫(kù)容量,可以根據(jù)實(shí)際情況改變*/#define price 0.01 /*一輛車每分鐘費(fèi)用,可變*/typedef struct timeint hour; int min;Time; /*時(shí)間結(jié)點(diǎn)*/typedef struct node char num10; Time reach; Time leave;CarNode; /*車輛信息結(jié)點(diǎn)*/typedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模擬停車場(chǎng)*/typedef struct car CarNode *data; struct car *next
10、;QueueNode;typedef struct Node QueueNode *head; QueueNode *rear;LinkQueueCar; /*模擬便道*/*方法聲明*/void InitStack(SeqStackCar *); /*初始化棧*/ int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達(dá)*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開(kāi)*/void List(S
11、eqStackCar,LinkQueueCar); /*顯示信息*/ void PRINT(CarNode *p,int room); /*輸出離開(kāi)車輛的信息清單*/void main()system(color F2); /*設(shè)置系統(tǒng)顏色,本系統(tǒng)為白底綠字f2*/SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時(shí)棧*/ InitQueue(&Wait); /*初始化通道*/ while(1) cout 歡迎使用本停車管理系統(tǒng) e
12、ndl;cout*endl;cout - 1. 車輛到達(dá) - endl; cout - 2. 車輛離開(kāi) - endl; cout - 3. 列表顯示 - endl; cout - 4. 退出系統(tǒng) - endl; cout*endl;cout!說(shuō)明:請(qǐng)注意正確輸入時(shí)間,在輸入時(shí)后,按ENTER或者空格,再輸入分。不要為非數(shù)字!endl;cout請(qǐng)選擇所需要的服務(wù)! (1-4).ch; if(ch=1&ch=4)break; else cout輸入錯(cuò)誤!請(qǐng)選擇:(1-4).top=0; for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q)
13、/*初始化便道*/Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL)Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); cout請(qǐng)輸入車牌號(hào)(例:A1234):num); if(Enter-to
14、ptop+; cout車輛在車場(chǎng)第top 位置!endl; cout請(qǐng)輸入到達(dá)時(shí)間:(小時(shí):分鐘)p-reach.hour; while(p-reach.hourreach.hour23) /控制時(shí)間格式正確 cout輸入錯(cuò)誤!endl; cout請(qǐng)重輸入到達(dá)時(shí)間的時(shí)(0-23)!p-reach.hour;cinp-reach.min; while(p-reach.minreach.min59) /控制分鐘輸入正確 cout輸入錯(cuò)誤!endl; cout請(qǐng)重輸入到達(dá)時(shí)間的分(0-59)!p-reach.min; Enter-stackEnter-top=p; return(1); else /
15、*車場(chǎng)已滿,車進(jìn)便道*/ cout車場(chǎng)已滿,請(qǐng)?jiān)诒愕赖却?data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開(kāi)*/ int room; CarNode *p; QueueNode *q; /*判斷車場(chǎng)內(nèi)是否有車*/ if(Enter-top0) /*有車*/ while(1) /*輸入離開(kāi)車輛的信息*/ cout請(qǐng)輸入車在車場(chǎng)的位置1-toproom; if(room=1&roomtop) b
16、reak; while(Enter-toproom) /*車輛離開(kāi)*/Temp-top+; /*臨時(shí)通道棧頂指針*/ Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1) /*判斷臨時(shí)通道上是否有車*/Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTe
17、mp-top=NULL; Temp-top-; PRINT(p,room); if(W-head!=W-rear)&Enter-tophead-next; p=q-data; /*p指向鏈隊(duì)頭*/ Enter-top+; cout便道的num號(hào)車進(jìn)入車場(chǎng)第top位置!endl; cout請(qǐng)輸入現(xiàn)在的時(shí)間如(小時(shí):分鐘):p-reach.hour; if(p-reach.hourreach.hour23) cout輸入錯(cuò)誤!endl; cout請(qǐng)重輸入到達(dá)時(shí)間的時(shí)(0-23)!p-reach.hour; cinp-reach.min; if(p-reach.minreach.min59) cou
18、t輸入錯(cuò)誤!endl; cout請(qǐng)重輸入到達(dá)時(shí)間的分(0-59)!p-reach.min; Enter-stackEnter-top=p; W-head-next=q-next; if(q=W-rear) W-rear=W-head; free(q); /*釋放q地址*/ else cout便道里沒(méi)有車!endl; /*便道沒(méi)車*/ else cout車場(chǎng)里沒(méi)有車!endl; /*車場(chǎng)沒(méi)車*/void PRINT(CarNode *p,int room) /*輸出離開(kāi)車輛的信息清單*/ int A1,A2,B1,B2; cout請(qǐng)輸入離開(kāi)的時(shí)間:(小時(shí):分鐘)p-leave.hour; whi
19、le(p-leave.hourleave.hour23)cout輸入錯(cuò)誤!endl; cout請(qǐng)重輸入離開(kāi)的時(shí)間的時(shí)(0-23)p-leave.hour;B1=p-leave.hour; cinp-leave.min;if(p-leave.minleave.min59) cout輸入錯(cuò)誤!endl; cout請(qǐng)重輸入到達(dá)時(shí)間的分(0-59)!p-leave.min; coutendl離開(kāi)車輛的車牌號(hào)為:num); cout其到達(dá)時(shí)間為: reach.hour:reach.minendl; cout離開(kāi)時(shí)間為: leave.hour:leave.minreach.hour; A2=p-reach
20、.min; B1=p-leave.hour; B2=p-leave.min;cout應(yīng)交費(fèi)用為: (B1-A1)*60+(B2-A2)+1440)%1440*price元!endl; free(p);void List1(SeqStackCar *S) /*列表顯示車場(chǎng)信息*/ cout您選擇的是車場(chǎng)停車情況!top0) /*判斷車站內(nèi)是否有車*/ cout 位置 到達(dá)時(shí)間 車牌號(hào)endl; for(i=1;itop;i+)cout i stacki-reach.hour:stacki-reach.min stacki-numendl; else cout車場(chǎng)里沒(méi)有車!endl;void Li
21、st2(LinkQueueCar *W) /*列表顯示便道信息*/ cout您選擇的是便道停車情況!head-next; if(W-head!=W-rear) /*判斷通道上是否有車*/cout等待車輛的車牌號(hào)碼為:endl; while(p!=NULL) /coutdata-num);coutj data-numnext;j+; /開(kāi)始時(shí)顯示不正確,沒(méi)有按照正常輸出 else cout便道里沒(méi)有車!;void List(SeqStackCar S,LinkQueueCar W) /*列表界面*/int flag,tag; flag=1; while(flag) /*列表顯示循環(huán)控制*/cou
22、t請(qǐng)選擇您要顯示信息! (1-3):endl; cout-1.車場(chǎng)-endl;cout-2.便道-endl;cout-3.返回-tag; if(tag=1|tag=3) break; else cout輸入錯(cuò)誤!請(qǐng)選擇 (1-3):endl;switch(tag)case 1:List1(&S);break; /*列表顯示車場(chǎng)信息*/ case 2:List2(&W);break; /*列表顯示便道信息*/ case 3:flag=0;break; default: break; 五 課程設(shè)計(jì)總結(jié)剛開(kāi)始因?yàn)閷?duì)棧的知識(shí)理解不深透,做起實(shí)驗(yàn)非常困難,不知從何下手,通過(guò)兩周查閱資料搜集相關(guān)知識(shí),終于完成了用棧實(shí)現(xiàn)停車場(chǎng)系統(tǒng),這次的實(shí)驗(yàn),我真的受益匪淺,希望以后還會(huì)有更多的課程設(shè)計(jì)、通過(guò)實(shí)習(xí)我的收獲如下 1我知道了怎樣去簡(jiǎn)化程序,減少他的時(shí)間復(fù)雜度和空間復(fù)雜度。還知道了怎樣去完善程序,使其更具健壯性。 2鞏固和加深了對(duì)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 宿州職業(yè)技術(shù)學(xué)院《西方音樂(lè)史II》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江省溫州市溫州中學(xué)2025屆下學(xué)期期末聯(lián)考高三生物試題試卷含解析
- 鄭州商貿(mào)旅游職業(yè)學(xué)院《企業(yè)級(jí)應(yīng)用開(kāi)發(fā)實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧波諾丁漢大學(xué)《制藥工程專業(yè)外語(yǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省無(wú)錫市新吳區(qū)新城中學(xué)2025年初三下-第二次聯(lián)考化學(xué)試題試卷含解析
- 江西婺源茶業(yè)職業(yè)學(xué)院《廣告策劃設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 木樓梯全球市場(chǎng)趨勢(shì)分析考核試卷
- 電子專用材料在汽車電子中的應(yīng)用考核試卷
- 玻璃熔化工藝與質(zhì)量控制考核試卷
- 批發(fā)業(yè)銷售團(tuán)隊(duì)激勵(lì)與管理考核試卷
- 具身智能機(jī)器人擴(kuò)散策略Diffusion Policy基本原理與代碼詳解
- 幼兒園大班科學(xué)《空氣炮》課件
- 2025年數(shù)學(xué)競(jìng)賽AMC8試題
- 八年級(jí)語(yǔ)文下冊(cè) 第二學(xué)期 期中測(cè)試卷(人教寧夏版 2025年春)
- 第二十一章會(huì)陰部美容手術(shù)講解
- 2025偏心半球閥技術(shù)規(guī)范
- 2025年春新人教版語(yǔ)文一年級(jí)下冊(cè)教學(xué)課件 11 浪花
- 金融投資策略分析報(bào)告
- 專練04-中國(guó)地理、世界地理100題(解析版)
- 水利工程信息化項(xiàng)目劃分表示例、單元工程質(zhì)量標(biāo)準(zhǔn)、驗(yàn)收應(yīng)提供的資料目錄
- 意識(shí)哲學(xué)研究前沿-洞察分析
評(píng)論
0/150
提交評(píng)論