程序設(shè)計模式實驗-模擬食堂求索食堂椅子數(shù)量值java程序.doc_第1頁
程序設(shè)計模式實驗-模擬食堂求索食堂椅子數(shù)量值java程序.doc_第2頁
程序設(shè)計模式實驗-模擬食堂求索食堂椅子數(shù)量值java程序.doc_第3頁
程序設(shè)計模式實驗-模擬食堂求索食堂椅子數(shù)量值java程序.doc_第4頁
程序設(shè)計模式實驗-模擬食堂求索食堂椅子數(shù)量值java程序.doc_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗報告(三):面向?qū)ο蟪绦蛟O(shè)計-事件模擬科目:程序設(shè)計方法 專業(yè):計算機科學(xué)與技術(shù) 班級: 計7 姓名: 風律澈 學(xué)號: 105032011130 日期: 2013.6.61 實驗?zāi)康?、學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計方法的基本思想.2、掌握在具體場景中對象的提取。3、掌握類之間的各種關(guān)系。4、掌握適用序列圖/時序圖來表示對象之間的交互關(guān)系。2 實驗內(nèi)容食堂位置的設(shè)置問題:某食堂需要設(shè)置足夠的位置供學(xué)生在進餐時使用,其目的是確保在高峰期時每一個學(xué)生都有一個位置可用,且又不會由于設(shè)置過多位置造成浪費。輸入:學(xué)生到達食堂的時間和就餐時間作為輸入序列。要求:模擬學(xué)生進入食堂,買飯、就餐、離開的過程.并通過設(shè)

2、置不同的買飯窗口觀察窗口數(shù)對學(xué)生排隊和設(shè)置就餐位置的影響。輸出:在當前輸入情況下,最高峰時學(xué)生就餐需要的座位數(shù)?;疽螅菏紫确治鏊獙崿F(xiàn)的系統(tǒng),分析其中所隱含的對象;確定各個類之間的關(guān)系,畫出類圖;用交互圖畫出各個對象之間的關(guān)系。提示:對象是動作的主體,比如排隊過程,這個事件該放在學(xué)生這個類中,學(xué)生為了排隊,需要觀察各個隊列的長短,然后做出決定是排到哪個隊列中。同時,整個模擬過程有個控制類,這個類從各個隊列中獲取要發(fā)生的事件,然后調(diào)用具體對象的方法實現(xiàn)。 3 程序設(shè)計3。1 類圖分析其中蘊含的對象,抽象出類,并且畫出類關(guān)系圖 學(xué)生類到食堂吃飯時間:int 吃飯耗時:int生存時間:int選擇

3、窗口()修改生存時間(k)獲得到食堂吃飯時間()獲得吃飯耗時()獲得生存時間()減少生存時間() 窗口打飯時間:int排隊學(xué)生:int增加排隊學(xué)生()獲得排隊學(xué)生()減少排隊學(xué)生() 食堂窗口:窗口10最大學(xué)生數(shù)量:int學(xué)生數(shù)量:int插入k窗口排隊(k)獲得窗口k排隊人數(shù)(k)從k窗口排隊中移除(k)增加學(xué)生數(shù)量()減少學(xué)生數(shù)量()獲得最大學(xué)生數(shù)量()獲得學(xué)生數(shù)量()修改最大學(xué)生數(shù)量()3。2 序列圖對所涉及個各個事件、對象交互關(guān)系,分別用序列圖表示.至少畫出控制類的調(diào)度序列圖、學(xué)生排隊事件序列圖。其余可以自行擴展具體可以參考課件中序列圖部分。生成對象Int n=0n+學(xué)生類處理餐廳。窗口

4、處理輸出食堂最大學(xué)生數(shù)量學(xué)生類處理NO食堂學(xué)生數(shù)量=0YESNew 食堂 最大學(xué)生數(shù)量=0 學(xué)生數(shù)量=0 New 窗口 打飯時間=1 排隊學(xué)生數(shù)量=0New 優(yōu)先隊列<學(xué)生 qNew 鏈表<學(xué)生> sInt i=0i+New 學(xué)生t 到食堂時間 random(1189) 吃飯耗時 random(310)Q.add(學(xué)生t)YESi100NONOq.fist到食堂時間=nYESNew 學(xué)生x=p.popint kk=學(xué)生x。選擇窗口()食堂.窗口k。排隊學(xué)生數(shù)量+學(xué)生x。修改生存時間(食堂。窗口k。排隊學(xué)生數(shù)量)S。add(學(xué)生x)int m=0YESm=10NONO食堂。窗口

