您的位置:首页 > 职场人生

面试题银行业务调度系统实现

2012-08-08 00:51 344 查看
银行业务调度系统

模拟实现银行业务调度系统逻辑,具体需求如下:

Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。

Ø 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。

Ø 异步随机生成各种类型的客户,生成各类型用户的概率比例为:

VIP客户 :普通客户 :快速客户 = 1 :6 :3。

Ø 客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。

Ø 各类型客户在其对应窗口按顺序依次办理业务。

Ø 当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。

Ø 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。

Ø 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

用到的技术:

1、面向对象的设计

2、线程池的使用

3、枚举

4、单例设计模式

类中设计主要方法:NumberManager-----产号和取号

NumberMachine------相当于银行的自动取号机,单例设计,能够产生3类不同的号


ServiceWindow-----相当于银行的窗口,具有叫号,处理的功能

主要代码实现:

NumberManager

publicclassNumberManager {

privateintlastNumber=0;

List<Integer>queueNumbers=new ArrayList<Integer>();

publicsynchronized Integer generateNumber(){

queueNumbers.add(++lastNumber);

returnlastNumber;

}

publicsynchronized Integer fetchNumber(){

if(queueNumbers.size()>0)

returnqueueNumbers.remove(0);

else

returnnull;

}

}

NumberMachine:

package cn.itcast.bank;

publicclassNumberMachine {

private NumberMachine(){}

publicstaticNumberMachineinstance=newNumberMachine();

publicstaticNumberMachine getInstance(){

returninstance;

}

private NumberManagercommonManager=new
NumberManager();

private NumberManagerfastManager=new
NumberManager();

private NumberManagerVipManager=new
NumberManager();

public NumberManager getCommomManager(){

returncommonManager;

}

public NumberManager getFastManager(){

returnfastManager;

}

public NumberManager getVipManager(){

returnVipManager;

}

}

ServiceWindow

package cn.itcast.bank;

import java.util.Random;

import java.util.concurrent.Executors;

publicclassServiceWindow {

private CustomerTypetype = CustomerType.COMMON;

privateintnumber = 1;

publicvoid setType(CustomerType type) {

this.type = type;

}

publicvoid setNumber(int
number) {

this.number = number;

}

publicvoid start() {

Executors.newSingleThreadExecutor().execute(new Runnable() {

publicvoid run() {

while (true) {


switch (type) {


caseCOMMON:


commonService();


break;


caseFAST:


fastService();


break;


caseVIP:


vipService();


break;


}



}



}

});

}

privatevoid commonService() {

String windowName ="第" +number
+ "号" +type +"窗口";

System.out.println(windowName +"开始获取普通任务");

Integer serviceNumber = NumberMachine.getInstance().getCommomManager()

.fetchNumber();

if (serviceNumber !=null)
{

System.out.println(windowName +"开始为"
+ serviceNumber +"号普通客户服务");

int time =new Random().nextInt(10)
+ 1;

try {



Thread.sleep(time);

}
catch
(InterruptedException e) {

e.printStackTrace();

}

System.out.println("完成对"
+ serviceNumber + "号普通客户的服务,耗时" + time


+ "秒");

}
else
{

System.out.println(windowName +"没有获取到普通任务,正在空闲一秒");

try {

Thread.sleep(1000);

}
catch
(InterruptedException e) {

e.printStackTrace();

}

}

}

privatevoid fastService() {

String windowName ="第" +number
+ "号" +type +"窗口";

System.out.println(windowName +"开始获取快速任务");

Integer serviceNumber = NumberMachine.getInstance().getFastManager()

.fetchNumber();

if (serviceNumber !=null)
{

System.out.println(windowName +"开始为"
+ serviceNumber +"号快速客户服务");

int time =new Random().nextInt(5)
+ 1;

try {



Thread.sleep(time);

}
catch
(InterruptedException e) {

e.printStackTrace();

}

System.out.println("完成对"
+ serviceNumber + "号快速客户的服务,耗时" + time


+ "秒");

}
else
{

System.out.println(windowName +"没有获取到快速任务,正在准备获取普通任务");

commonService();

}



}



privatevoid vipService() {

String windowName ="第" +number
+ "号" +type +"窗口";

System.out.println(windowName +"开始获取vip任务");

Integer serviceNumber = NumberMachine.getInstance().getCommomManager()

.fetchNumber();

if (serviceNumber !=null)
{

System.out.println(windowName +"开始为"
+ serviceNumber +"号vip客户服务");

int time =new Random().nextInt(8)
+ 1;

try {



Thread.sleep(time);

}
catch
(InterruptedException e) {

e.printStackTrace();

}

System.out.println("完成对"
+ serviceNumber + "号vip客户的服务,耗时" + time


+ "秒");

}
else
{

System.out.println(windowName +"没有获取到vip任务,正在准备获取普通任务");

commonService();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: