數據結構課程設計報告(模擬電梯)_第1頁
數據結構課程設計報告(模擬電梯)_第2頁
數據結構課程設計報告(模擬電梯)_第3頁
數據結構課程設計報告(模擬電梯)_第4頁
數據結構課程設計報告(模擬電梯)_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、山東理工大學計算機學院課 程 設 計(數據結構)班 級姓 名學 號 指導教師二一二年一月十日課程設計任務書及成績評定課題名稱電 梯 模 擬、題目的目的和要求: 鞏固和加深對數據結構的理解,通過上機實驗、調試程序,加深對課本知識的理解,最終使學生能夠熟練應用數據結構的知識寫程序。(1)通過本課程的學習,能熟練掌握幾種基本數據結構的基本操作。(2)能針對給定題目,選擇相應的數據結構,分析并設計算法,進而給出問題的正確求解過程并編寫代碼實現。此程序是一個簡單的模擬電梯升降的系統。在現實中,電梯系統要由乘客和電梯相互作用而形成的一個靈活的系統,電梯升降需要人的指令,而人也可以在等待時間過長而離開。雖然

2、他們的行為可能受對方的作用,但是他們的行為是基本獨立的。所以在這個程序模擬中,我將其分成幾個抽象數據類型,并且做好每一部份的相互聯系。在程序運行中輸入乘客所進入的樓層,將要去的樓層,等待最長時間等數據可以完成其模擬。而這個系統可以很好的模擬現實中的電梯運行的狀態。、設計進度及完成情況日 期內 容1.2-1.3選取參考書,查閱有關文獻資料,完成資料搜集和系統分析工作。1.41.5創建相關數據結構,錄入源程序。1.61.7調試程序并記錄調試中的問題,初步完成課程設計報告。1.9上交課程設計報告打印版并進行課程設計答辯,要求每個同學針對自己的設計回答指導教師3-4個問題。1.10考核結束后將課程設計

3、報告和源程序的電子版交班長統一刻光盤上交。、主要參考文獻及資料1 嚴蔚敏 數據結構(c語言版)清華大學出版社 19992 嚴蔚敏 數據結構題集(c語言版)清華大學出版社 19993 譚浩強 c語言程序設計 清華大學出版社4 與所用編程環境相配套的c語言或c+相關的資料5 徐孝凱 數據結構課程實驗. 北京:清華大學出版社,2002.6 郭翠英 c語言課程設計案例精編. 北京:中國水利水電出版社,2004.03.網站:csdn.net;程序員、成績評定:設計成績: (教師填寫)指導老師: (簽字)二一二年 一 月 十 日目 錄第一章 概述1第二章 系統分析2第三章 概要設計4第四章 詳細設計8第五

4、章 運行與測試13第六章 總結與心得16參考文獻 17第一章 概述課程設計是實踐性教學中的一個重要環節,它以某一課程為基礎,可以涉及和課程相關的各個方面,是一門獨立于課程之外的特殊課程。課程設計是讓同學們對所學的課程更全面的學習和應用,理解和掌握課程的相關知識。數據結構是一門重要的專業基礎課,是計算機理論和應用的核心基礎課程。數據結構課程設計,要求學生在數據結構的邏輯特性和物理表示、數據結構的選擇和應用、算法的設計及其實現等方面,加深對課程基本內容的理解。同時,在程序設計方法以及上機操作等基本技能和科學作風方面受到比較系統和嚴格的訓練。在這次的課程設計中我選擇的題目是電梯模擬。現代社會水平發展

5、迅速,樓房越建越高,電梯就成為了人們生活中必不可少的工具,因此對電梯的運行系統進行了解研究是有一定意義的。本文用在c+的環境下模擬了電梯的運行情況,對電梯的運行情況有了一定的了解。第二章 系統分析1.模擬某校五層教學樓的電梯系統。該樓有一個自動電梯,能在每層停留。五個樓層由下至上依次稱為地下層、第一層、第二層、第三層和第四層,其中第一層是大樓的進出層,即是電梯的“本壘層”,電梯“空閑”時,將來該層候命。五個樓層從下到上的編號為:0、1、2、3、4。除了地下層外,每一層都有一個要求向下的按鈕除了第四層外,每一層都有一個要求向上的按鈕。對應的變量為:callup0.3和calldown1.4。電梯

