2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計(jì)</p><p><b> ?。〝?shù)據(jù)結(jié)構(gòu))</b></p><p>  2013年 1月 15日</p><p>  課程設(shè)計(jì)任務(wù)書及成績評定</p><p> ?、瘛㈩}目的目的和要求: </p><p>  鞏固和加深對數(shù)據(jù)結(jié)構(gòu)的理解,通過上機(jī)實(shí)驗(yàn)、調(diào)試

2、程序,加深對課本知識的理解,最終使學(xué)生能夠熟練應(yīng)用數(shù)據(jù)結(jié)構(gòu)的知識寫程序。</p><p> ?。?)通過本課程的學(xué)習(xí),能熟練掌握幾種基本數(shù)據(jù)結(jié)構(gòu)的基本操作。</p><p>  (2)能針對給定題目,選擇相應(yīng)的數(shù)據(jù)結(jié)構(gòu),分析并設(shè)計(jì)算法,進(jìn)而給出問題的正確求解過程并編寫代碼實(shí)現(xiàn)。</p><p> ?、颉⒃O(shè)計(jì)進(jìn)度及完成情況</p><p>  

3、Ⅲ、主要參考文獻(xiàn)及資料</p><p>  [1] 嚴(yán)蔚敏 數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學(xué)出版社 1999</p><p>  [2] 嚴(yán)蔚敏 數(shù)據(jù)結(jié)構(gòu)題集(C語言版)清華大學(xué)出版社 1999</p><p>  [3] 譚浩強(qiáng) C語言程序設(shè)計(jì) 清華大學(xué)出版社</p><p>  [4] 與所用編程環(huán)境相配套的C語言或C++相關(guān)的資料<

4、;/p><p><b> ?、?、成績評定:</b></p><p>  設(shè)計(jì)成績: (教師填寫)</p><p>  指導(dǎo)老師: (簽字)</p><p>  二 年 月 日</p><p><b>  目

5、 錄</b></p><p>  第一章 概述……………………………………………………………1</p><p>  第二章 系統(tǒng)分析………………………………………………………2</p><p>  第三章 概要設(shè)計(jì)………………………………………………………4</p><p>  第四章 詳細(xì)設(shè)計(jì)………………………………………………

6、………7</p><p>  第五章 運(yùn)行與測試……………………………………………………25</p><p>  第六章 總結(jié)與心得……………………………………………………28</p><p>  參考文獻(xiàn) ………………………………………………………………28</p><p><b>  第一章 概述</b></p

7、><p>  課程設(shè)計(jì)是實(shí)踐性教學(xué)中的一個(gè)重要環(huán)節(jié),它以某一課程為基礎(chǔ),可以涉及和課程相關(guān)的各個(gè)方面,是一門獨(dú)立于課程之外的特殊課程。課程設(shè)計(jì)是讓同學(xué)們對所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識?!稊?shù)據(jù)結(jié)構(gòu)》是一門重要的專業(yè)基礎(chǔ)課,是計(jì)算機(jī)理論和應(yīng)用的核心基礎(chǔ)課程。</p><p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),要求學(xué)生在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計(jì)及其

8、實(shí)現(xiàn)等方面,加深對課程基本內(nèi)容的理解。同時(shí),在程序設(shè)計(jì)方法以及上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。</p><p>  在這次的課程設(shè)計(jì)中我選擇的題目是圖書管理。傳統(tǒng)的人工圖書管理,基本業(yè)務(wù)活動有對一本書的采編入庫、清除庫存、借閱和歸還等等,但是人工統(tǒng)計(jì)操作起來效率相對來說要低,也容易出錯(cuò)。但是現(xiàn)在這些業(yè)務(wù)借助計(jì)算機(jī)系統(tǒng)完成后,效率可以得到提高,也可以減少出錯(cuò)的幾率??梢允箞D書管理的日常業(yè)務(wù)

9、更加的方便迅捷、減少很多勞動量。</p><p>  1、訓(xùn)練學(xué)生靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識,獨(dú)立完成問題分析,結(jié)合數(shù)據(jù)結(jié)構(gòu)理論知識,編寫程序求解指定問題。 </p><p>  2.初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能;</p><p>  3.提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決問題的能力;</p>&l

