黑马程序员-----银行业务调度系统(第十二篇)
2014-09-25 19:28
357 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
1.银行业务调度系统
1.模拟实现银行业务调度系统逻辑,具体需求如下:
1.1
银行内有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号为vip窗口
1.2
有三中对应类型的客户:vip客户,普通客户,快速客户
1.3
异步随机生成各种类型的客户,生成各类型用户比例:Vip客户:普通客户:快速客户=1:6:3.
1.4
客户办理业务所需时间有最大值和最小值,在该范围随机设定每个vip客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值。
1.5
各类型客户在其对应窗口按顺序依次办理业务。
1.6
当vip窗口和快速业务没有客户等待办理业务的时,可以处理普通客户的业务。
1.7
随机生成客户时间间隔以及业务办理最大值和最小值自定,可以设置。
1.8
不要求实现GUI,只考虑逻辑实现。
2.面向对象的分析与设计
有三种对应类型的客户:vip客户,普通客户,快速客户,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务。
3.NumberManager类的实现
主要功能:往Arraylist集合中添加票号,返回移出的票号
4.NumberMachine的实现
主要功能:定义3中类型窗口并返回
6.Constats类的实现
主要功能:定义常量
7.CustomerType类的实现
主要功能:重写toString,返回窗口名
8.MainClass类的实现
主要功能:作为程序的入口,实现3线程并启动3种类型窗口的调用
1.银行业务调度系统
1.模拟实现银行业务调度系统逻辑,具体需求如下:
1.1
银行内有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号为vip窗口
1.2
有三中对应类型的客户:vip客户,普通客户,快速客户
1.3
异步随机生成各种类型的客户,生成各类型用户比例:Vip客户:普通客户:快速客户=1:6:3.
1.4
客户办理业务所需时间有最大值和最小值,在该范围随机设定每个vip客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值。
1.5
各类型客户在其对应窗口按顺序依次办理业务。
1.6
当vip窗口和快速业务没有客户等待办理业务的时,可以处理普通客户的业务。
1.7
随机生成客户时间间隔以及业务办理最大值和最小值自定,可以设置。
1.8
不要求实现GUI,只考虑逻辑实现。
2.面向对象的分析与设计
有三种对应类型的客户:vip客户,普通客户,快速客户,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务。
3.NumberManager类的实现
主要功能:往Arraylist集合中添加票号,返回移出的票号
package cn.bank; import java.util.List; import java.util.ArrayList; public class NumberManager { private int lastNumber=1; private List<Integer> queueNumber=new ArrayList<Integer>(); //访问同一资源,线程同步 public synchronized Integer generateNewManager()//添加票 { queueNumber.add(lastNumber); return lastNumber++; } public synchronized Integer fetchServiceNumber()//取票函数 { return queueNumber.remove(0); } }
4.NumberMachine的实现
主要功能:定义3中类型窗口并返回
package cn.bank; public class NumberMachine { //定义3种类型的窗口。 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(); }
<strong><span style="font-size:14px;">5.主要处理类ServiceWindow的实现</span></strong>
<span style="font-size:14px;">主要功能:实现3种服务窗口对票号的调用</span>
<pre class="java" name="code">package cn.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 i) { this.windowId = i; } public void start() { //线程池,匿名内部类,Runnable子类对象。 Executors.newSingleThreadExecutor().execute(new Runnable(){ public void run() { while(true){ switch(type) { case COMMON: //获取票号 commonService(); break; case EXPRESS: break; case VIP: break; } } } private void commonService() { String windowName="第"+windowId+"号"+type+"窗口"; Integer number=NumberMachine.getInstance().getCommonManager().fetchServiceNumber(); if(number!=null){ long beginTime=System.currentTimeMillis();//获取系统时间 //变化范围 int maxRand=Constats.MAX_SERVICE_TIME-Constats.MIN_SERVICE_TIME; //值的范围为1000~10000; long serveTime=new Random().nextInt(maxRand)+1+Constats.MIN_SERVICE_TIME; try { Thread.sleep(serveTime);//休息时间 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //获取的是客户完成的时间 long costTime=System.currentTimeMillis()-beginTime; System.out.println(windowName+"为第"+number+"个"+type); System.out.println("客户完成服务"+costTime/1000+"秒"); }else { System.out.println(windowName+"没有取到服务,休息一秒"); try { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); } } } private void expressService() { String windowName="第"+windowId+"号"+type+"窗口"; Integer number=NumberMachine.getInstance().getExpressManager().fetchServiceNumber(); if(number!=null){ long beginTime=System.currentTimeMillis();//获取系统时间 //变化范围 int maxRand=Constats.MAX_SERVICE_TIME-Constats.MIN_SERVICE_TIME; //值的范围为1000~10000; long serveTime=new Random().nextInt(maxRand)+1+Constats.MIN_SERVICE_TIME; try { Thread.sleep(Constats.MIN_SERVICE_TIME);//快速客户休息时间为最小值 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //获取的是客户完成的时间 long costTime=System.currentTimeMillis()-beginTime; System.out.println(windowName+"为第"+number+"个"+type); System.out.println("客户完成服务"+costTime/1000+"秒"); }else { System.out.println(windowName+"没有取到服务,休息一秒"); try { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); } } } //vip窗口调用 private void vipService() { String windowName="第"+windowId+"号"+type+"窗口"; Integer number=NumberMachine.getInstance().getVipManager().fetchServiceNumber(); if(number!=null){ long beginTime=System.currentTimeMillis();//获取系统时间 //变化范围 int maxRand=Constats.MAX_SERVICE_TIME-Constats.MIN_SERVICE_TIME; //值的范围为1000~10000; long serveTime=new Random().nextInt(maxRand)+1+Constats.MIN_SERVICE_TIME; try { Thread.sleep(serveTime);//休息时间 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //获取的是客户完成的时间 long costTime=System.currentTimeMillis()-beginTime; System.out.println(windowName+"为第"+number+"个"+type); System.out.println("客户完成服务"+costTime/1000+"秒"); }else { System.out.println(windowName+"没有取到服务,休息一秒"); commonService(); try { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); } } } }); } }
6.Constats类的实现
主要功能:定义常量
package cn.bank; public class Constats { public static int MAX_SERVICE_TIME=10000; public static int MIN_SERVICE_TIME=1000; public static int COMMON_CUSTOMER_INTERVAL_TIME=1; }
7.CustomerType类的实现
主要功能:重写toString,返回窗口名
package cn.bank; public enum CustomerType { COMMON,EXPRESS,VIP; //重写toString方法 public String toString() { switch(this) { case COMMON: return "普通"; case EXPRESS: return "快速"; case VIP: return name(); } return null; } }
8.MainClass类的实现
主要功能:作为程序的入口,实现3线程并启动3种类型窗口的调用
package cn.bank; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; 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(); ServiceWindow vipwindow =new ServiceWindow(); vipwindow.setType(CustomerType.VIP); vipwindow.start(); ScheduledExecutorService timer =Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate( new Runnable(){ public void run() { Integer number=NumberMachine.getInstance().getCommonManager().generateNewManager(); System.out.println(number+"号普通客户等待服务"); } } ,0,Constats.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS); //过多长时间来第一个人,秒。 // ScheduledExecutorService timer =Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate( new Runnable(){ public void run() { Integer number=NumberMachine.getInstance().getVipManager().generateNewManager(); System.out.println(number+"号VIP客户等待服务"); } } ,0,Constats.COMMON_CUSTOMER_INTERVAL_TIME*6, TimeUnit.SECONDS); //过多长时间来第一个人,多少简短时间为6秒。 timer.scheduleAtFixedRate( new Runnable(){ public void run() { Integer number=NumberMachine.getInstance().getExpressManager().generateNewManager(); System.out.println(number+"号快速客户等待服务"); } } ,0,Constats.COMMON_CUSTOMER_INTERVAL_TIME*3, TimeUnit.SECONDS); } }
相关文章推荐
- 黑马程序员---银行业务调度系统
- 黑马程序员_银行业务调度系统
- 黑马程序员——高新技术(银行业务调度系统)
- 黑马程序员-----------银行业务调度系统
- 黑马程序员---银行业务调度系统
- 黑马程序员-----程序员之路_____银行业务调度系统
- 黑马程序员_温习 银行业务调度系统 (个人笔记)
- 黑马程序员-------(面试题)银行业务调度系统
- 黑马程序员Java培训和Android培训_银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员--银行业务调度系统分析讲解及实现
- 黑马程序员-------------(十三)银行业务调度系统
- 黑马程序员————银行业务调度系统(第十篇)
- 黑马程序员_面试题之银行业务调度系统
- 黑马程序员---银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员-7K月薪面试题破解之二_银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员------银行业务调度系统
- 黑马程序员-java-银行业务调度系统