6、內的五個目標層按鈕對應的變量為:callcar0.4。2.電梯一共有七個狀態,即正在開門(opening)、已開門(opened)、正在關門(closing)、已關門(closed)、等待(waiting)、移動(moving)、減速(decelerate)。3.乘客可隨機地進出于任何層。對每個人來說,他有一個能容忍的最長等待時間,一旦等候電梯時間過長,他將放棄。對于在樓層內等待電梯的乘客,將插入在等候隊列里,每一層有兩個等候隊列,一隊要求向上,一隊要求向下,用鏈隊列來實現。對于在電梯內的乘客,用五個乘客棧來實現,該乘客要去哪一層,就把他放在相應編號的棧中,對應變量為elestack04。4.

7、模擬時鐘從0開始,時間單位為0.1秒。人和電梯的各種動作均要耗費一定的時間單位(簡記為t):有人進出時,電梯每隔40t測試一次,若無人進出,則關門關門和開門各需要20t每個人進出電梯均需要25t電梯加速需要15t上升時,每一層需要51t,減速需要14t下降時,每一層需要61t,減速需要23t如果電梯在某層靜止時間超過300t,則駛回1層候命。5.按時序顯示系統狀態的變化過程:發生的全部人和電梯的動作序列。以堆棧lift模擬電梯,以隊qup,qdnow兩個數組模擬等候電梯的人排的隊。進入系統的人進入隊列,進入電梯的人從隊列中刪除并且進入棧中,離開系統的人也從隊列中刪除。6.用戶輸入樓的的層數,運

8、行的時間,以及進入電梯中人的信息,系統將自動運行,直到把所有的人送到要去的地方,或者到運行的時間為止。7.系統有自動與手動兩種操作方式,由用戶自己選擇,系統中的顯示均是以圖形模擬的方式顯示的。8.系統能夠在運行時輸出相關的人的各種信息,如來自哪一層,要去哪一層,用了多少時間等等。9.主要模塊:主程序電梯模塊乘客棧模塊等待隊列模塊乘客模塊高樓模塊第三章 概要設計1.乘客類型反映乘客的所有屬性。adt client數據對象:d=ai乘客信息,i=1,2,n,n0數據關系:r=|ai-1,aid,i=2,n基本操作:printclientinfo(client const &e,clientstat

9、us s)操作結果:輸出乘客信息。creatclient(client *&p)操作結果:生成新的乘客。destoryclient(client *&p)操作結果:該乘客離開系統。goabove(client const &e)操作結果:判斷該乘客是否去往高層。cinfloor(client const &e)操作結果:返回乘客進入的樓層。cintime(client const &e)操作結果:返回乘客進入時間。coutfloor(client const &e)操作結果:返回乘客進入時間。2.乘客棧類型電梯內的乘客用乘客棧表示,去不同樓層的乘客放在不同的棧中。adt estack數據對象:

10、d=ai乘客信息,i=1,2,n,n0數據關系:r=|ai-1,aid,i=2,n基本操作:略。3.等候隊列類型在電梯外等待的乘客用等待隊列表示。每層各有兩個等待隊列,分別為上樓隊列和下樓隊列。與一般隊列不同的是在基本操作中加入了放棄操作cgiveup(wqueue &q,int floor)。4.電梯類型表示電梯的各個屬性和所有動作。adt elevator數據對象:d=ai電梯信息,i=1,2,n,n0基本操作:initele(elevator &e)操作結果:初始化電梯類型。destoryele(elevator &e)操作結果:銷毀電梯類型。eledecide(elevator &e,

11、wqueue wmaxfloor+12)操作結果:電梯動作決策。elevatorrun(elevator &e,wqueue wmaxfloor+12)操作結果:電梯狀態轉換。countover(elevator &e)操作結果:判斷電梯計時是否完成。elefloor(elevator const &e)操作結果:返回電梯所在的層。elestatus(elevator const &e)操作結果:返回電梯狀態。requireabove(elevator const &e)操作結果:判斷是否有高層請求。requirebelow(elevator const &e)操作結果:判斷是否有低層請求。e

