操作系統(tǒng)課程設(shè)計報告---信號燈模擬程序_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  操作系統(tǒng)</b></p><p><b>  課程設(shè)計</b></p><p>  題 目: 交通燈問題 </p><p>  專 業(yè): 計算機科學(xué)與技術(shù) </p><p>  姓 名:

2、 </p><p>  學(xué) 號: </p><p>  學(xué) 院: 信息工程學(xué)院 </p><p>  2011年 12 月 23 日</p><p><b>  課程設(shè)計題目:</b></p><p><b>  信號燈模擬

3、程序</b></p><p><b>  1、設(shè)計目的:</b></p><p>  一個十字路口,共有四組紅綠燈,每個路口的車輛都遵循“紅燈停、綠燈行”的原則,假設(shè)將每一臺汽車都作為一個進程,請設(shè)計良好的機制,展示出合理的“十字路口交通管理”情況。設(shè)計復(fù)雜路段信號燈控制,要求實現(xiàn)圖形用戶界面。</p><p><b> 

4、 2、設(shè)計要求:</b></p><p>  車輛數(shù)目:每個路口的車輛數(shù)目不超過5輛,程序能夠提供參數(shù)來設(shè)定初始的車輛數(shù)目。</p><p>  交通燈設(shè)定:初始情況一個路口為紅燈、一個路口為綠燈;紅燈變?yōu)榫G燈的間隔為3秒,必須保持十字路口交通燈的設(shè)定正確。</p><p>  車輛通行設(shè)定:路口寬度不限,對一個路口而言,只有當(dāng)一輛車通過路口(越過對面路

5、口的交通燈后)后,其后續(xù)車輛才能繼續(xù)通過交通燈,車輛通過路口的時間可以固定、可以自行計算,但是不能為3秒。(即必須體現(xiàn)交通燈對通行的管制)。</p><p>  進程的互斥:交通燈進程實際上是互斥的,即不能同時為紅或者同時為綠。</p><p>  進程的消息通信或其他通信方式:對車輛進程而言,每一個車輛在通過路口前,必須確認(rèn)前面的車輛已經(jīng)通過了路口。</p><p&g

6、t;  進程的調(diào)度:停留在一個路口的車輛,決定其前進或等候的因素是交通燈和前面車輛的狀態(tài),需要設(shè)計一個良好的進程調(diào)度機制來控制所有車輛的通行。</p><p><b>  開發(fā)環(huán)境說明:</b></p><p>  開發(fā)軟件:Microsoft Visual studio 2010</p><p><b>  功能需求分析:</

7、b></p><p>  程序需實現(xiàn)以下功能:</p><p>  車輛正常通過十字路口</p><p><b>  車輛都遵守交通規(guī)則</b></p><p><b>  合理的使用資源</b></p><p><b>  概念設(shè)計:</b>&l

8、t;/p><p>  根據(jù)程序功能需求本程序涉及實體很簡單,包括車實體和燈實體,根據(jù)實體屬性和實體間的聯(lián)系進行設(shè)計。</p><p><b>  車實體</b></p><p>  這里我們需要解決四類車輛對象的各種功能和操作,所以在設(shè)計過程中添加如下四個用戶控件(即是四個不同的類)</p><p>  此四個類各種實現(xiàn)不同

9、車道上的車的相關(guān)動作。如:運動</p><p><b>  燈實體</b></p><p>  此次設(shè)計過程中,有一個極為重要的功能實現(xiàn)就是交通燈的計時和交通規(guī)則問題。這里在設(shè)計紅綠燈的亮燈規(guī)則有如下波形圖:</p><p>  還有如下等函數(shù)來控制亮燈的顏色:</p><p>  在通過各種判斷和控制就實現(xiàn)了最終的交通

10、燈問題。</p><p>  開始按鈕后,交通燈將按照一定的邏輯開始變換亮燈,于此同時將隨機的產(chǎn)生各種不同的車輛對象,開始在道路上按規(guī)則進行運動。然后在車輛完成在道路上的運動時,合理撤銷對象,釋放其所占有的資源。</p><p><b>  用戶界面設(shè)計</b></p><p><b>  道路設(shè)計:</b></p&

11、gt;<p>  簡單,交通燈為label,車道是背景圖片,沒有進行加工,只是最簡單的繪畫。</p><p><b>  下來車:</b></p><p><b>  上來車:</b></p><p><b>  左來車:</b></p><p><b>

