停車(chē)場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告最終版_第1頁(yè)
停車(chē)場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告最終版_第2頁(yè)
停車(chē)場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告最終版_第3頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、目 錄1實(shí)習(xí)目的12問(wèn)題描述13.1設(shè)計(jì)基本要求13.2停車(chē)場(chǎng)管理系統(tǒng)的主要功能 24概要設(shè)計(jì)24.1設(shè)計(jì)思想24.2函數(shù)及功能要求35詳細(xì)設(shè)計(jì)45.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)45.2算法的設(shè)計(jì)思想及流程圖55.2.1主要函數(shù)的功能說(shuō)明55.2.2停車(chē)場(chǎng)管理系統(tǒng)流程圖65.2.3主要模塊算法描述76測(cè)試分析86.1測(cè)試用例86.1.1第一組測(cè)試用例 86.1.2第二組測(cè)試用例96.1.3第三組測(cè)試用例 116.2測(cè)試結(jié)果分析117使用說(shuō)明128總結(jié)13參考文獻(xiàn)15附錄16word范文停車(chē)場(chǎng)管理系統(tǒng)1實(shí)習(xí)目的通過(guò)本次課程設(shè)計(jì),了解并初步掌握設(shè)計(jì)、實(shí)現(xiàn)系統(tǒng)的完整過(guò)程,包括系統(tǒng)分析、 編碼設(shè)計(jì)、以及調(diào)試分析,

2、熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計(jì)、實(shí)現(xiàn)以及操作方法,為進(jìn) 一步的應(yīng)用開(kāi)發(fā)打好基礎(chǔ)。2問(wèn)題描述停車(chē)場(chǎng)是一條可以停放n輛車(chē)的狹窄通道,且只有一個(gè)大門(mén)。汽車(chē)停放安到達(dá)時(shí)間 的先后依次由北向南排列(大門(mén)在最南端,最先到達(dá)的第一輛車(chē)停在最北端)若停車(chē)場(chǎng) 已經(jīng)停滿n輛車(chē),后來(lái)的汽車(chē)在便道上等候,一旦有車(chē)開(kāi)走,排在便道上的第一輛車(chē)可 以開(kāi)入;當(dāng)停車(chē)場(chǎng)的某輛車(chē)要離開(kāi)時(shí),停在他后面的車(chē)要先后退為他讓路,等它開(kāi)出后 其他車(chē)在按照原次序開(kāi)入車(chē)場(chǎng),每?jī)赏T谲?chē)場(chǎng)的車(chē)要安時(shí)間長(zhǎng)短繳費(fèi)。3需求分析停車(chē)場(chǎng)是一條可以停放n輛車(chē)的狹窄通道,且只有一個(gè)大門(mén)。汽車(chē)停放按到達(dá)時(shí)間 的先后排列。若停車(chē)場(chǎng)已經(jīng)停滿n輛車(chē),后來(lái)的汽車(chē)在便道上等候

3、。一旦有車(chē)開(kāi)走,排 在便道上的第一輛車(chē)可以開(kāi)入;當(dāng)停車(chē)場(chǎng)的某輛車(chē)要離開(kāi)時(shí),停在他后面的車(chē)要先后退 為他讓路。等它開(kāi)出后,其他車(chē)再按照原次序開(kāi)入車(chē)場(chǎng),每輛停在車(chē)場(chǎng)的車(chē)要按時(shí)間長(zhǎng) 短繳費(fèi)。3.1設(shè)計(jì)基本要求(1) 以棧模擬停車(chē)場(chǎng),以隊(duì)列模擬車(chē)場(chǎng)外的便道,按照從終端輸入的數(shù)據(jù)序列進(jìn)行 模擬管理。每一組數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車(chē)“到達(dá)”或“離去”信息、汽車(chē)牌照號(hào)碼、 以及到達(dá)或離去的時(shí)刻。對(duì)每一組數(shù)據(jù)進(jìn)行操作后的信息為:若是車(chē)輛到達(dá),則輸出汽 車(chē)在停車(chē)場(chǎng)的內(nèi)或便道上的位置:若是車(chē)輛離去則輸出汽車(chē)在停車(chē)場(chǎng)內(nèi)的停留時(shí)間和應(yīng) 繳納的費(fèi)用(在便道上的停留時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)(2)

4、友好性:界面要友好,輸入有提示,盡量展示人性化。(3) 可讀性:源程序代碼清晰、有層次,必要時(shí)給出注釋。(4) 健壯性:用戶輸入非法數(shù)據(jù)時(shí),系統(tǒng)要及時(shí)給出警告信息。(5) 測(cè)試數(shù)據(jù):要求使用全部合法數(shù)據(jù)、整體非法數(shù)據(jù)、局部非法數(shù)據(jù)進(jìn)行程序測(cè) 試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫(xiě)明。3.2停車(chē)場(chǎng)管理系統(tǒng)的主要功能(1) 根據(jù)車(chē)輛到達(dá)停車(chē)場(chǎng)到車(chē)輛離開(kāi)停車(chē)場(chǎng)時(shí)所停留的時(shí)間進(jìn)行計(jì)時(shí)收費(fèi)。(2) 該程序設(shè)計(jì)能夠通過(guò)車(chē)牌號(hào)查到該車(chē)輛在停車(chē)場(chǎng)或便道中的位置。(3) 當(dāng)有車(chē)輛從停車(chē)場(chǎng)離開(kāi)時(shí),等待的車(chē)輛按順序進(jìn)入停車(chē)場(chǎng)停放。實(shí)現(xiàn)停車(chē)場(chǎng)的 調(diào)度功能。該程序設(shè)計(jì)可以完整的模擬停車(chē)場(chǎng)的管理過(guò)程。

