版權(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&<==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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--電梯模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--電梯模擬.doc
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)約瑟夫環(huán)模擬課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---銀行模擬系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(銀行模擬系統(tǒng))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)全國交通模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
評論
0/150
提交評論