需求 模擬實現銀行業務排程系統邏輯,具體需求如下:
1.銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為vip視窗。
2.有三種對應型別的客戶:vip客戶,普通客戶,快速客戶(辦理如交水電費、**費之類業務的客戶)。
3.非同步隨機生成各種型別的客戶,生成各型別使用者的概率比例為:
vip客戶 :普通客戶 :快速客戶 = 1 :6 :3。
5.各型別客戶在其對應視窗按順序依次辦理業務。
6.當vip(6號)視窗和快速業務(5號)視窗沒有客戶等待辦理業務的時候,這兩個視窗可以處理普通客戶的業務,而一旦有對應的客戶等待辦理業務的時候,則優先處理對應客戶的業務。
7.隨機生成客戶時間間隔以及業務辦理時間最大值和最小值自定,可以設定。
8.不要求實現gui,只考慮系統邏輯實現,可通過log方式展現程式執行結果。
用乙個圖來理解
有三種對應型別的客戶:vip客戶,普通客戶,快速客戶 ,非同步隨機生成各種型別的客戶,各型別客戶在其對應視窗按順序依次辦理業務
numbermanager類
定義乙個用於儲存上乙個客戶號碼的成員變數和用於儲存所有等待服務的客戶號碼的佇列集合。
定義乙個產生新號碼的方法和獲取馬上要為之服務的號碼的方法,這兩個方法被不同的執行緒操作了相同的資料,所以,要進行同步。
public class numbermanager
public synchronized integer fetchnumber()else}}
numbermachine類
定義三個成員變數分別指向三個numbermanager物件,分別表示普通、快速和vip客戶的號碼管理器,定義三個對應的方法來返回這三個numbermanager物件。
將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();
public numbermanager getcommonmanager()
public numbermanager getexpressmanager()
public numbermanager getvipmanager()
}
customertype列舉類
系統中有三種型別的客戶,所以用定義乙個列舉類,其中定義三個成員分別表示三種型別的客戶。
重寫tostring方法,返回型別的中文名稱。這是在後面編碼時重構出來的,剛開始不用考慮。
public enum customertype
return name;}}
servicewindow類
定義乙個start方法,內部啟動乙個執行緒,根據服務視窗的類別分別迴圈呼叫三個不同的方法。
定義三個方法分別對三種客戶進行服務,為了觀察執行效果,應詳細列印出其中的細節資訊。
public class servicewindow
public void settype(customertype type)
public void setnumber(int number)
public void start()}}
});
} 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 }}
mainclass類
用for迴圈建立出4個普通視窗,再建立出1個快速視窗和乙個vip視窗。
接著再建立三個定時器,分別定時去建立新的普通客戶號碼、新的快速客戶號碼、新的vip客戶號碼。mainclass類
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);}}
constants類
定義三個常量:max_service_time、min_service_time、common_customer_interval_time
public class constants
大小: 25.9 kb 銀行業務排程
張孝祥老師7k面試題之銀行業務排程 這道題還是有些難度的,不過一步一步分析,也不那麼難理解,本片部落格重點說說思路 一.需求分析 1 銀行內有6個業務視窗,4個普通視窗,1快速視窗,1個vip視窗。2 有三種對應型別的客戶 vip客戶,普通客戶,快速客戶。3 vip客戶以及普通客戶辦理業務所需的時間...
銀行業務問題
銀行業務問題也是作業系統中p v操作部分的經典問題。1.問題描述 某大型銀行辦理人民幣儲蓄業務,由n個儲蓄員負責。每個顧客進入銀行後先至取號機取乙個號,並且在等待區找到空沙發坐下等著叫號。取號機給出的號碼依次遞增,並假定有足夠多的空沙發容納顧客。當乙個儲蓄員空閒下來,就叫下乙個號。請用訊號量和p,v...
銀行業務擔保管理
養某某,乙個熱愛生活的輕度男神經 普通票據池 應收賬款池 保理池聯保 企業一定規模的票據組合形成的票據資產池 一是票據管理 企業便於及時掌握票據的資訊,判斷公司情況 二是票據池融資 企業無需額外提供抵押和擔保,只需將日常分散 小額的應收票據集合起來,形成相對穩定的應收票據餘額 池 轉讓給銀行,並獲得...