5、4概要設(shè)計(jì)4.1數(shù)據(jù)庫(kù)設(shè)計(jì)(1) 棧的抽象數(shù)據(jù)類型定義AST Stack數(shù)據(jù)對(duì)象:D=ai|ai ElemSet,i=1,2,.,n, n> 0數(shù)據(jù)關(guān)系:R1=<ai-1,ai>|ai-1,ai D, i=2,.,n約定an端為棧頂,a1端為棧底。基本操作:In itStack(&S)操作結(jié)果:構(gòu)造一個(gè)空棧SoDestroyStack(&S)初始條件:棧S已存在。操作結(jié)果:棧S被銷毀。ClearStack(&S)初始條件:棧S已存在。操作結(jié)果:將棧S清為空棧。tackEmpty(S)初始條件:棧S已存在。操作結(jié)果:若棧S為空棧,則返回TRUE否則FAL

6、SEStackLe ngth(s)初始條件:棧S已存在。操作結(jié)果:返回S的元素個(gè)數(shù),既棧的長(zhǎng)度。GetTop(S,&e)初始條件:棧S已存在且非空。操作結(jié)果:用e返回S的棧頂元素。Push(&S,e)初始條件:棧S已存在。操作結(jié)果:插入元素e為新的棧頂元素。Pop(&S,&e)初始條件:棧S已存在且非空。操作結(jié)果:刪除S的棧頂元素,并用e返回其值。StackTraverse(S,visit()初始條件:棧S已存在且非空。操作結(jié)果:從棧底到棧頂依次對(duì) S的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù) visit()。一旦visit() 失 word范文敗,則操作失效。ADT Stack(

7、2) 隊(duì)列的抽象數(shù)據(jù)類型定義ADT Queue數(shù)據(jù)對(duì)象:D=ai|ai ElemSet,i=1,2,.,n,n>0數(shù)據(jù)關(guān)系:R1=<ai-1,ai>|ai-1,ai D,i=2,.,n約定其中al端為隊(duì)列頭,an為隊(duì)列尾。基本操作:Ini tQueue(&Q)操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列QDestroyQueue(&Q)初始條件:隊(duì)列Q已存在。操作結(jié)果:隊(duì)列Q被銷毀,不再存在。ClearQueue(&Q)初始條件:隊(duì)列Q已存在。操作結(jié)果:將Q清為空隊(duì)列。QueueEmpty(Q)初始條件:隊(duì)列Q已存在。操作結(jié)果:若Q為空隊(duì)列,則返回TRUE否則FALSEQ

8、ueueLe ngth(Q)初始條件:隊(duì)列Q已存在。操作結(jié)果:返回Q的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度。GetHead(Q,&e)初始條件:Q為非空隊(duì)列。操作結(jié)果:用e返回的隊(duì)頭元素。En Queue(&Q,e)初始條件:隊(duì)列Q已存在。操作結(jié)果:插入元素e為Q的新的隊(duì)尾元素。DeQueue(&Q,&e)初始條件:Q為非空隊(duì)列。操作結(jié)果:刪除Q的隊(duì)頭元素,并用e返回其值。QueueTraverse(Q,visit()初始條件:Q已存在且非空。操作結(jié)果:從隊(duì)頭到隊(duì)尾,依次對(duì)Q的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù) visit()。一旦visit()失敗,則操作失敗。ADT Queue4.2函

9、數(shù)及功能要求(1)此停車(chē)場(chǎng)管理系統(tǒng),主要分為以下若干模塊:首先定義用來(lái)模擬停車(chē)場(chǎng)的堆棧以及用來(lái)模擬通道的鏈隊(duì)列為全局變量,然后編寫(xiě) 主函數(shù),在此主函數(shù)中實(shí)現(xiàn)對(duì)其它各個(gè)模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù), 出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進(jìn)入此停車(chē)場(chǎng)管理系統(tǒng)后,再出現(xiàn)一個(gè)供用 戶選擇的界面,在用戶的選擇過(guò)程中,程序又分別調(diào)用車(chē)輛的到達(dá)、車(chē)輛的離開(kāi)、停車(chē) 場(chǎng)內(nèi)停放車(chē)輛的信息以及退出程序這四個(gè)函數(shù)模塊。其中,在車(chē)輛的離開(kāi)那個(gè)模塊函數(shù) 中又調(diào)用了打印離開(kāi)車(chē)輛信息的函數(shù),在停車(chē)場(chǎng)內(nèi)停放車(chē)輛信息的那個(gè)模塊函數(shù)中,又 分別調(diào)用了顯示停車(chē)場(chǎng)上車(chē)輛信息的函數(shù)以及顯示便道上車(chē)輛信息的函數(shù)。最

