版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 計算機工程學院</b></p><p><b> 課程設計報告</b></p><p> 課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設計</p><p> 設計題目: 停車場管理系統(tǒng) </p><p> 院 系: 計算機工程學院
2、 </p><p> 專 業(yè): 計算機科學與技術 </p><p><b> 目錄</b></p><p><b> 1.需求分析1</b></p><p> 1.1課程設計的題目1</p><p> 1.2
3、 基本要求1</p><p> 1.4 課程設計的思想1</p><p> 1.5 軟件運行和開發(fā)工具1</p><p><b> 2.概要設計1</b></p><p> 2.1 程序整體描述1</p><p> 2.2 結(jié)構(gòu)描述1</p><p>
4、 2.3 算法的設計思想及流程圖2</p><p><b> 3.詳細設計6</b></p><p> 3.1 車輛到達登記6</p><p> 3.2 車輛離開記錄6</p><p> 3.3車輛信息顯示8</p><p> 4.調(diào)試與操作說明10</p>
5、<p><b> 總 結(jié)12</b></p><p><b> 致 謝12</b></p><p> 參 考 文 獻12</p><p><b> 1.需求分析</b></p><p><b> 課程設計的題目</b><
6、/p><p> 設計一個停車場管理系統(tǒng),模擬停車場的運作。</p><p><b> 1.2 基本要求</b></p><p> 運用數(shù)據(jù)結(jié)構(gòu)知識,要求以棧模擬停車場,以隊列模擬車場外的便道,要求棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表實現(xiàn),按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。要求處理的數(shù)據(jù)元素包括三個數(shù)據(jù)項:汽車“到達”或“離去”信息、汽車牌照號
7、碼及到達或離去的時刻; </p><p> 1.3 課程設計的任務</p><p> 該系統(tǒng)主要實現(xiàn)以下幾個功能:</p><p> 1.車輛到達信息登記:包括車牌號,到達時間,在停車場停放的位置等;</p><p> 2.車輛離開記錄:包括離開時間,在停車場停留時間,停車費用等;</p><p> 3.信息
8、顯示:顯示停車場內(nèi)和便到內(nèi)的汽車到達時機急位置等基本信息;</p><p> 1.4 課程設計的思想</p><p> 該程序應用棧來完成的車輛進停車場和出停車場就是一個數(shù)據(jù)進棧和出棧的過程。如果停車場(棧)滿了,就將車輛放在便道(隊列)里;在車輛離開時計算出使用費用,并將便道第一輛車停到該車位置。</p><p> 1.5 軟件運行和開發(fā)工具</p&g
9、t;<p> 1.Windows2000以上操作系統(tǒng)</p><p> 2.Visual C++6.0開發(fā)環(huán)境</p><p><b> 2.概要設計</b></p><p> 2.1 程序整體描述</p><p> 程序用了一個類,五個結(jié)構(gòu)(車輛信息、時間信息、棧、鏈表和隊列),兩個棧(其中一個
10、為臨時棧),除主函數(shù)外用了八個函數(shù)(棧和隊列初始化、車輛到達和離開登記、收費系統(tǒng)、車輛和便道列表、總顯示列表)。</p><p><b> 2.2 結(jié)構(gòu)描述</b></p><p> 2.2.1 車輛信息的表示 </p><p> 車輛可看成是一個節(jié)點,設計成一個結(jié)構(gòu)體,車輛信息包括:車牌號碼,車輛的進站時間和離開停車的時間。定義如下:&
11、lt;/p><p> struct CarNode</p><p><b> {</b></p><p> char num[10]; // 車牌號碼</p><p> Time reach; // 到站時間</p><p> Time leave; // 離開時間
12、</p><p><b> };</b></p><p> 2.2.2 時間、棧和隊列的定義</p><p> 時間是由小時和分鐘表示的,有兩部分數(shù)據(jù),所以,設計兩個變量分別存儲小時和分鐘。定義如下:</p><p> struct Time</p><p><b> {<
13、;/b></p><p><b> int hour;</b></p><p><b> int min;</b></p><p><b> };</b></p><p><b> 停車場內(nèi)用棧表示:</b></p><p
14、> struct SeqStackNode </p><p><b> {</b></p><p> CarNode *elements[n+1]; // 順序棧</p><p><b> int top;</b></p><p><b> };</b>&l
15、t;/p><p> 便道上的車輛用隊列表示:</p><p> struct QueueNodecar</p><p><b> {</b></p><p> CarNode *data; // 便道上的車用鏈表暫存</p><p> struct QueueNodecar *ne
16、xt;</p><p><b> };</b></p><p> struct LinkQueueNode</p><p><b> {</b></p><p> QueueNode *front; // 設置頭指針、尾指針</p><p> QueueNod
17、e *rear;</p><p><b> };</b></p><p> 2.3 算法的設計思想及流程圖</p><p> 2.3.1 主要函數(shù)的功能說明</p><p> 1、 void CarStack(SeqStackNode *s) //車輛節(jié)點進棧 </p><
18、;p> 當棧未滿時,就把到達的車輛進棧。</p><p> 2、 void CarQueue(LinkQueueNode *q) //車輛節(jié)點進隊列</p><p> 當棧滿了時,車輛就進入便道上的隊列中。</p><p> 3、 void Arrival(SeqStackNode *EnterCar,LinkQueueNode *
19、QueueCar) //車輛到達登記</p><p> 車輛到達時,先登記車輛車牌號碼。然后再判斷停車場有沒有停滿,沒停滿就進棧,停滿了就停在便道上,即進隊列。</p><p> 4、 voidLeave(SeqStackNode*LeaveCar,SeqStackNode TempStack,</p><p> LinkQueueNode *QueueC
20、ar) //車輛離開處理</p><p> 通過輸入離開車輛的位置處理,然后調(diào)用Charge(CarNode *p) 函數(shù)進行收費。然后再判斷便道上有沒有車,如果有,就把便道上的車進停車場內(nèi)。</p><p> 5、 void List(SeqStackNode s,LinkQueueNode q) //顯示車場內(nèi)和便道上車輛情況</p><p> 用個
21、switch()函數(shù)選擇顯示車場內(nèi)或是便道上的車輛情況。</p><p> 包括對下面兩個子函數(shù)的調(diào)用: void List1(SeqStackNode *s) 和 </p><p> void List2(LinkQueueNode *q) // 分別為顯示車場和便道上的車輛情況</p><p> 6、 void Charge(CarNode *p)
22、 // 車輛離開收費</p><p> 這個函數(shù)由車輛離開的函數(shù)調(diào)用,以分鐘計時算費,但只能計算當天之內(nèi)的費用,如果第二天的話會導致計費為負或減少。即只能當天停,當天開走。</p><p> 2.3.2 主要模塊算法描述和流程圖</p><p><b> 1、車輛到達:</b></p><p> 首先定義一個棧和
23、隊列的結(jié)構(gòu)體指針為:*p 和*t,然后申請一個車輛信息的內(nèi)存空間,并把它賦給棧指針。</p><p> 車輛到達時就輸入車牌號,并通過if(EnterCar -> top+1 < n)來判斷該車是進車場內(nèi)還是進便道上,如果是進車場內(nèi)就把top 加1,顯示在車場內(nèi)的位置,還要輸入進車場的時間,然后把該節(jié)點進棧。如果是else 就顯示該車要停在便道上,并進行進隊列的操作。</p><
24、p><b> 2、車輛離開:</b></p><p> 定義一個整型變量loc記錄要離開車輛的位置,定義兩個棧指針和一個隊列指針,用if(EnterCar -> top >= 0)確保棧不空,然后用while(1)確保輸入的車輛離開位置的合法性。如果不合法,顯示輸入有誤,要重新輸入。</p><p> 通過if(loc>=1&&a
25、mp;loc<=LeaveCar->top+1)判斷離開車輛的位置,如果是中間位置,就要再用一個棧前面臨時開出來的車,等要開出的車開出后,再把臨時棧的車看進車場內(nèi),并調(diào)用Charge(p) 函數(shù)計算停車時間顯示費用。然后還要用if((QueueCar -> front != QueueCar -> rear) && LeaveCar -> top < n) 語句判斷便道上有沒有車,如
26、果有車就要顯示進車場的車的車牌號,并登記進入時間。并要進行相應的出隊列和進棧操作。</p><p> 圖2.1車輛進入流程</p><p> 圖2.2車輛離開流程</p><p> 2.3.3 總模塊流程圖</p><p><b> 3.詳細設計</b></p><p> 按照功能模塊的
27、描述主要實現(xiàn)三個功能</p><p> 3.1 車輛到達登記</p><p> void Arrival(SeqStackNode *EnterCar,LinkQueueNode *QueueCar) //車輛進入</p><p><b> { </b></p><p> CarNode *s; //定義一個
28、進入的車輛的指針</p><p> QueueNodecar *q; //定義一個進入便道內(nèi)的車的指針</p><p> s = new CarNode; //附給隊列頭結(jié)點停車場內(nèi)的最后一輛車結(jié)點</p><p> cout<<"\n 請輸入車牌號(例:suA1234): ";</p><p>
29、 cin >> s -> number;</p><p> if(EnterCar -> top+1 < n) //有空位,車進入停車場</p><p><b> {</b></p><p> EnterCar -> top++; //初始指針為-1,加1</p><p>
30、 cout<<"\n 車輛在車場第"<<EnterCar -> top+1<<"位置."<<endl;</p><p> cout<<"\n 車輛到達時間(請先輸入小時,再按space鍵輸入分鐘): ";</p><p> cin>>s ->
31、; reach.hour;</p><p> cin>>s -> reach.min;</p><p> EnterCar -> elements[EnterCar -> top] = s; //棧元素加1</p><p><b> return 1;</b></p><p><
32、;b> }</b></p><p><b> else</b></p><p><b> { </b></p><p> cout<<"\n 該車須在便道等待,有車位時進入車場!"<<endl;</p><p> q = (Q
33、ueueNodecar *) malloc (sizeof(QueueNodecar));</p><p> q -> data = s; //鏈表指針加1</p><p> q -> next = NULL; </p><p> QueueCar -> rear -> next = q; //隊列進一個元素</p>
34、<p> QueueCar -> rear = q;</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> }</b></p><p> 3.2 車輛離開記錄</p><
35、;p> void Leave(SeqStackNode *LeaveCar,SeqStackNode *TempStack,LinkQueueNode *QueueCar) //車輛離開</p><p><b> { </b></p><p><b> int loc;</b></p><p> CarNo
36、de *p,*t; //定義兩個車輛信息指針,一個用來存放離開車的信息;一個用來存放便道第一輛車的臨時結(jié)點,將其存入棧中</p><p> QueueNodecar *q; </p><p> if(LeaveCar -> top > 0) //判斷車場是否為空</p><p><b> { </b></p>
37、;<p> while(1) </p><p><b> {</b></p><p> cout<<"\n 請輸入車在車場的位置/1--"<<LeaveCar -> top<<"/: ";</p><p><b> cin>
38、;>loc;</b></p><p> if(loc >= 1 && loc <= LeaveCar -> top) </p><p><b> break;</b></p><p><b> else</b></p><p><b&g
39、t; {</b></p><p> cout<<" 輸入錯誤,請重新輸入!"<<endl;</p><p><b> continue;</b></p><p><b> }</b></p><p><b> }</
40、b></p><p> while(LeaveCar -> top > loc) //把要刪除的車輛的后面的車開出來,進臨時棧</p><p><b> {</b></p><p> TempStack -> top++;</p><p> TempStack -> stack[T
41、empStack -> top] = LeaveCar -> stack[LeaveCar -> top];</p><p> LeaveCar -> stack[LeaveCar -> top] = NULL; </p><p> LeaveCar -> top--;</p><p><b> } </b&
42、gt;</p><p> p = LeaveCar -> stack[LeaveCar -> top]; //把要刪除的車輛節(jié)點賦給p</p><p> LeaveCar -> stack[LeaveCar -> top] = NULL;</p><p> LeaveCar -> top--;</p><p&
43、gt; while(TempStack -> top >= 1) //把臨時棧里的車輛進停車場</p><p><b> {</b></p><p> LeaveCar -> top++;</p><p> LeaveCar -> stack[LeaveCar -> top] = TempStack -&
44、gt; stack[TempStack -> top];</p><p> TempStack -> stack[TempStack -> top] = NULL;</p><p> TempStack -> top--;</p><p><b> }</b></p><p> Charg
45、e(p); //調(diào)用收費系統(tǒng)</p><p> if((QueueCar -> front != QueueCar -> rear) && LeaveCar -> top < n) //如果便道上有車,則再開進停車場</p><p><b> { </b></p><p> q = QueueC
46、ar -> front -> next;</p><p> t = q -> data;</p><p> LeaveCar -> top++;</p><p> cout<<"\n 便道的"<<t -> number<<"號車進入車場第"<<
47、;LeaveCar -> top<<"位置."<<endl;</p><p> cout<<"\n "<<t -> number<<"號車進入車場的時間為:"<<p -> leave.hour<<":"<<p ->
48、; leave.min<<endl;</p><p> QueueCar -> front -> next = q -> next;</p><p> if(q == QueueCar -> rear) </p><p> QueueCar -> rear = QueueCar -> front;</p&g
49、t;<p> LeaveCar -> stack[LeaveCar -> top] = t;</p><p><b> delete q;</b></p><p><b> }</b></p><p><b> else </b></p><p&g
50、t; cout<<"\n 便道里沒有車.\n"<<endl;</p><p><b> }</b></p><p><b> else </b></p><p> cout<<"\n 車場里沒有車."<<endl; <
51、;/p><p><b> }</b></p><p><b> 3.3車輛信息顯示</b></p><p> void List1(SeqStackNode *s) //顯示車場里的車輛情況</p><p><b> { </b></p><p>
52、 if(s -> top > 0)</p><p><b> {</b></p><p> cout<<"\n 車場列表:"<<endl;</p><p> cout<<"\n 位 置 到 達 時 間 車 牌 號\n"<<
53、endl;</p><p> for(int i = 1;i <= s -> top;i++)</p><p><b> {</b></p><p> cout<<" "<<i;</p><p> cout<<"\t &
54、quot;<<s -> stack[i] -> reach.hour<<":"<<s -></p><p> stack[i] -> reach.min;</p><p> cout<<"\t "<<s -> stack[i] -> number&
55、lt;<endl;</p><p><b> }</b></p><p><b> }</b></p><p><b> else </b></p><p> cout<<"\n 車場里沒有車."<<endl;<
56、/p><p><b> }</b></p><p> void List2(LinkQueueNode *q) //顯示便道上的車輛情況</p><p><b> { </b></p><p> QueueNodecar *p;</p><p> p = q ->
57、; front -> next;</p><p> if(q -> front != q -> rear)</p><p><b> {</b></p><p> cout<<"\n 等待車輛的車牌號碼為: "<<endl;</p><p> whi
58、le(p != NULL)</p><p><b> {</b></p><p> cout<<" "<<p -> data -> number<<endl;</p><p> p = p -> next;</p><p><b>
59、; }</b></p><p><b> }</b></p><p><b> else </b></p><p> cout<<"\n 便道里沒有車."<<endl;</p><p><b> }</b>&l
60、t;/p><p> void List(SeqStackNode s,LinkQueueNode q) //顯示選擇列表</p><p><b> {</b></p><p> int choice;</p><p> int cond = 1;</p><p> while(cond)&
61、lt;/p><p><b> {</b></p><p> cout<<" *------------*"<<endl;</p><p> cout<<"\n 1.車場列表\n 2.便道列表\n 3.返回主菜單\n"<<endl;</p
62、><p> cout<<" *------------*"<<endl;</p><p> cout<<"\n 請選擇要查看的列表序列號: ";</p><p><b> while(1)</b></p><p><b> {
63、</b></p><p> cin>>choice;</p><p> if(choice >= 1 && choice <= 3) </p><p><b> break;</b></p><p><b> else</b></p&
64、gt;<p> cout<<"\n 請輸入: 1--3: ";</p><p><b> }</b></p><p> switch(choice) //列表函數(shù)調(diào)用</p><p><b> {</b></p><p><b>
65、 case 1:</b></p><p> List1(&s);</p><p><b> break;</b></p><p><b> case 2:</b></p><p> List2(&q);</p><p><b>
66、 break;</b></p><p><b> case 3:</b></p><p><b> cond = 0;</b></p><p><b> break;</b></p><p><b> default: </b><
67、/p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 4.調(diào)試與操作說明</b
68、></p><p> 執(zhí)行程序后進入歡迎界面:</p><p> 按1進入車輛到達登記界面,輸入車牌號和時間:</p><p> 圖4.1車輛到達登記流程</p><p> 停車場滿,車進入便道:</p><p> 圖4.2車輛到達進入便道流程</p><p> 按2車輛離開,
69、輸入車在車場位置及離開時間,顯示停車時間結(jié)算費用,便道的第一輛車進入停車場,顯示進入時間:</p><p> 圖4.3車輛離開收費流程</p><p> 按3進入列表顯示界面,再按1顯示停車場列表:</p><p> 圖4.4停車場車輛列表顯示流程</p><p> 再按2進入顯示便道列表顯示:</p><p>
70、; 圖4.5便道等待車輛列表顯示流程</p><p><b> 總結(jié)</b></p><p> 本次課程設計我學會了很多知識,在對數(shù)據(jù)結(jié)構(gòu)這門課上時候?qū)W習的東西系統(tǒng)的運用了一下,把學過的東西綜合的運用了一下,加深了對C++的一些知識的運用。</p><p> 在課程設計分析的時候,我遇到了很多的問題,在代碼編寫的時候問題則是更加明顯
71、的暴露出來了,雖然我能說出思想,但我在編程是總是有許多錯誤和不會的地方。從這可以看出我在這門課的學習過程中存在著許多的不足,有許多還有待掌握。雖然,最終完成了整個程序的分析設計,但是還是有許多問題我需要改進的,比如說結(jié)構(gòu)體的定義、棧和隊列的初始化和使用,也可以通過類的定義來解決,希望自己能在今后的繼續(xù)深入學習中得到極大的改進與完善。</p><p> 在本次課程設計總體我收獲了很多,有棧和隊列的應用、鏈表和指針
72、的使用等,使我深刻地理解到了數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容,體會到了程序設計的實用性與可行性;培養(yǎng)了我分析實際應用系統(tǒng)和設計實際應用系統(tǒng)的能力,提高了進行實際系統(tǒng)的設計的能力。</p><p> 經(jīng)過這么多天的努力探索,我發(fā)現(xiàn)做課程設計不僅修補了以前學習的漏洞,也知道了一個道理:做事一定要有耐心和信心。課程設計不僅培養(yǎng)人們的自學能力,而且能讓自己的思維變得靈活。同時我也學到,在困難面前不低頭,要勇與面對,勇攀高峰。課程設計
73、已經(jīng)結(jié)束了,我付出了很多,也收獲了很多,相信在不久的將來就會發(fā)現(xiàn)此時汗水的價值。</p><p><b> 致謝</b></p><p> 經(jīng)過一周的忙碌,本次課程設計已經(jīng)接近尾聲。我要感謝在我做在做課程設計時給我指導的四位老師和我的同學,在我遇到困難的時候,你們及時的給與我?guī)椭?,讓我順利的完成了這個課題,順利的結(jié)束了本次的課程設計,在此再次衷心感謝。<
74、/p><p><b> 參 考 文 獻</b></p><p> 1 蘇仕華.數(shù)據(jù)結(jié)構(gòu)課程設計 .機械工業(yè)出版社2005</p><p> 2 李春葆,金晶.數(shù)據(jù)結(jié)構(gòu)教程.北京:清華大學出版社,2006</p><p> 3 揣錦華.面向?qū)ο蟪绦蛟O計與C++實踐 .西安電子科技大學出版社 2004</p&
溫馨提示
- 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ù)結(jié)構(gòu)課程設計報告---停車場管理系統(tǒng)
- 停車場管理系統(tǒng)-面向?qū)ο蟪绦蛘n程設計報告
- 智能停車場課程設計--校園智能停車場的系統(tǒng)設計
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告停車場管理系統(tǒng)
- 停車場管理系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設計報告
- 數(shù)據(jù)結(jié)構(gòu)停車場管理系統(tǒng)課程設計報告
- 數(shù)據(jù)結(jié)構(gòu)停車場管理系統(tǒng)課程設計報告
評論
0/150
提交評論