---------------------- 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 定義客戶端的套接字...