10、后,從調(diào)用的這四個(gè)函數(shù)中回到主函數(shù)結(jié)束整個(gè)程序的運(yùn)行。(2)在以上各個(gè)模塊中,出現(xiàn)的調(diào)用的函數(shù)為:void In itStack(SeqStackCar *s);int Ini tQueue(Li nkQueueCar *Q);optio n();int Arrival(SeqStackCar *En ter,Li nkQueueCar *W);void Leave(SeqStackCar *En ter,SeqStackCar *Temp,L in kQueueCar *W);void PRINT(CarNode *p);void List(SeqStackCar S,Li nkQueueC

11、ar W);void List1(SeqStackCar *S);void List2(L in kQueueCar *W);5詳細(xì)設(shè)計(jì)5.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)程序中使用了一個(gè)類,五個(gè)結(jié)構(gòu)體,兩個(gè)棧(模擬停車(chē)場(chǎng),其中一個(gè)為臨時(shí)棧) 個(gè)隊(duì)列(模擬便道)。(1) 車(chē)輛信息的表示車(chē)輛可看成是一個(gè)節(jié)點(diǎn),設(shè)計(jì)成一個(gè)結(jié)構(gòu)體,車(chē)輛信息包括:車(chē)牌號(hào)碼,車(chē)輛的進(jìn) 站時(shí)間和離開(kāi)停車(chē)場(chǎng)的時(shí)間,定義如下:typedef struct no dechar num10; /車(chē)牌號(hào)碼Time reach; / 到站時(shí)間Time leave; / 離開(kāi)時(shí)間CarNode;(2) 時(shí)間、棧和隊(duì)列的定義時(shí)間是由小時(shí)和分鐘表示的,有兩

12、部分?jǐn)?shù)據(jù),設(shè)計(jì)兩個(gè)變量分別存儲(chǔ)小時(shí)和分鐘, 定義如下:typedef struct timeint hour;int min;Time;停車(chē)場(chǎng)內(nèi)用棧表示:typedef struct NODECarNode *stackMAX+1; /棧用順序表示int top;SeqStackCar;SeqStackCar En ter,Temp; In itStack(&Temp)在車(chē)輛離開(kāi)時(shí),應(yīng)用temp臨時(shí)棧把將要離開(kāi)的車(chē)輛后續(xù)車(chē)輛壓入,等車(chē)輛離開(kāi)后壓回原棧stack。便道上的車(chē)輛表示:typedef struct car CarNode *data; /便道上的車(chē)用鏈表表示struct ca

13、r *n ext;QueueNode;typedef struct NodeQueueNode *head;設(shè)置頭指針、尾指針QueueNode *rear;Lin kQueueCar;5.2算法的設(shè)計(jì)思想及流程圖5.2.1主要函數(shù)的功能說(shuō)明(1) void InitStack(SeqStackCar *);/ 車(chē)輛節(jié)點(diǎn)進(jìn)棧。即當(dāng)棧未滿時(shí),就把到達(dá) 的車(chē)輛進(jìn)棧。(2) int InitQueue(LinkQueueCar *);/ 車(chē)輛節(jié)點(diǎn)進(jìn)隊(duì)列。即當(dāng)棧已滿時(shí),車(chē)輛就 進(jìn)入便道上的隊(duì)列中(3) int Arrival(SeqStackCar*,LinkQueueCar *);/ 車(chē)輛到達(dá)登記。

14、即車(chē)輛到達(dá) 時(shí),先登記車(chē)輛車(chē)牌號(hào)碼。然后再判斷停車(chē)場(chǎng)有沒(méi)有停滿,沒(méi)停滿就進(jìn)棧,停滿了就停在便道上,即進(jìn)隊(duì)列。(4) void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);/車(chē)輛離開(kāi)處 理。即通過(guò)輸入離開(kāi)車(chē)輛的位置處理,然后調(diào)用 PRINT(CarNode *p,i nt room);函數(shù)進(jìn) 行收費(fèi)。然后再判斷便道上有沒(méi)有車(chē),如果有,就把便道上的車(chē)進(jìn)停車(chē)場(chǎng)內(nèi)。(5) void List(SeqStackCar,L in kQueueCar);/顯示車(chē)場(chǎng)內(nèi)和便道上的車(chē)輛情況。 利用switch();函數(shù)選擇顯示車(chē)場(chǎng)內(nèi)或是便道上的車(chē)輛情況,包括

15、對(duì)下面兩個(gè)子函數(shù)的調(diào)用:void List1(SeqStackCar *S);void List2(LinkQueueCar *W);分別用來(lái)顯示車(chē)場(chǎng)和便道上的車(chē)輛情況(6) void PRINT(CarNode*p,int room);/車(chē)輛離開(kāi)時(shí)的收費(fèi)。即這個(gè)函數(shù)由車(chē)輛 離開(kāi)的函數(shù)調(diào)用,以分鐘計(jì)時(shí)算費(fèi),但只能計(jì)算當(dāng)天之內(nèi)的費(fèi)用,如果第二天的話會(huì)導(dǎo) 致計(jì)費(fèi)為負(fù)或減少。即只能當(dāng)天停,當(dāng)天開(kāi)走。5.2.2停車(chē)場(chǎng)管理系統(tǒng)流程圖經(jīng)過(guò)對(duì)車(chē)輛的進(jìn)出分析以及對(duì)該系統(tǒng)的詳細(xì)設(shè)計(jì),繪制停車(chē)場(chǎng)管理系統(tǒng)流程圖圖1停車(chē)場(chǎng)管理系統(tǒng)流程圖523主要模塊算法描述本程序最主要的算法就是車(chē)輛到達(dá)登記的和車(chē)輛離開(kāi)時(shí)的登記 車(chē)輛

