停車(chē)場(chǎng)管理問(wèn)題課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  經(jīng)濟(jì)管理學(xué)院本科課程設(shè)計(jì)論文</p><p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p><b>  目錄</b></p><p>  第1章 停車(chē)場(chǎng)管理問(wèn)題- 3 -</p><p>  1.1需求分析- 3 -</p><p>  1.

2、1.1課程設(shè)計(jì)的目的- 3 -</p><p>  1.1.2課程設(shè)計(jì)的任務(wù)- 3 -</p><p>  1.1.3軟件運(yùn)行和開(kāi)發(fā)工具- 3 -</p><p>  1.1.4系統(tǒng)總體設(shè)計(jì)圖- 3 -</p><p>  1.1.5基本信息- 4 -</p><p>  1.2概要設(shè)計(jì)- 4 -</

3、p><p>  1.2.1問(wèn)題定義- 4 -</p><p>  1.3流程圖及系統(tǒng)測(cè)試- 5 -</p><p>  1.3.1進(jìn)停車(chē)場(chǎng)- 5 -</p><p>  1.3.2車(chē)輛離開(kāi)- 5 -</p><p>  1.4程序運(yùn)行圖- 6 -</p><p>  1.4.1菜單欄-

4、6 -</p><p>  1.4.2輸入信息欄- 7 -</p><p>  1.4.3出車(chē)欄- 8 -</p><p>  1.4.4顯示欄- 9 -</p><p>  1.5心得感受- 9 -</p><p>  第2章 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)- 11 -</p><p>  2.1需

5、求分析- 11 -</p><p>  2.2 概要設(shè)計(jì)- 11 -</p><p>  2.2.1 系統(tǒng)功能設(shè)計(jì)- 11 -</p><p>  2.2.2函數(shù)構(gòu)造- 12 -</p><p>  2.3詳細(xì)設(shè)計(jì)- 13 -</p><p>  2.3.1 數(shù)據(jù)類(lèi)型及重要變量的定義- 13 -</

6、p><p>  2.3.2函數(shù)的設(shè)計(jì)和實(shí)現(xiàn)- 14 -</p><p>  2.4測(cè)試- 18 -</p><p>  2.5課程設(shè)計(jì)總結(jié)- 22 -</p><p>  2,5,1調(diào)試中遇到的較重要問(wèn)題回顧- 22 -</p><p>  2.5.2算法的效率及改進(jìn)設(shè)想- 23 -</p><

7、;p>  參考文獻(xiàn)- 24 -</p><p><b>  附錄- 25 -</b></p><p>  附錄1- 25 -</p><p>  附錄2- 35 -</p><p>  第1章 停車(chē)場(chǎng)管理問(wèn)題</p><p><b>  1.1需求分析</b>&

8、lt;/p><p>  1.1.1課程設(shè)計(jì)的目的</p><p>  運(yùn)用數(shù)據(jù)結(jié)構(gòu)編寫(xiě)一個(gè)C語(yǔ)言程序,實(shí)現(xiàn)對(duì)停車(chē)場(chǎng)的管理。只要包括:車(chē)輛到達(dá)時(shí)得信息登記,車(chē)輛離開(kāi)時(shí)得信息記錄及便道的車(chē)輛信息的顯示功能。</p><p>  1.1.2課程設(shè)計(jì)的任務(wù)</p><p>  該系統(tǒng)實(shí)現(xiàn)以下幾個(gè)功能:</p><p>  (1)車(chē)

9、輛到達(dá)信息登記:包括車(chē)牌號(hào),在停車(chē)場(chǎng)停放的位置等;</p><p> ?。?)車(chē)輛離開(kāi)信息記錄;</p><p> ?。?)信息顯示:顯示停車(chē)場(chǎng)內(nèi)和便道內(nèi)的汽車(chē)到達(dá)及位置等信息;</p><p>  1.1.3軟件運(yùn)行和開(kāi)發(fā)工具</p><p>  1、windows2000以上操作系統(tǒng)</p><p>  2、Vis

10、ualC++6.0開(kāi)發(fā)環(huán)境</p><p>  1.1.4系統(tǒng)總體設(shè)計(jì)圖</p><p><b>  圖1-1</b></p><p><b>  1.1.5基本信息</b></p><p>  車(chē)的車(chē)牌號(hào),到達(dá)時(shí)信息及離開(kāi)時(shí)信息。</p><p><b>  1.

11、2概要設(shè)計(jì)</b></p><p>  使用Visual C++平臺(tái)設(shè)計(jì)學(xué)生成績(jī)管理系統(tǒng)的主框架。</p><p><b>  1.2.1問(wèn)題定義</b></p><p>  該程序主要是為了實(shí)現(xiàn)對(duì)車(chē)庫(kù)的管理,為實(shí)現(xiàn)該功能先定義了一個(gè)系統(tǒng)菜單:(1)添加信息 </p><p> ?。?)查找停車(chē)

