數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_電梯模擬_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_電梯模擬_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_電梯模擬_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_電梯模擬_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_電梯模擬_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、山東理工大學(xué)計算機(jī)學(xué)院課程設(shè)計數(shù)據(jù)結(jié)構(gòu)班級姓名學(xué)號一指導(dǎo)教師2021年1月15日課程設(shè)計任務(wù)書及成績評定課題名稱電梯模擬I、題目的目的和要求:穩(wěn)固和加深對數(shù)據(jù)結(jié)構(gòu)的理解,通過上機(jī)實驗、調(diào)試程序,加深對課本知識的理解,最終使學(xué)生能夠熟練應(yīng)用數(shù)據(jù)結(jié)構(gòu)的知識寫程序.(1)通過本課程的學(xué)習(xí),能熟練掌握幾種根本數(shù)據(jù)結(jié)構(gòu)的根本操作.(2)能針對給定題目,選擇相應(yīng)的數(shù)據(jù)結(jié)構(gòu),分析并設(shè)計算法,進(jìn)而給出問題的正確求解過程并編寫代碼實現(xiàn).n、設(shè)計進(jìn)度及完成情況日期內(nèi)容2021-1-7選取參考書,查閱有關(guān)文獻(xiàn)資料,完成資料搜集和系統(tǒng)分析工作.2021-1-10創(chuàng)立相關(guān)數(shù)據(jù)結(jié)構(gòu),錄入源程序.2021-1-13調(diào)試程序

2、并記錄調(diào)試中的問題,初步完成課程設(shè)計報告.2021-1-15上交課程設(shè)計報告打印版并進(jìn)行課程設(shè)計辯論,要求每個同學(xué)針對自己的設(shè)計答復(fù)指導(dǎo)教師3-4個問題.2021-1-16考核結(jié)束后將課程設(shè)計報告和源程序的電子版交班長統(tǒng)一刻光盤上交.田、主要參考文獻(xiàn)及資料1嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)C語言版清華大學(xué)出版社19992嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)題集C語言版清華大學(xué)出版社19993譚浩強(qiáng)C語言程序設(shè)計清華大學(xué)出版社4與所用編程環(huán)境相配套的C語言或C+#目關(guān)的資料IV、成績評定:設(shè)計成績:教師填寫指導(dǎo)老師:簽字第一章概述1第二章系統(tǒng)分析2第三章概要設(shè)計4第四章詳細(xì)設(shè)計7第五章運行與測試2528第六章總結(jié)與心得28參考文獻(xiàn)第一

3、章概述課程設(shè)計是實踐性教學(xué)中的一個重要環(huán)節(jié),它以某一課程為根底,可以涉及和課程相關(guān)的各個方面,是一門獨立于課程之外的特殊課程.課程設(shè)計是讓同學(xué)們對所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識.?數(shù)據(jù)結(jié)構(gòu)?是一門重要的專業(yè)根底課,是計算機(jī)理論和應(yīng)用的核心根底課程.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,要求學(xué)生在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計及其實現(xiàn)等方面,加深對課程根本內(nèi)容的理解.同時,在程序設(shè)計方法以及上機(jī)操作等根本技能和科學(xué)作風(fēng)方面受到比擬系統(tǒng)和嚴(yán)格的練習(xí).在這次的課程設(shè)計中我選擇的題目是圖書治理.傳統(tǒng)的人工圖書治理,根本業(yè)務(wù)活動有對一本書的采編入庫、去除庫存、借閱和歸

4、還等等,但是人工統(tǒng)計操作起來效率相對來說要低,也容易出錯.但是現(xiàn)在這些業(yè)務(wù)借助計算機(jī)系統(tǒng)完成后,效率可以得到提高,也可以減少出錯的幾率.可以使圖書治理的日常業(yè)務(wù)更加的方便迅捷、減少很多勞動量.1、練習(xí)學(xué)生靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識,獨立完成問題分析,結(jié)合數(shù)據(jù)結(jié)構(gòu)理論知識,編寫程序求解指定問題.2 .初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等根本方法和技能;3 .提升綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的水平;4 .練習(xí)用系統(tǒng)的觀點和軟件開發(fā)一般標(biāo)準(zhǔn)進(jìn)行軟件開發(fā),穩(wěn)固、深化學(xué)生的理論知識,提升編程水平,并在此過程中培養(yǎng)他們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度和良好的工作作風(fēng).第二章系統(tǒng)分析任務(wù)

