

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 經(jīng)濟管理學院本科課程設(shè)計論文</p><p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計</b></p><p><b> 目錄</b></p><p> 第1章 停車場管理問題- 3 -</p><p> 1.1需求分析- 3 -</p><p> 1.
2、1.1課程設(shè)計的目的- 3 -</p><p> 1.1.2課程設(shè)計的任務- 3 -</p><p> 1.1.3軟件運行和開發(fā)工具- 3 -</p><p> 1.1.4系統(tǒng)總體設(shè)計圖- 3 -</p><p> 1.1.5基本信息- 4 -</p><p> 1.2概要設(shè)計- 4 -</
3、p><p> 1.2.1問題定義- 4 -</p><p> 1.3流程圖及系統(tǒng)測試- 5 -</p><p> 1.3.1進停車場- 5 -</p><p> 1.3.2車輛離開- 5 -</p><p> 1.4程序運行圖- 6 -</p><p> 1.4.1菜單欄-
4、6 -</p><p> 1.4.2輸入信息欄- 7 -</p><p> 1.4.3出車欄- 8 -</p><p> 1.4.4顯示欄- 9 -</p><p> 1.5心得感受- 9 -</p><p> 第2章 運動會分數(shù)統(tǒng)計- 11 -</p><p> 2.1需
5、求分析- 11 -</p><p> 2.2 概要設(shè)計- 11 -</p><p> 2.2.1 系統(tǒng)功能設(shè)計- 11 -</p><p> 2.2.2函數(shù)構(gòu)造- 12 -</p><p> 2.3詳細設(shè)計- 13 -</p><p> 2.3.1 數(shù)據(jù)類型及重要變量的定義- 13 -</
6、p><p> 2.3.2函數(shù)的設(shè)計和實現(xiàn)- 14 -</p><p> 2.4測試- 18 -</p><p> 2.5課程設(shè)計總結(jié)- 22 -</p><p> 2,5,1調(diào)試中遇到的較重要問題回顧- 22 -</p><p> 2.5.2算法的效率及改進設(shè)想- 23 -</p><
7、;p> 參考文獻- 24 -</p><p><b> 附錄- 25 -</b></p><p> 附錄1- 25 -</p><p> 附錄2- 35 -</p><p> 第1章 停車場管理問題</p><p><b> 1.1需求分析</b>&
8、lt;/p><p> 1.1.1課程設(shè)計的目的</p><p> 運用數(shù)據(jù)結(jié)構(gòu)編寫一個C語言程序,實現(xiàn)對停車場的管理。只要包括:車輛到達時得信息登記,車輛離開時得信息記錄及便道的車輛信息的顯示功能。</p><p> 1.1.2課程設(shè)計的任務</p><p> 該系統(tǒng)實現(xiàn)以下幾個功能:</p><p> ?。?)車
9、輛到達信息登記:包括車牌號,在停車場停放的位置等;</p><p> ?。?)車輛離開信息記錄;</p><p> ?。?)信息顯示:顯示停車場內(nèi)和便道內(nèi)的汽車到達及位置等信息;</p><p> 1.1.3軟件運行和開發(fā)工具</p><p> 1、windows2000以上操作系統(tǒng)</p><p> 2、Vis
10、ualC++6.0開發(fā)環(huán)境</p><p> 1.1.4系統(tǒng)總體設(shè)計圖</p><p><b> 圖1-1</b></p><p><b> 1.1.5基本信息</b></p><p> 車的車牌號,到達時信息及離開時信息。</p><p><b> 1.
11、2概要設(shè)計</b></p><p> 使用Visual C++平臺設(shè)計學生成績管理系統(tǒng)的主框架。</p><p><b> 1.2.1問題定義</b></p><p> 該程序主要是為了實現(xiàn)對車庫的管理,為實現(xiàn)該功能先定義了一個系統(tǒng)菜單:(1)添加信息 </p><p> ?。?)查找停車
12、信息 </p><p> ?。?)顯示全部信息 </p><p><b> ?。?)顯示統(tǒng)計數(shù)據(jù)</b></p><p> 1.3流程圖及系統(tǒng)測試</p><p><b> 1.3.1進停車場</b></p><p> 圖1-2進停車場流程<
13、/p><p><b> 1.3.2車輛離開</b></p><p><b> 圖1-3車輛離開</b></p><p><b> 1.4程序運行圖</b></p><p><b> 1.4.1菜單欄</b></p><p>
14、圖1-4菜單欄運行圖</p><p> 1.4.2輸入信息欄</p><p> 圖1-5輸入信息欄運行圖</p><p><b> 1.4.3出車欄</b></p><p> 圖1-6出車欄運行圖</p><p><b> 1.4.4顯示欄</b></p>
15、;<p> 圖1-7顯示欄運行圖</p><p><b> 1.5心得感受</b></p><p> 開始時候的課程設(shè)計完全沒有思路,感覺很迷茫,不知道從何做起。幸好在課設(shè)之前孫老師給我們做了很詳細的指點,記得在大一的時候老師就提到過他,當時就給我們留下了深刻的印象。是一位很負責任的,很有耐心的好老師,我們很愛孫鴻飛老師。</p>&
16、lt;p> 課程設(shè)計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著科學技術(shù)發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握管理項目的開發(fā)技術(shù)是十分重要的。 回顧起此次停車場問題管理系統(tǒng)課程設(shè)計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整一星期的日子
17、里,可以說得是苦多于甜,但是可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)
18、現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計之后,一定把以前所學過的知識重新溫故。</p><p> 在以后會有更多的課程設(shè)計,我們現(xiàn)在的努力是為了將來打好基礎(chǔ),趙老師很認真的對待我們的答辯,這是一種很負責任的表現(xiàn),這是要讓我們真正的自己動手,了解和掌握一些基本知識,在以后的工作中做到游刃有余。 這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在孫老
19、師的辛勤指導下,終于游逆而解。同時,在孫老師的身上我學得到很多實用的知識,在此我表示感謝!同時,對給過我?guī)椭乃型瑢W和各位指導老師再次表示忠心的感謝!</p><p> 第2章 運動會分數(shù)統(tǒng)計</p><p><b> 2.1需求分析</b></p><p> 問題描述:參加運動會有n個學校,學校編號為1……n。比賽分成m個男子項目,和
20、w個女子項目。項目編號為男子1……m,女子m+1……m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學生自己設(shè)定。(m<=20,n<=20)。</p><p><b> 功能要求:</b></p><p> ?。?)可以輸入各個學校各個項目的前三名或前五名的成績
21、;</p><p> ?。?) 能統(tǒng)計各學校總分;</p><p> ?。?) 可以按學校編號或名稱、學校總分、男女團體總分排序輸出;</p><p> (4)可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W校;</p><p> (5) 數(shù)據(jù)存入文件并能隨時查詢;</p&g
22、t;<p> ?。?) 規(guī)定:輸入數(shù)據(jù)形式和范圍:可以輸入學校的名稱,運動項目的名稱。</p><p> 輸出形式:有中文提示,各學校分數(shù)為整形。</p><p> 界面要求:有合理的提示,每個功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。</p><p><b> 2.2 概要設(shè)計</b></p&g
23、t;<p> 2.2.1 系統(tǒng)功能設(shè)計</p><p> 根據(jù)運動會分數(shù)統(tǒng)計系統(tǒng)問題的分析和設(shè)計要求,可以將該系統(tǒng)可以分為三個模塊:信息統(tǒng)計模塊、信息輸出模塊、信息查詢模塊,其系統(tǒng)功能結(jié)構(gòu)圖如圖2-1所示。</p><p> ?。?)信息統(tǒng)計模實現(xiàn)信息的輸入、統(tǒng)計、存檔。</p><p> ?。?)信息輸出模塊,實現(xiàn)信息的輸出。</p>
24、;<p> ?。?)信息查詢實現(xiàn)信息的查詢。</p><p> 圖2-1 系統(tǒng)功能結(jié)構(gòu)圖</p><p><b> 2.2.2函數(shù)構(gòu)造</b></p><p> 根據(jù)系統(tǒng)功能結(jié)構(gòu)圖的描述,可以構(gòu)造出該系統(tǒng)的幾個基本的函數(shù),其方法名和功能如表2-1所示。</p><p> 表2-1 函數(shù)功能表<
25、;/p><p><b> 2.3詳細設(shè)計</b></p><p> 2.3.1 數(shù)據(jù)類型及重要變量的定義</p><p> 定義運動項目數(shù)據(jù)類型,用于存放運動項目,包括項目編號、項目所取名次數(shù)、名次、分數(shù)。</p><p> //定義項目結(jié)點的類型</p><p> typedef stru
26、ct</p><p><b> { </b></p><p> int itemnum; //項目編號</p><p> int top; //項目取名次的數(shù)目,由用戶定義3或5</p><p> int range[5]; //名次</p><p> int mark[5];
27、//分數(shù)</p><p> }itemnode;</p><p> 定義學校數(shù)據(jù)類型,用來存儲參賽學校信息,包括學校編號、學??偡?、男團總分、女團總分、項目數(shù)組。</p><p> //定義學校結(jié)點類型</p><p> typedef struct</p><p><b> {</b>
28、</p><p> int schoolnum; //學校編號</p><p> int score; //學??偡?lt;/p><p> int mscore; //男團體總分</p><p> int wscore; //女團體總分</p><p> itemnode c[m+w]; //項
29、目數(shù)組</p><p> }schoolnode;</p><p> 定義學校數(shù)組schoolnode h[n]。采用數(shù)組結(jié)構(gòu)有利于隨機的存儲和查詢。定義全局標志變量int flag1、flag2,分別用以標志是否已經(jīng)向系統(tǒng)輸入了信息和標志系統(tǒng)中是否已經(jīng)存在信息。定義文件指針FILE * report,用來指向存檔的文件。</p><p> 2.3.2函數(shù)的設(shè)
30、計和實現(xiàn)</p><p> 在概要設(shè)計中已經(jīng)對該系統(tǒng)涉及的抽象數(shù)據(jù)類型和函數(shù)及其功能做了說明,這里就不在對每個函數(shù)進行一一說明,只對其中比較重要的功能模塊進行描述。</p><p> ?。?)信息輸入及分數(shù)統(tǒng)計功能</p><p> void inputinformation( )為輸入信息及分數(shù)統(tǒng)計函數(shù)。在輸入信息的同時進行分數(shù)的統(tǒng)計。可以輸入各個學校各項目前
31、三名或前五名的成績。在輸入學校的參賽項目時,結(jié)果取前三名還是前五名自己定,用一個選擇語句實現(xiàn)。利用swith語句前三名的分數(shù)賦為5、3、2,前五名的成績賦為7,5、3、2、1,未取得成績則賦為0。并統(tǒng)計團體總分,男團總分和女團總分。其主要功能代碼如下:</p><p> for(s=0;s<k;s++)</p><p> { printf("*****名次:&quo
32、t;);</p><p> scanf("%d",&h[i].c[j].range[s]); //輸入所獲名次信息</p><p> if(h[i].c[j].top==3)</p><p> switch(h[i].c[j].range[s])</p><p> { case 0: h[i].c
33、[j].mark[s]=0; break;</p><p> case 1: h[i].c[j].mark[s]=5; break;</p><p> case 2: h[i].c[j].mark[s]=3; break;</p><p> case 3: h[i].c[j].mark[s]=2; break;</p><p><
34、b> }</b></p><p><b> else</b></p><p> switch(h[i].c[j].range[s])</p><p> { case 0: h[i].c[j].mark[s]=0; break;</p><p> case 1: h[i].c[j].mark[
35、s]=7; break;</p><p> case 2: h[i].c[j].mark[s]=5; break;</p><p> case 3: h[i].c[j].mark[s]=3; break;</p><p> case 4: h[i].c[j].mark[s]=2; break;</p><p> case 5: h[i
36、].c[j].mark[s]=1; break;</p><p><b> }</b></p><p> h[i].score=h[i].score+h[i].c[j].mark[s];</p><p><b> (2)信息輸出功能</b></p><p> void output( )為輸
37、出函數(shù)。列出一個輸出目錄利用swich語句使函數(shù)按學校編號輸出或按學??偡?、男團總分、女團總分由高到低排序輸出。利用輔助數(shù)組remember[]和冒泡排序的方法使之按分數(shù)的由高到低輸出。利用循環(huán)語句do while( )當輸入2時返回輸出目錄,輸入0是跳出循環(huán)返回主菜單。其流程圖如圖2-2所示。</p><p> 圖2-2輸出信息模塊流程圖</p><p><b> (3)信
38、息查詢功能</b></p><p> void inquiry( )為查詢函數(shù)。列車一個查詢目錄利用swich 語句使函數(shù)按學校編號或項目編號查詢,輸出某學校的某個項目的得分情況或某個項目的前幾名的學校。再利用循環(huán)語句do while( )當輸入2是返回查詢目錄,輸入0時跳出循環(huán)返回主菜單。其程序流程圖如圖2-3所示。</p><p> 圖2-3 查詢信息模塊程序流程圖&l
39、t;/p><p><b> ?。?)主函數(shù)</b></p><p> void main( )是主函數(shù)。列出主菜單,利用switch語句調(diào)用以上函數(shù)實現(xiàn)各個菜單的功能。</p><p> 想在每次查詢結(jié)束想返回主菜單進行其它項時,應在main( )函數(shù)中調(diào)用其它函數(shù)時再調(diào)用main( )函數(shù),如:</p><p> s
40、witch(choice)</p><p><b> { </b></p><p><b> case 1: </b></p><p> printf("輸入信息:\n");inputinformation();writedata();printf("信息已存入檔案!");ma
41、in();</p><p><b> case 2: </b></p><p> printf("輸出信息:\n");if(flag1)readdata();output();main();</p><p> 在進入主菜單后為了確保系統(tǒng)中已經(jīng)輸入了信息,用標志標量flag1和flag2來控制循環(huán)。如果系統(tǒng)中沒有任何信息
42、,用戶就不能選擇輸入或查詢操作,此時會輸出提示信息,并返回主菜單。直到用戶輸入了信息或退出系統(tǒng)。其實現(xiàn)代碼如下:</p><p> do{ printf("======================歡迎使用======================\n"); </p><p> printf("\n\n*****************運動
43、會分數(shù)統(tǒng)計系統(tǒng)********************\n");</p><p> printf("\n\n********************1.輸入信息*************************\n");</p><p> printf("********************2.輸出信息********************
44、*****\n");</p><p> printf("********************3.查詢信息*************************\n");</p><p> printf("********************4.退出系統(tǒng)*************************\n\n\n");</p&
45、gt;<p> printf("================================================\n\n");</p><p> printf("********請選擇要實現(xiàn)步驟的編號( 請確保已經(jīng)輸入信息! ):\n\n");</p><p> scanf("%d",&
46、choice);</p><p> if(choice==4)break;</p><p> else if(choice==1)flag1=0;</p><p> else if((report=fopen("sportsdata.txt","r"))!=null )flag2=0;</p><p&
47、gt;<b> else </b></p><p> { system("cls");</p><p> printf("\n\n\n\n系統(tǒng)中無任何信息!\n\n請先輸入信息!!!\n\n\n\n");</p><p><b> }</b></p><
48、;p> }while(flag1 && flag2);</p><p><b> 2.4測試</b></p><p> 運行程序,進入系統(tǒng)主菜單。用戶可以選擇輸入、輸出、查詢信息或退出系統(tǒng),界面如圖2-3所示。</p><p> 圖2-3 系統(tǒng)主界面</p><p><b> (
49、1)輸入信息</b></p><p> 輸入1得到進入輸入信息模塊。根據(jù)系統(tǒng)提示將以下信息輸入系統(tǒng)中:</p><p> 學校編號1,項目編號1,取前5名,獲得1個名次,是第5名;項目編號2,取前3名,獲得3個名次,分別是1、2、3名。</p><p> 學校編號2,項目編號1,取前5名,獲得4個名次,分別是1、2、3、4名;項目編號2,取前5名,
50、獲得0個名次。</p><p> 輸入信息后,會自動存檔,并提示存檔成功,然后自動返還主菜單,如圖2-4所示。</p><p> 圖2-4信息成功輸入系統(tǒng)并存入了文檔 </p><p><b> (2)輸出信息</b></p><p> 輸入2進入輸出信息模塊,該模塊分四項,分別代表一種輸出方式,如圖2-5所示。
51、</p><p> 圖2-5 輸入信息模塊界面</p><p> 用戶可以按照自己的喜好,選擇一種方式輸入信息,輸入2返回輸出信息模塊,輸入0返回主菜單。如圖7~9分別是按照學校編號、學??偡帧⑴畧F總分輸出的情況。</p><p> 圖2-6 按學校總分輸出</p><p> 圖2-7按學??偡州敵?lt;/p><p&
52、gt; 圖2-8 按女團總分輸出</p><p><b> (3)查詢信息</b></p><p> 輸入3進入信息查詢模塊,該模塊分為兩項,如圖2-7所示。</p><p> 圖2-7 信息查詢模塊</p><p> 用戶可以選擇不同菜單進行查詢,如圖4-8和圖4-9分別是按照學校編號和項目編號查詢的情況。
53、</p><p> 圖2-8 按學校編號查詢</p><p> 圖2-9 按項目編號查詢</p><p><b> ?。?)退出系統(tǒng)</b></p><p> 在主菜單下輸入4可以退出系統(tǒng),并有中文提示,如圖所示。</p><p> 圖2-10 退出系統(tǒng)</p><p
54、><b> 2.5課程設(shè)計總結(jié)</b></p><p> 2,5,1調(diào)試中遇到的較重要問題回顧</p><p> ?。?)提出問題:所有輸入輸出內(nèi)容只能在一屏內(nèi)顯示,學過c語言,很知道”\n”是換行,”\f”是換屏的,可是在這里就是無法實現(xiàn)。</p><p> 解決問題: 輸入clrscr();</p><p&g
55、t; ?。?)提出問題:設(shè)置選項,供用戶輸入選擇時,當按任意鍵時都會跳入下一步操作,或者直接退出系統(tǒng)。</p><p> 分析問題:在供用戶選擇時,提供了幾個選項,就寫幾個case語句,但是當用戶輸入的并不是這幾個數(shù)字時,系統(tǒng)就不能做出正確判斷。</p><p> 解決問題:修改case語句,添加default語句提示出錯,要求重新輸入。源代碼如下:</p><p&
56、gt;<b> Default:{</b></p><p> clrscr(); /*清屏*/</p><p> printf("輸入錯誤,請重新選擇");</p><p><b> }</b></p><p> ?。?)提出問題:用戶在系統(tǒng)主菜單上進
57、行選擇時,若沒有輸入任何初始信息,而選擇輸出或查詢操作,系統(tǒng)也會做出相應操作。</p><p> 解決問題:增加標識變量作為循環(huán)終止變量,用來判斷系統(tǒng)中是否已經(jīng)輸入了信息。若沒有就提示用戶先輸入信息。</p><p> 2.5.2算法的效率及改進設(shè)想</p><p> 算法的效率:總的來講,嚴重引響執(zhí)行速度的便是查找,查找任意一個數(shù)據(jù),便要將其所在的結(jié)構(gòu)從頭至
58、尾遍歷一次,耗費大量的時間。</p><p> 改進設(shè)想:因大部分顯示均是以學校為單位,所以將以由有關(guān)人的各種信息為集合的結(jié)構(gòu)改為以由有關(guān)學校的各種信息為集合的結(jié)構(gòu)。</p><p><b> 2.5.3心得體會</b></p><p> 在這次上機過程中遇到過一些問題,但經(jīng)過不懈努力,解決了部分,還有的現(xiàn)在不能解決,留待日后思考和解決。
59、</p><p> 比如說在運用數(shù)據(jù)結(jié)構(gòu)排序的時候,方法的選擇上,總是想用時間復雜度小的算法,但結(jié)果出了問題,最后還是用了我們熟悉的選擇法排序。</p><p> 在編寫之前,做整體規(guī)劃和詳細設(shè)計很重要。只有思路清晰,設(shè)計合理可行,編碼才有可能有的放矢,才能更加有效的完成任務。</p><p> 本次集中上機實驗,對我來說可以算是一次挑戰(zhàn),因為在理論學習中沒有
60、好好的掌握,現(xiàn)在要獨立完成一個較復雜的程序編寫,確實有一點困難。但我對于難度一向是以積極迎戰(zhàn)的態(tài)度來面對,認真積極努力完成這次集中上機的任務。對我來說這是一次很好的機會,同時我也很好的把握了這次機會,認真的完成了此次上機學習的任務,對自己今后在程序編寫方面以及文檔撰寫方面相信會有很大的幫助,在此也對老師安排這樣一次學習表示感謝,最后希望自己在數(shù)據(jù)結(jié)構(gòu)以及計算機的其他學習方面能夠得到很好的提高。</p><p>&
61、lt;b> 參考文獻</b></p><p> [1]李云清、楊慶紅、揭安全.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].人民郵電大學出版社,2004.6</p><p> [2]潘彥.算法設(shè)計與分析基礎(chǔ)[M].北京:清華大學出版社,2007.1</p><p> [3]肖夢強、曲秀清.軟件工程——原理、方法與應用[M].中國水利水電出版社,2005.10
62、</p><p> [4] 呂鳳翥.C++語言程序設(shè)計(第2版).電子工業(yè)出版社,2007.2</p><p> [5] 嚴蔚敏、吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].清華大學出版社,2002.9</p><p><b> 附錄</b></p><p><b> 附錄1</b></p&g
63、t;<p> #include <iostream></p><p> #include <malloc.h></p><p> #include <string></p><p> #include <windows.h></p><p><b> //常量定
64、義</b></p><p> #define MAX_STOP 5 //定義停車場最大停車數(shù)</p><p> #define MAX_PLATE 10 //定義車牌號最大長度</p><p> using namespace std; //使用st
65、d命名空間</p><p> //定義存儲汽車信息的結(jié)構(gòu)體</p><p> typedef struct</p><p><b> {</b></p><p> char license_plate[MAX_PLATE]; //汽車牌照號碼,定義為一個字符指針類型</p><p&
66、gt; char state; //汽車當前狀態(tài),字符p表示停放在停車位上,字符s表示停放在便道上,每輛車的初始狀態(tài)用字符i來進行表示</p><p><b> }CAR;</b></p><p> //定義模擬停車場的棧結(jié)構(gòu)</p><p> typedef struct</p><
67、p><b> {</b></p><p> CAR STOP[MAX_STOP]; //汽車信息的存儲空間</p><p> int top; //用來指示棧頂位置的靜態(tài)指針</p><p> }SeqStack;</p><p
68、> //定義模擬便道的隊列結(jié)構(gòu)</p><p> typedef struct node</p><p><b> {</b></p><p> CAR WAIT; //汽車信息的存儲空間</p><p> struct node *next;
69、 //用來指示隊列位置的動態(tài)指針</p><p> }QNode; //鏈隊列節(jié)點的類型</p><p> //定義鏈隊列的收尾指針</p><p> typedef struct</p><p><b> {</b></p>
70、;<p> QNode *front,*rear;</p><p> }LQueue; //將頭尾指針封裝在一起的鏈隊</p><p><b> //函數(shù)聲明 </b></p><p> int Empty_LQueue(LQueue *q);
71、 //判隊空</p><p> int LeaveCheck(SeqStack parking , char *license_plate); //檢查離開的車是否在停車場中</p><p> int QueueLength(LQueue *q); //判隊長度</p><p> int Out_LQueue(LQu
72、eue *&sidewalk , char *license_plate); //出隊操作</p><p> int StackEmpty(SeqStack parking); //判斷棧是否為空</p><p> int StackFull(SeqStack parking); //判斷棧是否為滿</p><p> in
73、t StackPop(SeqStack &parking); //出棧操作</p><p> int StackTop(SeqStack parking , char *license_plate); //取棧頂元素</p><p> void Car_come(SeqStack &parking , LQueue *&sidewalk);
74、 //有車到來時的操作</p><p> void Car_leave(SeqStack &parking , LQueue *&sidewalk); //有車離開的操作</p><p> void Display(SeqStack parking); //顯示停車場內(nèi)的所有信息 調(diào)試時用</p><p>
75、 void InitStack(SeqStack &parking); //初始化棧</p><p> void InitList(LQueue *&sidewalk); //初始化隊列</p><p> void In_LQueue(LQueue *&sidewalk , char *
76、license_plate); //進隊操作</p><p> void Input_Check(char *license_plate); //檢驗輸入的車牌是否合法</p><p> void StackPush(SeqStack &parking , char *license_plate);//進棧操作</p><p>
77、 void main()</p><p><b> {</b></p><p><b> //定義變量</b></p><p> SeqStack parking;</p><p> LQueue *sidewalk = NULL;</p><p> char *c
78、hoice = new char;</p><p> int flag = 1; //定義一個變量 判斷是否退出</p><p> InitStack(parking); //初始化一個為空的停車場</p><p> InitList(sidewalk); //初始化一個為空的便道</p>
79、<p> while(flag) //運行界面及功能選擇</p><p> {cout<<"\t****************************************************\n\n";</p><p> cout<<"\t*****************歡迎來到
80、孫曉東的停車場*************\n\n";</p><p> cout<<"\t| 停車場模擬管理系統(tǒng) |\n\n";</p><p> cout<<"\t|------------------------------------------------
81、--|\n\n";</p><p> cout<<"\t| |\n\n";</p><p> cout<<"\t| 有車到來時請按C鍵。 |\n\n";<
82、;/p><p> cout<<"\t| 有車要走時請按l鍵。 |\n\n";</p><p> cout<<"\t| 查看停車場請按D鍵。 |\n\n";</p><p> cout&l
83、t;<"\t| 要退出系統(tǒng)請按Q鍵。 |\n\n";</p><p> cout<<"\t|--------------------------------------------------|\n\n";</p><p> cout<<"\t|**
84、*************************************************\n\n";</p><p> cout<<"請選擇操作:";</p><p> gets(choice);</p><p> if(1 != strlen(choice))</p><p><
85、;b> {</b></p><p> cout<<"請正確輸入選項!";</p><p><b> continue;</b></p><p><b> }</b></p><p><b> else</b></
86、p><p><b> {</b></p><p> switch(*choice)</p><p><b> {</b></p><p><b> case 'c':</b></p><p><b> case '
87、C':</b></p><p><b> {</b></p><p> Car_come(parking,sidewalk);break;</p><p><b> }</b></p><p><b> case 'l':</b>&l
88、t;/p><p><b> case 'L':</b></p><p><b> {</b></p><p> Car_leave(parking,sidewalk);break;</p><p><b> }</b></p><p>
89、;<b> case 'q':</b></p><p><b> case 'Q':</b></p><p><b> {</b></p><p> flag=0;break;</p><p><b> }</b>
90、</p><p><b> case 'd':</b></p><p><b> case 'D':</b></p><p><b> {</b></p><p> Display(parking);break;</p>&
91、lt;p><b> }</b></p><p><b> default:</b></p><p> cout<<"選擇不正確!請重新選擇!\n";</p><p><b> }</b></p><p><b> }&l
92、t;/b></p><p><b> }</b></p><p><b> }</b></p><p> //有車到來時的操作 </p><p> void Car_come(SeqStack &parking , LQueue *&sidewalk)</p&g
93、t;<p><b> {</b></p><p> char license_plate[MAX_PLATE]; //定義變量</p><p> cout<<"請輸入車輛的車牌號碼:";</p><p> Input_Check(license_plate);<
94、;/p><p> if(StackFull(parking)) //判斷停車場是否已滿,滿則進入便道,不滿進入停車場</p><p><b> {</b></p><p> In_LQueue(sidewalk , license_plate); //進入便道</p>
95、;<p> cout<<"停車場已滿請在便道等候,您的位置為"<<QueueLength(sidewalk)</p><p><b> <<endl;</b></p><p><b> }</b></p><p><b> else&l
96、t;/b></p><p><b> {</b></p><p> StackPush(parking , license_plate); //進入停車場</p><p> cout<<"請進入停車場中的"<<parking.top+1<<"號停車位\n"
97、;;</p><p><b> }</b></p><p> // Display(parking);</p><p><b> }</b></p><p> void Car_leave(SeqStack &parking , LQueue *&sidewalk) //
98、有車離開時的操作</p><p><b> {</b></p><p> SeqStack tmpparking; //定義臨時停車場</p><p> char leave_license_plate[MAX_PLATE]; //要離開的車牌號
99、</p><p> char license_plate[MAX_PLATE]; //存放從停車場中讀出來的車牌信息</p><p> InitStack(tmpparking); //初始化臨時停車場</p><p> if(StackEmpty(parking))
100、 //判斷停車場中是否有車 </p><p><b> {</b></p><p> cout<<"當前停車場中沒有車\n";</p><p> return;
101、 //退出子函數(shù)</p><p><b> }</b></p><p> cout<<"請輸入要離開的車牌照:";</p><p> Input_Check(leave_license_plate);</p><p> cout<<"當前停車場中有&quo
102、t;<<parking.top+1<<"輛車\n";</p><p> if(LeaveCheck(parking , leave_license_plate)) //判斷車是否在停車場中</p><p><b> {</b></p><p> cout<<"
103、您的車在"<<LeaveCheck(parking , leave_license_plate)<<"號車位上\n"; //車在停車場中</p><p> while(StackTop(parking , license_plate)&& (strcmp(parking.STOP[parking.top].license_plate
104、, leave_license_plate ) != 0))</p><p><b> {</b></p><p> strcpy(parking.STOP[parking.top].license_plate , license_plate);</p><p> cout<<"牌照為"<<li
105、cense_plate<<"的車暫時退出停車場"<<parking.top+1<<"號位\n";</p><p> StackPush(tmpparking , license_plate); //停車場中的車暫時退出 進入臨時停車場</p>
106、<p> StackPop(parking); //出棧</p><p><b> }</b></p><p> cout<<"牌照為"<<license_plate<<&quo
107、t;的車離開停車場"<<parking.top+1<<"號位\n";</p><p> StackPop(parking); //出棧</p><p> //將臨時停車場中的車?;赝\噲?lt;/p>&
108、lt;p> while(StackEmpty(tmpparking) != 1)</p><p><b> {</b></p><p> StackTop(tmpparking , license_plate);</p><p> StackPush(parking , license_plate );</p>&l
109、t;p> cout<<"牌照為"<<license_plate<<"的車進入停車場"<<parking.top+1<<"號位\n";</p><p> license_plate[0] = '\0';</p><p> StackPop(tmp
110、parking);</p><p><b> }</b></p><p> if(parking.top+1 == MAX_STOP-1) //判斷車離開前停車場是否停滿</p><p> if(QueueLength(sidewalk)) //如果停滿則判斷便道上是否有車</p><p&g
111、t;<b> {</b></p><p> //便道中有車 則從便道中停入停車場 </p><p> Out_LQueue(sidewalk , license_plate); //出隊</p><p> StackPush(parking , license_plate);
112、 //入棧</p><p> cout<<"在便道中牌照為"<<license_plate<<"的車進入停車場"<<parking.top+1<<"號位\n";</p><p><b> }</b></p><p>&l
113、t;b> }</b></p><p><b> else</b></p><p><b> //車不在停車場中</b></p><p> cout<<"您的車不在停車場中!\n";</p><p><b> }</b>
114、</p><p><b> //初始化順序棧</b></p><p> void InitStack(SeqStack &parking)</p><p><b> {</b></p><p> parking.top = -1;</p><p><b&
115、gt; }</b></p><p><b> //判棧空</b></p><p> int StackEmpty(SeqStack parking)</p><p><b> {</b></p><p> if(parking.top == -1)</p><
116、;p><b> return 1;</b></p><p><b> else </b></p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //判棧滿</b
117、></p><p> int StackFull(SeqStack parking)</p><p><b> {</b></p><p> if(parking.top == MAX_STOP-1)</p><p><b> return 1;</b></p><
118、p><b> else</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //入棧</b></p><p> void StackPush(SeqStack &am
119、p;parking , char *license_plate)</p><p><b> {</b></p><p> parking.top++;</p><p> strcpy(parking.STOP[parking.top].license_plate , license_plate);</p><p>
120、 parking.STOP[parking.top].state = 'p';</p><p><b> }</b></p><p> //出棧 返回棧頂指針</p><p> int StackPop(SeqStack &parking)</p><p><b> {<
121、/b></p><p> if(StackEmpty(parking))</p><p><b> return 0;</b></p><p><b> else</b></p><p> return parking.top--;</p><p><b&
122、gt; }</b></p><p><b> //取棧頂元素</b></p><p> int StackTop(SeqStack parking , char *license_plate )</p><p><b> {</b></p><p> if(StackEmpty
123、(parking))</p><p><b> return 0;</b></p><p><b> else</b></p><p><b> {</b></p><p> strcpy(license_plate , parking.STOP[parking.top
124、].license_plate);</p><p><b> return 1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //顯示所有</b></p><p&
125、gt; void Display(SeqStack parking)</p><p><b> {</b></p><p> if(parking.top == -1)</p><p> printf("停車場為空\n");</p><p><b> else </b>
126、</p><p><b> {</b></p><p> while(parking.top != -1)</p><p><b> {</b></p><p> cout<<"車牌號為:"<<parking.STOP[parking.top].l
127、icense_plate;</p><p> cout<<",停在"<<parking.top + 1 <<"號車位上";</p><p> parking.top--;</p><p><b> }</b></p><p><b&g
128、t; }</b></p><p><b> }</b></p><p><b> //初始化隊列</b></p><p> void InitList(LQueue *&sidewalk)</p><p><b> { </b></p>
129、<p> sidewalk = (LQueue *)malloc(sizeof(LQueue));</p><p> sidewalk->front=sidewalk->rear = NULL;</p><p><b> }</b></p><p><b> //入隊</b></p&
130、gt;<p> void In_LQueue(LQueue *&sidewalk,char *license_plate)</p><p><b> { </b></p><p> QNode *car_on_sidewalk;</p><p> car_on_sidewalk = (QNode *)malloc(
131、sizeof(QNode)); //為新節(jié)點開辟新空間</p><p> strcpy(car_on_sidewalk->WAIT.license_plate , license_plate); //將數(shù)據(jù)寫入節(jié)點</p><p> car_on_sidewalk->WAIT.state = 's'; //寫入停
132、車信息</p><p> car_on_sidewalk->next = NULL;</p><p> if(Empty_LQueue(sidewalk)) //隊空則創(chuàng)建第一個節(jié)點</p><p> sidewalk->front = sidewalk->rear = car_on_sidewalk
133、;</p><p><b> else</b></p><p><b> { </b></p><p><b> //隊非空插入隊尾</b></p><p> sidewalk->rear->next = car_on_sidewalk;</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計---停車場管理
- 停車場管理問題系統(tǒng)課程設(shè)計報告
- 課程設(shè)計---停車場停車場車輛管理系統(tǒng)實現(xiàn)與設(shè)計
- 停車場管理系統(tǒng)課程設(shè)計
- 停車場管理系統(tǒng)課程設(shè)計報告
- 課程設(shè)計報告---停車場車位管理
- 停車場系統(tǒng)課程設(shè)計
- 地下停車場課程設(shè)計
- 課程設(shè)計報告-- 停車場管理系統(tǒng)
- 停車場管理課程設(shè)計報告
- 課程設(shè)計報告—停車場管理系統(tǒng)
- 停車場管理課程設(shè)計報告--停車場管理模擬程序的設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--模擬停車場管理問題
- 智能停車場課程設(shè)計--校園智能停車場的系統(tǒng)設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--- 停車場問題
- 校園智能停車場的系統(tǒng)設(shè)計-智能停車場課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--停車場管理
- 微機課程設(shè)計—停車場出入管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計停車場管理
評論
0/150
提交評論