12、信息 </p><p> ?。?)顯示全部信息 </p><p><b> ?。?)顯示統(tǒng)計(jì)數(shù)據(jù)</b></p><p>  1.3流程圖及系統(tǒng)測(cè)試</p><p><b>  1.3.1進(jìn)停車(chē)場(chǎng)</b></p><p>  圖1-2進(jìn)停車(chē)場(chǎng)流程<

13、/p><p><b>  1.3.2車(chē)輛離開(kāi)</b></p><p><b>  圖1-3車(chē)輛離開(kāi)</b></p><p><b>  1.4程序運(yùn)行圖</b></p><p><b>  1.4.1菜單欄</b></p><p>  

14、圖1-4菜單欄運(yùn)行圖</p><p>  1.4.2輸入信息欄</p><p>  圖1-5輸入信息欄運(yùn)行圖</p><p><b>  1.4.3出車(chē)欄</b></p><p>  圖1-6出車(chē)欄運(yùn)行圖</p><p><b>  1.4.4顯示欄</b></p>

15、;<p>  圖1-7顯示欄運(yùn)行圖</p><p><b>  1.5心得感受</b></p><p>  開(kāi)始時(shí)候的課程設(shè)計(jì)完全沒(méi)有思路,感覺(jué)很迷茫,不知道從何做起。幸好在課設(shè)之前孫老師給我們做了很詳細(xì)的指點(diǎn),記得在大一的時(shí)候老師就提到過(guò)他,當(dāng)時(shí)就給我們留下了深刻的印象。是一位很負(fù)責(zé)任的,很有耐心的好老師,我們很愛(ài)孫鴻飛老師。</p>&

16、lt;p>  課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握管理項(xiàng)目的開(kāi)發(fā)技術(shù)是十分重要的。 回顧起此次停車(chē)場(chǎng)問(wèn)題管理系統(tǒng)課程設(shè)計(jì),至今我仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,在整整一星期的日子

17、里,可以說(shuō)得是苦多于甜,但是可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)

18、現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故。</p><p>  在以后會(huì)有更多的課程設(shè)計(jì),我們現(xiàn)在的努力是為了將來(lái)打好基礎(chǔ),趙老師很認(rèn)真的對(duì)待我們的答辯,這是一種很負(fù)責(zé)任的表現(xiàn),這是要讓我們真正的自己動(dòng)手,了解和掌握一些基本知識(shí),在以后的工作中做到游刃有余。 這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問(wèn)題,最后在孫老

19、師的辛勤指導(dǎo)下,終于游逆而解。同時(shí),在孫老師的身上我學(xué)得到很多實(shí)用的知識(shí),在此我表示感謝!同時(shí),對(duì)給過(guò)我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!</p><p>  第2章 運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)</p><p><b>  2.1需求分析</b></p><p>  問(wèn)題描述:參加運(yùn)動(dòng)會(huì)有n個(gè)學(xué)校,學(xué)校編號(hào)為1……n。比賽分成m個(gè)男子項(xiàng)目,和

20、w個(gè)女子項(xiàng)目。項(xiàng)目編號(hào)為男子1……m,女子m+1……m+w。不同的項(xiàng)目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些取前五名或前三名由學(xué)生自己設(shè)定。(m<=20,n<=20)。</p><p><b>  功能要求:</b></p><p> ?。?)可以輸入各個(gè)學(xué)校各個(gè)項(xiàng)目的前三名或前五名的成績(jī)

21、;</p><p> ?。?) 能統(tǒng)計(jì)各學(xué)??偡?;</p><p>  (3) 可以按學(xué)校編號(hào)或名稱(chēng)、學(xué)校總分、男女團(tuán)體總分排序輸出;</p><p> ?。?)可以按學(xué)校編號(hào)查詢(xún)學(xué)校某個(gè)項(xiàng)目的情況;可以按項(xiàng)目編號(hào)查詢(xún)?nèi)〉们叭蚯拔迕膶W(xué)校;</p><p>  (5) 數(shù)據(jù)存入文件并能隨時(shí)查詢(xún);</p&g

22、t;<p> ?。?) 規(guī)定:輸入數(shù)據(jù)形式和范圍:可以輸入學(xué)校的名稱(chēng),運(yùn)動(dòng)項(xiàng)目的名稱(chēng)。</p><p>  輸出形式:有中文提示,各學(xué)校分?jǐn)?shù)為整形。</p><p>  界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。</p><p><b>  2.2 概要設(shè)計(jì)</b></p&g