5、根據(jù)教材?數(shù)據(jù)結(jié)構(gòu)題集C語言版?嚴(yán)蔚敏、吳偉民主編選擇課程設(shè)計題目,要求通過設(shè)計,在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇應(yīng)用、算法的設(shè)計及其實現(xiàn)等方面加深對課程根本內(nèi)容的理解和綜合運用.設(shè)計題目從?數(shù)據(jù)結(jié)構(gòu)題集?“第二篇實習(xí)篇中選取,每班每題不得超過2人.另選題:學(xué)生自選課題學(xué)生原那么上可以結(jié)合個人愛好自選課題,要求課題有一定的深度與難度,有一定的算法復(fù)雜性,能夠穩(wěn)固數(shù)據(jù)結(jié)構(gòu)課程所學(xué)的知識.學(xué)生自選課題需在17周前報課程設(shè)計指導(dǎo)教師批準(zhǔn)方可生效.要求:1、在處理每個題目時,要求從分析題目的需求入手,按設(shè)計抽象數(shù)據(jù)類型、構(gòu)思算法、通過設(shè)計實現(xiàn)抽象數(shù)據(jù)類型、編制上機(jī)程序和上機(jī)調(diào)試等假設(shè)干步

6、驟完成題目,最終寫出完整的分析報告.前期準(zhǔn)備工作完備與否直接影響到后序上機(jī)調(diào)試工作的效率.在程序設(shè)計階段應(yīng)盡量利用已有的標(biāo)準(zhǔn)函數(shù),加大代碼的重用率.2、.設(shè)計的題目要求到達(dá)一定工作量300行以上代碼,并具有一定的深度和難度.3、程序設(shè)計語言推薦使用C/C+,程序書寫標(biāo)準(zhǔn),源程序需加必要的注釋;4、每位同學(xué)需提交可獨立運行的程序;5、每位同學(xué)需獨立提交設(shè)計報告書每人一份,要求編排格式統(tǒng)一、標(biāo)準(zhǔn)、內(nèi)容充實,不少于10頁代碼不算;6、課程設(shè)計實踐作為培養(yǎng)學(xué)生動手水平的一種手段,單獨考核.CallUp0.3和CallCar0.4.1、模擬某校五層教學(xué)樓的電梯系統(tǒng).該樓有一個自動電梯,能在每層停留.五個

7、樓層由下至上依次稱為地下層、第一層、第二層、第三層和第四層,其中第一層是大樓的進(jìn)出層,即是電梯的“本壘層,電梯“空閑時,將來該層候命.五個樓層從下到上的編號為:0、1、2、3、4.除了地下層外,每一層都有一個要求向下的按鈕除了第四層外,每一層都有一個要求向上的按鈕.對應(yīng)的變量為:CallDown1.4.電梯內(nèi)的五個目標(biāo)層按鈕對應(yīng)的變量為:2、電梯一共有七個狀態(tài),即正在開門Opening已開門Opened、正在關(guān)門Closing、已關(guān)門Closed、等待Waiting.3、乘客可隨機(jī)地進(jìn)出于任何層.對每個人來說,他有一個能容忍的最長等待時問,一旦等候電梯時間過長,他將放棄.對于在樓層內(nèi)等待電梯的