10、t;p>  4.訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),鞏固、深化學(xué)生的理論知識,提高編程水平,并在此過程中培養(yǎng)他們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度和良好的工作作風(fēng)。</p><p><b>  第二章 系統(tǒng)分析</b></p><p><b>  任務(wù)</b></p><p>  根據(jù)教材《數(shù)據(jù)結(jié)構(gòu)題集(C語言版)》(嚴(yán)蔚敏

11、、吳偉民主編)選擇課程設(shè)計(jì)題目,要求通過設(shè)計(jì),在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面加深對課程基本內(nèi)容的理解和綜合運(yùn)用。</p><p>  設(shè)計(jì)題目從《數(shù)據(jù)結(jié)構(gòu)題集》“第二篇 實(shí)習(xí)篇”中選取,每班每題不得超過2人。</p><p><b>  另選題:</b></p><p><b>  學(xué)生自

12、選課題</b></p><p>  學(xué)生原則上可以結(jié)合個(gè)人愛好自選課題,要求課題有一定的深度與難度,有一定的算法復(fù)雜性,能夠鞏固數(shù)據(jù)結(jié)構(gòu)課程所學(xué)的知識。學(xué)生自選課題需在17周前報(bào)課程設(shè)計(jì)指導(dǎo)教師批準(zhǔn)方可生效。</p><p><b>  要求:</b></p><p>  1、在處理每個(gè)題目時(shí),要求從分析題目的需求入手,按設(shè)計(jì)抽象數(shù)

13、據(jù)類型、構(gòu)思算法、通過設(shè)計(jì)實(shí)現(xiàn)抽象數(shù)據(jù)類型、編制上機(jī)程序和上機(jī)調(diào)試等若干步驟完成題目,最終寫出完整的分析報(bào)告。前期準(zhǔn)備工作完備與否直接影響到后序上機(jī)調(diào)試工作的效率。在程序設(shè)計(jì)階段應(yīng)盡量利用已有的標(biāo)準(zhǔn)函數(shù),加大代碼的重用率。 </p><p>  2、.設(shè)計(jì)的題目要求達(dá)到一定工作量(300行以上代碼),并具有一定的深度和難度。</p><p>  3、程序設(shè)計(jì)語言推薦使用C/C++,程序書寫

14、規(guī)范,源程序需加必要的注釋;</p><p>  4、每位同學(xué)需提交可獨(dú)立運(yùn)行的程序;</p><p>  5 、每位同學(xué)需獨(dú)立提交設(shè)計(jì)報(bào)告書(每人一份),要求編排格式統(tǒng)一、規(guī)范、內(nèi)容充實(shí),不少于10頁(代碼不算);</p><p>  6、課程設(shè)計(jì)實(shí)踐作為培養(yǎng)學(xué)生動手能力的一種手段,單獨(dú)考核。</p><p> ?。?)、模擬某校五層教學(xué)樓

15、的電梯系統(tǒng)。該樓有一個(gè)自動電梯,能在每層停留。五個(gè)樓層由下至上依次稱為地下層、第一層、第二層、第三層和第四層,其中第一層是大樓的進(jìn)出層,即是電梯的“本壘層”,電梯“空閑”時(shí),將來該層候命。五個(gè)樓層從下到上的編號為:0、1、2、3、4。除了地下層外,每一層都有一個(gè)要求向下的按鈕除了第四層外,每一層都有一個(gè)要求向上的按鈕。對應(yīng)的變量為:CallUp[0..3]和CallDown[1..4]。電梯內(nèi)的五個(gè)目標(biāo)層按鈕對應(yīng)的變量為:CallCar

16、[0..4]。</p><p>  (2)、電梯一共有七個(gè)狀態(tài),即正在開門(Opening)、已開門(Opened)、正在關(guān)門(Closing)、已關(guān)門(Closed)、等待(Waiting)。</p><p> ?。?)、 乘客可隨機(jī)地進(jìn)出于任何層。對每個(gè)人來說,他有一個(gè)能容忍的最長等待時(shí)間,一旦等候電梯時(shí)間過長,他將放棄。對于在樓層內(nèi)等待電梯的乘客,將插入在等候隊(duì)列里,每一層

17、有兩個(gè)等候隊(duì)列,一隊(duì)要求向上,一隊(duì)要求向下,用鏈隊(duì)列來實(shí)現(xiàn)。對于在電梯內(nèi)的乘客,用五個(gè)乘客棧來實(shí)現(xiàn),該乘客要去哪一層,就把他放在相應(yīng)編號的棧中,對應(yīng)變量為k[0…4]。</p><p> ?。?)、模擬時(shí)鐘從0開始,時(shí)間單位為0.1秒。人和電梯的各種動作均要耗費(fèi)一定的時(shí)間單位(簡記為t):</p><p>  有人進(jìn)出時(shí),電梯每隔40t測試一次,若無人進(jìn)出,則關(guān)門</p>&

