------ android培训、java培训、java基础学习技术总结、期待与您交流! ----------
银行业务调度系统
* 模拟实现银行调度系统逻辑,具体需求如下:
* 银行呢有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
* 有三种对应的类型客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类
* 业务的客户)。
* 异步随机生成各种类型的客户,生成个类型用户的概率比例为
* VIP:普通客户:快速客户=1;6;3.
* 客户办理业务所需时间有最大值,最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务
* 办理业务所需时间,快速客户办理业务所需时间为最小值(提示:办理
* 业务的过程可通过线程Sleep的方式模拟)。
* 各个类型客户在其对应窗口按顺序依次办理业务。
* 当VIP(6号)窗口和快速业务(5号)窗口没有客户等待业务办理的时候,这两个窗口可以处理普通客户的业务,而一旦
* 有对应的刻画等待办理业务的时候,则按优先级处理客户的业务。
* 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
* 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
*
*
*
* MainClass类
* 用for循环创建出4个普通窗口,在创建出一个快速窗口和一个VIP窗口。
* 接着再创建三个定时器,分别定时去创建新的普通客户号码、新的快速客户号码、
* 新的VIP客户号码。
* Constants;类
* 定义单个常量:Max_SERVICE_TIME\MIN_SERVICE_TIME\
* COMMON_CUSTOMER_INTERVAL_TIME
* NumberManager和NumberMachine类
* NumberManger类
* 定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合。
* 定义一个产生新号码的方法和获取马上要为之服务的号码的方法,
* 这两个方法被不同的线程操作了相同的数据,所以,要进行同步。
* NumberMachine类
*
*
* 面向对象分析与设计
* 有三中对应类型的客户:VIP客户,普通客户,快速客户,异步随机生成各种类型
* 的客户,各类型客户在其对应窗口按顺序依次办理业务。
*
* 各类型客户在其对应窗口依次办理业务,准确地说,应该是窗口依次叫号。
代码如下:
CustomerType类
public enum CustomerType{ COMMON,EXPRESS,VIP; public String toString(){ switch(this){ case COMMON: return "普通"; case EXPRESS: return "快速"; default: return name(); } } }
NumberMachine类
public class NumberMachine { private NumberManager commonManager=new NumberManager(); private NumberManager expressManager=new NumberManager(); private NumberManager vipManager=new NumberManager(); private static NumberMachine instance=new NumberMachine(); public NumberManager getCommonManager() { return commonManager; } public void setCommonManager(NumberManager commonManager) { this.commonManager = commonManager; } public NumberManager getExpressManager() { return expressManager; } public void setExpressManager(NumberManager expressManager) { this.expressManager = expressManager; } public NumberManager getVipManager() { return vipManager; } public void setVipManager(NumberManager vipManager) { this.vipManager = vipManager; } private NumberMachine(){ } public static NumberMachine getInstance() { // TODO Auto-generated method stub return instance; }
NumberManager类
public class NumberManager { private int lastNumber=1; private List<Integer> queueNumber= new ArrayList<Integer>(); public synchronized Integer generalNewManager(){ queueNumber.add(lastNumber); return lastNumber++; } public Integer fetchServiceNumber(){ Integer number=null; if(queueNumber.size()>0){ return queueNumber.remove(0); } return number; } }
ServiceWindow类
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(){ ExecutorService executor=Executors.newFixedThreadPool(1); executor.execute(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub 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 serveTime=/*new Random().nextInt(maxRand)+*/1+Constants.MIN_SERVICE_TIME; try{ Thread.sleep(serveTime); }catch(InterruptedException e){ e.printStackTrace(); } long costTime=System.currentTimeMillis()-beginTime; System.out.println(windowName+"为第"+number+"个"+type+"客户完毕!"); }else{ System.out.println(windowName+"没有取到任务.先休息一秒!"); try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } } } private void expressService() { String windowName="第"+windowId+"号"+type+"窗口"; System.out.println(windowName+"正在获取任务"); Integer number=NumberMachine.getInstance().getExpressManager().fetchServiceNumber(); if(number!=null){ long beginTime=System.currentTimeMillis(); int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME; long serveTime=/*new Random().nextInt(maxRand)+*/1+Constants.MIN_SERVICE_TIME; try{ Thread.sleep(serveTime); }catch(InterruptedException e){ e.printStackTrace(); } long costTime=System.currentTimeMillis()-beginTime; System.out.println(windowName+"为第"+number+"个"+type+"客户完毕!"); }else{ System.out.println(windowName+"没有取到任务.先休息一秒!"); try{ Thread.sleep(Constants.MIN_SERVICE_TIME); }catch(InterruptedException e){ e.printStackTrace(); } } } private void vipService() { String windowName="第"+windowId+"号"+type+"窗口"; System.out.println(windowName+"正在获取任务"); Integer number=NumberMachine.getInstance().getVipManager().fetchServiceNumber(); if(number!=null){ long beginTime=System.currentTimeMillis(); int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME; long serveTime=/*new Random().nextInt(maxRand)+*/1+Constants.MIN_SERVICE_TIME; try{ Thread.sleep(serveTime); }catch(InterruptedException e){ e.printStackTrace(); } long costTime=System.currentTimeMillis()-beginTime; System.out.println(windowName+"为第"+number+"个"+type+"客户完毕!"); }else{ System.out.println(windowName+"没有取到任务!"); commonService(); try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } } } }); } }
Constant类
public class Constants { public static int MAX_SERVICE_TIME=1000; public static int MIN_SERVICE_TIME=10000; public static int COMMON_CUETOMER_INTERVAL_TIME=1; }
BankTest类
public class BankTest { public static void main(String[] args) { Logger logger=Logger.getLogger("cn.itcast.bank"); for(int i=1;i<5;i++){ ServiceWindow commnonWindow=new ServiceWindow(); commnonWindow.setWindowId(i); commnonWindow.start(); } ServiceWindow expressWindow=new ServiceWindow(); expressWindow.setType(CustomerType.EXPRESS); expressWindow.start(); ServiceWindow vipWindow=new ServiceWindow(); vipWindow.setType(CustomerType.VIP); vipWindow.start(); Executors.newScheduledThreadPool(1).scheduleAtFixedRate( new Runnable(){ @Override public void run() { // TODO Auto-generated method stub Integer number=NumberMachine.getInstance().getCommonManager().generalNewManager(); System.out.println(number+"号普通客户等待服务!"); } }, 0, Constants.COMMON_CUETOMER_INTERVAL_TIME, TimeUnit.SECONDS); Executors.newScheduledThreadPool(1).scheduleAtFixedRate( new Runnable(){ @Override public void run() { // TODO Auto-generated method stub Integer number=NumberMachine.getInstance().getExpressManager().generalNewManager(); System.out.println(number+"号普通客户等待服务!"); } }, 0, Constants.COMMON_CUETOMER_INTERVAL_TIME, TimeUnit.SECONDS); Executors.newScheduledThreadPool(1).scheduleAtFixedRate( new Runnable(){ @Override public void run() { // TODO Auto-generated method stub Integer number=NumberMachine.getInstance().getVipManager().generalNewManager(); System.out.println(number+"号普通客户等待服务!"); } }, 0, Constants.COMMON_CUETOMER_INTERVAL_TIME, TimeUnit.SECONDS); } }
相关推荐
黑马程序员入学面试题,复习必备,事半功倍。
Asp.net中级程序员_面试题,绝对经典,ASP.NET,数据库,Webservice,设计模式,几乎涵盖了所有的相关知识,设置这个分绝对有其价值!
Aspnet中级程序员_面试题 京华志&精华志出品 分享资源 C# ASP.NET SQL DBA 源码
02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-...
JAVA程序员面试的常用面试题讲解视频,非常到位
软通动力面试题——银行业务调度系统(张老师),编码仅供参考。
程序员面试题精选程序员面试题精选程序员面试题程序员面试题精选精选
Android面试宝典包含两个宝典: 1【黑马项目宝典】虐面试官神器之必备黑马程序员项目宝典V1.1 内容包括:(1)电子商城(2)ListView系列(3)图像处理(4)动画效果(5)控件大全(6)新闻资讯(7)生活相关(8)...
java程序员早期面试题汇总 BAT经典面试题汇总.pdf Java常考面试题.pdf java面试题(题库全).doc java面试题-外企软件工程师面试题大全.rar 程序员面试题精选100题.pdf ... --------------------------------...
资源名称:JAVA Android面试题讲解视频资源目录:【】2012黑马程序员01_面试题【】2012黑马程序员02_面试题【】2012黑马程序员03_面试题【】2012黑马程序员04_面试题【】225ce844c6c817e9614d8f17ea70a640【】...
1000道Java 程序员必备面试题-V1版.pdf
程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题
初出茅庐的程序员面试必看!!!!漂亮的面试回答
此资源包含内容: 1,银行业务调度系统需求; 2,银行业务调度系统面试题; 3,银行业务调度系统实现代码;
7K月薪面试题____银行业务调度系统(自己练习的demo)
中级程序员必备面试题.txt
程序员 必备 面试题 Accp 5.0 S2 程序员 必备 面试题 Accp 5.0 S2
程序员面试题程序员面试题程序员面试题程序员面试题程序员面试题
C语言经典的面试题,可能在你面试程序员的时候用的着哦。
程序员面试题及答案_程序员经典面试题及答案.pdf,这是一份不错的文件