8、乘客,將插入在等候隊列里,每一層有兩個等候隊列,一隊要求向上,一隊要求向下,用鏈隊列來實現(xiàn).對于在電梯內(nèi)的乘客,用五個乘客棧來實現(xiàn),該乘客要去哪一層,就把他放在相應(yīng)編號的棧中,對應(yīng)變量為k04.4、模擬時鐘從0開始,時間單位為0.1秒.人和電梯的各種動作均要消耗一定的時間單位簡記為t:有人進(jìn)出時,電梯每隔40t測試一次,假設(shè)無人進(jìn)出,那么關(guān)門關(guān)門和開門各需要20t每個人進(jìn)出電梯均需要25t如果電梯在某層靜止時間超過300t,那么駛回1層候命.5、按時序顯示系統(tǒng)狀態(tài)的變化過程:發(fā)生的全部人和電梯的動作序列.第三章概要設(shè)計乘客類型反映乘客的所有屬性.Man數(shù)據(jù)對象:D=aiC乘客信息,1=1,2,

9、n,n>0數(shù)據(jù)關(guān)系:R=<ai-1,ai>|ai-1,aiCD,i=2,n根本操作:voidinel();該乘客進(jìn)入電梯時發(fā)生的數(shù)據(jù)轉(zhuǎn)換及根本的輸出voidonwait();該乘客進(jìn)入某層等待隊列時發(fā)生的數(shù)據(jù)變動及根本的輸出longgiveup();voidgetout();該乘客出電梯時所發(fā)生的數(shù)據(jù)變動,及根本的狀態(tài)輸出電梯棧類型電梯內(nèi)的乘客用乘客棧表示,去不同樓層的乘客放在不同的棧中ADTEstack數(shù)據(jù)對象:D=aiC乘客信息,I=1,2,n,n>0數(shù)據(jù)關(guān)系:R=<ai-1,ai>|ai-1,aiCD,i=2,n根本操作:本設(shè)計中運用了一個鏈棧的模板,

10、可以自己定義棧的數(shù)據(jù)類型共用到了五個棧,分別表示電梯內(nèi)到往某樓的乘客,為了方便設(shè)計,用一個棧的數(shù)組來表示這五個棧,數(shù)組的下標(biāo)表示樓層.等候隊列類型在電梯外等待的乘客用等待隊列表示.每層各有一個等待隊列,表示在該層樓排隊的乘客.為了方便程序設(shè)計,用一個隊列的數(shù)組來表示這五個隊列,數(shù)組的下標(biāo)表示樓同上,本次設(shè)計也用了一個鏈隊列的模板,電梯相關(guān)的動作表示電梯的各個屬性和所有動作.Voide1()表示電梯開門時所發(fā)生的動作Voide2()在本層出電梯的乘客從本層的棧中彈出調(diào)用乘客走出樓梯事件Voide3()電梯外的隊列入電梯棧Voide4()電梯狀態(tài)的轉(zhuǎn)換Voide5()電梯關(guān)門時根本狀態(tài)的輸出及一些

11、數(shù)據(jù)變換Voide6()電梯上升時根本狀態(tài)的輸出及數(shù)據(jù)的變動Voide7()電梯下降時根本狀態(tài)的輸出,及數(shù)據(jù)的變動Voide8()電梯處于靜止?fàn)顟B(tài)時狀態(tài)的輸出,及數(shù)據(jù)的變動限制模塊Voidcontrol()與電梯限制有關(guān)的函數(shù)集合,用于判斷電梯門的開關(guān),及電梯狀態(tài)轉(zhuǎn)換限制時間模塊VoidWait(longtt)本函數(shù)用于時間模擬中延時tt個單位的時間Voidtimes()本函數(shù)用于現(xiàn)在時間狀態(tài)的保存,用于輸入新的乘客時去處輸入所用的時間Voidtimer()本函數(shù)用于時間狀態(tài)的恢復(fù)輸入輸出模塊diantizhuangtai()輸出電梯現(xiàn)在的狀態(tài)subsr()輸入函數(shù)的子函數(shù)用于處理數(shù)據(jù)輸入并記