18、lt;p>  關(guān)門和開門各需要20t</p><p>  每個(gè)人進(jìn)出電梯均需要25t</p><p>  如果電梯在某層靜止時(shí)間超過300t,則駛回1層候命。</p><p> ?。?)、按時(shí)序顯示系統(tǒng)狀態(tài)的變化過程:發(fā)生的全部人和電梯的動作序列。</p><p><b>  第三章 概要設(shè)計(jì)</b></p&

19、gt;<p><b>  乘客類型</b></p><p>  反映乘客的所有屬性。</p><p><b>  Man</b></p><p>  數(shù)據(jù)對象:D={ai∈乘客信息,I=1,2,…,n,n≥0}</p><p>  數(shù)據(jù)關(guān)系:R={<ai-1,ai>|ai-

20、1,ai∈D,i=2,…,n}</p><p><b>  基本操作:</b></p><p>  void inel();</p><p>  該乘客進(jìn)入電梯時(shí) 發(fā)生的數(shù)據(jù)轉(zhuǎn)換 及基本的輸出</p><p>  void onwait();</p><p>  該乘客進(jìn)入某層等待隊(duì)列時(shí) 發(fā)生的數(shù)

21、據(jù)變動 及基本的輸出</p><p>  long giveup();</p><p>  void getout();</p><p>  該乘客出電梯時(shí)所發(fā)生的數(shù)據(jù)變動,及基本的狀態(tài)輸出</p><p><b>  電梯棧類型</b></p><p>  電梯內(nèi)的乘客用乘客棧表示,去不同樓層的

22、乘客放在不同的棧中。</p><p>  ADT Estack</p><p>  數(shù)據(jù)對象:D={ai∈乘客信息,I=1,2,…,n,n≥0}</p><p>  數(shù)據(jù)關(guān)系:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}</p><p><b>  基本操作:</b></p>

23、<p>  本設(shè)計(jì)中運(yùn)用了一個(gè)鏈棧的模板,可以自己定義棧的數(shù)據(jù)類型</p><p>  共用到了五個(gè)棧,分別表示電梯內(nèi)到往某樓的乘客,為了方便設(shè)計(jì),用一個(gè)棧的數(shù)組來表示這五個(gè)棧,數(shù)組的下標(biāo)表示樓層。</p><p><b>  等候隊(duì)列類型</b></p><p>  在電梯外等待的乘客用等待隊(duì)列表示。每層各有一個(gè)等待隊(duì)列,表示在該層

24、樓排隊(duì)的乘客。為了方便程序設(shè)計(jì),用一個(gè)隊(duì)列的數(shù)組來表示這五個(gè)隊(duì)列,數(shù)組的下標(biāo)表示樓層。</p><p>  同上,本次設(shè)計(jì)也用了一個(gè)鏈隊(duì)列的模板,</p><p><b>  電梯相關(guān)的動作</b></p><p>  表示電梯的各個(gè)屬性和所有動作。</p><p><b>  Void e1()</b&

25、gt;</p><p>  表示電梯開門 時(shí)所發(fā)生的動作</p><p><b>  Void e2()</b></p><p>  在本層出電梯的乘客從本層的棧中彈出</p><p>  調(diào)用乘客走出樓梯事件</p><p><b>  Void e3()</b></

26、p><p>  電梯外的隊(duì)列入電梯棧</p><p><b>  Void e4()</b></p><p><b>  電梯狀態(tài)的轉(zhuǎn)換</b></p><p><b>  Void e5()</b></p><p>  電梯關(guān)門時(shí)基本狀態(tài)的輸出 及一些數(shù)據(jù)

27、變換</p><p><b>  Void e6()</b></p><p>  電梯上升時(shí)基本狀態(tài)的輸出 及數(shù)據(jù)的變動</p><p><b>  Void e7()</b></p><p>  電梯下降時(shí)基本狀態(tài)的輸出,及數(shù)據(jù)的變動</p><p><b>  

28、Void e8()</b></p><p>  電梯處于靜止?fàn)顟B(tài)時(shí)狀態(tài)的輸出,及數(shù)據(jù)的變動</p><p><b>  控制模塊</b></p><p>  Void control()</p><p>  與電梯控制有關(guān)的函數(shù)集合,用于判斷電梯門的開關(guān),及電梯狀態(tài)轉(zhuǎn)換控制</p><p&

29、gt;<b>  時(shí)間模塊</b></p><p>  Void Wait(long tt)</p><p>  本函數(shù)用于時(shí)間模擬中延時(shí)tt個(gè)單位的時(shí)間</p><p>  Void times()</p><p>  本函數(shù)用于現(xiàn)在時(shí)間狀態(tài)的保存,用于輸入新的 乘客時(shí)去處輸入所用的時(shí)間</p><