23、t;<p>  2.2.1 系統(tǒng)功能設(shè)計(jì)</p><p>  根據(jù)運(yùn)動(dòng)會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)問(wèn)題的分析和設(shè)計(jì)要求,可以將該系統(tǒng)可以分為三個(gè)模塊:信息統(tǒng)計(jì)模塊、信息輸出模塊、信息查詢(xún)模塊,其系統(tǒng)功能結(jié)構(gòu)圖如圖2-1所示。</p><p> ?。?)信息統(tǒng)計(jì)模實(shí)現(xiàn)信息的輸入、統(tǒng)計(jì)、存檔。</p><p> ?。?)信息輸出模塊,實(shí)現(xiàn)信息的輸出。</p>

24、;<p>  (3)信息查詢(xún)實(shí)現(xiàn)信息的查詢(xú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)的幾個(gè)基本的函數(shù),其方法名和功能如表2-1所示。</p><p>  表2-1 函數(shù)功能表<

25、;/p><p><b>  2.3詳細(xì)設(shè)計(jì)</b></p><p>  2.3.1 數(shù)據(jù)類(lèi)型及重要變量的定義</p><p>  定義運(yùn)動(dòng)項(xiàng)目數(shù)據(jù)類(lèi)型,用于存放運(yùn)動(dòng)項(xiàng)目,包括項(xiàng)目編號(hào)、項(xiàng)目所取名次數(shù)、名次、分?jǐn)?shù)。</p><p>  //定義項(xiàng)目結(jié)點(diǎn)的類(lèi)型</p><p>  typedef stru

26、ct</p><p><b>  { </b></p><p>  int itemnum; //項(xiàng)目編號(hào)</p><p>  int top; //項(xiàng)目取名次的數(shù)目,由用戶(hù)定義3或5</p><p>  int range[5]; //名次</p><p>  int mark[5];

27、//分?jǐn)?shù)</p><p>  }itemnode;</p><p>  定義學(xué)校數(shù)據(jù)類(lèi)型,用來(lái)存儲(chǔ)參賽學(xué)校信息,包括學(xué)校編號(hào)、學(xué)??偡帧⒛袌F(tuán)總分、女團(tuán)總分、項(xiàng)目數(shù)組。</p><p>  //定義學(xué)校結(jié)點(diǎn)類(lèi)型</p><p>  typedef struct</p><p><b>  {</b>

28、</p><p>  int schoolnum; //學(xué)校編號(hào)</p><p>  int score; //學(xué)??偡?lt;/p><p>  int mscore; //男團(tuán)體總分</p><p>  int wscore; //女團(tuán)體總分</p><p>  itemnode c[m+w]; //項(xiàng)

29、目數(shù)組</p><p>  }schoolnode;</p><p>  定義學(xué)校數(shù)組schoolnode h[n]。采用數(shù)組結(jié)構(gòu)有利于隨機(jī)的存儲(chǔ)和查詢(xún)。定義全局標(biāo)志變量int flag1、flag2,分別用以標(biāo)志是否已經(jīng)向系統(tǒng)輸入了信息和標(biāo)志系統(tǒng)中是否已經(jīng)存在信息。定義文件指針FILE * report,用來(lái)指向存檔的文件。</p><p>  2.3.2函數(shù)的設(shè)

30、計(jì)和實(shí)現(xiàn)</p><p>  在概要設(shè)計(jì)中已經(jīng)對(duì)該系統(tǒng)涉及的抽象數(shù)據(jù)類(lèi)型和函數(shù)及其功能做了說(shuō)明,這里就不在對(duì)每個(gè)函數(shù)進(jìn)行一一說(shuō)明,只對(duì)其中比較重要的功能模塊進(jìn)行描述。</p><p>  (1)信息輸入及分?jǐn)?shù)統(tǒng)計(jì)功能</p><p>  void inputinformation( )為輸入信息及分?jǐn)?shù)統(tǒng)計(jì)函數(shù)。在輸入信息的同時(shí)進(jìn)行分?jǐn)?shù)的統(tǒng)計(jì)??梢暂斎敫鱾€(gè)學(xué)校各項(xiàng)目前

31、三名或前五名的成績(jī)。在輸入學(xué)校的參賽項(xiàng)目時(shí),結(jié)果取前三名還是前五名自己定,用一個(gè)選擇語(yǔ)句實(shí)現(xiàn)。利用swith語(yǔ)句前三名的分?jǐn)?shù)賦為5、3、2,前五名的成績(jī)賦為7,5、3、2、1,未取得成績(jī)則賦為0。并統(tǒng)計(jì)團(tuán)體總分,男團(tuán)總分和女團(tuán)總分。其主要功能代碼如下:</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> ?。?)信息輸出功能</b></p><p>  void output( )為輸

