一、銀行業務排程系統:
一、需求:
模擬實現銀行業務排程系統邏輯,具體需求如下:
1. 銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為vip視窗。
2. 有三種對應型別的客戶:vip客戶,普通客戶,快速客戶(辦理如交水電費、**費之類業務的客戶)。
3. 非同步隨機生成各種型別的客戶,生成各型別使用者的概率比例為:
vip客戶 :普通客戶 :快速客戶 = 1 :6 :3。
5. 各型別客戶在其對應視窗按順序依次辦理業務。
6. 當vip(6號)視窗和快速業務(5號)視窗沒有客戶等待辦理業務的時候,這兩個視窗可以處理普通客戶的業務,而一旦有對應的客戶等待辦理業務的時候,則優先處理對應客戶的業務。
7. 隨機生成客戶時間間隔以及業務辦理時間最大值和最小值自定,可以設定。
8.不要求實現gui,只考慮系統邏輯實現,可通過log方式展現程式執行結果。
二、號碼生成器(numbermanager類)
1.定義乙個用於儲存上乙個客戶號碼的成員變數和用於儲存所有等待服務的客戶號碼的佇列集合。
private int lastnumber = 0;
private list queuenumbers = new arraylist();
2.定義乙個產生新號碼的方法和獲取馬上要為之服務的號碼的方法,這兩個方法被不同的執行緒操作了相同的資料,所以,要進行同步。
//每次產生乙個號碼
public synchronized integer generatenewnumber()
//視窗每次取乙個號碼服務
public synchronized integer fetchnumber()else
}三、管理器(numbermachine):
1.將numbermachine類設計成單例。
//因為管理器只有乙個,單例
private numbermachine(){}
private static numbermachine instance = new numbermachine();
public static numbermachine getinstance()
2.定義三個成員變數分別指向三個numbermanager物件,分別表示普通、快速和vip客戶的號碼管理器,定義三個對應的方法來返回這三個numbermanager物件。
分別實現get方法;
//普通
private numbermanager commonmanager = new numbermanager();
//快速
private numbermanager expressmanager = new numbermanager();
//vip
private numbermanager vipmanager = new numbermanager();
四、客戶型別設計(customertype)
1.系統中有三種型別的客戶,所以用定義乙個列舉類,其中定義三個成員分別表示三種型別的客戶。
//普通,快速,vip
common,express,vip;
2.重寫tostring方法,返回型別的中文名稱。
//給列舉定義中文名稱
public string tostring()
return name;
}五、服務視窗的設計(servicewindow)
1.預設普通視窗
//定義視窗型別(列舉),預設普通
private customertype type = customertype.common;
//視窗號
private int number = 1;
2.定義乙個start方法,內部啟動乙個執行緒,根據服務視窗的類別分別迴圈呼叫三個不同的方法。
//視窗開始取號
public void start()}}
});}2.定義三個方法分別對三種客戶進行服務,為了觀察執行效果,應詳細列印出其中的細節資訊。這裡一普通為例;
private void commonservice() catch (interruptedexception e)
system.out.println(windowname + "完成為第" + servicenumber + "號普通客戶服務,總共耗時" + servicetime/1000 + "秒");
}else catch (interruptedexception e) }}
六、mainclass的設計:
1.用for迴圈建立出4個普通視窗,再建立出1個快速視窗和乙個vip視窗。
//產生4個普通視窗
for(int i=1;i<5;i++)
//產生1個快速視窗
servicewindow expresswindow = new servicewindow();
expresswindow.settype(customertype.express);
expresswindow.start();
//產生1個vip視窗
servicewindow vipwindow = new servicewindow();
vipwindow.settype(customertype.vip);
vipwindow.start();
2.接著再建立三個定時器,分別定時去建立新的普通客戶號碼、新的快速客戶號碼、新的vip客戶號碼。這裡以普通為例;
//普通客戶拿號
executors.newscheduledthreadpool(1).scheduleatfixedrate(
new runnable()
},0,
constants.common_customer_interval_time,
timeunit.seconds);
七、各視窗服務時間設計(constants)
定義三個常量:max_service_time、
min_service_time、
common_customer_interval_time;
銀行業務排程系統
今天看了張老師的銀行業務排程系統,還是感覺不可思議。開始看專案需求時感覺這裡邊的業務邏輯太複雜。沒想到還是被張老師寫了個把小時的 給搞定。雖然看完之後腦海中對於程式執行過程有些模糊,但起碼現在努力努力寫出個類似的程式不是天方夜談。張老師分析專案的時候,又通過物件導向的思想結合專案分析了下。不禁又想感...
銀行業務排程系統
上次說道了 交通燈管理系統 的設計需求,今天我們來說下 銀行業務排程系統 設計需求分析。大家看者這個名字是不是比較感興趣銀行是怎麼辦公的。今天我們來分析下 1.設計需求 模擬實現銀行業務排程系統邏輯,具體需求如下 銀行內有6個業務視窗,1 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為vip視窗...
銀行業務排程
張孝祥老師7k面試題之銀行業務排程 這道題還是有些難度的,不過一步一步分析,也不那麼難理解,本片部落格重點說說思路 一.需求分析 1 銀行內有6個業務視窗,4個普通視窗,1快速視窗,1個vip視窗。2 有三種對應型別的客戶 vip客戶,普通客戶,快速客戶。3 vip客戶以及普通客戶辦理業務所需的時間...