30、p>  Void timer()</p><p>  本函數(shù)用于時(shí)間狀態(tài)的恢復(fù)</p><p><b>  輸入輸出模塊</b></p><p>  diantizhuangtai()</p><p><b>  輸出電梯現(xiàn)在的狀態(tài)</b></p><p><b&

31、gt;  subsr()</b></p><p>  輸入函數(shù)的子函數(shù)用于處理數(shù)據(jù)輸入并記錄用于輸入數(shù)據(jù)所耽誤的時(shí)間以維持系統(tǒng)時(shí)間的準(zhǔn)確性。</p><p>  Void shuru()</p><p>  輸人下一個(gè)乘客的信息,及相關(guān)的判斷</p><p>  本函數(shù)用于現(xiàn)在時(shí)間狀態(tài)的恢復(fù),用于輸入新的 乘客時(shí)去處輸入所用的時(shí)間

32、</p><p><b>  主程序</b></p><p>  主程序主要處理兩類事件:顯示歡迎界面,輸入事件和電梯狀態(tài)轉(zhuǎn)換事件。</p><p>  輸入事件是輸入乘客的信息和下一個(gè)乘客到來的時(shí)間</p><p>  狀態(tài)轉(zhuǎn)換事件是處理在當(dāng)前狀態(tài)下電梯的動作</p><p>  本程序包含6個(gè)

33、模塊:</p><p><b> ?。?)主程序模塊</b></p><p><b>  (2)乘客模塊</b></p><p><b> ?。?)電梯模塊</b></p><p><b> ?。?)時(shí)間模塊</b></p><p>

34、;<b> ?。?)控制模塊</b></p><p><b>  (6)輸入輸出模塊</b></p><p>  各模塊之間的調(diào)用關(guān)系如下:</p><p><b>  第四章 詳細(xì)設(shè)計(jì)</b></p><p>  // 電梯模擬.cpp : 定義控制臺應(yīng)用程序的入口點(diǎn)。<

35、;/p><p><b>  //</b></p><p>  #include "stdafx.h"//此頭文件在詳細(xì)設(shè)計(jì)的結(jié)尾</p><p>  #define MAXMAN 5</p><p>  #define TIME 100</p><p>  using namesp

36、ace std;</p><p>  //--------------------------------------變量定義----------------------------------</p><p>  enum states {goingup,goingdown,idle};</p><p>  states state=idle;</p>

37、<p>  states nowstate=idle;//控制樓梯的上下</p><p>  int nowfloor=1;//電梯當(dāng)前的樓層</p><p>  //int d1=0;未用到</p><p>  //int d2=0;</p><p>  //int d3=0;</p><p>  in

38、t callup[5];</p><p>  int calldown[5];</p><p>  int callcar[5];</p><p>  long timesum;//延時(shí)函數(shù)用到的變量</p><p>  long delay;</p><p>  long sum=1;</p><

39、p>  long nexttime;//下一個(gè)乘客出現(xiàn)的時(shí)刻</p><p>  int tf;//時(shí)間恢復(fù)標(biāo)志,用在輸入函數(shù)遞歸調(diào)用中</p><p>  //int flag;//事件結(jié)束的標(biāo)識</p><p>  long jingzhi;//靜止開始時(shí)間、、用于判斷樓梯是否在某一層等待超過300t</p><p>  int f

40、;//電梯動作標(biāo)志配合jingzhi協(xié)同</p><p>  int lt;//下一個(gè)人出現(xiàn)的時(shí)間間隔</p><p>  int renshu; //電梯內(nèi)的人數(shù)</p><p>  LinkStack<int> biaozhi;//用于時(shí)間保存函數(shù)遞歸調(diào)用過程中對時(shí)間的保存</p><p>  void chushihua()

41、</p><p><b>  {</b></p><p><b>  int i=5;</b></p><p><b>  while(i)</b></p><p><b>  {</b></p><p>  callup[i]=0

42、;</p><p>  calldown[i]=0;</p><p>  callcar[i]=0;</p><p><b>  i--;</b></p><p><b>  }</b></p><p><b>  }</b></p>&l

43、t;p>  //------------------------------------自定義乘客類------------------------------------</p><p>  class man </p><p><b>  {</b></p><p><b>  public:</b></p

44、><p>  int number;</p><p>  int infloor;</p><p>  int outfloor;</p><p>  long intime;</p><p>  long giveuptime;</p><p>  void inel();</p>

45、<p>  void onwait();</p><p>  long giveup();</p><p>  void getout();</p><p>  friend ostream&operator << (ostream& output,man& c)//重載流輸出用于棧和隊(duì)列的遍歷</p>&