12、錄用于輸入數(shù)據(jù)所耽誤的時間以維持系統(tǒng)時間的準(zhǔn)確性.Voidshuru()輸人下一個乘客的信息,及相關(guān)的判斷本函數(shù)用于現(xiàn)在時間狀態(tài)的恢復(fù),用于輸入新的乘客時去處輸入所用的時間主程序主程序主要處理兩類事件:顯示歡送界面,輸入事件和電梯狀態(tài)轉(zhuǎn)換事件.輸入事件是輸入乘客的信息和下一個乘客到來的時間狀態(tài)轉(zhuǎn)換事件是處理在當(dāng)前狀態(tài)下電梯的動作本程序包含6個模塊:(1)主程序模塊(2)乘客模塊(3)電梯模塊(4)時間模塊(5)限制模塊(6)輸入輸出模塊各模塊之間的調(diào)用關(guān)系如下:第四章詳細(xì)設(shè)計/電梯模擬.cpp:定義限制臺應(yīng)用程序的入口點./#include"stdafx.h"/此頭文件在詳

13、細(xì)設(shè)計的結(jié)尾#defineMAXMAN5#defineTIME100usingnamespacestd;/變量定義enumstatesgoingup,goingdown,idle;statesstate=idle;statesnowstate=idle;/限制樓梯的上下intnowfloor=1;/電梯當(dāng)前的樓層/intd1=0;未用到/intd2=0;/intd3=0;intcallup5;intcalldown5;intcallcar5;longtimesum;/延時函數(shù)用到的變量longdelay;longsum=1;longnexttime;/下一個乘客出現(xiàn)的時刻inttf;/時間恢復(fù)

14、標(biāo)志,用在輸入函數(shù)遞歸調(diào)用中/intflag;/事件結(jié)束的標(biāo)識longjingzhi;/靜止開始時間、用于判斷樓梯是否在某一層等待超過300tintf;/電梯動作標(biāo)志配合jingzhi協(xié)同intlt;/下一個人出現(xiàn)的時間間隔intrenshu;/電梯內(nèi)的人數(shù)LinkStack<int>biaozhi;/用于時間保存函數(shù)遞歸調(diào)用過程中對時間的保存voidchushihua()inti=5;while(i)callupi=0;calldowni=0;callcari=0;i-;/自定乂乘客類classman(public:intnumber;intinfloor;intoutfloor

15、;longintime;longgiveuptime;voidinel();voidonwait();longgiveup();voidgetout();friendostream&operator<<(ostream&output,man&c)/重載流輸出用于棧和隊列的遍歷(output<<c.number<<""returnoutput;manm;/中間變量mann;/等待隊列LinkQueue<man>s5;/電梯棧LinkStack<man>k5;voidman:inel()(if(

16、ime+m.giveuptime*TIME)<clock()-delay)(cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<number<<號乘客等待超時,已自動離開!"<<endl;else(koutfloor.Push(*this);/wait(25);cout<<clock()/TIME-delay/TIME<<","<<

17、nexttime/TIME<<":"<<number<<"號乘客從"<<infloor<<"樓進(jìn)入電梯."<<endl;callcaroutfloor=1;)voidman:onwait()sinfloor.EnQueue(*this);wait(25);cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<

18、number<<""<<infloor<<"樓的等待隊列."<<endl;)longman:giveup()cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<number<<""<<endl;return0;號乘客進(jìn)入號乘客放棄等待)voidman:getout()cout<<clock()/

19、TIME-delay/TIME<<","<<nexttime/TIME<<":"<<number<<""<<endl;號乘客出電梯)/時間函數(shù)定義intshuru();intwait(longtt)/延時限制函數(shù)/cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"waitclock_tend;

20、end=clock()+tt*TIME;end=clock()-delay;計時開始"<<endl;while(clock()<end+delay+tt*TIME)/if(clock()-delay)>=nexttime)/入函數(shù)修正只用當(dāng)前時刻造成的錯誤當(dāng)當(dāng)前時刻大于等于下一個人到來的時刻時,調(diào)用輸shuru();計時結(jié)束"<<endl;)/cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"&

