版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計說明書</b></p><p> 專 業(yè): xxxxx </p><p> 課程名稱: 數(shù)據(jù)結構課程設計 班級: xxxx </p><p> 姓 名: xxx 學號: xxxxxx </p><p> 設計題
2、目: 停車場管理系統(tǒng) </p><p> 設計時間: 2012-2-27 至 2012-3-9 </p><p> 評 語:_________________________________</p><p> _________________________________________<
3、/p><p> _________________________________________</p><p> _________________________________________</p><p> _________________________________________</p><p> 評閱成績:____
4、________評閱教師:____________</p><p><b> 一、設計題目與要求</b></p><p><b> 停車場管理系統(tǒng)</b></p><p> 設停車場只有一個可停放幾輛車的狹長通道,且只有一個大門可供汽車進出,汽車在停車場內(nèi)按車輛的先后順序依次排列,若車站內(nèi)已停滿汽車,則后來的汽車只能
5、在門外的通道上等停,一旦停車場內(nèi)有車開走,則排在同道上的第一輛車即可進入,當停車內(nèi)某輛車要離開時,由于停車場是狹長的通道,在它之后開入的車輛必須先退出車站不能從便道上開走,試設計這樣一個停車場模擬管理程序。</p><p><b> 二、概要設計</b></p><p> 程序包括以下幾個模塊(包括其功能及程序?qū)崿F(xiàn)思路與方法)</p><p&g
6、t; 1、成批車輛入站時信息的記錄。</p><p> 該功能則是將成批車輛入站,并且記錄下信息。已知車場為一個開口的狹長通道,所以信息采用棧來記錄。因為針對的是成批車輛,則在輸入信息的時候采用循環(huán)輸入,以輸入特殊字符為結束符號。在程序設計的時候,除了要完成循環(huán),還要完成特殊字符的判斷及車場是否已經(jīng)停滿的判斷。</p><p> 單輛車輛入站時車站的記錄。</p>&l
7、t;p> 單輛車輛入站的實現(xiàn)思路與方法與成批入站的相差無幾,主要區(qū)別在于車輛車不需要循環(huán)。</p><p> 在車站已滿的情況下,將車輛停在通道里。</p><p> 車站有固定容量,當車站停滿車后,車輛先放置在通道中。通道是一個兩頭開口的狹長通道,而且當車站有空位時,通道中第一輛車要進入車站,則是先進先出的原則,所以采用隊列的形式記錄通道內(nèi)車輛的信息。</p>
8、<p> 能顯示出當前車站及通道內(nèi)車輛的信息。</p><p> 車站及通道內(nèi)車輛的信息顯示,使管理者更方便的查看車站內(nèi)車輛情況。程序設計時采用循環(huán)遍歷輸出,將車輛信息顯示出來。</p><p> 車輛出站的同時,通道里第一輛車能進車站。</p><p> 由于車站是狹長單開口的,所以當其中一輛車要出站時,必須將其后面的車先移出來,車出站后,再把移
9、出來的車按先前的順序放回去,在把通道里第一輛車放在車站最后一個位置。由上可知,要把成批的車輛移出來再按順序移進去,符合先進后出的原則,設計時需要建立一個臨時棧,將這些車先放入臨時棧中,待所要車出站后,再把車從臨時棧里出來,進入到車場的棧中去。</p><p> 6、能設置車場的容量。</p><p> 根據(jù)不同實際情況,車場實際容量也不一樣,所以這個函數(shù)能使程序適用</p>
10、<p><b> 三、算法設計</b></p><p> 存儲結構設計:運用三個結構體,分別是車輛信息結構體,棧的結構體,隊列的結構體。因為車輛信息,棧和隊列都包含了很多信息,所以用結構體綁定。此外棧和隊列的信息中還包含了車輛信息,運用結構體,可以明確的表示出信息的出處。</p><p><b> 幾個小函數(shù)。</b><
11、/p><p> InitStack(Stack *s) 初始化一個Stack類型的,叫做s的棧。</p><p> InitQueue(Queue *Q) 初始化一個Queue類型的,叫做Q的隊列。</p><p> Push(Stack *s,Car x) 將car類型的x中的數(shù)據(jù)放到stack類型的棧s里。其中用if語句先判斷棧是否已滿。</p&g
12、t;<p> Pop(Stack *s,Car *px) 將棧s里的數(shù)據(jù)放到px的指針中。其中先用if語句判斷棧是否是空的。需要提一句的是,當棧非空的時候,棧頂位置先移向上一個,然后把先前位置的數(shù)據(jù)給px。代碼中用*px=s->data[s->top+1]表示,很方便。</p><p> DeleteQueue(Queue *Q,Car *x) 將隊列Q中某個位置的數(shù)據(jù)刪除,即把該
13、數(shù)據(jù)給x,然后下移一個位置。</p><p><b> 2、主函數(shù)。</b></p><p> 這個程序中的主函數(shù)比較簡單,在排除一些可能導致的錯誤之后,初始化棧和隊列,調(diào)用菜單函數(shù)carmenu()。</p><p><b> 4、菜單函數(shù)</b></p><p> 菜單函數(shù)比較簡單,就是
14、在輸出提示語句后,用switch語句選擇。選擇的內(nèi)容為幾個功能模塊,分別為相應的函數(shù)。</p><p> InitCarpark()成批車輛入站函數(shù)</p><p> 循環(huán)輸入方法如下,每輸入一個信息,將其與結束符號作對比,如果不是結束符號,則再次輸入。</p><p> InsertCar()單輛車入站函數(shù)</p><p> 信息輸
15、入方式與InitCarpark()函數(shù)相同,只是把循環(huán)略去。</p><p> ExitCar(void)車輛出站函數(shù)</p><p> 定義好循環(huán)變量,臨時變量,將開關標志flag==0后。程序會先判斷車場是否為空。在車場非空的條件下,根據(jù)提示輸入要退出車輛的車牌號,然后開始循環(huán),將輸入車牌號與車場內(nèi)的車輛的車牌號從第一輛開始對比。如果找到相同的,把位置i賦給position,并將開
16、關標志flag==1。如果完成循環(huán),都沒有找到,則flag依然是0,將會輸出提示語句“車輛為找到”。如果flag==1,則建立一個臨時棧,將該位置以后的車輛從最后一輛依次放入臨時棧中。當該位置的信息刪除后,再將臨時棧里的車輛再依次放回。并且把通道里第一輛車放入車場內(nèi)。流程圖如下。</p><p> ShowCar()顯示車輛信息函數(shù)</p><p> 顯示信息的函數(shù)原理都大致相同,即循
17、環(huán)輸出語句。循環(huán)輸出前,先對棧和隊列是否非空的情況進行判斷,避免因為?;蜿犃械目諏е碌膯栴}。</p><p> SetCar()設置車場容量函數(shù)</p><p> 這個函數(shù)比較簡單,輸入所要改變的數(shù)據(jù)之后,進行循環(huán)。并把值賦給循環(huán)后的n。在循環(huán)中加入一個開關變量做標志。以此來判斷是否編輯成功。</p><p> 四、運行結果和調(diào)試分析</p>&
18、lt;p> 1、程序開始的時候,出現(xiàn)菜單界面,如果輸入菜單選項以外的數(shù)字,則出現(xiàn)車場為空。</p><p> 2、菜單界面會自動跳出,然后選擇1,車輛成批入站。程序一開始不會顯示輸入數(shù)字,我覺得顯示出來比較清晰。輸入車輛信息,“車牌號(空格)司機姓名”。然后輸入“/(空格)/”表示輸入結束。原來的特殊符號為“*”但是“*”不如“/”輸入方便,所以改了。</p><p> 3、成
19、批輸入結束后,選擇4顯示車輛信息。因為車場未滿,所以沒有顯示通道內(nèi)的信息??梢栽诖思尤胪ǖ里@示通道里的顯示。</p><p> 4、選擇2,單輛車入站,只需要輸入信息再選擇4查看,剛才輸入的車輛信息已經(jīng)在車場里了。</p><p> 現(xiàn)在測試設置車場的函數(shù)。選擇5之后,輸入一個小于當前車輛數(shù)(4)的數(shù),比如2,則出現(xiàn)提示語句錯誤。重新編輯,為了測試通道的作用,則將最大容量改成4,4為合
20、理數(shù)據(jù),所以提示語句編輯成功。</p><p> 然后選擇2進行單輛車入站,測試通道作用。提示“車站已滿,已進入通道!”然后選擇4顯示信息,發(fā)現(xiàn)車輛已停入通道。</p><p> 7、車輛出站,選擇3,輸入一個不屬于已知車輛信息的信息(ahe1006),會提示“車輛未找到”,于是重新選擇3,輸入一輛在車場內(nèi)的車輛信息(ahe1002),顯示“退出成功”,然后選擇4查看,發(fā)現(xiàn)ahe100
21、2已經(jīng)退出,而通道內(nèi)的車(ahe1005)已經(jīng)進入車場。這個程序還有要改進的地方,比如車輛退出成功后自動跳出顯示車輛的信息的函數(shù),可以讓程序使用者更直觀的判斷車輛是否退出成功。</p><p><b> 五、總結體會</b></p><p> 通過數(shù)據(jù)結構課程設計,明顯感覺到比之前數(shù)據(jù)結構的大實驗要更難,要求掌握的只是點也更多,更扎實。做完設計后,有以下幾點收獲:
22、</p><p> 結構體的優(yōu)點。這次程序中,運用到很多結構體。在我看來,結構體像一根繩子,把有關的信息都捆綁在一起,貼上一個標簽,哪里要用到這些信息,就把標簽名字輸入,這些信息就跟著到了。其中感觸最深的是車輛信息的結構體設計。車輛信息包括車牌號和司機姓名。幾乎在所有的函數(shù)中都用到了。并且棧和隊列的結構體設計中,巧妙的把車結構體放進去了,這樣無論是棧還是隊列,想要找到其中車輛的信息,就方便很多。這個程序是個小型
23、應用程序,如果需要更大的信息量,比如加車型,入站時間,收費統(tǒng)計等與車綁定在一起的信息,就更能顯示出單獨把車輛信息設計成結構體的優(yōu)越性。</p><p> 對棧和隊列的更深層次的理解。以前做實驗,都是棧和隊列分開來應用,這次根據(jù)題目要求,充分利用了棧和隊列各自的特性,講其放在一起,又互相彌補了對方的不足,使程序更加方便。而且在這個程序中,幾乎每個函數(shù)都先預計了??諚M,隊列空隊列滿的情況,保證程序的正常運行。掌握
24、每種線性結構的優(yōu)點,在以后的程序設計中運用起來也更得心應手。我也通過這次課程設計知道了,數(shù)據(jù)結構中的知識點一定要通過實踐,才能更好的記住。</p><p> 臨時棧的設計。最初接觸到程序的代碼,覺得臨時棧的設計是這個程序的一大亮點。臨時棧用在了車輛出站的設計中,假設要出站車輛為A,這個臨時棧出色的完成了A后面車輛的臨時儲存和再次入車站的任務。另外在臨時棧的設計過程中,還運用了兩個小函數(shù)(pop和push)作為第
25、三方,這在以前的試驗中都是沒有遇到過的。我覺得第三方的運用使整個出站函數(shù)更加明朗簡潔化。因為每輛車都包含了大量信息,在信息交換替代過程中,容易出現(xiàn)大的偏差。第三方像一個臨時站點,把所用信息先存入進去,等?;蜿犃袦蕚渚途w后,再把信息存入,有條有理,易理解。</p><p> 將菜單單獨做一個函數(shù)。這次可能設計算是一個小型應用軟件,不像以前的實驗。將菜單單獨做成一個函數(shù),可以在任意函數(shù)中進行調(diào)用,就是說,每完成一個
26、功能,都會將菜單顯示出來,給了使用者重新選擇功能的機會。程序應用起來會更加便利。</p><p> 小函數(shù)的調(diào)用。這個程序的函數(shù)調(diào)用十分靈活,縱觀大函數(shù),在選擇語句,循環(huán)語句中都有小函數(shù)的身影。我覺得這是一個新穎的設計思路。當某種運作方式需要重復的時候,可以將這個功能做成一個小函數(shù),重復使用的時候只需要調(diào)用該函數(shù)就可以了。在這個程序中的小函數(shù)只是幾行簡單的代碼,如果不用小函數(shù),直接將代碼添加進去也不是不可以,只
27、不過這樣一來,整個代碼就顯得冗長,沒有做到簡潔明了。而且若是需要重復的功能代碼比較長,小函數(shù)的優(yōu)勢就很明顯了。</p><p> 將成批車輛和單輛車入站做成兩個函數(shù)。光看代碼,前者不過在后者的基礎上加了個循環(huán),看似簡單,作用卻很大。如果沒有成批入站的設計,那么輸入一輛車的信息后想要再輸入信息,就要不停的在菜單界面和輸入信息界面轉換,顯示繁瑣。如果沒有單輛入站的設計,那么想單輛入站的時候,每輸入一個信息就要寫一遍
28、結束語句的特殊符號,使用起來不人性化。</p><p> 如此一個程序,運行的時候肯定有很多問題的。其中最令人困惑的是在車輛出站這個函數(shù)運行的時候,在輸入車牌號后,直接跳出了程序。解決這個問題的時候,我學到了很多方法(以下方法名都是我歸納的,若有不當之處,請見諒)。</p><p> 逐步分割法。因為輸入車牌號后就會跳出程序,而代碼中沒有標志性語句,所以很難判斷,是哪一句代碼,即程序運
29、行到哪一步出的問題。所以在老師的指導下,在不同位置插入內(nèi)容不同的輸出語句,比如:printf(“aaaaaa”)。這些輸出語句把代碼一點一點分割開來,運行程序的時候,顯示出多少輸出語句就表明程序運行到哪里。問題就比較容易找到了。</p><p> 輸出檢測法。通過上述方法雖然解決了程序運行順利與否的問題,但是運行結果依然有問題,即我輸入任何以停車輛的車牌號,都是退出車場內(nèi)最后一輛車,我以為是循環(huán)的問題,可能沒有
30、通過循環(huán)對比就直接退出了最后一輛車。所以同學建議我在循環(huán)結束的地方加了一個輸出循環(huán)變量i的值,運行結果表明循環(huán)是完成了的,只是退出的仍然是最后一輛。雖然這個方法沒有解決問題,但是我覺得這個同學的思路有讓我學習的地方。輸出循環(huán)變量可以很有效的檢測到循環(huán)是否完成,在以后的程序設計中很有幫助。</p><p> 文圖解說法。我對著代碼看很久,還是不明白問題出在哪里,然后請教老師。老師根據(jù)代碼的順序和要求,將棧用圖的形
31、式畫出來,無論是車場棧還是臨時棧都得到了很好的體現(xiàn),才發(fā)現(xiàn)是某個小函數(shù)中將臨時棧的名字寫成了車場棧的名字,導致程序運行結果不對。我覺得把圖畫出來了以后,原來很抽象的代碼立馬變得清晰了,然后根據(jù)程序設計思路,很輕易的就發(fā)現(xiàn)問題所在。實在是一個很好的方法。</p><p> 函數(shù)替代法。這個方法是我在和同學交流課程設計的時候總結出來的,原來的函數(shù)是gets()。就是輸入一串字符串,可以把回車當成字符。只要調(diào)用了這個
32、函數(shù)的大函數(shù)都不能運行,直接跳出了程序。我們上網(wǎng)查了資料,核對了頭文件及應用范圍,都顯示沒有問題。我就想反正都是輸入一串字符,不如用scanf(“%s”)語句,換用之后,問題就解決了,雖然不知道為什么用原始的函數(shù)不可以,好在問題還是解決了。</p><p> 數(shù)據(jù)結構課程設計是在《數(shù)據(jù)結構B》和《C語言》的基礎上,實踐性強的一門課。這兩個禮拜的上機,從確定課題,查找代碼,調(diào)試程序,理解代碼,寫報告。實在是受益匪
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計報告-- 停車場管理系統(tǒng)
- 課程設計報告—停車場管理系統(tǒng)
- 停車場管理問題系統(tǒng)課程設計報告
- 課程設計---停車場停車場車輛管理系統(tǒng)實現(xiàn)與設計
- 停車場管理系統(tǒng)課程設計
- 課程設計報告---停車場車位管理
- 停車場管理課程設計報告
- 停車場系統(tǒng)課程設計
- 課程設計---停車場管理
- c語言課程設計報告停車場管理系統(tǒng)
- c++課程設計報告--停車場管理系統(tǒng)設計
- 停車場管理課程設計報告--停車場管理模擬程序的設計
- c語言課程設計報告—停車場管理
- 數(shù)據(jù)結構課程設計報告---停車場管理系統(tǒng)
- 停車場管理系統(tǒng)-面向?qū)ο蟪绦蛘n程設計報告
- 智能停車場課程設計--校園智能停車場的系統(tǒng)設計
- 數(shù)據(jù)結構課程設計報告停車場管理系統(tǒng)
- 停車場管理系統(tǒng)數(shù)據(jù)結構課程設計報告
- 數(shù)據(jù)結構停車場管理系統(tǒng)課程設計報告
- 數(shù)據(jù)結構停車場管理系統(tǒng)課程設計報告
評論
0/150
提交評論