面试题银行业务调度系统实现
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();
}
}
}
模拟实现银行业务调度系统逻辑,具体需求如下:
Ø 银行内有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();
}
}
}
相关文章推荐
- 7K面试题银行业务调度系统实现
- 黑马程序员-面试题之银行业务调度系统
- 黑马程序员_java银行业务调度系统的分析、设计、实现
- 又一道软通动力7K月薪面试题——银行业务调度系统
- 黑马程序员 Java基础 --->7K面试题之银行业务调度系统
- 黑马程序员----7K面试题银行业务调度系统
- 黑马程序员------7k月薪面试题-银行业务调度系统
- 黑马程序员——面试题之银行业务调度系统
- 面试题(二)-银行业务调度系统
- java自学笔记之面试题银行业务调度系统
- 黑马程序员_7K面试题_银行业务调度系统
- 黑马程序员_王康 java实现银行业务调度系统
- 又一道软通动力7K月薪面试题——银行业务调度系统
- 面试题之------银行业务调度系统
- java 面试题(二) 银行业务调度系统
- 7K面试题银行业务调度系统
- 银行业务调度系统的实现
- 黑马程序员_7k面试题之银行业务调度系统
- 黑马程序员_7K面试题之银行业务调度系统
- 对“银行业务调度系统模拟实现”的一点改进