版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 操作系統(tǒng)</b></p><p><b> 課程設(shè)計</b></p><p> 題 目: 交通燈問題 </p><p> 專 業(yè): 計算機(jī)科學(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è)將每一臺汽車都作為一個進(jìn)程,請設(shè)計良好的機(jī)制,展示出合理的“十字路口交通管理”情況。設(shè)計復(fù)雜路段信號燈控制,要求實(shí)現(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> 進(jìn)程的互斥:交通燈進(jìn)程實(shí)際上是互斥的,即不能同時為紅或者同時為綠。</p><p> 進(jìn)程的消息通信或其他通信方式:對車輛進(jìn)程而言,每一個車輛在通過路口前,必須確認(rèn)前面的車輛已經(jīng)通過了路口。</p><p&g
6、t; 進(jìn)程的調(diào)度:停留在一個路口的車輛,決定其前進(jìn)或等候的因素是交通燈和前面車輛的狀態(tài),需要設(shè)計一個良好的進(jìn)程調(diào)度機(jī)制來控制所有車輛的通行。</p><p><b> 開發(fā)環(huán)境說明:</b></p><p> 開發(fā)軟件:Microsoft Visual studio 2010</p><p><b> 功能需求分析:</
7、b></p><p> 程序需實(shí)現(xiàn)以下功能:</p><p> 車輛正常通過十字路口</p><p><b> 車輛都遵守交通規(guī)則</b></p><p><b> 合理的使用資源</b></p><p><b> 概念設(shè)計:</b>&l
8、t;/p><p> 根據(jù)程序功能需求本程序涉及實(shí)體很簡單,包括車實(shí)體和燈實(shí)體,根據(jù)實(shí)體屬性和實(shí)體間的聯(lián)系進(jìn)行設(shè)計。</p><p><b> 車實(shí)體</b></p><p> 這里我們需要解決四類車輛對象的各種功能和操作,所以在設(shè)計過程中添加如下四個用戶控件(即是四個不同的類)</p><p> 此四個類各種實(shí)現(xiàn)不同
9、車道上的車的相關(guān)動作。如:運(yùn)動</p><p><b> 燈實(shí)體</b></p><p> 此次設(shè)計過程中,有一個極為重要的功能實(shí)現(xiàn)就是交通燈的計時和交通規(guī)則問題。這里在設(shè)計紅綠燈的亮燈規(guī)則有如下波形圖:</p><p> 還有如下等函數(shù)來控制亮燈的顏色:</p><p> 在通過各種判斷和控制就實(shí)現(xiàn)了最終的交通
10、燈問題。</p><p> 開始按鈕后,交通燈將按照一定的邏輯開始變換亮燈,于此同時將隨機(jī)的產(chǎn)生各種不同的車輛對象,開始在道路上按規(guī)則進(jìn)行運(yùn)動。然后在車輛完成在道路上的運(yùn)動時,合理撤銷對象,釋放其所占有的資源。</p><p><b> 用戶界面設(shè)計</b></p><p><b> 道路設(shè)計:</b></p&
11、gt;<p> 簡單,交通燈為label,車道是背景圖片,沒有進(jìn)行加工,只是最簡單的繪畫。</p><p><b> 下來車:</b></p><p><b> 上來車:</b></p><p><b> 左來車:</b></p><p><b>
12、; 右來車:</b></p><p><b> 運(yùn)行界面:</b></p><p> 注:次車道為三車道,因?yàn)闀r間原因,車輛的左轉(zhuǎn)和右轉(zhuǎn)還沒有實(shí)現(xiàn),所以暫時只有直行的功能。</p><p><b> 紅燈停</b></p><p> 車輛在還沒有通過先時遇見紅燈則在線之外等待綠
13、燈才能通行。</p><p><b> 綠燈行</b></p><p> 車輛在綠燈情況下運(yùn)行。</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控件計時來模擬進(jìn)程,以time參數(shù)的值來調(diào)用不同的控制等的各個函數(shù)實(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> //進(jìn)?入¨?各¡Â自Á?的Ì?道̨¤</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> 隨機(jī)產(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)Ì¡À綠¨¬燈Ì?時º¡À前¡ã進(jìn)?</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)驗(yàn)的人和在網(wǎng)上、書籍上查找相應(yīng)的資料,最后在規(guī)定的收件內(nèi)完成本次課程設(shè)計。總體來講,在表面上,基本已經(jīng)實(shí)現(xiàn)了車輛和交通燈等基本操作功能,而且在設(shè)計過程中也有合理的邏輯。</p><p> 但是,細(xì)觀察設(shè)計內(nèi)容可以發(fā)現(xiàn)許多的問題,一下是我個人認(rèn)為的不足之處:</p><p> 面向?qū)ο笏枷氩粔蛎鞔_。</p>
74、<p> 操作過于繁瑣,就代碼本身而言,代碼的結(jié)構(gòu)和功能都十分的雜亂,有待提高</p><p> 設(shè)計過程中,存在許多不完整性的控制,整個設(shè)計流程簡單,但是卻沒有陣中的使用進(jìn)程機(jī)制。</p><p> 許多功能沒有能夠?qū)崿F(xiàn)。</p><p> 最后、通過這次課程設(shè)計,我們對程序設(shè)計有了基本的認(rèn)識,對計算機(jī)操作系統(tǒng)的進(jìn)程機(jī)制也有了更進(jìn)一步的理解,而且
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通信號燈模擬(pv操作) 網(wǎng)絡(luò)操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--頁面置換算法模擬程序設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--頁面置換算法模擬程序設(shè)計
- 操作系統(tǒng)程序設(shè)計課程設(shè)計報告-操作系統(tǒng)模擬實(shí)現(xiàn)
- 交通信號燈課程設(shè)計---交通信號燈系統(tǒng)設(shè)計
- 操作系統(tǒng)課程設(shè)計——操作系統(tǒng)課程設(shè)計模擬操作系統(tǒng)
- 微機(jī)原理課程設(shè)計——信號燈
- 交通信號燈課程設(shè)計報告
- 課程設(shè)計--- 交通信號燈系統(tǒng)設(shè)計
- 交通信號燈課程設(shè)計--交通指揮信號燈控制系統(tǒng)設(shè)計
- 操作系統(tǒng)程序調(diào)度課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計--頁式存儲管理中頁面置換(淘汰)的模擬程序
- 信號燈課程設(shè)計---簡易交通信號燈控制器
- 單片機(jī)課程設(shè)計報告--交通信號燈的模擬系統(tǒng)
- 交通信號燈課程設(shè)計報告 (2)
- 課程設(shè)計交通信號燈
- 交通信號燈課程設(shè)計
- 交通信號燈課程設(shè)計
- 交通信號燈課程設(shè)計
- 交通信號燈課程設(shè)計
評論
0/150
提交評論