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

黑马程序员-银行业务调度系统

2013-02-19 20:52 176 查看
黑马程序员-银行业务调度系统

银行业务调度系统

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

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

有三种对应类型的客户:vip,普通,快速客户(交水电费电话费)

异步随机生成各种类型的客户,生成各种类型用户

比例为vip 普通 快速 =1:6:3

客户办理业务所需时间有最大值和最小值。在该范围内随机设定每个vip客户以及普通客户办理业务所需时间,快速客户业务办理时间为最小值

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

当vip窗口和快速窗口没有客户办理时,可以处理普通客户的业务,一旦有客户等待办理的时候,有限办理对应的业务

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

不实现GUI只考虑系统逻辑

面向对象的分析和设计

有三种对应类型的客户vip ,普通,快速。异步随机生成各种类型的客户,各客户类型在其对应窗口按顺序一次办理业务

因为每个客户其实就是有银行的号码机器产生的号码,所以先要有号码管理器

有三类客户,要有三个号码管理器对象,但是银行中的号码机器只有一个,所以,号码机器要设置为单例

各个类型的客户在其对应的窗口按顺序一次办理业务,窗口一次叫号。

服务窗口将找到号码管理器,获取当前要服务的号码

NumberManager类和NumberMachine类

NumberManager类

定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合

定义一个产生新号码的方法和获取马上要为之服务的号码的方法这两个方法被不同的线程操作了相同的数据,要进行同步

定义一个类用作号码发生器,即银行的取号机

Java代码







import java.util.*;
//号码发生器
public class NumberManager {

//定义一个集合存储排队的号码,变量类型,尽量用父级或接口上一级,使其改变为List其他类型也可以,更灵活

private List<Integer> queueNumber=new ArrayList<Integer>();

//上一次返回的号码
private int lastNumber=1;

//客户来了获取号码
public synchronized Integer qenerateNewManager(){

//将产生的号码存入到集合中
queueNumber.add(lastNumber);
return lastNumber++;
}
//获取下一个要服务的号码
public synchronized Integer fetchServiceNumber(){

//取出号码,返回值就是被取走的号码
return queueNumber.remove(0);

}
}

import java.util.*;
//号码发生器
public class NumberManager {
//定义一个集合存储排队的号码,变量类型,尽量用父级或接口上一级,使其改变为List其他类型也可以,更灵活
private List<Integer> queueNumber=new ArrayList<Integer>();
//上一次返回的号码
private int lastNumber=1;
//客户来了获取号码
public synchronized Integer qenerateNewManager(){
//将产生的号码存入到集合中
queueNumber.add(lastNumber);
return lastNumber++;
}
//获取下一个要服务的号码
public synchronized Integer fetchServiceNumber(){
//取出号码,返回值就是被取走的号码
return queueNumber.remove(0);
}
}


定义一个类,用来获取服务号码,因为多个窗口操作同一个取号机对象,所以用单例模式

Java代码







public class NumberMachine {

//创建三个私有对象,表示普通,快速,vip
private NumberManager commonManager=new NumberManager();

private NumberManager expressManager=new NumberManager();

private NumberManager vipManager=new NumberManager();

//分别创建一个可以对外提供的获取方法
public NumberManager getCommonManager() {
return commonManager;
}
public NumberManager getExpressManager() {
return expressManager;
}
public NumberManager getVipManager() {
return vipManager;
}
//单例,构造方法私有化,创建一个本类对象,对外提供获取对象的方法
private NumberMachine(){}
public static NumberMachine getInstance(){

return instance;
}
private static NumberMachine instance=new NumberMachine();

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