37、出函數(shù)。列出一個(gè)輸出目錄利用swich語(yǔ)句使函數(shù)按學(xué)校編號(hào)輸出或按學(xué)??偡帧⒛袌F(tuán)總分、女團(tuán)總分由高到低排序輸出。利用輔助數(shù)組remember[]和冒泡排序的方法使之按分?jǐn)?shù)的由高到低輸出。利用循環(huán)語(yǔ)句do while( )當(dāng)輸入2時(shí)返回輸出目錄,輸入0是跳出循環(huán)返回主菜單。其流程圖如圖2-2所示。</p><p>  圖2-2輸出信息模塊流程圖</p><p><b> ?。?)信

38、息查詢(xún)功能</b></p><p>  void inquiry( )為查詢(xún)函數(shù)。列車(chē)一個(gè)查詢(xún)目錄利用swich 語(yǔ)句使函數(shù)按學(xué)校編號(hào)或項(xiàng)目編號(hào)查詢(xún),輸出某學(xué)校的某個(gè)項(xiàng)目的得分情況或某個(gè)項(xiàng)目的前幾名的學(xué)校。再利用循環(huán)語(yǔ)句do while( )當(dāng)輸入2是返回查詢(xún)目錄,輸入0時(shí)跳出循環(huán)返回主菜單。其程序流程圖如圖2-3所示。</p><p>  圖2-3 查詢(xún)信息模塊程序流程圖&l

39、t;/p><p><b> ?。?)主函數(shù)</b></p><p>  void main( )是主函數(shù)。列出主菜單,利用switch語(yǔ)句調(diào)用以上函數(shù)實(shí)現(xiàn)各個(gè)菜單的功能。</p><p>  想在每次查詢(xún)結(jié)束想返回主菜單進(jìn)行其它項(xiàng)時(shí),應(yīng)在main( )函數(shù)中調(diào)用其它函數(shù)時(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>  在進(jìn)入主菜單后為了確保系統(tǒng)中已經(jīng)輸入了信息,用標(biāo)志標(biāo)量flag1和flag2來(lái)控制循環(huán)。如果系統(tǒng)中沒(méi)有任何信息

42、,用戶(hù)就不能選擇輸入或查詢(xún)操作,此時(shí)會(huì)輸出提示信息,并返回主菜單。直到用戶(hù)輸入了信息或退出系統(tǒng)。其實(shí)現(xiàn)代碼如下:</p><p>  do{ printf("======================歡迎使用======================\n"); </p><p>  printf("\n\n*****************運(yùn)動(dòng)

43、會(huì)分?jǐn)?shù)統(tǒng)計(jì)系統(tǒng)********************\n");</p><p>  printf("\n\n********************1.輸入信息*************************\n");</p><p>  printf("********************2.輸出信息********************

44、*****\n");</p><p>  printf("********************3.查詢(xún)信息*************************\n");</p><p>  printf("********************4.退出系統(tǒng)*************************\n\n\n");</p&

45、gt;<p>  printf("================================================\n\n");</p><p>  printf("********請(qǐng)選擇要實(shí)現(xiàn)步驟的編號(hào)( 請(qǐng)確保已經(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)中無(wú)任何信息!\n\n請(qǐng)先輸入信息!!!\n\n\n\n");</p><p><b>  }</b></p><

48、;p>  }while(flag1 && flag2);</p><p><b>  2.4測(cè)試</b></p><p>  運(yùn)行程序,進(jìn)入系統(tǒng)主菜單。用戶(hù)可以選擇輸入、輸出、查詢(xún)信息或退出系統(tǒng),界面如圖2-3所示。</p><p>  圖2-3 系統(tǒng)主界面</p><p><b> ?。?/p>

49、1)輸入信息</b></p><p>  輸入1得到進(jìn)入輸入信息模塊。根據(jù)系統(tǒng)提示將以下信息輸入系統(tǒng)中:</p><p>  學(xué)校編號(hào)1,項(xiàng)目編號(hào)1,取前5名,獲得1個(gè)名次,是第5名;項(xiàng)目編號(hào)2,取前3名,獲得3個(gè)名次,分別是1、2、3名。</p><p>  學(xué)校編號(hào)2,項(xiàng)目編號(hào)1,取前5名,獲得4個(gè)名次,分別是1、2、3、4名;項(xiàng)目編號(hào)2,取前5名,