12、leachieved(elevator &e)操作結果:判斷電梯是否要停于當前層。eleopendoor(elevator &e)操作結果:判斷電梯是否要開門。5.高樓模塊實現電梯和乘客之間的互交功能。包括:inout(elevator &e,wqueue wmaxfloor+12)操作結果:進行乘客的進出電梯活動。newclient(elevator &e,wqueue w52)操作結果:進入新乘客。printstatus(elevator &e,wqueue w52)操作結果:輸出當前狀態。print(elevator &e,action a)操作結果:輸出電梯動作信息。6.主程序主程序主

13、要處理兩類事件:乘客事件和電梯事件。除此之外,主程序還處理各個模塊的初始化和銷毀工作,以及電梯狀態的輸出。乘客事件包括新乘客到達事件,乘客放棄等待事件,乘客進出電梯事件。電梯事件包括電梯運行事件。7.本程序包含6個模塊:(1) 主程序模塊(2) 乘客模塊(3) 乘客棧模塊(4) 電梯模塊(5) 等待隊列模塊(6) 高樓模塊:實現電梯和乘客之間的互交。設定棧的抽象數據類型定義:adt stack 數據對象: 數據關系: 約定端為棧頂,端為棧底。adt stack設定隊的抽象數據類型定義:adt queue 數據對象: 數據關系: 約定端為隊列頭,端為隊列尾。adt queue編程序前要了解電梯的

14、運行情況,作出具體的流程圖,以便更好的編寫程序。下面給出的是電梯簡單的運行模擬圖。 圖1電梯的模擬運行流程圖第四章 詳細設計1.全局變量的定義對于全局來說,需知道最多樓層和某一時間電梯所在樓層、電梯狀態 ,首先定義出這些變量,floor_now定義電梯所在樓層,state定義電梯狀態,maxf定義最多樓層,t1、t2定義時間變量。int id;int r_w;int imgf;int floor_now;/電梯所在樓層int state;/電梯狀態int t1;/時間變量int t2;int maxf;/最多樓層int t;int tt;char hand_auto;2.人具體情況的定義使用電

15、梯的人要求有具體的所在樓層和目的樓層,根據具體情況乘坐電梯的人都有一定的容忍時間,一旦等電梯花費時間超過限度,人將放棄坐電梯,maxwaittime定義最長容忍時間,nfloor定義所在樓層,tofloor定義為乘坐電梯者的目的樓層。 typedef struct popint maxwaittime;/最長容忍時間int nfloor;/所在樓層int tofloor;/目的樓層int id;int ontim;people;3.隊、棧的類型電梯內的乘客用乘客棧表示,去不同樓層的乘客放在不同的棧中。adt estack數據對象:d=ai乘客信息,i=1,2,n,n0數據關系:r=|ai-1,

16、aid,i=2,n等候隊列類型在電梯外等待的乘客用等待隊列表示。每層各有兩個等待隊列,分別為上樓隊列和下樓隊列。與一般隊列不同的是在基本操作中加入了放棄操作cgiveup(wqueue &q,int floor)。#definestack_init_size10#definestackincrement5status initstack(clientstack &s);status destroystack(clientstack &s);status clearstack(clientstack &s);status stackempty(clientstack s);int stackle

17、ngth(clientstack s);status gettop(clientstack s,selemtype &e);status push(clientstack &s,selemtype e);status pop(clientstack &s,selemtype &e);void printstack(clientstack &s);4.電梯類型每個使用電梯的人都在一個固定的層等待電梯,都有一個目標層。電梯有最大的承載數,電梯停下的時候有人出入,也需要記錄。電梯何時停下需要有函數判斷,maxman定義最大承載數,liftman定義為電梯里的人,stop50定義需要停的樓層,run(

18、)是關于電梯運行的函數,wait()是關于電梯是否靜止等待的函數,stop()是關于電梯在樓層間停靠的函數,open_shut()是電梯開門關門的函數。在run()運行函數中調用stop()函數判斷是否有停靠的樓層,如果有在調用open_shut()電梯開門關門的函數。class lift/電梯類public:int maxman;/最大承載數int liftman;/電梯里的人int stop50;/需要停的樓層void run();/電梯運行void wait();/電梯靜止等待void stop();/電梯在樓層間停靠void open_shut();/電梯開門關門;lift lift;

