模拟银行管理系统

来源:互联网 发布:淘宝职业打假投诉工商 编辑:程序博客网 时间:2024/04/30 07:33


package com.itheima.bank; /*常量类 定义常量*/public class Constants {  public static  int MAX_SERVICE_TIME=10000;  //最多服务时间10秒 public static  int MIN_SERVICE_TIME=1000;  //最少服务时间1秒 public static  int COMMON_CUSTOMER_INTERVAL_TIME =1; } package com.itheima.bank;import java.util.ArrayList; import java.util.List; /*号码管理类 实现客户取号,排队*/public class NumberManager { private int  lastNumber  =  1;  private List<Integer> queueNumber = new ArrayList<Integer>();    public synchronized Integer generateNumber()  {   queueNumber.add(lastNumber);   return lastNumber++;  }    public synchronized Integer fetchServiceNumber()  {   Integer number =null;   if(queueNumber.size()>0)   {    number = queueNumber.remove(0);   }      return number;  } }package com.itheima.bank; /*号码管理机器 单例模式,意思是一台号码机*/public class NumberMachine {  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(); }package com.itheima.bank;import java.util.Random; import java.util.concurrent.Executors; /*服务窗口类 对产生的号码处理*/public class ServiceWindow {    private CustomerType type =CustomerType.COMMON;  private int windowID =1;  public void setType(CustomerType type) {   this.type = type;  }  public void setWindowID(int windowID) {   this.windowID = windowID;  }    public void start()  {   Executors.newScheduledThreadPool(1).execute(new Runnable(){    public void run()    {     while(true)     {      switch(type)      {      case COMMON:       commonService();       break;      case EXPRESS:       expressService();       break;      case VIP:       vipService();       break;      }           }         }   });  }    private void commonService() {     String windowName = "第" +windowID+"号"+type+"窗口";     System.out.println(windowName+"正在获取任务");     Integer number = NumberMachine.getInstance().getCommonManager().fetchServiceNumber();     if(number != null)     {      long beginTime = System.currentTimeMillis();      int maxRand = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;      long serverTime  = new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;      try {       Thread.sleep(serverTime);      } catch (InterruptedException e) {       e.printStackTrace();      }      long castTime = System.currentTimeMillis()-beginTime;      System.out.println(windowName+"为第"+number+"个"+"普通"+"客户完成服务,耗时"+(castTime)/1000+"秒");     }else     {      System.out.println(windowName+"没有取到任务,先休息1秒钟");           }    }     private void expressService() {     String windowName = "第" +windowID+"号"+type+"窗口";          Integer number = NumberMachine.getInstance().getExpressManager().fetchServiceNumber();     System.out.println(windowName+"正在获取任务");     if(number != null)     {      long beginTime = System.currentTimeMillis();      //int maxRand = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;      //long serverTime  = new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;      try {       Thread.sleep(Constants.MIN_SERVICE_TIME);      } catch (InterruptedException e) {       e.printStackTrace();      }      long castTime = System.currentTimeMillis()-beginTime;      System.out.println(windowName+"为第"+number+"个"+type+"客户完成服务,耗时"+(castTime)/1000+"秒");     }else     {      System.out.println(windowName+"没有取到任务!");      commonService();           }    }         private void vipService() {     String windowName = "第" +windowID+"号"+type+"窗口";          Integer number = NumberMachine.getInstance().getVipManager().fetchServiceNumber();     System.out.println(windowName+"正在获取任务");     if(number != null)     {      long beginTime = System.currentTimeMillis();      int maxRand = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;      long serverTime  = new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;      try {       Thread.sleep(serverTime);      } catch (InterruptedException e) {       e.printStackTrace();      }      long castTime = System.currentTimeMillis()-beginTime;      System.out.println(windowName+"为第"+number+"个"+type+"客户完成服务,耗时"+(castTime)/1000+"秒");     }else     {      System.out.println(windowName+"没有取到任务!");      commonService();      try {       Thread.sleep(1000);      } catch (InterruptedException e) {       e.printStackTrace();      }     }    }         } package com.itheima.bank; /*采用枚举  列举三种客户,普通,快速,VIP*/ public enum CustomerType {  COMMON,EXPRESS,VIP;    public String toString()  {   String name = null;   switch(this)   {   case COMMON:    return "普通";   case EXPRESS:    return "快速";   case VIP :    return name();   }   return name;  } } package com.itheima.bank;import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /*主方法类 执行代码*/public class MainClass { public static void main(String args [])  {       for(int i =1;i< 5;i++)   {    //产生四个普通服务窗口   ServiceWindow commonWindow =new ServiceWindow();    commonWindow.setWindowID(i);    commonWindow.start();   }   //产生一个快速服务窗口  ServiceWindow expressWindow =new ServiceWindow();   expressWindow.setType(CustomerType.EXPRESS);   expressWindow.start();   //产生一个VIP服务窗口  ServiceWindow vipWindow =new ServiceWindow();   vipWindow.setType(CustomerType.VIP);   vipWindow.start();   //普通客户取号  Executors.newScheduledThreadPool(1).scheduleAtFixedRate(     new Runnable(){      public void run()      {      Integer number = NumberMachine.getInstance().getCommonManager().generateNumber();      System.out.println(number+"号普通客户等待服务");      }     },     0,     Constants.COMMON_CUSTOMER_INTERVAL_TIME,     TimeUnit.SECONDS);   //快速客户取号  Executors.newScheduledThreadPool(1).scheduleAtFixedRate(     new Runnable(){      public void run()      {       Integer number = NumberMachine.getInstance().getExpressManager().generateNumber();       System.out.println(number+"号快速客户等待服务");      }     },     0,     Constants.COMMON_CUSTOMER_INTERVAL_TIME*2,     TimeUnit.SECONDS);   //VIP客户取号  Executors.newScheduledThreadPool(1).scheduleAtFixedRate(     new Runnable(){      public void run()      {       Integer number = NumberMachine.getInstance().getVipManager().generateNumber();       System.out.println(number+"号VIP客户等待服务");      }     },     0,     Constants.COMMON_CUSTOMER_INTERVAL_TIME*6,     TimeUnit.SECONDS);  } }


1 0
原创粉丝点击