50、獲得0個(gè)名次。</p><p>  輸入信息后,會(huì)自動(dòng)存檔,并提示存檔成功,然后自動(dòng)返還主菜單,如圖2-4所示。</p><p>  圖2-4信息成功輸入系統(tǒng)并存入了文檔 </p><p><b>  (2)輸出信息</b></p><p>  輸入2進(jìn)入輸出信息模塊,該模塊分四項(xiàng),分別代表一種輸出方式,如圖2-5所示。

51、</p><p>  圖2-5 輸入信息模塊界面</p><p>  用戶(hù)可以按照自己的喜好,選擇一種方式輸入信息,輸入2返回輸出信息模塊,輸入0返回主菜單。如圖7~9分別是按照學(xué)校編號(hào)、學(xué)校總分、女團(tuán)總分輸出的情況。</p><p>  圖2-6 按學(xué)校總分輸出</p><p>  圖2-7按學(xué)??偡州敵?lt;/p><p&

52、gt;  圖2-8 按女團(tuán)總分輸出</p><p><b>  (3)查詢(xún)信息</b></p><p>  輸入3進(jìn)入信息查詢(xún)模塊,該模塊分為兩項(xiàng),如圖2-7所示。</p><p>  圖2-7 信息查詢(xún)模塊</p><p>  用戶(hù)可以選擇不同菜單進(jìn)行查詢(xún),如圖4-8和圖4-9分別是按照學(xué)校編號(hào)和項(xiàng)目編號(hào)查詢(xún)的情況。

53、</p><p>  圖2-8 按學(xué)校編號(hào)查詢(xún)</p><p>  圖2-9 按項(xiàng)目編號(hào)查詢(xún)</p><p><b> ?。?)退出系統(tǒng)</b></p><p>  在主菜單下輸入4可以退出系統(tǒng),并有中文提示,如圖所示。</p><p>  圖2-10 退出系統(tǒng)</p><p

54、><b>  2.5課程設(shè)計(jì)總結(jié)</b></p><p>  2,5,1調(diào)試中遇到的較重要問(wèn)題回顧</p><p> ?。?)提出問(wèn)題:所有輸入輸出內(nèi)容只能在一屏內(nèi)顯示,學(xué)過(guò)c語(yǔ)言,很知道”\n”是換行,”\f”是換屏的,可是在這里就是無(wú)法實(shí)現(xiàn)。</p><p>  解決問(wèn)題: 輸入clrscr();</p><p&g

55、t; ?。?)提出問(wèn)題:設(shè)置選項(xiàng),供用戶(hù)輸入選擇時(shí),當(dāng)按任意鍵時(shí)都會(huì)跳入下一步操作,或者直接退出系統(tǒng)。</p><p>  分析問(wèn)題:在供用戶(hù)選擇時(shí),提供了幾個(gè)選項(xiàng),就寫(xiě)幾個(gè)case語(yǔ)句,但是當(dāng)用戶(hù)輸入的并不是這幾個(gè)數(shù)字時(shí),系統(tǒng)就不能做出正確判斷。</p><p>  解決問(wèn)題:修改case語(yǔ)句,添加default語(yǔ)句提示出錯(cuò),要求重新輸入。源代碼如下:</p><p&

56、gt;<b>  Default:{</b></p><p>  clrscr(); /*清屏*/</p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新選擇");</p><p><b>  }</b></p><p>  (3)提出問(wèn)題:用戶(hù)在系統(tǒng)主菜單上進(jìn)

57、行選擇時(shí),若沒(méi)有輸入任何初始信息,而選擇輸出或查詢(xún)操作,系統(tǒng)也會(huì)做出相應(yīng)操作。</p><p>  解決問(wèn)題:增加標(biāo)識(shí)變量作為循環(huán)終止變量,用來(lái)判斷系統(tǒng)中是否已經(jīng)輸入了信息。若沒(méi)有就提示用戶(hù)先輸入信息。</p><p>  2.5.2算法的效率及改進(jìn)設(shè)想</p><p>  算法的效率:總的來(lái)講,嚴(yán)重引響執(zhí)行速度的便是查找,查找任意一個(gè)數(shù)據(jù),便要將其所在的結(jié)構(gòu)從頭至

58、尾遍歷一次,耗費(fèi)大量的時(shí)間。</p><p>  改進(jìn)設(shè)想:因大部分顯示均是以學(xué)校為單位,所以將以由有關(guān)人的各種信息為集合的結(jié)構(gòu)改為以由有關(guān)學(xué)校的各種信息為集合的結(jié)構(gòu)。</p><p><b>  2.5.3心得體會(huì)</b></p><p>  在這次上機(jī)過(guò)程中遇到過(guò)一些問(wèn)題,但經(jīng)過(guò)不懈努力,解決了部分,還有的現(xiàn)在不能解決,留待日后思考和解決。

59、</p><p>  比如說(shuō)在運(yùn)用數(shù)據(jù)結(jié)構(gòu)排序的時(shí)候,方法的選擇上,總是想用時(shí)間復(fù)雜度小的算法,但結(jié)果出了問(wèn)題,最后還是用了我們熟悉的選擇法排序。</p><p>  在編寫(xiě)之前,做整體規(guī)劃和詳細(xì)設(shè)計(jì)很重要。只有思路清晰,設(shè)計(jì)合理可行,編碼才有可能有的放矢,才能更加有效的完成任務(wù)。</p><p>  本次集中上機(jī)實(shí)驗(yàn),對(duì)我來(lái)說(shuō)可以算是一次挑戰(zhàn),因?yàn)樵诶碚搶W(xué)習(xí)中沒(méi)有