12、;  右來車:</b></p><p><b>  運行界面:</b></p><p>  注:次車道為三車道,因為時間原因,車輛的左轉(zhuǎn)和右轉(zhuǎn)還沒有實現(xiàn),所以暫時只有直行的功能。</p><p><b>  紅燈停</b></p><p>  車輛在還沒有通過先時遇見紅燈則在線之外等待綠

13、燈才能通行。</p><p><b>  綠燈行</b></p><p>  車輛在綠燈情況下運行。</p><p><b>  黃燈等待和通行問題</b></p><p>  當(dāng)黃燈時,已經(jīng)通過先的車輛繼續(xù)通行,未通過的則等待。</p><p><b>  車輛間

14、距問題</b></p><p>  前后車輛必須保持一定的車距</p><p><b>  語言代碼:</b></p><p><b>  main 類</b></p><p>  MyCarLeft 等</p><p><b>  各種參數(shù)的解釋&l

15、t;/b></p><p>  ArrayList用來存儲各個方向的對象,上的bool都是用來記錄各個燈的紅、黃和綠的狀態(tài)。</p><p>  控制交通燈顏色的函數(shù)(一個樣式)</p><p><b>  交通燈控制</b></p><p>  #region 通ª¡§燈Ì

16、?控?制?</p><p>  int time = 0;</p><p>  private void timer1_Tick(object sender, EventArgs e)</p><p><b>  {</b></p><p><b>  time++;</b></p>

17、<p>  btnstart.Text = time.ToString();</p><p>  if (time > 0 && time < 30) label1.Left+=4;</p><p>  if (time > 30) label1.Top+=4;</p><p>  if (time == 1)</p

18、><p><b>  {</b></p><p>  light_SN_STRandRight();</p><p><b>  }</b></p><p>  if (time == 31)</p><p><b>  {</b></p>&

19、lt;p>  light_SN_yellow();</p><p><b>  }</b></p><p>  if (time == 36)</p><p><b>  {</b></p><p>  light_SN_left();</p><p><b>

20、;  }</b></p><p>  if (time == 66)</p><p><b>  {</b></p><p>  light_SNEW_yellow();</p><p><b>  }</b></p><p>  if (time == 71)&

21、lt;/p><p><b>  {</b></p><p>  light_EW_STRandRight();</p><p><b>  }</b></p><p>  if (time == 101)</p><p><b>  {</b></p&

22、gt;<p>  light_EW_yellow();</p><p><b>  }</b></p><p>  if (time == 106)</p><p><b>  {</b></p><p>  light_EW_left();</p><p>&

23、lt;b>  }</b></p><p>  if (time == 136)</p><p><b>  {</b></p><p>  light_SN_EW_yellow();</p><p><b>  }</b></p><p>  if (tim

24、e > 141)</p><p><b>  {</b></p><p><b>  time = 0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  #endre

25、gion</p><p>  使用Timer控件計時來模擬進程,以time參數(shù)的值來調(diào)用不同的控制等的各個函數(shù)實現(xiàn)燈的亮。</p><p><b>  創(chuàng)建車對象</b></p><p>  private void timer2_Tick(object sender, EventArgs e)</p><p><

26、b>  {</b></p><p>  System.Random rdmCar = new Random();</p><p>  int carFrom = rdmCar.Next(1,5);</p><p>  System.Random rdmDrction = new Random();</p><p>  int

27、 carTo = rdmDrction.Next(1, 4);</p><p>  //進?入¨?各¡Â自Á?的Ì?道̨¤</p><p>  if(carFrom==1) //南?路¡¤口¨²</p><p><b>  {</

28、b></p><p>  if (carTo == 1)//左Á¨®</p><p><b>  {</b></p><p>  MyCarBottom carbottom = new MyCarBottom(carFrom, carTo, Scount_1, this);</p><p&

29、gt;  bottom_1.Add(carbottom);</p><p>  Scount_1++;</p><p><b>  }</b></p><p>  if (carTo == 2)//直¡À</p><p><b>  {</b></p><p&

30、gt;  MyCarBottom carbottom = new MyCarBottom(carFrom, carTo, Scount_2, this);</p><p>  bottom_2.Add(carbottom);</p><p>  Scount_2++;</p><p><b>  }</b></p><p&g

31、t;  if (carTo == 3)//右®¨°</p><p><b>  {</b></p><p>  MyCarBottom carbottom = new MyCarBottom(carFrom, carTo, Scount_3, this);</p><p>  bottom_3.Add(carbot

32、tom);</p><p>  Scount_3++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(carFrom==2)//北À¡À路¡¤口¨²</p>

