首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

黑马软件工程师_7K面试题银行业务调度系统实现

2012-08-27 
黑马程序员__7K面试题银行业务调度系统实现---------------------- android培训、java培训、期待与您交流! -

黑马程序员__7K面试题银行业务调度系统实现

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

                      

                                               银行业务调度系统

 

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

?         银行内有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(){}

    publicstaticNumberMachine instance=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();

       }

    }

}

 ----------------------android培训、java培训、期待与您交流! --------------详细请查看:http://edu.csdn.net/heima

热点排行