60、好好的掌握,現(xiàn)在要獨(dú)立完成一個(gè)較復(fù)雜的程序編寫(xiě),確實(shí)有一點(diǎn)困難。但我對(duì)于難度一向是以積極迎戰(zhàn)的態(tài)度來(lái)面對(duì),認(rèn)真積極努力完成這次集中上機(jī)的任務(wù)。對(duì)我來(lái)說(shuō)這是一次很好的機(jī)會(huì),同時(shí)我也很好的把握了這次機(jī)會(huì),認(rèn)真的完成了此次上機(jī)學(xué)習(xí)的任務(wù),對(duì)自己今后在程序編寫(xiě)方面以及文檔撰寫(xiě)方面相信會(huì)有很大的幫助,在此也對(duì)老師安排這樣一次學(xué)習(xí)表示感謝,最后希望自己在數(shù)據(jù)結(jié)構(gòu)以及計(jì)算機(jī)的其他學(xué)習(xí)方面能夠得到很好的提高。</p><p>&

61、lt;b>  參考文獻(xiàn)</b></p><p>  [1]李云清、楊慶紅、揭安全.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].人民郵電大學(xué)出版社,2004.6</p><p>  [2]潘彥.算法設(shè)計(jì)與分析基礎(chǔ)[M].北京:清華大學(xué)出版社,2007.1</p><p>  [3]肖夢(mèng)強(qiáng)、曲秀清.軟件工程——原理、方法與應(yīng)用[M].中國(guó)水利水電出版社,2005.10

62、</p><p>  [4] 呂鳳翥.C++語(yǔ)言程序設(shè)計(jì)(第2版).電子工業(yè)出版社,2007.2</p><p>  [5] 嚴(yán)蔚敏、吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].清華大學(xué)出版社,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 //定義停車(chē)場(chǎng)最大停車(chē)數(shù)</p><p>  #define MAX_PLATE 10 //定義車(chē)牌號(hào)最大長(zhǎng)度</p><p>  using namespace std; //使用st

65、d命名空間</p><p>  //定義存儲(chǔ)汽車(chē)信息的結(jié)構(gòu)體</p><p>  typedef struct</p><p><b>  {</b></p><p>  char license_plate[MAX_PLATE]; //汽車(chē)牌照號(hào)碼,定義為一個(gè)字符指針類(lèi)型</p><p&

66、gt;  char state; //汽車(chē)當(dāng)前狀態(tài),字符p表示停放在停車(chē)位上,字符s表示停放在便道上,每輛車(chē)的初始狀態(tài)用字符i來(lái)進(jìn)行表示</p><p><b>  }CAR;</b></p><p>  //定義模擬停車(chē)場(chǎng)的棧結(jié)構(gòu)</p><p>  typedef struct</p><

67、p><b>  {</b></p><p>  CAR STOP[MAX_STOP]; //汽車(chē)信息的存儲(chǔ)空間</p><p>  int top; //用來(lái)指示棧頂位置的靜態(tài)指針</p><p>  }SeqStack;</p><p

68、>  //定義模擬便道的隊(duì)列結(jié)構(gòu)</p><p>  typedef struct node</p><p><b>  {</b></p><p>  CAR WAIT; //汽車(chē)信息的存儲(chǔ)空間</p><p>  struct node *next;

69、 //用來(lái)指示隊(duì)列位置的動(dòng)態(tài)指針</p><p>  }QNode; //鏈隊(duì)列節(jié)點(diǎn)的類(lèi)型</p><p>  //定義鏈隊(duì)列的收尾指針</p><p>  typedef struct</p><p><b>  {</b></p>

70、;<p>  QNode *front,*rear;</p><p>  }LQueue; //將頭尾指針?lè)庋b在一起的鏈隊(duì)</p><p><b>  //函數(shù)聲明 </b></p><p>  int Empty_LQueue(LQueue *q);