33、<p><b>  {</b></p><p>  if (carTo == 1)//左Á¨®</p><p><b>  {</b></p><p>  MyCarTop cartop = new MyCarTop(carFrom, carTo, Ncount_1, this);

34、</p><p>  top_1.Add(cartop);</p><p>  Ncount_1++;</p><p><b>  }</b></p><p>  if (carTo == 2)//直¡À</p><p><b>  {</b></p

35、><p>  MyCarTop cartop = new MyCarTop(carFrom, carTo, Ncount_2, this);</p><p>  top_2.Add(cartop);</p><p>  Ncount_2++;</p><p><b>  }</b></p><p> 

36、 if (carTo == 3)//右®¨°</p><p><b>  {</b></p><p>  MyCarTop cartop = new MyCarTop(carFrom, carTo, Ncount_3, this);</p><p>  top_3.Add(cartop);</p>&

37、lt;p>  Ncount_3++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(carFrom==3)//東?路¡¤口¨²</p><p><b>  {</b><

38、;/p><p>  if (carTo == 1)//左Á¨®</p><p><b>  {</b></p><p>  MyCarRight carright = new MyCarRight(carFrom, carTo, Ecount_1, this);</p><p>  right_

39、1.Add(carright);</p><p>  Ecount_1++;</p><p><b>  }</b></p><p>  if (carTo == 2)//直¡À</p><p><b>  {</b></p><p>  MyCarRig

40、ht carright = new MyCarRight(carFrom, carTo, Ecount_2, this);</p><p>  right_2.Add(carright);</p><p>  Ecount_2++;</p><p><b>  }</b></p><p>  if (carTo == 3

41、)//右®¨°</p><p><b>  {</b></p><p>  MyCarRight carright = new MyCarRight(carFrom, carTo, Ecount_3, this);</p><p>  right_3.Add(carright);</p><p&

42、gt;  Ecount_3++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if (carFrom==4)//西¡Â路¡¤口¨²</p><p><b>  {</b

43、></p><p>  if (carTo == 1)//左Á¨®</p><p><b>  {</b></p><p>  MyCarLeft carleft = new MyCarLeft(carFrom, carTo, Wcount_1, this);</p><p>  le

44、ft_1.Add(carleft);</p><p>  Wcount_1++;</p><p><b>  }</b></p><p>  if (carTo == 2)//直¡À</p><p><b>  {</b></p><p>  MyCarL

45、eft carleft = new MyCarLeft(carFrom, carTo, Wcount_2, this);</p><p>  left_2.Add(carleft);</p><p>  Wcount_2++;</p><p><b>  }</b></p><p>  if (carTo == 3)//