5、m。隊學(xué)生數(shù)量>0YES食堂。窗口m.隊學(xué)生數(shù)量-m+食堂.學(xué)生數(shù)量+NO食堂。學(xué)生數(shù)量食堂.最大學(xué)生數(shù)量YES食堂。最大學(xué)生數(shù)量=食堂.學(xué)生數(shù)量int f=0f<s。sizeYESSf。生存時間-NOf+Sf.生存時間=0YESS.popn食堂.學(xué)生數(shù)量-f-4 實現(xiàn)4.1 程序?qū)崿F(xiàn)把他們的實現(xiàn)放進去,最好能大概說明過程,或者程序中注釋。如果對應(yīng)多個文件,希望能夠清楚說明,并分節(jié).這里實現(xiàn)的每一個對象、事件希望能夠和上面設(shè)計相對應(yīng)。package 餐廳;import java。util.LinkedList;import java。util。PriorityQueue;impor

6、t java.util.Random;import java.util.Stack;public class main /* * param args */public static void main(String args) / TODO Autogenerated method stub/ 1 /room dinnerholl=new room();PriorityQueue<student> q=new PriorityQueuestudent();LinkedListstudent s=new LinkedList<student();for(int i=0;i30

7、0;i+)/假定學(xué)生人數(shù)100人Random random=new Random();int a=random。nextInt(120)+1;/食堂開放時間單位分鐘int b=random.nextInt(20)+3;/每個人吃飯時間單位分鐘,312分鐘student st=new student(a,b);q。offer(st);int n=0;don+;/ 2 /if(q.peek()!=null) while(q。peek().getarrival()=n)student t;t=q.poll();int k=t.choosewindow();dinnerholl。inlist(k);t

8、。set_during(dinnerholl。get_window_list_long(k);s.add(t);if(q。peek()=null)break;/ 3 /for(int m=0;m<10;m+)if(dinnerholl。get_window_list_long(m)>0)dinnerholl.outlist(m);dinnerholl。rise_now_student_number();if(dinnerholl。get_moststudentnumber()dinnerholl.get_nowstudentnumber())dinnerholl.reset_mos

9、tstudentnumber(dinnerholl.get_nowstudentnumber());/ 4 /for(int j=0;j<s.size();j+)s.get(j)。decrease_during();if(s。get(j).get_during()=0)s.remove(j);dinnerholl。decrease_now_student_number();j-;while(!s.isEmpty());/輸出結(jié)果System.out.println(dinnerholl.get_moststudentnumber();-package 餐廳;import java.uti

10、l。Random;public class student implements Comparablestudent private int arrival;private int eattime;private int during;public student(int a,int b)this。arrival=a;this。eattime=b;Overridepublic int compareTo(student o) / TODO Autogenerated method stubif(this。arrivalo.arrival) return 1;if(this。arrival<

11、;o.arrival) return -1;return 0;public int getarrival()return this。arrival;public int geteattime()return this.eattime;public int choosewindow()Random random=new Random();int k=random.nextInt(10);return k;public void set_during(int list)this.during=list+this。eattime;public int get_during()return this.

12、during;public void decrease_during()this.during;-package 餐廳;public class room private int moststudentnumber;private int nowstudentnumber;private window windows;public room()this。moststudentnumber=0;this.nowstudentnumber=0;this.windows=new window10;for(int i=0;i<10;i+)this.windowsi=new window();pu

13、blic void inlist(int k)this。windowsk。rise_student_number();public int get_window_list_long(int k)return this。windowsk.get_student_number();public void outlist(int k)this.windowsk.remove_student_number();public void rise_now_student_number()this.nowstudentnumber+;public int get_nowstudentnumber()retu

14、rn this。nowstudentnumber;public int get_moststudentnumber()return this。moststudentnumber;public void reset_moststudentnumber(int k)this。moststudentnumber=k;public void decrease_now_student_number()this。nowstudentnumber-;-package 餐廳;public class window private int pack;private int studentnumber;public window()this.pack=1;this.studentnumber=0;public void rise_student_number()this。studentnumber+;public int get_student_number()return this.studentnumber;public void remove_student_number()this.studentnumber-;4.2 運行結(jié)果與分析實驗結(jié)果需要你提供輸入(需要詳細列出所有數(shù)據(jù)),輸出對應(yīng)。不允許通過大量截圖的方式展示實驗結(jié)果.

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論