黑馬程式設計師 java基礎學習(銀行業務排程系統)

2021-06-20 15:11:13 字數 3770 閱讀 2230

---------------------- asp.net+android+ios開發、

.net培訓、期待與您交流! ----------------------

需求:      銀行內有6個業務視窗,1- 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為vip視窗。

有三種對應型別的客戶:vip客戶,普通客戶,快速客戶(辦理如交水電費、**費之類業務的客戶)。

非同步隨機生成各種型別的客戶,生成各型別使用者的概率比例為:

vip客戶 :普通客戶 :快速客戶 =  1 :6 :3。

各型別客戶在其對應視窗按順序依次辦理業務。

當vip(6號)視窗和快速業務(5號)視窗沒有客戶等待辦理業務的時候,這兩個視窗可以處理普通客戶的業務,而一旦有對應的客戶等待辦理業務的時候,則優先處理對應客戶的業務。

隨機生成客戶時間間隔以及業務辦理時間最大值和最小值自定,可以設定。

不要求實現gui,只考慮系統邏輯實現,可通過log方式展現程式執行結果。

分析:客戶型別(servernumberqueue)將客戶型別看成是要服務的號。固定為三種型別(vip客戶 、普通客戶、快速客戶),可通過列舉實現。裡面用list儲存當前等待服務的物件。

因為因為三個視窗可能會同時操作普通客戶,所以要注意資料的正確性。用同步**塊來保證。

客戶型別機器(servernumbermachine)用於自動三種型別的客戶服務號。

服務視窗(servicewindow)服務客戶。有三種型別視窗。

各個類的實現:

客戶型別(servernumberqueue)

public enum servernumberqueue 

public synchronized void setcurrentnumber(int num)

} /*

* 當服務視窗為乙個物件服務完畢,呼叫該方法將服務號從佇列中移除

* 可能多個服務視窗會同時服務,要加同步**塊

*/public synchronized string fetchnumber()

return null;

} /*

* 當客戶管理器產生了乙個客戶時,將其新增到佇列中

*/public synchronized string generatenumber()

public synchronized int getqueuecount()

}

客戶型別機器(servernumbermachine)

public class servernumbermachine 

public static servernumbermachine getinstance()

}} return instance;

} /*

* 當服務視窗為客戶服務時,客戶管理機器要把該客戶從等待服務的客戶佇列中移除。

*/public string fetchcustomer(string name)

/* * 新增客戶到佇列中

*/public void generatecustomer(string name)

}

服務視窗(servicewindow)

public class servicewindow 

public servicewindow(string type, int number)

public void setwindowname(string windowname)

public void setwindownumber(int windownumber)

public int getwindownumber()

private boolean service()

/* * 查詢客戶並為客戶服務功能

*/private boolean service(string type) catch (interruptedexception e1) */

random time = new random();

//當前服務視窗sleep時間,以模擬為客戶服務耗時。當為快速客戶服務時,時間為1;否則隨機產生乙個時間

int servicetime = type.equals(constantsunit.fast_customer) ?

constantsunit.min_service_time

: time.nextint(constantsunit.max_service_time

- constantsunit.min_service_time)

+ constantsunit.min_service_time + 1;

string servicemess;

servicemess = snm.fetchcustomer(type);

if (servicemess != null) catch (interruptedexception e)

}/* if(type.equals(constantsunit.common_customer)) catch (interruptedexception e)

}*/return false;

} /*

* 呼叫此方法讓視窗開始服務

* vip,快速視窗沒有相應的客戶時,要服務普通客戶

*/public void startservice() }}

});}}

用到的一些常(constantsunit)

public class constantsunit

測試功能否完成(test)

public class test 

// system.out.println("建立快速服務視窗...");

new servicewindow(constantsunit.fast_customer, 5).startservice();

// system.out.println("建立vip服務視窗...");

new servicewindow(constantsunit.vip_customer, 6).startservice();

//產生普通客戶

pool.getscheduledexecutorservice().scheduleatfixedrate(

new runnable()

}, 0,

constantsunit.generate_customer,

timeunit.seconds);

//產生vip客戶

pool.getscheduledexecutorservice().scheduleatfixedrate(

new runnable()

}, 0,

constantsunit.generate_customer*6,

timeunit.seconds);

//產生快速客戶

pool.getscheduledexecutorservice().scheduleatfixedrate(

new runnable()

}, 0,

constantsunit.generate_customer*2,

timeunit.seconds);

}}

---------------------- asp.net+android+ios開發、.net培訓、期待與您交流! ----------------------

黑馬程式設計師 java基礎 封裝

asp.net unity開發 net培訓 期待與您交流!封裝表示吧資料項和方法隱藏在物件內部,在類定義中用private關鍵字來實現封裝。封裝有什麼好處?用private把類的細節與外界隔離起來,從而實現資料項和方法的隱藏,而要訪問這些資料項和方法唯一的途徑就是通過類本身,類才有資格呼叫它所擁有的...

黑馬程式設計師 Java基礎 陣列

1.陣列的定義格式 1 int arry new int 5 2 int arry new int 5 int arry 3 常見問題 陣列越界異常 空指標異常。2.陣列常見操作 1 遍歷,查詢陣列,輸出陣列 int arry new int 3 for int i 0 i 3 i int a fo...

黑馬程式設計師 Java 學習筆記

filewriter 建立乙個filewriter物件,該物件一被初始化就必須明確被操作的檔案,而且該檔案會被建立到指定的目錄下。如果該目錄下已有同名檔案,將被覆蓋。下面的例子是將客戶端的檔案拷貝到伺服器上 客戶端 socket s newsocket 1.1.1.1 10000 定義客戶端的套接字...