46、右®¨°</p><p><b>  {</b></p><p>  MyCarLeft carleft = new MyCarLeft(carFrom, carTo, Wcount_3, this);</p><p>  left_3.Add(carleft);</p><p>  Wco

47、unt_3++;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  隨機產(chǎn)生兩個數(shù)值來確定車輛所在的車道。</p><p>  MyCarBottom carbot

48、tom = new MyCarBottom(carFrom, carTo, Scount_1, this);</p><p>  bottom_1.Add(carbottom);</p><p>  這是向相應(yīng)的類傳送參數(shù),并且每生產(chǎn)一個對象則在相應(yīng)的ArryList中添加一個值。</p><p><b>  具體車的控制</b></p&

49、gt;<p>  private void MyCarRight_Load(object sender, EventArgs e)</p><p><b>  {</b></p><p>  timer1.Start();</p><p><b>  }</b></p><p>  p

50、rivate void timer1_Tick(object sender, EventArgs e)</p><p><b>  {</b></p><p><b>  try</b></p><p><b>  {</b></p><p>  bool _index = f

51、alse;</p><p>  int i = 0;</p><p>  if (_form.right_1.Contains(this))</p><p><b>  {</b></p><p>  i = _form.right_1.IndexOf(this);</p><p>  if (i

52、 > 0)</p><p><b>  {</b></p><p>  MyCarRight carright = (MyCarRight)_form.right_1[i - 1];</p><p>  if (this.Left - carright.Left > 90)</p><p><b>

53、  {</b></p><p>  _index = true;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (this.Left >

54、368 && (_index||i==0))//已°?經(jīng)-紅¨¬燈Ì?但Ì?是º?還1沒?有®D超?出?線? 并¡é且¨°與®?前¡ã面?車¦Ì輛¢?距¨¤離¤?較?大䨮</p>

55、;<p><b>  x1 -= 4;</b></p><p>  if (_form.right_2.Contains(this))</p><p><b>  {</b></p><p>  i = _form.right_2.IndexOf(this);</p><p>  if

56、 (i > 0)</p><p><b>  {</b></p><p>  MyCarRight carright = (MyCarRight)_form.right_2[i - 1];</p><p>  if (this.Left - carright.Left > 90)</p><p><b&

57、gt;  {</b></p><p>  _index = true;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (this.Left &

58、gt; 368 && (_index || i == 0))//已°?經(jīng)-紅¨¬燈Ì?但Ì?是º?還1沒?有®D超?出?線? 并¡é且¨°與®?前¡ã面?車¦Ì輛¢?距¨¤離¤?較?大䨮&l

59、t;/p><p><b>  x2 -= 4;</b></p><p>  if (_form.right_3.Contains(this))</p><p><b>  {</b></p><p>  i = _form.right_3.IndexOf(this);</p><p&

60、gt;  if (i > 0)</p><p><b>  {</b></p><p>  MyCarRight carright = (MyCarRight)_form.right_3[i - 1];</p><p>  if (this.Left - carright.Left > 90)</p><p>

61、;<b>  {</b></p><p>  _index = true;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (this

62、.Left > 368 && (_index || i == 0))//已°?經(jīng)-紅¨¬燈Ì?但Ì?是º?還1沒?有®D超?出?線? 并¡é且¨°與®?前¡ã面?車¦Ì輛¢?距¨¤離¤?較?大ä¨&

63、#174;</p><p><b>  x3 -= 4;</b></p><p>  if (_form.EW_Str_R || this.Left <= 116 )//當(dāng)Ì¡À綠¨¬燈Ì?時º¡À前¡ã進?</p><p>&l

64、t;b>  {</b></p><p><b>  x1 -= 4;</b></p><p><b>  x2 -= 4;</b></p><p><b>  x3 -= 4;</b></p><p><b>  }</b></p&

65、gt;<p>  if (_form.EW_Str_R_Yellow && this.Left < 373)</p><p><b>  {</b></p><p><b>  x1 -= 10;</b></p><p><b>  x2 -= 10;</b><

66、;/p><p><b>  x3 -= 10;</b></p><p><b>  }</b></p><p>  if (_from == 3)</p><p><b>  {</b></p><p>  if (_to == 1)</p>

67、<p><b>  {</b></p><p><b>  y = 212;</b></p><p>  this.Left = 430 + x1;</p><p>  this.Top = y;</p><p>  _form.Controls.Add(this);</p>

68、<p><b>  }</b></p><p>  if (_from == 3 && _to == 2)</p><p><b>  {</b></p><p><b>  y = 192;</b></p><p>  this.Top = y;&

69、lt;/p><p>  this.Left = 430 + x2;</p><p>  _form.Controls.Add(this);</p><p><b>  }</b></p><p>  if (_from == 3 && _to == 3)</p><p><b&g

70、t;  {</b></p><p><b>  y = 162;</b></p><p>  this.Top = y;</p><p>  this.Left = 430 + x3;</p><p>  _form.Controls.Add(this);</p><p><b&

71、gt;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  finally</b></p><p><b>  {</b></p><p>  if

72、(this.Left <= 0) this.Dispose();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  總結(jié)</b></p><p>  本次課程設(shè)計雖然遇見許多困難,但最終都解決了,在設(shè)計過程中遇見問

73、題而提出問題并且尋找解決方法的過程中頗是受益。我們通過咨詢有更多經(jīng)驗的人和在網(wǎng)上、書籍上查找相應(yīng)的資料,最后在規(guī)定的收件內(nèi)完成本次課程設(shè)計??傮w來講,在表面上,基本已經(jīng)實現(xiàn)了車輛和交通燈等基本操作功能,而且在設(shè)計過程中也有合理的邏輯。</p><p>  但是,細觀察設(shè)計內(nèi)容可以發(fā)現(xiàn)許多的問題,一下是我個人認(rèn)為的不足之處:</p><p>  面向?qū)ο笏枷氩粔蛎鞔_。</p>

74、<p>  操作過于繁瑣,就代碼本身而言,代碼的結(jié)構(gòu)和功能都十分的雜亂,有待提高</p><p>  設(shè)計過程中,存在許多不完整性的控制,整個設(shè)計流程簡單,但是卻沒有陣中的使用進程機制。</p><p>  許多功能沒有能夠?qū)崿F(xiàn)。</p><p>  最后、通過這次課程設(shè)計,我們對程序設(shè)計有了基本的認(rèn)識,對計算機操作系統(tǒng)的進程機制也有了更進一步的理解,而且

溫馨提示

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

評論

0/150

提交評論