71、 //判隊(duì)空</p><p>  int LeaveCheck(SeqStack parking , char *license_plate); //檢查離開(kāi)的車(chē)是否在停車(chē)場(chǎng)中</p><p>  int QueueLength(LQueue *q); //判隊(duì)長(zhǎng)度</p><p>  int Out_LQueue(LQu

72、eue *&sidewalk , char *license_plate); //出隊(duì)操作</p><p>  int StackEmpty(SeqStack parking); //判斷棧是否為空</p><p>  int StackFull(SeqStack parking); //判斷棧是否為滿(mǎn)</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、 //有車(chē)到來(lái)時(shí)的操作</p><p>  void Car_leave(SeqStack &parking , LQueue *&sidewalk); //有車(chē)離開(kāi)的操作</p><p>  void Display(SeqStack parking); //顯示停車(chē)場(chǎng)內(nèi)的所有信息 調(diào)試時(shí)用</p><p> 

75、 void InitStack(SeqStack &parking); //初始化棧</p><p>  void InitList(LQueue *&sidewalk); //初始化隊(duì)列</p><p>  void In_LQueue(LQueue *&sidewalk , char *

76、license_plate); //進(jìn)隊(duì)操作</p><p>  void Input_Check(char *license_plate); //檢驗(yàn)輸入的車(chē)牌是否合法</p><p>  void StackPush(SeqStack &parking , char *license_plate);//進(jìn)棧操作</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; //定義一個(gè)變量 判斷是否退出</p><p>  InitStack(parking); //初始化一個(gè)為空的停車(chē)場(chǎng)</p><p>  InitList(sidewalk); //初始化一個(gè)為空的便道</p>

79、<p>  while(flag) //運(yùn)行界面及功能選擇</p><p>  {cout<<"\t****************************************************\n\n";</p><p>  cout<<"\t*****************歡迎來(lái)到

80、孫曉東的停車(chē)場(chǎng)*************\n\n";</p><p>  cout<<"\t| 停車(chē)場(chǎng)模擬管理系統(tǒng) |\n\n";</p><p>  cout<<"\t|------------------------------------------------

81、--|\n\n";</p><p>  cout<<"\t| |\n\n";</p><p>  cout<<"\t| 有車(chē)到來(lái)時(shí)請(qǐng)按C鍵。 |\n\n";<

82、;/p><p>  cout<<"\t| 有車(chē)要走時(shí)請(qǐng)按l鍵。 |\n\n";</p><p>  cout<<"\t| 查看停車(chē)場(chǎng)請(qǐng)按D鍵。 |\n\n";</p><p>  cout&l

83、t;<"\t| 要退出系統(tǒng)請(qǐng)按Q鍵。 |\n\n";</p><p>  cout<<"\t|--------------------------------------------------|\n\n";</p><p>  cout<<"\t|**

84、*************************************************\n\n";</p><p>  cout<<"請(qǐng)選擇操作:";</p><p>  gets(choice);</p><p>  if(1 != strlen(choice))</p><p><

85、;b>  {</b></p><p>  cout<<"請(qǐng)正確輸入選項(xiàng)!";</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<<"選擇不正確!請(qǐng)重新選擇!\n";</p><p><b>  }</b></p><p><b>  }&l

92、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //有車(chē)到來(lái)時(shí)的操作 </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<<"請(qǐng)輸入車(chē)輛的車(chē)牌號(hào)碼:";</p><p>  Input_Check(license_plate);<

94、;/p><p>  if(StackFull(parking)) //判斷停車(chē)場(chǎng)是否已滿(mǎn),滿(mǎn)則進(jìn)入便道,不滿(mǎn)進(jìn)入停車(chē)場(chǎng)</p><p><b>  {</b></p><p>  In_LQueue(sidewalk , license_plate); //進(jìn)入便道</p>

95、;<p>  cout<<"停車(chē)場(chǎng)已滿(mǎn)請(qǐng)?jiān)诒愕赖群?您的位置為"<<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); //進(jìn)入停車(chē)場(chǎng)</p><p>  cout<<"請(qǐng)進(jìn)入停車(chē)場(chǎng)中的"<<parking.top+1<<"號(hào)停車(chē)位\n"

97、;;</p><p><b>  }</b></p><p>  // Display(parking);</p><p><b>  }</b></p><p>  void Car_leave(SeqStack &parking , LQueue *&sidewalk) //