16、到達(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->top<MAX)來(lái)判斷該車(chē)是進(jìn)車(chē) 場(chǎng)內(nèi)還是進(jìn)便道上,如果是進(jìn)車(chē)場(chǎng)內(nèi)就把top加1,顯示 在車(chē)場(chǎng)內(nèi)的位置,還要輸入進(jìn)車(chē)場(chǎng)的時(shí)間,然后把該節(jié)點(diǎn)進(jìn)棧。如果是else就顯示該車(chē)要停在便道上,并進(jìn)行進(jìn)隊(duì)列的操作。(2) 車(chē)輛離開(kāi):void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueue

17、Car *W)/定義一個(gè)整型變量room記錄要離開(kāi)車(chē)輛的位置,定義兩個(gè)棧指針和一個(gè)隊(duì)列指 針,用個(gè)if(Enter->top>0)確保棧不空,然后用個(gè) while確保輸入的車(chē)輛離開(kāi)位置的合法性。如果不合法,顯示輸入有誤,要重新輸入。通過(guò)while(E nter->top>room)判斷離開(kāi)車(chē)輛的位置,如果是中間位置,就要再用一個(gè)臨時(shí)棧放置前面臨時(shí)開(kāi)出來(lái)的車(chē), 等要開(kāi)出的車(chē)開(kāi)出后,再把臨時(shí)棧內(nèi)的車(chē)開(kāi)進(jìn)停車(chē)場(chǎng)內(nèi),并調(diào)用PRINT(p,room);這個(gè)函 數(shù)計(jì)算顯示費(fèi)用。然后還要用if(W->head!=W->rear)&&En ter->t

18、op<MAX)語(yǔ)句判斷便道上有沒(méi)有車(chē),如果有車(chē)就要顯示進(jìn)停車(chē)場(chǎng)的車(chē)的車(chē)牌號(hào),并登記進(jìn)入時(shí)間。并要進(jìn)行 相應(yīng)的出隊(duì)列和進(jìn)棧操作。6測(cè)試分析6.1測(cè)試用例說(shuō)明:測(cè)試用例要合理并且足夠,既要有正確用例,也要有錯(cuò)誤用例,同時(shí)檢驗(yàn)程 序的正確性和強(qiáng)壯性。6.1.1第一組測(cè)試用例(1) 測(cè)試輸入:停車(chē)場(chǎng)的車(chē)輛離開(kāi),如表 1所示:表1:車(chē)輛離開(kāi)測(cè)試服務(wù)選擇車(chē)牌號(hào)/車(chē)位到達(dá)/離開(kāi)時(shí)間1京 A121212:121津 S121212:131魯 D121212:142114:122125: 65 (錯(cuò)誤)(2) 測(cè)試目的:測(cè)試離開(kāi)方法時(shí)間格式控制以及費(fèi)用計(jì)算是否正確。(3) 正確輸出:第一次離開(kāi)的是京 A12

19、12,應(yīng)交費(fèi)2.4元。第二次時(shí),當(dāng)在輸入65 時(shí),應(yīng)該提示輸入錯(cuò)誤,重輸。(4) 實(shí)際輸出:說(shuō)明臉旻費(fèi)用藥歡迎使用停車(chē)場(chǎng)系統(tǒng)六* 餉入時(shí)間不要輸入非數(shù)字請(qǐng)輸入車(chē)在車(chē)場(chǎng)的位置/I3/請(qǐng)輸入車(chē)輛離開(kāi)的時(shí)間= 小時(shí):分申14:12離開(kāi)車(chē)輛的車(chē)牌號(hào)為:京圖2測(cè)試離開(kāi)方式時(shí)間格式及費(fèi)用計(jì)算圖word范文歡迎使用停車(chē)場(chǎng)系統(tǒng)翳蠶翩加要輸W說(shuō)明請(qǐng)選請(qǐng)輸入車(chē)在車(chē)場(chǎng)的位置理一"1鬆黔曙爵聶舉題雷霍$間抑at 0-23: 址圖3測(cè)試車(chē)輛離開(kāi)錯(cuò)誤圖(5) 錯(cuò)誤原因:第一個(gè)正確,第二個(gè)錯(cuò)誤,原因是沒(méi)有對(duì)時(shí)間格式控制(6) 當(dāng)前狀態(tài):已改正6.1.2第二組測(cè)試用例(1) 測(cè)試輸入:連續(xù)5輛車(chē)到達(dá),如表2所示:表

20、2:連續(xù)5輛車(chē)到達(dá)測(cè)試服務(wù)選擇車(chē)牌號(hào)/車(chē)位到達(dá)時(shí)間1京 A121212:121津 S121212:131魯 D121212:141豫 F121212:151滬 G121212:162114:12(2) 測(cè)試目的:測(cè)試到達(dá)方法與列表顯示方法能否正確完成。正確輸出:先到達(dá)的三輛車(chē)先進(jìn)入停車(chē)場(chǎng),最后到達(dá)的兩輛在便道等候。(4) 實(shí)際輸出:表4車(chē)輛到達(dá)方式測(cè)試=*歡迎使用停車(chē)場(chǎng)系境*X說(shuō)明諸您註証確夠入時(shí)間不要輸入非數(shù)字?請(qǐng)選擇務(wù)需貓畛宀請(qǐng)輸入車(chē)牌號(hào)(例:琢班豫F1212您好;、停車(chē)場(chǎng)生位比滿-請(qǐng)?jiān)撥?chē)在便道上等待侑空余車(chē)位時(shí)才首滋入停車(chē)場(chǎng)I加圖5車(chē)輛進(jìn)入提示圖(5) 錯(cuò)誤原因:沒(méi)有錯(cuò)誤。當(dāng)前狀態(tài):通過(guò)