21、lt;<"waitreturn0;)voidtimes()/保存時間biaozhi.Push(clock();timesum=clock();/cout<<timesum/TIME<<endl;)voidtimer()/恢復(fù)時間delay+=clock()-biaozhi.Pop();/cout<<delay/TIME<<endl;)/電梯相關(guān)的活動inte1()/開門"<<endl;wait(20);cout<<clock()/TIME-delay/TIME<<",&quo

22、t;<<nexttime/TIME<<":"<<"電梯開門.return0;)inte2()/在本層出電梯的人出棧while(!knowfloor.StackEmpty()n=knowfloor.Pop();wait(25);n.getout();renshu-;)return0;)inte3()/樓梯外的隊列入棧while(!snowfloor.QueueEmpty()&&renshu<MAXMAN)(n=snowfloor.DeQueue();wait(25);n.inel();renshu+;retu

23、rn0;inte6()/電梯上升(cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"wait(30);callcarnowfloor=0;nowfloor+;callupnowfloor-1=0;cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"&qu

24、ot;<<nowfloor<<"層"<<endl;callcarnowfloor=0;f=1;return0;inte7()電梯下降(cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"wait(30);callcarnowfloor=0;nowfloor-;calldownnowfloor+1=0;cout<<clock()/TIME-delay/TIME

25、<<","<<nexttime/TIME<<":"<<""<<nowfloor<<"層"<<endl;f=1;callcarnowfloor=0;return0;inte8()靜止(cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<""<<n

26、owfloor<<endl;if(f!=0)jingzhi=clock();電梯上升到了第電梯下降到了第"<<endl;"<<endl;電梯靜止,現(xiàn)在的樓層是:f=0;return0;)inte4()/電梯狀態(tài)的轉(zhuǎn)換(intdiantizhuangtai();system("cls");diantizhuangtai();intc,d,j;/c為電梯是否應(yīng)該向上走的標(biāo)志,d是向下的標(biāo)志j=nowfloor;if(callupj=1)(c=1;)else(for(c=0,j=nowfloor+1;j<=4;j+)(

27、if(callcarj=1|callupj=1|calldownj=1|(kj.StackEmpty()=0)|sj.QueueEmpty()=0)(c=1;break;)j=nowfloor;if(calldownj=1)(d=1;)else(for(d=0,j=nowfloor-1;j>=0;j-)(if(callcarj=1|callupj=1|calldownj=1|(kj.StackEmpty()=0)|sj.QueueEmpty()=0)d=1;break;)if(nowstate=goingup)(if(nowfloor=4|(c=0&&d=1)/電梯由向上

28、轉(zhuǎn)到向下的條件(if(nowfloor=4&&d=0)e8();/靜止else(nowstate=goingdown;e7();/下降)/callcarnowfloor=0;)else(/state=goingdown;if(d=0&&c=0)(e8();/電梯靜止nowstate=idle;)else(e6();/電梯上升)else(if(nowstate=goingdown)/判斷過程根本和上一級的if語句相同(if(nowfloor=0|(d=0&&c=1)(if(nowfloor=0&&c=0)e8();/靜止else(n

29、owstate=goingup;)else(if(c=0&&d=0)(e8();/電梯靜止nowstate=idle;)else(e7();/電梯下降)else(if(c=0&&d=0)/以下是由靜止轉(zhuǎn)向其他動作過程(nowstate=idle;e8();/return0;)elseif(c=1)(nowstate=goingup;e6();/電梯上升)else(nowstate=goingdown;e7();/電梯下降)/flag=0;return0;inte5()/關(guān)門(wait(20);cout<<clock()/TIME-delay/TIME

30、<<","<<nexttime/TIME<<":"<<"電梯關(guān)門"<<endl;return0;/輸入輸出函數(shù)的定義intdiantizhuangtai()/輸出電梯狀態(tài)(cout<<"下邊是電梯現(xiàn)在的狀態(tài)信息:"<<endl<<endl;cout<<"現(xiàn)在的樓層是:"<<nowfloor<<endl<<endl;inti;for(i=4;i>=0

31、;i-)(if(i=nowfloor)cout<<""elsecout<<""cout<<"電梯中前往第"<<i<<"層的乘客:";ki.StackTranverse();/cout<<"第"<<i<<"層電梯外邊的等待隊列:"/si.QueueTranverse();cout<<endl;for(i=4;i>=0;i-)(if(i=nowfloor)cout&l

32、t;<""elsecout<<""/cout<<"前往第"<<i<<"層的乘客:";/ki.StackTranverse();cout<<"第"<<i<<"層電梯外邊的等彳f乘客隊列:"si.QueueTranverse();cout<<endl;"<<endl;cout<<"now,nextreturn0;)intsubsr()/

33、輸入函數(shù)的子函數(shù)(cout<<"請輸入乘客進(jìn)入了哪層,要去哪層,容忍等待的最大時間,下一乘客到來的時間間隔:n"if(tf=0)times();/保存時間狀態(tài)tf=1;while(cin>>m.infloor>>m.outfloor>>m.giveuptime>>lt)(if(m.infloor=0&&m.outfloor=0&&m.giveuptime=0&&lt=0)(intnowdelay;nowdelay=delay;cout<<"&qu

34、ot;<<endl;diantizhuangtai();subsr();)if(m.infloor>=5|m.outfloor>=5|m.infloor=m.outfloor)(cout<<clock()/TIME-delay/TIME<<","<<nexttime/TIME<<":"<<"輸入樓層錯誤!請重新輸入"<<endl;continue;)elsebreak;)if(tf!=0)timer();/恢復(fù)時間狀態(tài)tf=0;return

35、0;)intshuru()/輸入函數(shù)(m.number=sum;sum+;subsr();if(nexttime>clock()-delay)/下一個人到來的時間nexttime=nexttime+lt*TIME;elsenexttime=clock()-delay+lt*TIME;ime=clock()-delay;if(m.infloor>m.outfloor)calldownm.infloor=1;elsecallupm.infloor=1;m.onwait();return0;/電梯限制函數(shù)intcontrol()/system("cls");

36、if(clock()-delay)>=nexttime)/當(dāng)當(dāng)前時刻大于等于下一個人到來的時刻時,調(diào)用輸入函數(shù)shuru();return0;if(callcarnowfloor!=0)|callupnowfloor!=0|calldownnowfloor!=0|(knowfloor.StackEmpty()=0)|snowfloor.QueueEmpty()=0)/電梯開門的條件if(renshu=MAXMAN&&knowfloor.StackEmpty()=1)e4();elsee1();/電梯開門e2();/在本層出電梯的人出棧e3();/樓梯外的隊列入電梯棧e5(

37、);/關(guān)門e4();/電梯狀態(tài)變換elsee4();/電梯狀態(tài)改變)if(f=0)(callcarnowfloor=0;if(clock()-jingzhi)>300*TIME)/電梯等待時間超過300t時回到一樓(if(nowfloor!=1)callcar1=1;)if(knowfloor.StackEmpty()=1)|snowfloor.QueueEmpty()=1)(callupnowfloor=0;calldownnowfloor=0;)return0;)/主函數(shù)int_tmain(intargc,_TCHAR*argv)(system("color1a"

38、);/把命令提示符窗口的背景色設(shè)為藍(lán)色,前景色設(shè)為淡綠色timesum=clock();chushihua();/初始化/歡送界面cout<<endl<<endl<<endl<<endl<<endl<<endl;cout<<""<<endl;cout<<"歡送使用電梯模擬系統(tǒng)"<<endl;cout<<""<<endl<<endl;system("pause")

39、;/暫停while(1)(/flag=1;system("cls");/清屏diantizhuangtai();/輸出電梯狀態(tài)while(clock()-delay)<nexttime)電梯限制(if(lt>10)wait(10);control();)shuru();/輸入乘客信息)return0;)以下是程序所涉及的頭文件棧模板頭文件:/鏈棧類的定義template<classT>structNodeTdata;Node<T>*next;/此處T可以省略);template<classT>classLinkStack/構(gòu)建

40、函數(shù),創(chuàng)立一空棧private:Node<T>*top;/鏈表首為棧頂public:LinkStack()top=NULL;構(gòu)造函數(shù),置空鏈棧LinkStack();/析構(gòu)函數(shù),釋放鏈棧中各結(jié)點的存儲空間voidPush(Tx);/元素x入棧TPop();/棧頂元素出棧TGetTop();/取棧頂元素intStackEmpty();/判斷棧是否為空voidClearStack();/清空棧voidStackTranverse();/遍歷輸出棧中元素/*friendostream&operator<<(ostream&stream,Tasd)stream&

41、lt;<asd.number;returnstream;*/;/鏈棧類的實現(xiàn)template<classT>LinkStack<T>:LinkStack()/析構(gòu)函數(shù),銷毀棧Node<T>*q;while(top)/從棧頂開始釋放棧鏈的每一個結(jié)點的存儲空間(q=top;/暫存被釋放結(jié)點top=top->next;/頭指針后移指向下一個被釋放結(jié)點deleteq;template<classT>voidLinkStack<T>:Push(Tx)/入棧Node<T>*s;s=newNode<T>s->

42、;data=x;/創(chuàng)立一新結(jié)點,數(shù)據(jù)域為x的結(jié)點ss->next=top;top=s;/新結(jié)點鏈入表首,為棧頂template<classT>TLinkStack<T>:Pop()/出棧Tx;Node<T>*p;if(top=NULL)throw"下溢"x=top->data;/暫存棧頂元素p=top;top=top->next;/棧頂后移deletep;/刪除原棧頂結(jié)點returnx;template<classT>TLinkStack<T>:GetTop()/獲取棧頂元素if(top=NULL

43、)throw"棧空,棧頂無元素"returntop->data;template<classT>voidLinkStack<T>:ClearStack()/清空棧while(top)/從棧頂開始釋放棧鏈的每一個結(jié)點的存儲空間Node<T>*q;q=top;/暫存被釋放結(jié)點top=top->next;/頭指針后移指向下一個被釋放結(jié)點deleteq;)template<classT>intLinkStack<T>:StackEmpty()/測??読f(top=NULL)return1;elsereturn0

44、;)template<classT>voidLinkStack<T>二StackTranverse()/從棧頂起,遍歷輸出棧元素Node<T>*p;p=top;while(p)cout<<p->data;p=p->next;)cout<<endl;)隊列模版頭文件/鏈隊類的定義template<classT>structNodesTdata;Nodes<T>*next;/此處T可以省略);template<classT>classLinkQueueprivate:Nodes<T&g

45、t;*front;/隊頭指針,鏈表頭為隊頭Nodes<T>*rear;/隊尾指針,鏈表尾為了隊尾public:LinkQueue();/構(gòu)造空隊列LinkQueue();析構(gòu)函數(shù),釋放鏈隊各結(jié)點的存儲空間voidEnQueue(Tx);/元素x入隊TDeQueue();/隊頂元素出隊TGetHead();/取隊頭元素TGetLast();/取隊尾元素intQueueEmpty();/判斷隊是否為空voidClearQueue();/voidQueueTranverse();/*friendostream&operator<<(ostream&stream

46、,Tasd)stream<<asd.number;returnstream;*/;/鏈隊類的實現(xiàn)template<classT>LinkQueue<T>:LinkQueue()/構(gòu)建函數(shù),創(chuàng)立一空隊front=newNodes<T>/創(chuàng)立隊頭結(jié)點front->next=NULL;rear=front;/空隊template<classT>LinkQueue<T>:LinkQueue()/析構(gòu)函數(shù),銷毀隊Nodes<T>*p;while(front!=NULL)/從隊頭開始逐個刪除隊列中的結(jié)點p=front

47、;/暫存被釋放結(jié)點front=front->next;/頭指針后移指向下一個被釋放結(jié)點deletep;template<classT>voidLinkQueue<T>:EnQueue(Tx)/入隊Nodes<T>*s;s=newNodes<T>s->data=x;/申請一數(shù)據(jù)域為x的結(jié)點ss->next=rear->next;rear->next=s;/新結(jié)點插在鏈隊尾rear=s;/修改尾指針if(front->next=NULL)/如果創(chuàng)立的是首元結(jié)點,front->next指向它front->

48、next=s;template<classT>TLinkQueue<T>二DeQueue()/出隊Tx;Nodes<T>*p;if(rear=front)throw"下溢"/隊空,那么下溢p=front->next;x=p->data;/暫存隊頭元素front->next=p->next;/將隊頭結(jié)點從鏈表中摘除if(p->next=NULL)rear=front;/如果出隊后為空隊,修改隊尾指針deletep;returnx;)template<classT>TLinkQueue<T>

49、;二GetHead()/獲取隊頭元素Nodes<T>*p;if(front=rear)throw"隊空,無隊頭元素;/p=front->next;returnp->data;)template<classT>TLinkQueue<T>二GetLast()/獲取隊尾元素if(front=rear)throw"隊空,無隊尾元素"returnrear->data;)template<classT>voidLinkQueue<T>:ClearQueue()/清空隊Nodes<T>*p

50、;p=front->next;while(p)/從隊頭開始逐個刪除隊列中的結(jié)點front->next=p->next;/暫存被釋放結(jié)點deletep;p=front->next;)rear=front;template<classT>intLinkQueue<T>:QueueEmpty()/測隊空if(front=rear)return1;elsereturn0;)template<classT>voidLinkQueue<T>:QueueTranverse()/從隊首到隊尾,遍歷輸出隊中元素Nodes<T>*

51、p;p=front->next;while(p)cout<<p->data;p=p->next;)cout<<endl;)stdafx.h/stdafx.h:標(biāo)準(zhǔn)系統(tǒng)包含文件的包含文件,/或是經(jīng)常使用但不常更改的/特定于工程的包含文件#pragmaonce#defineWIN32_LEAN_AND_MEAN/從Windows頭中排除極少使用的資料#include<stdio.h>#include<tchar.h>#include<iostream>#include<time.h>#include<w

52、indows.h>#include<iomanip>#include"LinkQueue.h"#include<process.h>/exit()#include"LinkStack.h"/#include<iomanip.h>/TODO:在此處引用程序需要的其他頭文件第五章運行與測試進(jìn)入歡送界面進(jìn)入運行界面:>'E;DESKTO個電哧室其C.0De!ou9,國忤事以4,.,c已"海信息I現(xiàn)在的樓層是:1客客客客客8SJ77":dc7"T-r7-c-c.局蜃局層4321

53、0mFarpm號MPH費盟需WW富層層43210a-F與IZ已mFgrF列列列l(wèi)yr-JVT-TTnJtr邊邊招邊next請輸入乘客進(jìn)入了哪層,要去哪層,容忍等待的最大時間,下一乘客到來的時間間隔;40.輸入乘客數(shù)據(jù):現(xiàn)在的樓層是K1下邊是電梯現(xiàn)在的狀態(tài)信息:卜、:.-12.卜-y-rF、丫fa'laLJl£J1ZJ二層層層層層23451層層層層層43210第第第羹nownext請輸入乘客進(jìn)入了哪層,要去哪層,容忍等待的最大時間,下一乘客到來的時間間隔:1326001000_設(shè)定一定等待長度后,觀察電梯的運行:41u-.5A-.5A.夕.夕夕今夕nRErJ-nn£r51.湃辯理牌年出4分NlMIH3sa.?J>HS8肓H;二工后H.B穹B:藥HJlm3n占ra-Jlr/Mn.現(xiàn)TZ的栩?qū)邮枪?#177;勺內(nèi)勺一一JT.1T1-LJ一fiJ.層入電

溫馨提示

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

評論

0/150

提交評論