----------------------
asp.net+android+ios開發、
.net培訓、期待與您交流! ----------------------
模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:
> 非同步隨機生成按照各個路線行駛的車輛。
例如:
由南向而來去往北向的車輛 ---- 直行車輛
由西向而來去往南向的車輛 ---- 右轉車輛
由東向而來去往南向的車輛 ---- 左轉車輛
。。。
> 訊號燈忽略黃燈,只考慮紅燈和綠燈。
> 應考慮左轉車輛控制訊號燈,右轉車輛不受訊號燈控制。
> 具體訊號燈控制邏輯與現實生活中普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯。
注:南北向車輛與東西向車輛交替放行,同方向等待車輛應先放行直行車輛而後放行左轉車輛。
> 隨機生成車輛時間間隔以及紅綠燈交換時間間隔自定,可以設定。
> 不要求實現gui,只考慮系統邏輯實現,可通過log方式展現程式執行結果。
一、思路整理:
根據需求可知,車輛可能行走的路線有
1>直行路線:南到北、北到南、東到西、西到東
2>左轉彎路線:南到西、北到東、東到南、西到北
3>右轉彎路線:南到東、北到西、東到北、西到南
總共有12條路線,其中右轉彎的路線不受交通燈的控制,隨時都可以保持綠燈狀態,其他八條路線其實只需要分析四條路線即可,因為每條路線的相對的
方向每次都是與該條路線的紅綠燈狀態保持一致的,比如南到北時,它的相對路線是北到南,當南到北為綠燈時,北到南肯定也為綠燈,東到西和西到東
也是一對,南到西和北到東是一堆,東到南和西到北也是一對
二、利用物件導向的思維建模:
具體分析可知,題中存在四個物件:路、燈、車、燈的控制器(控制燈的紅綠燈變化),但是車的具體資訊我們不需要關注,只需要把車當作乙個字串處理即可,
即:車是裝在路上的陣列中的乙個字串即可,這樣分析後,就只剩下三個物件了,即:路、燈、燈控制器
1>路物件分析:
分析可以得出如下結論:
》一共有十二條路,每條路的方向都是不一樣的,所以每一條路應該有個名稱
》路上有車,所以路的物件擁有車的集合,用於儲存車
》路的物件應該提供儲存車的方法
》每一輛車過完紅綠燈後,路上的車就減少一輛,所以路的物件還應該提供車子減少的方法
》由於每條路上都不斷的有車子來,也不斷的有車子過紅綠燈,所以應該考慮建立執行緒
》路一建立後,就馬上有車子了,所以增加車子和車子不停的過紅綠燈的方法應該在建構函式中就定義
根據分析可以得出以下路的類:
public class road catch (interruptedexception e)
} }
});
executors.newscheduledthreadpool(1).scheduleatfixedrate(
new runnable()
} }
},
//第一次在一秒鐘以後執行檢查交通燈
1,
//下一次檢查時間間隔為一秒
1,
timeunit.seconds);
} }
2>燈物件分析:
分析可得如下結論:
》對於燈,每條路都會使用到,而且燈的數量是固定的,一共十二個燈,所以考慮使用列舉
》燈的列舉類應該有變為紅燈的方法:setlightred(),和變為綠燈的方法setlightblue();
》燈的類應該向外提供訪問燈當前狀態的方法getlight()
》當前燈變為紅燈時,他的下乙個燈應該變為綠燈,這樣才能夠保證多個燈之間的紅綠燈切換
》當前燈變為紅燈或綠燈時,與它相反方向的燈的狀態也應該跟它保持一致
》既然向外提供了獲取燈當前狀態的方法,那也必須有設定燈的狀態的方法,所以在建構函式中,應該提供的引數有:燈的狀態、與當前燈相反方向的燈、當前燈
public enum lamp
//當前轉向路口紅綠燈的狀態
private boolean light;
//當前轉向的相反方向
private string opposite;
//下乙個轉向
private string next;
public boolean getlight()
public void setlightblue()
} public lamp setlightred()
//下乙個變綠的燈
lamp nextlamp = null;
if(null != next)
return nextlamp;
} }
3>燈控制器分析
》燈控制器控制的是燈,所以它必須擁有燈才能控制燈,所以控制器擁有燈的屬性
》控制器的作用是:控制所有交通燈的紅綠燈切換,所以基本思路應該是先給個初始化的狀態,讓乙個燈先變綠,然後在固定時間對四個方向(南到北、東到西、南到西、東到 南)的燈進行切換,如果在當前燈變紅時能夠將它的下乙個燈變綠,而且返回這個下乙個燈,那控制器只需要每次將當前燈變紅後,再將下乙個燈賦值給當前燈即可。
public class lampcontroller
},
10,
10,
timeunit.seconds);
} }
4>主函式測試執行效果
public class mainclass ;
for(int i=0; i<12; i++)
//啟動控制器
new lampcontroller();
} }
----------------------
asp.net+android+ios開發、
.net培訓、期待與您交流! ----------------------
交通燈管理系統筆記
物件導向的分析與設計 兩塊石頭磨成一把石刀,石刀可以砍樹,砍成木材,木材做成椅子 球從一根繩子的一段移動到了另一端 用物件導向的方法分析設計這兩種過程。1.用到的類 stone stonesword tree wood chair stonefactory woodfactory。stonefact...
交通燈管理系統
銀行業務排程系統模擬銀行排程系統邏輯。需求 銀行內有6個業務視窗,1 4為普通視窗,5為快速視窗,6為vip視窗。有三種型別客戶 vip客戶,快速客戶 交水電費類業務 普通客戶。一部隨機生成各種型別的客戶,概率比例為 vip客戶 快速客戶 普通客戶 1 3 6。客戶辦理用時設定最少時間。各型別客戶在...
交通燈管理系統
需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下 1.非同步隨機生成按照各個路線行駛的車輛。例如 由南向而來去往北向的車輛 直行車輛 由西向而來去往南向的車輛 右轉車輛 由東向而來去往南向的車輛 左轉車輛 2.訊號燈忽略黃燈,只考慮紅燈和綠燈。3.應考慮左轉車輛控制訊號燈,右轉車輛不受訊號燈...