21、。6.1.3第三組測(cè)試用例(1)測(cè)試輸入:接上一步輸入離開(kāi)信息,如表3所示:表3 :接上一步離開(kāi)信息測(cè)試服務(wù)選擇離開(kāi)車(chē)位離開(kāi)時(shí)間便道車(chē)進(jìn)入時(shí)間2114:1214:13(2) 測(cè)試目的:測(cè)試離開(kāi)方法功能是否成功以及便道進(jìn)入車(chē)場(chǎng)是否正確。(3) 正確輸出:輸出1號(hào)車(chē)位的車(chē)輛離開(kāi)信息清單,便道 1號(hào)車(chē)進(jìn)入停車(chē)場(chǎng)(4) 實(shí)際輸出:*=“" *女林迎便用停車(chē)場(chǎng)系統(tǒng)衣舍:1-車(chē)朋達(dá)4(記2-車(chē)輛高開(kāi)豊記i! ! 3-車(chē)輛列表顯示=退出系統(tǒng)i凸:位3第閭 場(chǎng)的 車(chē)場(chǎng) 戻亠十 入停121 2進(jìn)入2 4!:元號(hào)車(chē) * * 4- 2 3? hjhj - 1 £z 2 2 2 間闔:F121 爵

22、醫(yī)Fl豈 達(dá)開(kāi)用的稼4: 到離5上人 車(chē)圭X道帝 該該應(yīng)1S請(qǐng);BMWTWW1就迎使用停車(chē)場(chǎng)系統(tǒng)*益谿翳蠶騷勲嘅嚴(yán)叭躋"謂輸入車(chē)在車(chē)場(chǎng)的位置m: 1 超fi入車(chē)輛離開(kāi)的時(shí)闔江小時(shí)吩鐘高開(kāi)車(chē)輛的車(chē)牌號(hào)為京骯2許圖6測(cè)試離開(kāi)方法功能是否成功圖(5) 錯(cuò)誤原因:沒(méi)有錯(cuò)誤(6) 當(dāng)前狀態(tài):通過(guò)6.2測(cè)試結(jié)果分析經(jīng)過(guò)我們小組一天的調(diào)試,我們終于把各模塊整合起來(lái)了。在這過(guò)程中,我們遇到 了很多問(wèn)題,像數(shù)據(jù)不匹配、括號(hào)不配對(duì)、賦值重復(fù)等。因?yàn)镃語(yǔ)言的語(yǔ)法限制不太嚴(yán) 格,對(duì)變量的類型約束不嚴(yán)格,對(duì)數(shù)組下標(biāo)越界不做檢查等原因,所以,我們的修改工 作難度加大。但經(jīng)過(guò)我們這小組共同的努力。此停車(chē)管理系統(tǒng)可

23、以基本實(shí)現(xiàn)一個(gè)小的停 車(chē)場(chǎng)的管理,其“到達(dá)”與“離開(kāi)”方法都相對(duì)比較完整,費(fèi)用結(jié)算清單直觀。在輸入 數(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)閉之后數(shù)據(jù)丟失?,F(xiàn)受限于各種條件,又因?yàn)橐笾胁⑽刺峒?,所以本程序暫時(shí) 沒(méi)有加入保存功能。7使用說(shuō)明(1)運(yùn)行程序,首先出現(xiàn)主界面。主界面包括四個(gè)選項(xiàng):選項(xiàng)1:車(chē)輛到達(dá)登記,選擇該項(xiàng)可進(jìn)行車(chē)輛到達(dá)停車(chē)場(chǎng)情況登記;選項(xiàng) 2:車(chē)輛離開(kāi)登記,選擇該項(xiàng)可進(jìn)行車(chē) 輛離開(kāi)停車(chē)場(chǎng)情況登記;選項(xiàng) 3:車(chē)輛列表顯示,選擇該項(xiàng)可查看車(chē)輛列表顯示的所有 信息

24、,包括停車(chē)場(chǎng)列表和便道列表的全部信息;選項(xiàng) 4:退出系統(tǒng),選擇該項(xiàng)將退出程 序。=-*歡迎使用停車(chē)場(chǎng)系統(tǒng)-車(chē)輛到達(dá)登記:<2.車(chē)納離開(kāi)登記®3.車(chē)輛列表顯示!#4.退出系統(tǒng)*迎使用停車(chē)場(chǎng)系統(tǒng)*»綁磁辭翩滯神入槪字2圖7程序初始界面圖(2)車(chē)輛列表顯示界面包括3個(gè)選項(xiàng):選項(xiàng)1:停車(chē)場(chǎng)列表,選擇該項(xiàng)可以查看停 車(chē)場(chǎng)列表的所有車(chē)輛的全部信息;選項(xiàng) 2:便道列表,選擇該項(xiàng)可以查看便道列表顯示 的全部信息;選項(xiàng)3:返回主菜單,可返回主界面。£*查看車(chē)輛列表顯示* 丄.停車(chē)場(chǎng)列表 歡迎使用停車(chē)場(chǎng)系統(tǒng)*請(qǐng)選擇您所需要的服務(wù)“® ; ? 便道列表左盤(pán)去缶茁.遲叵三