46、lt;p><b>  {</b></p><p>  output<<c.number<<" ";</p><p>  return output;</p><p><b>  }</b></p><p><b>  };</b>

47、;</p><p>  man m;//中間變量</p><p><b>  man n;</b></p><p><b>  //等待隊(duì)列</b></p><p>  LinkQueue<man> s[5];</p><p><b>  //電梯棧&l

48、t;/b></p><p>  LinkStack<man> k[5];</p><p>  void man::inel()</p><p><b>  {</b></p><p>  if((m.intime+m.giveuptime*TIME)<clock()-delay)</p>

49、;<p><b>  {</b></p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<number<<"號乘客等待超時(shí),已自動離開!"<<endl;<

50、/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  k[outfloor].Push(*this);</p><p>  //wait(25);</p>

51、<p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<number<<"號乘客從"<<infloor<<"樓進(jìn)入電梯。"<<endl;</p><p&

52、gt;  callcar[outfloor]=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void man::onwait()</p><p><b>  {</b></p><p>  s[

53、infloor].EnQueue(*this);</p><p>  //wait(25);</p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<number<<"號乘客進(jìn)入"&l

54、t;<infloor<<"樓的等待隊(duì)列。"<<endl;</p><p><b>  }</b></p><p>  long man::giveup()</p><p><b>  {</b></p><p>  cout<<clock

55、()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<number<<"號乘客放棄等待"<<endl;</p><p><b>  return 0;</b></p><p><b>  }&

56、lt;/b></p><p>  void man::getout()</p><p><b>  {</b></p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<&l

57、t;number<<"號乘客出電梯"<<endl;</p><p><b>  }</b></p><p>  //--------------------------------時(shí)間函數(shù)定義-----------------------------------</p><p>  int shuru

58、();</p><p>  int wait(long tt)//延時(shí)控制函數(shù)</p><p><b>  {</b></p><p>  //cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<

59、;<"wait 計(jì)時(shí)開始"<<endl;</p><p>  clock_t end;</p><p>  //end=clock()+tt*TIME;</p><p>  end=clock()-delay;</p><p>  while(clock()<end+delay+tt*TIME)//

60、修正只用當(dāng)前時(shí)刻造成的錯(cuò)誤</p><p><b>  {</b></p><p>  if((clock()-delay)>=nexttime)//當(dāng) 當(dāng)前時(shí)刻 大于等于下一個(gè)人到來的時(shí)刻時(shí),調(diào)用輸入函數(shù)</p><p><b>  {</b></p><p><b>  shur

61、u();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":&qu

62、ot;<<"wait 計(jì)時(shí)結(jié)束"<<endl;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void times()//保存時(shí)間</p><p><b>  {</b&

63、gt;</p><p>  biaozhi.Push(clock());</p><p>  timesum=clock();</p><p>  //cout<<timesum/TIME<<endl;</p><p><b>  }</b></p><p>  void

64、timer()//恢復(fù)時(shí)間</p><p><b>  {</b></p><p>  delay+=clock()-biaozhi.Pop();</p><p>  //cout<<delay/TIME<<endl;</p><p><b>  }</b></p>

65、;<p>  //----------------------------------電梯相關(guān)的活動------------------------------------</p><p>  int e1 ()//開門</p><p><b>  {</b></p><p><b>  wait(20);</b&

66、gt;</p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"電梯開門。"<<endl;</p><p><b>  return 0;</b></p&

67、gt;<p><b>  }</b></p><p>  int e2()//在本層出電梯的人出棧</p><p><b>  {</b></p><p>  while(!k[nowfloor].StackEmpty())</p><p><b>  {</b>

68、</p><p>  n=k[nowfloor].Pop();</p><p><b>  wait(25);</b></p><p>  n.getout();</p><p><b>  renshu--;</b></p><p><b>  }</b&g

69、t;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int e3()//樓梯外的隊(duì)列入棧</p><p><b>  {</b></p><p>  while(!s[nowfloor

70、].QueueEmpty()&&renshu<MAXMAN)</p><p><b>  {</b></p><p>  n=s[nowfloor].DeQueue();</p><p><b>  wait(25);</b></p><p><b>  n.inel

71、();</b></p><p><b>  renshu++;</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p&g

72、t;  int e6()//電梯上升</p><p><b>  {</b></p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"電梯正在上升中……"<<e

73、ndl;</p><p><b>  wait(30);</b></p><p>  callcar[nowfloor]=0;</p><p>  nowfloor++;</p><p>  callup[nowfloor-1]=0;</p><p>  cout<<clock()/T

74、IME-delay/TIME<<","<<nexttime/TIME<<":"<<"電梯上升到了第"<<nowfloor<<"層"<<endl;</p><p>  callcar[nowfloor]=0;</p><p>&l

75、t;b>  f=1;</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int e7()//電梯下降</p><p><b>  {</b></p><p>  

76、cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"電梯正在下降中……"<<endl;</p><p><b>  wait(30);</b></p><p>  callca

77、r[nowfloor]=0;</p><p>  nowfloor--;</p><p>  calldown[nowfloor+1]=0;</p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<&

78、lt;"電梯下降到了第"<<nowfloor<<"層"<<endl;</p><p><b>  f=1;</b></p><p>  callcar[nowfloor]=0;</p><p><b>  return 0;</b></p&g

79、t;<p><b>  }</b></p><p>  int e8()//靜止</p><p><b>  {</b></p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<