98、有車(chē)離開(kāi)時(shí)的操作</p><p><b>  {</b></p><p>  SeqStack tmpparking; //定義臨時(shí)停車(chē)場(chǎng)</p><p>  char leave_license_plate[MAX_PLATE]; //要離開(kāi)的車(chē)牌號(hào)

99、</p><p>  char license_plate[MAX_PLATE]; //存放從停車(chē)場(chǎng)中讀出來(lái)的車(chē)牌信息</p><p>  InitStack(tmpparking); //初始化臨時(shí)停車(chē)場(chǎng)</p><p>  if(StackEmpty(parking))

100、 //判斷停車(chē)場(chǎng)中是否有車(chē) </p><p><b>  {</b></p><p>  cout<<"當(dāng)前停車(chē)場(chǎng)中沒(méi)有車(chē)\n";</p><p>  return;

101、 //退出子函數(shù)</p><p><b>  }</b></p><p>  cout<<"請(qǐng)輸入要離開(kāi)的車(chē)牌照:";</p><p>  Input_Check(leave_license_plate);</p><p>  cout<<"當(dāng)前停車(chē)場(chǎng)中有&quo

102、t;<<parking.top+1<<"輛車(chē)\n";</p><p>  if(LeaveCheck(parking , leave_license_plate)) //判斷車(chē)是否在停車(chē)場(chǎng)中</p><p><b>  {</b></p><p>  cout<<"

103、您的車(chē)在"<<LeaveCheck(parking , leave_license_plate)<<"號(hào)車(chē)位上\n"; //車(chē)在停車(chē)場(chǎng)中</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<<"的車(chē)暫時(shí)退出停車(chē)場(chǎng)"<<parking.top+1<<"號(hào)位\n";</p><p>  StackPush(tmpparking , license_plate); //停車(chē)場(chǎng)中的車(chē)暫時(shí)退出 進(jìn)入臨時(shí)停車(chē)場(chǎng)</p>

106、<p>  StackPop(parking); //出棧</p><p><b>  }</b></p><p>  cout<<"牌照為"<<license_plate<<&quo

107、t;的車(chē)離開(kāi)停車(chē)場(chǎng)"<<parking.top+1<<"號(hào)位\n";</p><p>  StackPop(parking); //出棧</p><p>  //將臨時(shí)停車(chē)場(chǎng)中的車(chē)?;赝\?chē)場(chǎng)</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<<"的車(chē)進(jìn)入停車(chē)場(chǎng)"<<parking.top+1<<"號(hào)位\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) //判斷車(chē)離開(kāi)前停車(chē)場(chǎng)是否停滿(mǎn)</p><p>  if(QueueLength(sidewalk)) //如果停滿(mǎn)則判斷便道上是否有車(chē)</p><p&g

111、t;<b>  {</b></p><p>  //便道中有車(chē) 則從便道中停入停車(chē)場(chǎng) </p><p>  Out_LQueue(sidewalk , license_plate); //出隊(duì)</p><p>  StackPush(parking , license_plate);

112、 //入棧</p><p>  cout<<"在便道中牌照為"<<license_plate<<"的車(chē)進(jìn)入停車(chē)場(chǎng)"<<parking.top+1<<"號(hào)位\n";</p><p><b>  }</b></p><p>&l

113、t;b>  }</b></p><p><b>  else</b></p><p><b>  //車(chē)不在停車(chē)場(chǎng)中</b></p><p>  cout<<"您的車(chē)不在停車(chē)場(chǎng)中!\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>  //判棧滿(mǎn)</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("停車(chē)場(chǎng)為空\(chéng)n");</p><p><b>  else </b>

126、</p><p><b>  {</b></p><p>  while(parking.top != -1)</p><p><b>  {</b></p><p>  cout<<"車(chē)牌號(hào)為:"<<parking.STOP[parking.top].l

127、icense_plate;</p><p>  cout<<",停在"<<parking.top + 1 <<"號(hào)車(chē)位上";</p><p>  parking.top--;</p><p><b>  }</b></p><p><b&g

128、t;  }</b></p><p><b>  }</b></p><p><b>  //初始化隊(duì)列</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>  //入隊(duì)</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é)點(diǎn)開(kāi)辟新空間</p><p>  strcpy(car_on_sidewalk->WAIT.license_plate , license_plate); //將數(shù)據(jù)寫(xiě)入節(jié)點(diǎn)</p><p>  car_on_sidewalk->WAIT.state = 's'; //寫(xiě)入停

132、車(chē)信息</p><p>  car_on_sidewalk->next = NULL;</p><p>  if(Empty_LQueue(sidewalk)) //隊(duì)空則創(chuàng)建第一個(gè)節(jié)點(diǎn)</p><p>  sidewalk->front = sidewalk->rear = car_on_sidewalk

133、;</p><p><b>  else</b></p><p><b>  { </b></p><p><b>  //隊(duì)非空插入隊(duì)尾</b></p><p>  sidewalk->rear->next = car_on_sidewalk;</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論