25、菜牟 吹出去盤(pán)= =*歡迎使用停車(chē)場(chǎng)系統(tǒng) 說(shuō)明;謬爆注意正確夠人時(shí)間不要輸入非數(shù)字?諳選擇愈嶄需要的= = 歐迎使用停車(chē)場(chǎng)系統(tǒng);,="圖8車(chē)輛列表顯示界面圖8總結(jié)總體來(lái)說(shuō),這次的課程設(shè)計(jì)比去年的c語(yǔ)言的課程設(shè)計(jì)稍難。我這次的課程設(shè)計(jì)題 目:停車(chē)場(chǎng)問(wèn)題。相比其他課題來(lái)說(shuō),這個(gè)題目還是比較簡(jiǎn)單的,主要是運(yùn)用了數(shù)據(jù)結(jié) 構(gòu)中棧和隊(duì)列的知識(shí)和操作。程序能夠?qū)崿F(xiàn)基本的車(chē)輛到達(dá)、離開(kāi)、收費(fèi)、遍歷顯示等 主要功能。但我覺(jué)得這個(gè)程序還有很多小的地方是可以完善的,比如:在計(jì)算收費(fèi)時(shí)如果離開(kāi)時(shí)間是到了第二天,這樣就會(huì)導(dǎo)致收費(fèi)是負(fù)的或減少很多。也就是說(shuō),該程序限制于只 能規(guī)定當(dāng)天停,當(dāng)天開(kāi)走。至于加算天數(shù)的

26、功能我改了幾次改不好,又鑒于程序要求中 也沒(méi)有提及并且時(shí)間緊張,所以也就沒(méi)再去研究實(shí)現(xiàn)。只要能實(shí)現(xiàn)主要的功能就好了。當(dāng)然,這次的課程設(shè)計(jì)、編程實(shí)踐還是收獲頗豐的。通過(guò)實(shí)習(xí)我的收獲如下:(1) 我知道了怎樣去簡(jiǎn)化程序,減少他的時(shí)間復(fù)雜度和空間復(fù)雜度。 還知道了怎樣去 完善程序,使其更具健壯性。(2) 鞏固和加深了對(duì)數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí)的理解,提高綜合運(yùn)用本課程所學(xué)知識(shí)的能 力。(3) 培養(yǎng)了我選用參考書(shū),查閱手冊(cè)及文獻(xiàn)資料的能力。培養(yǎng)獨(dú)立思考、深入研究、分析問(wèn)題、解決問(wèn)題的能力。(4) 通過(guò)實(shí)際編譯系統(tǒng)的分析設(shè)計(jì)、編程調(diào)試,掌握應(yīng)用軟件的分析方法。(5) 通過(guò)課程設(shè)計(jì),培養(yǎng)了我嚴(yán)肅認(rèn)真的工作作風(fēng),逐

27、步建立正確的生產(chǎn)觀念、經(jīng)濟(jì) 觀念和全局觀念。根據(jù)我在實(shí)習(xí)中遇到的問(wèn)題,我將在以后的學(xué)習(xí)過(guò)程中注意以下幾點(diǎn):(1) 認(rèn)真上好專業(yè)實(shí)驗(yàn)課,多在實(shí)踐中鍛煉自己。更讓我懂得實(shí)踐是檢驗(yàn)和掌握真理 的最好辦法。(2) 寫(xiě)程序的過(guò)程中要考慮周到、嚴(yán)密。需求分析需要反復(fù)思考修正。(3) 在做課程設(shè)計(jì)的時(shí)候要有信心、有耐心,切勿浮躁。(4) 認(rèn)真學(xué)習(xí)課本知識(shí),掌握課本中的知識(shí)點(diǎn),并在此基礎(chǔ)上學(xué)會(huì)靈活運(yùn)用。(5) 在課余時(shí)間里多寫(xiě)程序,熟練掌握在調(diào)試程序的過(guò)程中所遇到的常見(jiàn)錯(cuò)誤,以便 能節(jié)省調(diào)試程序的時(shí)間??傊?,本次課程設(shè)計(jì)不僅加深了我們對(duì)棧和隊(duì)列等數(shù)據(jù)結(jié)構(gòu)的理解和掌握,同時(shí)一定程度上提高了我們程序設(shè)計(jì)和閱讀程序

28、的能力。本次課程設(shè)計(jì)提高了我們的專業(yè)知識(shí), 使自己所學(xué)的內(nèi)容運(yùn)用到實(shí)際中來(lái),也增強(qiáng)了實(shí)際操作能力,為以后的工作學(xué)習(xí)提供了 一個(gè)良好的鋪墊。參考文獻(xiàn)1 嚴(yán)蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu)M.北京:清華大學(xué)出版社,2004.2 李春葆數(shù)據(jù)結(jié)構(gòu)解析M.北京:清華大學(xué)出版社,2001.3 譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)M.北京:清華大學(xué)出版社,2005.4 朱戰(zhàn)立,張選平.數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)指導(dǎo)與典型題解M.西安:西安交通大學(xué)出版社,2002. 張玲,席德春,劉曉杰.C語(yǔ)言上機(jī)實(shí)踐指導(dǎo)教程M.北京:機(jī)械工業(yè)出版社,2004. 羅文劼,王苗,石強(qiáng).數(shù)據(jù)結(jié)構(gòu)習(xí)題解答與實(shí)驗(yàn)指導(dǎo)M.北京:中國(guó)鐵道出版社,2004.7殷人昆,陶永雷,謝

