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