现在的位置: 首页 > 综合 > 正文

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

2013年10月07日 ⁄ 综合 ⁄ 共 6042字 ⁄ 字号 评论关闭

---------------------- android培训java培训、期待与您交流! ---------------------

                                    银行业务调度系统

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

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

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

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

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

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

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

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

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

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

根据老师讲解,自编代码:

public class MainClass {

public static void main(String[] args) {

int i=1;

for(;i<=4;i++){

new ServiceWindow(CustomerType.COMMON,i).startWindow();

}

new ServiceWindow(CustomerType.VIP,i).startWindow();

i++;

new ServiceWindow(CustomerType.EXPRESS,i).startWindow();

Executors.newSingleThreadScheduledExecutor().

                          scheduleAtFixedRate(new Runnable() {

@Override

public void run() {

Integer num=NumberMachine.getInstance().getCommonNumberManager().

                                 generateWaitingNumber();

System.out.println("第"+num+"号普通客户正在等待服务……"); }

},0,1,TimeUnit.SECONDS);

Executors.newSingleThreadScheduledExecutor().

                                scheduleAtFixedRate(new Runnable() {
public void run() {

Integer num=NumberMachine.getInstance().

                     getVipNumberManager().generateWaitingNumber();

System.out.println("第"+num+"号VIP正在等待服务……"); }

},0,6,TimeUnit.SECONDS);

Executors.newSingleThreadScheduledExecutor().

                            scheduleAtFixedRate(new Runnable() {

public void run() {

Integer num=NumberMachine.getInstance().

                   getExpressNumberManager().generateWaitingNumber();

System.out.println("第"+num+"号快速正在等待服务……");

}

},0,3,TimeUnit.SECONDS);

}

}

public class ServiceWindow {

int windowNunber;

private CustomerType windowType;

public ServiceWindow(CustomerType type, int windowNunber) {

super();

this.windowType = type;

this.windowNunber = windowNunber;

}

int serviceTime = new Random()

.nextInt(CustomerIntervalTime.MAXCUSTOMERINTERVALTIME

- CustomerIntervalTime.MINCUSTOMERINTERVALTIME)

+ 1 + CustomerIntervalTime.MINCUSTOMERINTERVALTIME;

public void startWindow() {

new Thread(new Runnable() {

public void run() {

while (true)

switch (windowType) {

case COMMON:

commonService();

break;

case VIP:

vipService();

break;

case EXPRESS:

expressService();

break;

}

}

}).start();

}

public void commonService() {

String windowName = "第" + windowNunber + "号"+

                                                   windowType+"窗口";

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

Integer num = NumberMachine.getInstance().

                     getCommonNumberManager().fetchServiceNumber();

if (num != null) {

System.out.println(windowName + "准备为" + num + 

                                       "号普通客户服务……");

try {

Thread.sleep(serviceTime);

catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(windowName + "为" + num + 

                                                "号普通客户服务完毕");

else {

System.out.println(windowName+"暂时没有普通客户,

                                             休息1秒钟……");

try {

Thread.sleep(1000);

catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public void expressService() {

String windowName = "第" + windowNunber + "号" 

                                                      +windowType+"窗口";

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

Integer num = NumberMachine.getInstance().

                      getExpressNumberManager().fetchServiceNumber();

if (num != null) {

System.out.println(windowName + "准备为" + num 

                                                    + "号快速客户服务……");

try {

serviceTime = CustomerIntervalTime.MINCUSTOMERINTERVALTIME;

Thread.sleep(serviceTime);

catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(windowName + "为" + num

                                                    + "号快速客户服务完毕");

else {

System.out.println(windowName+"暂时没有快速客户,准备获取普通任务");

commonService();

}

}

public void vipService() {

String windowName = "第" + windowNunber + "号"

                                                         +windowType+"窗口";

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

Integer num = NumberMachine.getInstance().

                           getVipNumberManager().fetchServiceNumber();

if (num != null) {

System.out.println(windowName + "准备为" + num 

                                                   + "号vip客户服务……");

try {

Thread.sleep(serviceTime);

catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(windowName + "为" + num 

                                                      + "号vip客户服务完毕");

else {

System.out.println(windowName+"暂时没有vip客户,准备获取普通任务");

commonService();

}

}

}

public class NumberMachine {

private static NumberMachine nM=new NumberMachine();

private NumberManager commonNumberManager=new NumberManager();

private NumberManager vipNumberManager=new NumberManager();

private NumberManager expressNumberManager=new NumberManager();

public static NumberMachine getInstance(){

return nM;

}

public NumberManager getCommonNumberManager() {

return commonNumberManager;

}

public NumberManager getVipNumberManager() {

return vipNumberManager;

}

public NumberManager getExpressNumberManager() {

return expressNumberManager;

}

}

public class NumberManager {

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

     private Integer waitingNumber=0;

     public synchronized Integer generateWaitingNumber(){

      Integer num=++waitingNumber;numberList.add(num);

      return num;

     }

     public synchronized Integer fetchServiceNumber(){

      if(numberList.size()>0)

      return numberList.remove(0);

      else

      return null;

     }     

}

public class CustomerIntervalTime {

public static final int MINCUSTOMERINTERVALTIME=1000;

public static final int MAXCUSTOMERINTERVALTIME=10000;

}

public enum CustomerType {

VIPCOMMONEXPRESS;

public String toString() {

String name = null;

switch (CustomerType.this) {

case VIP:

name = "vip";

break;

case COMMON:

name = "普通";

break;

case EXPRESS:

name = "快速";

break;

}

return name;

}

}

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

抱歉!评论已关闭.