29、若陽(yáng)等.數(shù)據(jù)結(jié)構(gòu)M.北京:清華大學(xué)出版社,2005.附錄/系統(tǒng)說(shuō)明:本系統(tǒng)適應(yīng)于小型停車(chē)場(chǎng),且停車(chē)時(shí)間在一天之內(nèi)的短期停放停車(chē)場(chǎng)。/在此系統(tǒng)中,車(chē)庫(kù)容量設(shè)置為3,便于測(cè)試。在實(shí)際使用中可以對(duì)容量大小按實(shí)際情況設(shè)置。#i nclude<stdio.h>#in clude<stdlib.h>#i ncludevstri ng.h>#define MAX 3/停車(chē)場(chǎng)最大容量為3輛,便于觀察#defi ne price 0.02/定義時(shí)間結(jié)構(gòu)體typedef struct timeint hour;int min;Time;/定義車(chē)輛信息結(jié)構(gòu)體typedef struct

30、 nodechar num10;Time reach;Time leave;CarNode;typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;模擬停車(chē)場(chǎng)typedef struct carCarNode *data;struct car *n ext;QueueNode;typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar;/ 模擬便道/方法聲明void In itStack(SeqStackCar *);/初始化棧int Ini tQueue(L in

31、 kQueueCar *);/初始化便道int Arrival(SeqStackCar *,Li nkQueueCar *); /車(chē)輛到達(dá)void Leave(SeqStackCar *,SeqStackCar *,Li nkQueueCar *);/車(chē)輛離開(kāi)void PRINT(CarNode *p,i nt room);/ 車(chē)輛收費(fèi)void List1(SeqStackCar *S);/顯示車(chē)場(chǎng)里的車(chē)輛情況void List2(L in kQueueCar *W);/顯示便道上的車(chē)輛情況void List(SeqStackCar,Li nkQueueCar);/顯示信息/void save