80、;":"<<"電梯靜止,現(xiàn)在的樓層是:"<<nowfloor<<endl;</p><p><b>  if(f!=0)</b></p><p>  jingzhi=clock();</p><p><b>  f=0;</b></p>

81、<p><b>  return 0;</b></p><p><b>  }</b></p><p>  int e4()//電梯狀態(tài)的轉(zhuǎn)換</p><p><b>  {</b></p><p>  int diantizhuangtai();</p&g

82、t;<p>  system("cls");</p><p>  diantizhuangtai();</p><p>  int c,d,j;//c為電梯是否應(yīng)該向上走的標(biāo)志,d是向下的標(biāo)志</p><p>  j=nowfloor;</p><p>  if(callup[j]==1)</p>

83、<p><b>  {</b></p><p><b>  c=1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

84、;<p>  for(c=0,j=nowfloor+1;j<=4;j++)</p><p><b>  {</b></p><p>  if(callcar[j]==1||callup[j]==1||calldown[j]==1||(k[j].StackEmpty()==0)||s[j].QueueEmpty()==0)</p>&l

85、t;p><b>  {</b></p><p><b>  c=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p>

86、<p><b>  }</b></p><p>  j=nowfloor;</p><p>  if(calldown[j]==1)</p><p><b>  {</b></p><p><b>  d=1;</b></p><p><

87、;b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  for(d=0,j=nowfloor-1;j>=0;j--)</p><p><b>  {</b></p>

88、<p>  if(callcar[j]==1||callup[j]==1||calldown[j]==1||(k[j].StackEmpty()==0)||s[j].QueueEmpty()==0)</p><p><b>  {</b></p><p><b>  d=1;</b></p><p><b&

89、gt;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(nowstate==goingup)</p><p><b

90、>  {</b></p><p>  if(nowfloor==4||(c==0&&d==1))//電梯由向上轉(zhuǎn)到向下的條件</p><p><b>  {</b></p><p>  if(nowfloor==4&&d==0)</p><p><b>  e8

91、();//靜止</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  nowstate=goingdown;</p><p><b>  e7();//下降</b></p><p>

92、<b>  }</b></p><p>  //callcar[nowfloor]=0;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>

93、  //state=goingdown;</p><p>  if(d==0&&c==0)</p><p><b>  {</b></p><p>  e8();//電梯靜止</p><p>  nowstate=idle;</p><p><b>  }</b&g

94、t;</p><p><b>  else</b></p><p><b>  {</b></p><p>  e6();//電梯上升</p><p><b>  }</b></p><p><b>  }</b></p>

95、;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(nowstate==goingdown)//判斷過程基本和上一級的if語句相同</p><p><b>  

96、{</b></p><p>  if(nowfloor==0||(d==0&&c==1))</p><p><b>  {</b></p><p>  if(nowfloor==0&&c==0)</p><p><b>  e8();//靜止</b><

97、;/p><p><b>  else</b></p><p><b>  {</b></p><p>  nowstate=goingup;</p><p>  e6();//電梯上升</p><p><b>  }</b></p><p

98、><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(c==0&&d==0)</p><p><b>  {</b></p><p

99、>  e8();//電梯靜止</p><p>  nowstate=idle;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  e7();//電梯下降

100、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>&l

101、t;/p><p>  if(c==0&&d==0)//以下是由靜止轉(zhuǎn)向其他動作過程</p><p><b>  {</b></p><p>  nowstate=idle;</p><p><b>  e8();</b></p><p>  //return 0;

102、</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  if(c==1)</b></p><p><b>  {</b></p><p>  nowstate=goingu

103、p;</p><p>  e6();//電梯上升</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  nowstate=goingdown;</p>

104、<p>  e7();//電梯下降</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //flag=0;</b></p><

105、p><b>  return 0;</b></p><p><b>  }</b></p><p>  int e5()//關(guān)門</p><p><b>  {</b></p><p><b>  wait(20);</b></p>&

106、lt;p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"電梯關(guān)門"<<endl;</p><p><b>  return 0;</b></p><p><

107、;b>  }</b></p><p>  //--------------------------------輸入輸出函數(shù)的定義---------------------------------</p><p>  int diantizhuangtai()//輸出電梯狀態(tài)</p><p><b>  {</b></p&

108、gt;<p>  cout<<" ------------下邊是電梯現(xiàn)在的狀態(tài)信息:-----------"<<endl<<endl;</p><p>  cout<<" 現(xiàn)在的樓層是:"<<nowfloor<<endl<<endl;</p&g

109、t;<p><b>  int i;</b></p><p>  for(i=4;i>=0;i--)</p><p><b>  {</b></p><p>  if(i==nowfloor)</p><p>  cout<<" ▲▲"

110、;;</p><p><b>  else</b></p><p>  cout<<" ";</p><p>  cout<<"電梯中前往第"<<i<<"層的乘客:";</p><p>  k

111、[i].StackTranverse();</p><p>  //cout<<" 第"<<i<<"層電梯外邊的等待隊(duì)列:";</p><p>  //s[i].QueueTranverse();</p><p><b>  }</b></p>&l

112、t;p>  cout<<endl;</p><p>  for(i=4;i>=0;i--)</p><p><b>  {</b></p><p>  if(i==nowfloor)</p><p>  cout<<" ▲▲";</p>

113、<p><b>  else</b></p><p>  cout<<" ";</p><p>  //cout<<" 前往第"<<i<<"層的乘客:";</p><p>  //k[i].Stack

114、Tranverse();</p><p>  cout<<"第"<<i<<"層電梯外邊的等待乘客隊(duì)列:";</p><p>  s[i].QueueTranverse();</p><p><b>  }</b></p><p>  cout&

115、lt;<endl;</p><p>  cout<<"now,next-------------------------------------------------"<<endl;;</p><p><b>  return 0;</b></p><p><b>  }</b

116、></p><p>  int subsr()//輸入函數(shù)的子函數(shù)</p><p><b>  {</b></p><p>  cout<<"請輸入乘客進(jìn)入了哪層,要去哪層,容忍等待的最大時(shí)間,下一乘客到來的時(shí)間間隔:\n";</p><p><b>  if(tf==0)

117、</b></p><p>  times();//保存時(shí)間狀態(tài)</p><p><b>  tf=1;</b></p><p>  while(cin>>m.infloor>>m.outfloor>>m.giveuptime>>lt)</p><p><b

118、>  {</b></p><p>  if(m.infloor==0&&m.outfloor==0&&m.giveuptime==0&&lt==0)</p><p><b>  {</b></p><p>  int nowdelay;</p><p> 

119、 nowdelay=delay;</p><p>  cout<<""<<endl;</p><p>  diantizhuangtai();</p><p><b>  subsr();</b></p><p><b>  }</b></p>

120、<p>  if(m.infloor>=5||m.outfloor>=5||m.infloor==m.outfloor)</p><p><b>  {</b></p><p>  cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<

121、<":"<<"輸入樓層錯(cuò)誤!請重新輸入"<<endl;</p><p><b>  continue;</b></p><p><b>  }</b></p><p><b>  else</b></p><p&

122、gt;<b>  break;</b></p><p><b>  }</b></p><p><b>  if(tf!=0)</b></p><p>  timer();//恢復(fù)時(shí)間狀態(tài)</p><p><b>  tf=0;</b></p>

123、<p><b>  return 0;</b></p><p><b>  }</b></p><p>  int shuru()//輸入函數(shù)</p><p><b>  {</b></p><p>  m.number=sum;</p><p

124、><b>  sum++;</b></p><p><b>  subsr();</b></p><p>  if(nexttime>clock()-delay)//下一個(gè)人到來的時(shí)間</p><p>  nexttime=nexttime+lt*TIME;</p><p><b&

125、gt;  else</b></p><p>  nexttime=clock()-delay+lt*TIME;</p><p>  m.intime =clock()-delay;</p><p>  if (m.infloor>m.outfloor)</p><p>  calldown[m.infloor]=1;<

126、/p><p><b>  else </b></p><p>  callup[m.infloor]=1;</p><p>  m.onwait ();</p><p><b>  return 0;</b></p><p><b>  }</b></

127、p><p>  //-----------------------------------電梯控制函數(shù)-------------------------------------</p><p>  int control()</p><p><b>  {</b></p><p>  //system("cls&q

128、uot;);</p><p>  if((clock()-delay)>=nexttime)//當(dāng)當(dāng)前時(shí)刻大于等于下一個(gè)人到來的時(shí)刻時(shí),調(diào)用輸入函數(shù)</p><p><b>  {</b></p><p><b>  shuru();</b></p><p><b>  return

129、 0;</b></p><p><b>  }</b></p><p>  if((callcar[nowfloor]!=0)||callup[nowfloor]!=0||calldown[nowfloor]!=0||(k[nowfloor].StackEmpty()==0)||s[nowfloor].QueueEmpty()==0)//電梯開門的條件&l

130、t;/p><p><b>  {</b></p><p>  if((renshu==MAXMAN&&k[nowfloor].StackEmpty()==1))</p><p><b>  e4();</b></p><p><b>  else</b></p

131、><p><b>  {</b></p><p>  e1();//電梯開門</p><p>  e2();//在本層出電梯的人出棧</p><p>  e3();//樓梯外的隊(duì)列入電梯棧</p><p><b>  e5();//關(guān)門</b></p><p&

132、gt;  e4();//電梯狀態(tài)變換</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  e4()

133、;//電梯狀態(tài)改變</p><p><b>  }</b></p><p><b>  if(f==0)</b></p><p><b>  {</b></p><p>  callcar[nowfloor]=0;</p><p>  if((clock

134、()-jingzhi)>300*TIME)//電梯等待時(shí)間超過300t時(shí)回到一樓</p><p><b>  {</b></p><p>  if(nowfloor!=1)</p><p>  callcar[1]=1;</p><p><b>  }</b></p><p

135、><b>  }</b></p><p>  if((k[nowfloor].StackEmpty()==1)||s[nowfloor].QueueEmpty()==1)</p><p><b>  {</b></p><p>  callup[nowfloor]=0;</p><p>  c

136、alldown[nowfloor]=0;</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  //--------------------------------------

137、-主函數(shù)---------------------------------------</p><p>  int _tmain(int argc, _TCHAR* argv[])</p><p><b>  {</b></p><p>  system("color 1a");//把命令提示符窗口的背景色設(shè)為藍(lán)色,前景色設(shè)

138、為淡綠色</p><p>  timesum=clock();</p><p>  chushihua();//初始化</p><p>  //----------------------歡迎界面------------------------</p><p>  cout<<endl<<endl<<end

139、l<<endl<<endl<<endl;</p><p>  cout<<" ---------------------------"<<endl;</p><p>  cout<<"

140、 歡迎使用電梯模擬系統(tǒng)"<<endl;</p><p>  cout<<" ---------------------------"<<endl<<endl;</p><p>  system("pause");//暫停</p>

141、<p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  //flag=1;</b></p><p>  system("cls");//清屏</p><p>  diantizhuangt

142、ai();//輸出電梯狀態(tài)</p><p>  while((clock()-delay)<nexttime)//電梯控制</p><p><b>  {</b></p><p><b>  if(lt>10)</b></p><p><b>  wait(10);</b

143、></p><p>  control();</p><p><b>  }</b></p><p>  shuru();//輸入乘客信息</p><p><b>  }</b></p><p><b>  return 0;</b></p&

144、gt;<p><b>  }</b></p><p>  ---------------------------------以下是程序所涉及的頭文件-----------------------------</p><p>  ---------------------------------棧模板頭文件:------------------------

145、-------</p><p><b>  //鏈棧類的定義</b></p><p>  template<class T></p><p>  struct Node</p><p><b>  {</b></p><p><b>  T data;&

146、lt;/b></p><p>  Node<T> *next;//此處T可以省略</p><p><b>  };</b></p><p>  template<class T></p><p>  class LinkStack</p><p>  {//構(gòu)建函數(shù),

147、創(chuàng)建一空棧</p><p><b>  private:</b></p><p>  Node<T> *top;//// 鏈表首為棧頂</p><p><b>  public:</b></p><p>  LinkStack(){top=NULL;}//構(gòu)造函數(shù),置空鏈棧</p&

148、gt;<p>  ~LinkStack();// 析構(gòu)函數(shù),釋放鏈棧中各結(jié)點(diǎn)的存儲空間</p><p>  void Push(T x);// 元素x入棧</p><p>  T Pop();// 棧頂元素出棧</p><p>  T GetTop();// 取棧頂元素</p><p>  int StackEmpty(); /

149、/ 判斷棧是否為空</p><p>  void ClearStack();//清空棧</p><p>  void StackTranverse();//遍歷輸出棧中元素</p><p>  /*friend ostream &operator << (ostream &stream, T asd)</p><p&g

150、t;<b>  {</b></p><p>  stream << asd.number;</p><p>  return stream;</p><p><b>  }*/</b></p><p><b>  };</b></p><p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論