![停車場管理系統(tǒng)課程設(shè)計報告最終版_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/e6639fe0-5dd3-41e0-a028-c96752abdd04/e6639fe0-5dd3-41e0-a028-c96752abdd041.gif)
![停車場管理系統(tǒng)課程設(shè)計報告最終版_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/e6639fe0-5dd3-41e0-a028-c96752abdd04/e6639fe0-5dd3-41e0-a028-c96752abdd042.gif)
![停車場管理系統(tǒng)課程設(shè)計報告最終版_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/e6639fe0-5dd3-41e0-a028-c96752abdd04/e6639fe0-5dd3-41e0-a028-c96752abdd043.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目 錄1實習(xí)目的12問題描述13.1設(shè)計基本要求13.2停車場管理系統(tǒng)的主要功能 24概要設(shè)計24.1設(shè)計思想24.2函數(shù)及功能要求35詳細(xì)設(shè)計45.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計45.2算法的設(shè)計思想及流程圖55.2.1主要函數(shù)的功能說明55.2.2停車場管理系統(tǒng)流程圖65.2.3主要模塊算法描述76測試分析86.1測試用例86.1.1第一組測試用例 86.1.2第二組測試用例96.1.3第三組測試用例 116.2測試結(jié)果分析117使用說明128總結(jié)13參考文獻(xiàn)15附錄16word范文停車場管理系統(tǒng)1實習(xí)目的通過本次課程設(shè)計,了解并初步掌握設(shè)計、實現(xiàn)系統(tǒng)的完整過程,包括系統(tǒng)分析、 編碼設(shè)計、以及調(diào)試分析,
2、熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計、實現(xiàn)以及操作方法,為進(jìn) 一步的應(yīng)用開發(fā)打好基礎(chǔ)。2問題描述停車場是一條可以停放n輛車的狹窄通道,且只有一個大門。汽車停放安到達(dá)時間 的先后依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停在最北端)若停車場 已經(jīng)停滿n輛車,后來的汽車在便道上等候,一旦有車開走,排在便道上的第一輛車可 以開入;當(dāng)停車場的某輛車要離開時,停在他后面的車要先后退為他讓路,等它開出后 其他車在按照原次序開入車場,每兩停在車場的車要安時間長短繳費。3需求分析停車場是一條可以停放n輛車的狹窄通道,且只有一個大門。汽車停放按到達(dá)時間 的先后排列。若停車場已經(jīng)停滿n輛車,后來的汽車在便道上等候
3、。一旦有車開走,排 在便道上的第一輛車可以開入;當(dāng)停車場的某輛車要離開時,停在他后面的車要先后退 為他讓路。等它開出后,其他車再按照原次序開入車場,每輛停在車場的車要按時間長 短繳費。3.1設(shè)計基本要求(1) 以棧模擬停車場,以隊列模擬車場外的便道,按照從終端輸入的數(shù)據(jù)序列進(jìn)行 模擬管理。每一組數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達(dá)”或“離去”信息、汽車牌照號碼、 以及到達(dá)或離去的時刻。對每一組數(shù)據(jù)進(jìn)行操作后的信息為:若是車輛到達(dá),則輸出汽 車在停車場的內(nèi)或便道上的位置:若是車輛離去則輸出汽車在停車場內(nèi)的停留時間和應(yīng) 繳納的費用(在便道上的停留時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)(2)
4、友好性:界面要友好,輸入有提示,盡量展示人性化。(3) 可讀性:源程序代碼清晰、有層次,必要時給出注釋。(4) 健壯性:用戶輸入非法數(shù)據(jù)時,系統(tǒng)要及時給出警告信息。(5) 測試數(shù)據(jù):要求使用全部合法數(shù)據(jù)、整體非法數(shù)據(jù)、局部非法數(shù)據(jù)進(jìn)行程序測 試,以保證程序的穩(wěn)定。測試數(shù)據(jù)及測試結(jié)果請在上交的資料中寫明。3.2停車場管理系統(tǒng)的主要功能(1) 根據(jù)車輛到達(dá)停車場到車輛離開停車場時所停留的時間進(jìn)行計時收費。(2) 該程序設(shè)計能夠通過車牌號查到該車輛在停車場或便道中的位置。(3) 當(dāng)有車輛從停車場離開時,等待的車輛按順序進(jìn)入停車場停放。實現(xiàn)停車場的 調(diào)度功能。該程序設(shè)計可以完整的模擬停車場的管理過程。
5、4概要設(shè)計4.1數(shù)據(jù)庫設(shè)計(1) 棧的抽象數(shù)據(jù)類型定義AST Stack數(shù)據(jù)對象: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端為棧底?;静僮鳎篒n itStack(&S)操作結(jié)果:構(gòu)造一個空棧SoDestroyStack(&S)初始條件:棧S已存在。操作結(jié)果:棧S被銷毀。ClearStack(&S)初始條件:棧S已存在。操作結(jié)果:將棧S清為空棧。tackEmpty(S)初始條件:棧S已存在。操作結(jié)果:若棧S為空棧,則返回TRUE否則FAL
6、SEStackLe ngth(s)初始條件:棧S已存在。操作結(jié)果:返回S的元素個數(shù),既棧的長度。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é)果:從棧底到棧頂依次對 S的每個數(shù)據(jù)元素調(diào)用函數(shù) visit()。一旦visit() 失 word范文敗,則操作失效。ADT Stack(
7、2) 隊列的抽象數(shù)據(jù)類型定義ADT Queue數(shù)據(jù)對象: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端為隊列頭,an為隊列尾?;静僮鳎篒ni tQueue(&Q)操作結(jié)果:構(gòu)造一個空隊列QDestroyQueue(&Q)初始條件:隊列Q已存在。操作結(jié)果:隊列Q被銷毀,不再存在。ClearQueue(&Q)初始條件:隊列Q已存在。操作結(jié)果:將Q清為空隊列。QueueEmpty(Q)初始條件:隊列Q已存在。操作結(jié)果:若Q為空隊列,則返回TRUE否則FALSEQ
8、ueueLe ngth(Q)初始條件:隊列Q已存在。操作結(jié)果:返回Q的元素個數(shù),即隊列的長度。GetHead(Q,&e)初始條件:Q為非空隊列。操作結(jié)果:用e返回的隊頭元素。En Queue(&Q,e)初始條件:隊列Q已存在。操作結(jié)果:插入元素e為Q的新的隊尾元素。DeQueue(&Q,&e)初始條件:Q為非空隊列。操作結(jié)果:刪除Q的隊頭元素,并用e返回其值。QueueTraverse(Q,visit()初始條件:Q已存在且非空。操作結(jié)果:從隊頭到隊尾,依次對Q的每個數(shù)據(jù)元素調(diào)用函數(shù) visit()。一旦visit()失敗,則操作失敗。ADT Queue4.2函
9、數(shù)及功能要求(1)此停車場管理系統(tǒng),主要分為以下若干模塊:首先定義用來模擬停車場的堆棧以及用來模擬通道的鏈隊列為全局變量,然后編寫 主函數(shù),在此主函數(shù)中實現(xiàn)對其它各個模塊的調(diào)用。在主函數(shù)中首先調(diào)用option()函數(shù), 出現(xiàn)歡迎用戶使用的主界面,然后提示用戶進(jìn)入此停車場管理系統(tǒng)后,再出現(xiàn)一個供用 戶選擇的界面,在用戶的選擇過程中,程序又分別調(diào)用車輛的到達(dá)、車輛的離開、停車 場內(nèi)停放車輛的信息以及退出程序這四個函數(shù)模塊。其中,在車輛的離開那個模塊函數(shù) 中又調(diào)用了打印離開車輛信息的函數(shù),在停車場內(nèi)停放車輛信息的那個模塊函數(shù)中,又 分別調(diào)用了顯示停車場上車輛信息的函數(shù)以及顯示便道上車輛信息的函數(shù)。最
10、后,從調(diào)用的這四個函數(shù)中回到主函數(shù)結(jié)束整個程序的運行。(2)在以上各個模塊中,出現(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è)計5.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計程序中使用了一個類,五個結(jié)構(gòu)體,兩個棧(模擬停車場,其中一個為臨時棧) 個隊列(模擬便道)。(1) 車輛信息的表示車輛可看成是一個節(jié)點,設(shè)計成一個結(jié)構(gòu)體,車輛信息包括:車牌號碼,車輛的進(jìn) 站時間和離開停車場的時間,定義如下:typedef struct no dechar num10; /車牌號碼Time reach; / 到站時間Time leave; / 離開時間CarNode;(2) 時間、棧和隊列的定義時間是由小時和分鐘表示的,有兩
12、部分?jǐn)?shù)據(jù),設(shè)計兩個變量分別存儲小時和分鐘, 定義如下:typedef struct timeint hour;int min;Time;停車場內(nèi)用棧表示:typedef struct NODECarNode *stackMAX+1; /棧用順序表示int top;SeqStackCar;SeqStackCar En ter,Temp; In itStack(&Temp)在車輛離開時,應(yīng)用temp臨時棧把將要離開的車輛后續(xù)車輛壓入,等車輛離開后壓回原棧stack。便道上的車輛表示:typedef struct car CarNode *data; /便道上的車用鏈表表示struct ca
13、r *n ext;QueueNode;typedef struct NodeQueueNode *head;設(shè)置頭指針、尾指針QueueNode *rear;Lin kQueueCar;5.2算法的設(shè)計思想及流程圖5.2.1主要函數(shù)的功能說明(1) void InitStack(SeqStackCar *);/ 車輛節(jié)點進(jìn)棧。即當(dāng)棧未滿時,就把到達(dá) 的車輛進(jìn)棧。(2) int InitQueue(LinkQueueCar *);/ 車輛節(jié)點進(jìn)隊列。即當(dāng)棧已滿時,車輛就 進(jìn)入便道上的隊列中(3) int Arrival(SeqStackCar*,LinkQueueCar *);/ 車輛到達(dá)登記。
14、即車輛到達(dá) 時,先登記車輛車牌號碼。然后再判斷停車場有沒有停滿,沒停滿就進(jìn)棧,停滿了就停在便道上,即進(jìn)隊列。(4) void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);/車輛離開處 理。即通過輸入離開車輛的位置處理,然后調(diào)用 PRINT(CarNode *p,i nt room);函數(shù)進(jìn) 行收費。然后再判斷便道上有沒有車,如果有,就把便道上的車進(jìn)停車場內(nèi)。(5) void List(SeqStackCar,L in kQueueCar);/顯示車場內(nèi)和便道上的車輛情況。 利用switch();函數(shù)選擇顯示車場內(nèi)或是便道上的車輛情況,包括
15、對下面兩個子函數(shù)的調(diào)用:void List1(SeqStackCar *S);void List2(LinkQueueCar *W);分別用來顯示車場和便道上的車輛情況(6) void PRINT(CarNode*p,int room);/車輛離開時的收費。即這個函數(shù)由車輛 離開的函數(shù)調(diào)用,以分鐘計時算費,但只能計算當(dāng)天之內(nèi)的費用,如果第二天的話會導(dǎo) 致計費為負(fù)或減少。即只能當(dāng)天停,當(dāng)天開走。5.2.2停車場管理系統(tǒng)流程圖經(jīng)過對車輛的進(jìn)出分析以及對該系統(tǒng)的詳細(xì)設(shè)計,繪制停車場管理系統(tǒng)流程圖圖1停車場管理系統(tǒng)流程圖523主要模塊算法描述本程序最主要的算法就是車輛到達(dá)登記的和車輛離開時的登記 車輛
16、到達(dá):int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/首先定義一個棧和隊列的結(jié)構(gòu)體指針為:*p , *t。然后申請一個車輛信息的內(nèi)存空間,并把它賦給棧指針。車輛到達(dá)時就輸入車牌號,并通過if(Enter->top<MAX)來判斷該車是進(jìn)車 場內(nèi)還是進(jìn)便道上,如果是進(jìn)車場內(nèi)就把top加1,顯示 在車場內(nèi)的位置,還要輸入進(jìn)車場的時間,然后把該節(jié)點進(jìn)棧。如果是else就顯示該車要停在便道上,并進(jìn)行進(jìn)隊列的操作。(2) 車輛離開:void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueue
17、Car *W)/定義一個整型變量room記錄要離開車輛的位置,定義兩個棧指針和一個隊列指 針,用個if(Enter->top>0)確保棧不空,然后用個 while確保輸入的車輛離開位置的合法性。如果不合法,顯示輸入有誤,要重新輸入。通過while(E nter->top>room)判斷離開車輛的位置,如果是中間位置,就要再用一個臨時棧放置前面臨時開出來的車, 等要開出的車開出后,再把臨時棧內(nèi)的車開進(jìn)停車場內(nèi),并調(diào)用PRINT(p,room);這個函 數(shù)計算顯示費用。然后還要用if(W->head!=W->rear)&&En ter->t
18、op<MAX)語句判斷便道上有沒有車,如果有車就要顯示進(jìn)停車場的車的車牌號,并登記進(jìn)入時間。并要進(jìn)行 相應(yīng)的出隊列和進(jìn)棧操作。6測試分析6.1測試用例說明:測試用例要合理并且足夠,既要有正確用例,也要有錯誤用例,同時檢驗程 序的正確性和強壯性。6.1.1第一組測試用例(1) 測試輸入:停車場的車輛離開,如表 1所示:表1:車輛離開測試服務(wù)選擇車牌號/車位到達(dá)/離開時間1京 A121212:121津 S121212:131魯 D121212:142114:122125: 65 (錯誤)(2) 測試目的:測試離開方法時間格式控制以及費用計算是否正確。(3) 正確輸出:第一次離開的是京 A12
19、12,應(yīng)交費2.4元。第二次時,當(dāng)在輸入65 時,應(yīng)該提示輸入錯誤,重輸。(4) 實際輸出:說明臉旻費用藥歡迎使用停車場系統(tǒng)六* 餉入時間不要輸入非數(shù)字請輸入車在車場的位置/I3/請輸入車輛離開的時間= 小時:分申14:12離開車輛的車牌號為:京圖2測試離開方式時間格式及費用計算圖word范文歡迎使用停車場系統(tǒng)翳蠶翩加要輸W說明請選請輸入車在車場的位置理一"1鬆黔曙爵聶舉題雷霍$間抑at 0-23: 址圖3測試車輛離開錯誤圖(5) 錯誤原因:第一個正確,第二個錯誤,原因是沒有對時間格式控制(6) 當(dāng)前狀態(tài):已改正6.1.2第二組測試用例(1) 測試輸入:連續(xù)5輛車到達(dá),如表2所示:表
20、2:連續(xù)5輛車到達(dá)測試服務(wù)選擇車牌號/車位到達(dá)時間1京 A121212:121津 S121212:131魯 D121212:141豫 F121212:151滬 G121212:162114:12(2) 測試目的:測試到達(dá)方法與列表顯示方法能否正確完成。正確輸出:先到達(dá)的三輛車先進(jìn)入停車場,最后到達(dá)的兩輛在便道等候。(4) 實際輸出:表4車輛到達(dá)方式測試=*歡迎使用停車場系境*X說明諸您註証確夠入時間不要輸入非數(shù)字?請選擇務(wù)需貓畛宀請輸入車牌號(例:琢班豫F1212您好;、停車場生位比滿-請該車在便道上等待侑空余車位時才首滋入停車場I加圖5車輛進(jìn)入提示圖(5) 錯誤原因:沒有錯誤。當(dāng)前狀態(tài):通過
21、。6.1.3第三組測試用例(1)測試輸入:接上一步輸入離開信息,如表3所示:表3 :接上一步離開信息測試服務(wù)選擇離開車位離開時間便道車進(jìn)入時間2114:1214:13(2) 測試目的:測試離開方法功能是否成功以及便道進(jìn)入車場是否正確。(3) 正確輸出:輸出1號車位的車輛離開信息清單,便道 1號車進(jìn)入停車場(4) 實際輸出:*=“" *女林迎便用停車場系統(tǒng)衣舍:1-車朋達(dá)4(記2-車輛高開豊記i! ! 3-車輛列表顯示=退出系統(tǒng)i凸:位3第閭 場的 車場 戻亠十 入停121 2進(jìn)入2 4!:元號車 * * 4- 2 3? hjhj - 1 £z 2 2 2 間闔:F121 爵
22、醫(yī)Fl豈 達(dá)開用的稼4: 到離5上人 車圭X道帝 該該應(yīng)1S請;BMWTWW1就迎使用停車場系統(tǒng)*益谿翳蠶騷勲嘅嚴(yán)叭躋"謂輸入車在車場的位置m: 1 超fi入車輛離開的時闔江小時吩鐘高開車輛的車牌號為京骯2許圖6測試離開方法功能是否成功圖(5) 錯誤原因:沒有錯誤(6) 當(dāng)前狀態(tài):通過6.2測試結(jié)果分析經(jīng)過我們小組一天的調(diào)試,我們終于把各模塊整合起來了。在這過程中,我們遇到 了很多問題,像數(shù)據(jù)不匹配、括號不配對、賦值重復(fù)等。因為C語言的語法限制不太嚴(yán) 格,對變量的類型約束不嚴(yán)格,對數(shù)組下標(biāo)越界不做檢查等原因,所以,我們的修改工 作難度加大。但經(jīng)過我們這小組共同的努力。此停車管理系統(tǒng)可
23、以基本實現(xiàn)一個小的停 車場的管理,其“到達(dá)”與“離開”方法都相對比較完整,費用結(jié)算清單直觀。在輸入 數(shù)據(jù)時,要按照嚴(yán)格的格式輸入,否則有可能出現(xiàn)死去或崩潰。若本系統(tǒng)能加上保存功 能就更好了,因為一個系統(tǒng)在使用過程中總會關(guān)機等,而此系統(tǒng)的缺點卻是沒有保存功 能,關(guān)閉之后數(shù)據(jù)丟失?,F(xiàn)受限于各種條件,又因為要求中并未提及,所以本程序暫時 沒有加入保存功能。7使用說明(1)運行程序,首先出現(xiàn)主界面。主界面包括四個選項:選項1:車輛到達(dá)登記,選擇該項可進(jìn)行車輛到達(dá)停車場情況登記;選項 2:車輛離開登記,選擇該項可進(jìn)行車 輛離開停車場情況登記;選項 3:車輛列表顯示,選擇該項可查看車輛列表顯示的所有 信息
24、,包括停車場列表和便道列表的全部信息;選項 4:退出系統(tǒng),選擇該項將退出程 序。=-*歡迎使用停車場系統(tǒng)-車輛到達(dá)登記:<2.車納離開登記®3.車輛列表顯示!#4.退出系統(tǒng)*迎使用停車場系統(tǒng)*»綁磁辭翩滯神入槪字2圖7程序初始界面圖(2)車輛列表顯示界面包括3個選項:選項1:停車場列表,選擇該項可以查看停 車場列表的所有車輛的全部信息;選項 2:便道列表,選擇該項可以查看便道列表顯示 的全部信息;選項3:返回主菜單,可返回主界面。£*查看車輛列表顯示* 丄.停車場列表 歡迎使用停車場系統(tǒng)*請選擇您所需要的服務(wù)“® ; ? 便道列表左盤去缶茁.遲叵三
25、菜牟 吹出去盤= =*歡迎使用停車場系統(tǒng) 說明;謬爆注意正確夠人時間不要輸入非數(shù)字?諳選擇愈嶄需要的= = 歐迎使用停車場系統(tǒng);,="圖8車輛列表顯示界面圖8總結(jié)總體來說,這次的課程設(shè)計比去年的c語言的課程設(shè)計稍難。我這次的課程設(shè)計題 目:停車場問題。相比其他課題來說,這個題目還是比較簡單的,主要是運用了數(shù)據(jù)結(jié) 構(gòu)中棧和隊列的知識和操作。程序能夠?qū)崿F(xiàn)基本的車輛到達(dá)、離開、收費、遍歷顯示等 主要功能。但我覺得這個程序還有很多小的地方是可以完善的,比如:在計算收費時如果離開時間是到了第二天,這樣就會導(dǎo)致收費是負(fù)的或減少很多。也就是說,該程序限制于只 能規(guī)定當(dāng)天停,當(dāng)天開走。至于加算天數(shù)的
26、功能我改了幾次改不好,又鑒于程序要求中 也沒有提及并且時間緊張,所以也就沒再去研究實現(xiàn)。只要能實現(xiàn)主要的功能就好了。當(dāng)然,這次的課程設(shè)計、編程實踐還是收獲頗豐的。通過實習(xí)我的收獲如下:(1) 我知道了怎樣去簡化程序,減少他的時間復(fù)雜度和空間復(fù)雜度。 還知道了怎樣去 完善程序,使其更具健壯性。(2) 鞏固和加深了對數(shù)據(jù)結(jié)構(gòu)相關(guān)知識的理解,提高綜合運用本課程所學(xué)知識的能 力。(3) 培養(yǎng)了我選用參考書,查閱手冊及文獻(xiàn)資料的能力。培養(yǎng)獨立思考、深入研究、分析問題、解決問題的能力。(4) 通過實際編譯系統(tǒng)的分析設(shè)計、編程調(diào)試,掌握應(yīng)用軟件的分析方法。(5) 通過課程設(shè)計,培養(yǎng)了我嚴(yán)肅認(rèn)真的工作作風(fēng),逐
27、步建立正確的生產(chǎn)觀念、經(jīng)濟(jì) 觀念和全局觀念。根據(jù)我在實習(xí)中遇到的問題,我將在以后的學(xué)習(xí)過程中注意以下幾點:(1) 認(rèn)真上好專業(yè)實驗課,多在實踐中鍛煉自己。更讓我懂得實踐是檢驗和掌握真理 的最好辦法。(2) 寫程序的過程中要考慮周到、嚴(yán)密。需求分析需要反復(fù)思考修正。(3) 在做課程設(shè)計的時候要有信心、有耐心,切勿浮躁。(4) 認(rèn)真學(xué)習(xí)課本知識,掌握課本中的知識點,并在此基礎(chǔ)上學(xué)會靈活運用。(5) 在課余時間里多寫程序,熟練掌握在調(diào)試程序的過程中所遇到的常見錯誤,以便 能節(jié)省調(diào)試程序的時間??傊?,本次課程設(shè)計不僅加深了我們對棧和隊列等數(shù)據(jù)結(jié)構(gòu)的理解和掌握,同時一定程度上提高了我們程序設(shè)計和閱讀程序
28、的能力。本次課程設(shè)計提高了我們的專業(yè)知識, 使自己所學(xué)的內(nèi)容運用到實際中來,也增強了實際操作能力,為以后的工作學(xué)習(xí)提供了 一個良好的鋪墊。參考文獻(xiàn)1 嚴(yán)蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu)M.北京:清華大學(xué)出版社,2004.2 李春葆數(shù)據(jù)結(jié)構(gòu)解析M.北京:清華大學(xué)出版社,2001.3 譚浩強.C語言程序設(shè)計M.北京:清華大學(xué)出版社,2005.4 朱戰(zhàn)立,張選平.數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)指導(dǎo)與典型題解M.西安:西安交通大學(xué)出版社,2002. 張玲,席德春,劉曉杰.C語言上機實踐指導(dǎo)教程M.北京:機械工業(yè)出版社,2004. 羅文劼,王苗,石強.數(shù)據(jù)結(jié)構(gòu)習(xí)題解答與實驗指導(dǎo)M.北京:中國鐵道出版社,2004.7殷人昆,陶永雷,謝
29、若陽等.數(shù)據(jù)結(jié)構(gòu)M.北京:清華大學(xué)出版社,2005.附錄/系統(tǒng)說明:本系統(tǒng)適應(yīng)于小型停車場,且停車時間在一天之內(nèi)的短期停放停車場。/在此系統(tǒng)中,車庫容量設(shè)置為3,便于測試。在實際使用中可以對容量大小按實際情況設(shè)置。#i nclude<stdio.h>#in clude<stdlib.h>#i ncludevstri ng.h>#define MAX 3/停車場最大容量為3輛,便于觀察#defi ne price 0.02/定義時間結(jié)構(gòu)體typedef struct timeint hour;int min;Time;/定義車輛信息結(jié)構(gòu)體typedef struct
30、 nodechar num10;Time reach;Time leave;CarNode;typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;模擬停車場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 *); /車輛到達(dá)void Leave(SeqStackCar *,SeqStackCar *,Li nkQueueCar *);/車輛離開void PRINT(CarNode *p,i nt room);/ 車輛收費void List1(SeqStackCar *S);/顯示車場里的車輛情況void List2(L in kQueueCar *W);/顯示便道上的車輛情況void List(SeqStackCar,Li nkQueueCar);/顯示信息/void save
32、car(CarNode *);/ 保存車輛信息/自定義函數(shù)/*void savecar(CarNode *p1)/保存車輛信息FILE *fp1;if(fp 1=fope n("car1.txt","w")=NULL)prin tf("nt不能保存車輛信息 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;/隊列的初始化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);/車輛收費void PRINT(CarNode *p,i nt room)int A1,A2,B1,B2;printf("n請輸入車輛離開的時間:(小時:
34、分鐘門;scan f("%d:%d",&(p->leave.hour),&(p->leave.mi n);while(p->leave.hour<0|p->leave.hour>23)printf("您的輸入有誤!");printf("請重新輸入離開時間的時'(0-23):");scan f("%d",&(p->leave.hour);if(p->leave. minv 0|p->leave. min> 59)printf(
35、"您的輸入有誤!");printf("請重新輸入離開時間的分'(0-59):");sca nf("%d",&(p->leave.mi n);printf("n離開車輛的車牌號為:");puts(p->nu m);printf("n該車到達(dá)時間為:%d:%d",p->reach.hour,p->reach.min);printf("n該車離開時間為:%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)交費用為:%2.1f 元!",(B1-A1)*60+(B2-A2)*price); free(p);/車輛的到達(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請輸入車牌號(例:豫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("您輸入的車牌號重復(fù),請重新輸入!");goto loop;*/if(En ter->top<MAX)車輛未滿,車進(jìn)車場En ter->top
38、+;printf("n車輛在車場第 d位置.",Enter->top);printf("n車輛到達(dá)時間:");sca nf("%d:%d",&( p->reach.hour),&( p->reach. min);while(p->reach.hour<0|p->reach.hour>23) /控制時間格式正確printf("您的輸入有誤!");printf("請重新輸入到達(dá)時間的時'(0-23):");sea nf("%
39、d",&(p->reach.hour);while(p->reach.mi n<0|p->reach.mi n>59) /控制分鐘輸入正確printf("您的輸入有誤!");printf("請重新輸入到達(dá)時間的分'(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/車場已滿,車進(jìn)便道printf("n您好,停車場車位已滿,請該車在便道上等待!有空余車位時才能進(jìn)入停車場!/n");t=(QueueNode *)malloc(sizeof(QueueNode);t->data=p;t->n ext=NULL;W->rear- >n ext=t;W->rear=t;return(1);/車輛的離開void Leave(SeqStackCar *En ter,SeqStackCar *Temp,Li nkQueueCar *W)int room;CarNode *p,
41、*t;QueueNode *q;if(E nter->top>0)判斷停車場是否為空while(1) 輸入離開車輛的信息printf("n請輸入車在車場的位置 /1-%d/ : ",Enter->top);sea nf("%d",&room);if(room>=1 &&roo m<=E nter->top) break;elseprintf("n您的輸入有誤,請重新輸入:");while(E nter->top>room)把要離開車輛前面的車開出來,進(jìn)臨時棧。Te
42、mp->top+;臨時通道的棧頂指針Temp->stackTemp->top=E nter->stackE nter->top;En ter->stackE nter->top=NULL;En ter->top-;p=E nter->stackE nter->top;把要刪除的車輛節(jié)點賦給 p。En ter->stackE nter->top=NULL;En ter->top-;while(Temp->top>=1) 判斷臨時通道上是否有車。En ter->top+;En ter->stack
43、E nter->top=Temp->stackTemp->top;Temp->stackTemp->top=NULL;Temp->top-;PRINT(p,room); 調(diào)用計費函數(shù)計費。if(W->head!=W->rear)&&Enter->top<MAX)/停車場未滿,如果便道上有車,則再開進(jìn)停車場q=W->head->n ext;t=q->data;En ter->top+;prin tf("n 便道上的s號車進(jìn)入停車場內(nèi)第 %d位置.",t- >nu m,E
44、nter->top);printf("n請輸入$號車進(jìn)入停車場的時間:",t->num);sca nf("%d:%d",&(t->reach.hour),&(t->reach.mi n);while(t->reach.hour<0|t->reach.hour>23) /控制時間格式正確printf("您的輸入有誤!");printf("請重新輸入到達(dá)時間的時'(0-23):");sca nf("%d",&(t->
45、;reach.hour);while(t->reach.mi n<0|t->reach.mi n>59) /控制分鐘輸入正確printf("您的輸入有誤!");printf("請重新輸入到達(dá)時間的分'(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您好,便道上沒有車!n");prin tf("n");elseprintf("n 您好,停車場內(nèi)沒有車!");prin tf("n");/顯示停車場里的車輛情況void List1(SeqStackCar *S)int i;prin tf("t您請求的查看停車場內(nèi)停車情況為:");if(S->top>0)判斷停車場內(nèi)是否有車for(i=1;i<=S->top;i+)printf
47、("nt車位位置:%d ",i);%d:%dprin tf("nt到 達(dá) 時 間 :",S->stacki->reach.hour,S->stacki->reach.mi n);printf("nt車牌號:%sn",S->stacki->num);elseprintf("n 您好,停車場內(nèi)沒有車!無法進(jìn)行車輛離開登記操作!n");prin tf("n");/顯示便道上的車輛情況void List2(Li nkQueueCar *W)QueueNode *p;int i;printf(”您所請求的查看便道上停車的情況為:");p=W->head->n ext;if(W->head!=W->rear)判斷便道上是否有車printf("n等待車輛的車牌號碼為:");for(i=1;p!=NULL;i+)prin tf("n第 %d 車輛.",i);puts(p->data->nu m);p=p->n ext ;elseprintf("n您好,便道上沒有車!");prin tf(&quo
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年別墅外觀設(shè)計行業(yè)深度研究分析報告
- 生態(tài)環(huán)境保護(hù)考核自評總結(jié)報告
- 現(xiàn)代物流行業(yè)發(fā)展趨勢與挑戰(zhàn)研究報告
- 2025年中國板帶卷行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2023-2028年中國補腎藥行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報告
- 現(xiàn)代醫(yī)療設(shè)備的電信號處理技術(shù)解析
- 電子商務(wù)物流管理創(chuàng)新與發(fā)展趨勢匯報
- 生產(chǎn)成本控制與質(zhì)量追溯體系建設(shè)的雙贏策略培訓(xùn)
- 四川省邛崍市2022年七年級《英語》下冊期中試卷與參考答案
- 生物醫(yī)藥產(chǎn)業(yè)的商業(yè)模式變革與創(chuàng)新
- 《教育強國建設(shè)規(guī)劃綱要(2024-2035年)》解讀講座
- 耳鼻咽喉科臨床診療指南
- 第二部分-3 植物纖維化學(xué)部分-纖維素
- 民法原理與實務(wù)課程教學(xué)大綱
- 2019北師大版高中英語選擇性必修四單詞表
- 園藝產(chǎn)品的品質(zhì)講義
- 鋼筋混凝土框架結(jié)構(gòu)工程監(jiān)理的質(zhì)量控制
- 桃花節(jié)活動方案
- 社區(qū)醫(yī)院建設(shè)標(biāo)準(zhǔn)
- 變更戶主情況登記表
- 個人所得稅稅率表【自動提取稅率計算】
評論
0/150
提交評論