32、car(CarNode *);/ 保存車(chē)輛信息/自定義函數(shù)/*void savecar(CarNode *p1)/保存車(chē)輛信息FILE *fp1;if(fp 1=fope n("car1.txt","w")=NULL)prin tf("nt不能保存車(chē)輛信息 n");return;while(pl)fwrite(p1,sizeof(struct no de),1,fp1); p1=p1- >n ext;*/棧的初始化void In itStack(SeqStackCar *s)int i;s->top=0;for(i=0;i

33、v=MAX;i+)s->stacks->top=NULL;/隊(duì)列的初始化int Ini tQueue(L in kQueueCar *Q)Q->head=(QueueNode *)malloc(sizeof(QueueNode); if(Q->head!=NULL)Q->head-> next=NULL;Q->rear=Q->head;return(1);elsereturn(-1);/車(chē)輛收費(fèi)void PRINT(CarNode *p,i nt room)int A1,A2,B1,B2;printf("n請(qǐng)輸入車(chē)輛離開(kāi)的時(shí)間:(小時(shí):

34、分鐘門(mén);scan f("%d:%d",&(p->leave.hour),&(p->leave.mi n);while(p->leave.hour<0|p->leave.hour>23)printf("您的輸入有誤!");printf("請(qǐng)重新輸入離開(kāi)時(shí)間的時(shí)'(0-23):");scan f("%d",&(p->leave.hour);if(p->leave. minv 0|p->leave. min> 59)printf(

35、"您的輸入有誤!");printf("請(qǐng)重新輸入離開(kāi)時(shí)間的分'(0-59):");sca nf("%d",&(p->leave.mi n);printf("n離開(kāi)車(chē)輛的車(chē)牌號(hào)為:");puts(p->nu m);printf("n該車(chē)到達(dá)時(shí)間為:%d:%d",p->reach.hour,p->reach.min);printf("n該車(chē)離開(kāi)時(shí)間為:%d:%d",p->leave.hour,p->leave.min);A1=p

36、->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); free(p);/車(chē)輛的到達(dá)登記int Arrival(SeqStackCar *En ter,Li nkQueueCar *W)/char num10;int a;CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();清空緩存輸入的

37、作用printf("n請(qǐng)輸入車(chē)牌號(hào)(例:豫B1234):");gets(p->nu m);/*a=E nter->top;loop:sca nf("%s",&nu m);if(a=0)strcpy(p->num,nu m);a+;while(a)if(strcmp( nu m,E nter->stacka->num )=0)prin tf("您輸入的車(chē)牌號(hào)重復(fù),請(qǐng)重新輸入!");goto loop;*/if(En ter->top<MAX)車(chē)輛未滿,車(chē)進(jìn)車(chē)場(chǎng)En ter->top

38、+;printf("n車(chē)輛在車(chē)場(chǎng)第 d位置.",Enter->top);printf("n車(chē)輛到達(dá)時(shí)間:");sca nf("%d:%d",&( p->reach.hour),&( p->reach. min);while(p->reach.hour<0|p->reach.hour>23) /控制時(shí)間格式正確printf("您的輸入有誤!");printf("請(qǐng)重新輸入到達(dá)時(shí)間的時(shí)'(0-23):");sea nf("%

39、d",&(p->reach.hour);while(p->reach.mi n<0|p->reach.mi n>59) /控制分鐘輸入正確printf("您的輸入有誤!");printf("請(qǐng)重新輸入到達(dá)時(shí)間的分'(0-59):");sca nf("%d",&(p->reach.mi n);En ter->stackE nter->top=p;printf("n恭喜您登記成功!");savecar(?);prin tf("n

40、");return(1);else/車(chē)場(chǎng)已滿,車(chē)進(jìn)便道printf("n您好,停車(chē)場(chǎng)車(chē)位已滿,請(qǐng)?jiān)撥?chē)在便道上等待!有空余車(chē)位時(shí)才能進(jìn)入停車(chē)場(chǎng)!/n");t=(QueueNode *)malloc(sizeof(QueueNode);t->data=p;t->n ext=NULL;W->rear- >n ext=t;W->rear=t;return(1);/車(chē)輛的離開(kāi)void Leave(SeqStackCar *En ter,SeqStackCar *Temp,Li nkQueueCar *W)int room;CarNode *p,

41、*t;QueueNode *q;if(E nter->top>0)判斷停車(chē)場(chǎng)是否為空while(1) 輸入離開(kāi)車(chē)輛的信息printf("n請(qǐng)輸入車(chē)在車(chē)場(chǎng)的位置 /1-%d/ : ",Enter->top);sea nf("%d",&room);if(room>=1 &&roo m<=E nter->top) break;elseprintf("n您的輸入有誤,請(qǐng)重新輸入:");while(E nter->top>room)把要離開(kāi)車(chē)輛前面的車(chē)開(kāi)出來(lái),進(jìn)臨時(shí)棧。Te

42、mp->top+;臨時(shí)通道的棧頂指針Temp->stackTemp->top=E nter->stackE nter->top;En ter->stackE nter->top=NULL;En ter->top-;p=E nter->stackE nter->top;把要?jiǎng)h除的車(chē)輛節(jié)點(diǎn)賦給 p。En ter->stackE nter->top=NULL;En ter->top-;while(Temp->top>=1) 判斷臨時(shí)通道上是否有車(chē)。En ter->top+;En ter->stack

43、E nter->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->top<MAX)/停車(chē)場(chǎng)未滿,如果便道上有車(chē),則再開(kāi)進(jìn)停車(chē)場(chǎng)q=W->head->n ext;t=q->data;En ter->top+;prin tf("n 便道上的s號(hào)車(chē)進(jìn)入停車(chē)場(chǎng)內(nèi)第 %d位置.",t- >nu m,E

44、nter->top);printf("n請(qǐng)輸入$號(hào)車(chē)進(jìn)入停車(chē)場(chǎng)的時(shí)間:",t->num);sca nf("%d:%d",&(t->reach.hour),&(t->reach.mi n);while(t->reach.hour<0|t->reach.hour>23) /控制時(shí)間格式正確printf("您的輸入有誤!");printf("請(qǐng)重新輸入到達(dá)時(shí)間的時(shí)'(0-23):");sca nf("%d",&(t->

45、;reach.hour);while(t->reach.mi n<0|t->reach.mi n>59) /控制分鐘輸入正確printf("您的輸入有誤!");printf("請(qǐng)重新輸入到達(dá)時(shí)間的分'(0-59):");sca nf("%d",&(t->reach.mi n);W->head->n ext=q->n ext;if(q=W->rear)W->rear=W->head;En ter->stackE nter->top=t;prin

46、tf("n恭喜您登記成功!");free(q); elseprintf("n您好,便道上沒(méi)有車(chē)!n");prin tf("n");elseprintf("n 您好,停車(chē)場(chǎng)內(nèi)沒(méi)有車(chē)!");prin tf("n");/顯示停車(chē)場(chǎng)里的車(chē)輛情況void List1(SeqStackCar *S)int i;prin tf("t您請(qǐng)求的查看停車(chē)場(chǎng)內(nèi)停車(chē)情況為:");if(S->top>0)判斷停車(chē)場(chǎng)內(nèi)是否有車(chē)for(i=1;i<=S->top;i+)printf

47、("nt車(chē)位位置:%d ",i);%d:%dprin tf("nt到 達(dá) 時(shí) 間 :",S->stacki->reach.hour,S->stacki->reach.mi n);printf("nt車(chē)牌號(hào):%sn",S->stacki->num);elseprintf("n 您好,停車(chē)場(chǎng)內(nèi)沒(méi)有車(chē)!無(wú)法進(jìn)行車(chē)輛離開(kāi)登記操作!n");prin tf("n");/顯示便道上的車(chē)輛情況void List2(Li nkQueueCar *W)QueueNode *p;int i;printf(”您所請(qǐng)求的查看便道上停車(chē)的情況為:");p=W->head->n ext;if(W->head!=W->rear)判斷便道上是否有車(chē)printf("n等待車(chē)輛的車(chē)牌號(hào)碼為:");for(i=1;p!=NULL;i+)prin tf("n第 %d 車(chē)輛.",i);puts(p->data->nu m);p=p->n ext ;elseprintf("n您好,便道上沒(méi)有車(chē)!");prin tf(&quo

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論