19、void lift:open_shut()/電梯開關門函數void lift:stop()/判斷電梯停靠的函數void lift:wait()/電梯等待函數void lift:run()/運行函數5.系統類的定義先對系統進行初始化定義,在模擬系統中,可以系統隨機產生,也可以人為的設定。initq()函數初始化上下行隊列,initf()初始化樓層,initl()初始化電梯,void leave(people*)函數表示人離開系統。syst:state()函數首先判斷電梯狀態,電梯停或向上,從高層開始判斷,判斷是否有人去高層或高層有人想上 若高層無人等待乘電梯也沒人去高層電梯向下,電梯停靠在目標層

20、,打開電梯門。在判斷電梯狀態,電梯開始循環工作。在電梯的模擬系統中用syst:img(int os)函數通過圖形模擬輸出,用syst:word(int con=1)輸出狀態語句,使得模擬結果更加形象易懂。lass systpublic:void rand_man(int);/隨即產生人void initq();/初始化上下行隊列void initf();/初始化樓層void initl();/初始化電梯void initall();/構造函數void leave(people*);/人離開系統void out_in();void state();void help();void cout_s(

21、);void img(int);void word(int);syst() f=0; man=0;void syst:leave(people*p)void syst:out_in()void syst:rand_man(int n=8)void syst:initall()void syst:initf()void syst:initl()void syst:initq()void syst:cout_s()void syst:img(int os)/圖形模擬輸出void syst:word(int con=1)/輸出語句void main ()/主函數system(pause);sys.h

22、elp();sys.initall();sys.rand_man();while(1)lift.run();lift.wait();第五章 運行與測試程序運行后輸入程序的運行時間,電梯開始運行。在本設計中,用04分別表示地下一樓至四樓,用戶只要按照提示依次輸入正確的數值,每次按下回車鍵即認為已經輸入信息。此后只需等待系統自行進行處理,若未顯示乘客放棄乘坐電梯即認為該乘客已達目的樓層。此間程序會一直運行到開始時輸入的運行時間,此時整個程序運行結束,按任意鍵退出。此操作可參考測試成果中的效果圖。調試過程中遇見的測試數據和理論數據不相符,返回源代碼查詢,例如:在計算開門時間和上升時間這里把上升減速時

23、間加到了e.count=uptime+accelerate里導致以后每一層都加上減速階段的時間,改正,從新設定一個到達目的層減速語句if(eleachieved(e)這樣電梯在到達指定層后再減速,減速同時也分上下減速。還有主函數里面每進行一次乘客事件和電梯事件,time+,這樣就會使時間統一往后退,所以在計算時間時應該特別注意這個問題。從測試結果看,乘客放棄數的大小和平均等待時間的長短還與乘客出現的密度和乘客的平均容忍時間有關系。實際運行效果圖:數據較大時運行結果圖51整個程序完全運行,時間短,放棄和等待時間一目了然。可以進行理論和實際時間測試分析。數據較大時的運行結果:圖52當數據比較大時運行的時間比較長,電梯內的具體運行情況相對明顯直觀,比如每一個時刻電梯的運行狀態就比較明顯了。第六章 總結與心得本文電梯模擬系統的設計主要運用了隊列和棧的部分知識,電梯系統看似簡單但具體的運行卻很麻煩,需要考慮到很多的細節。不過只要掌握了電梯的具體流程,寫起程序才可以順利一些。寫完一部分程序后,試著去運行,有缺陷在修改,再加入具體函數,使程序更加完美。課程設計使我學到了很多書本以外的東西,同時也提高了查閱資料的能力以及解決問題的能力,培養培養學生

溫馨提示

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

最新文檔

評論

0/150

提交評論