模拟银行管理系统
来源:互联网 发布:淘宝职业打假投诉工商 编辑:程序博客网 时间: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
- 模拟银行管理系统
- 黑马程序员_java_基础加强_模拟银行管理系统
- 黑马程序员_java_基础加强_模拟银行管理系统
- 使用Windows应用程序模拟银行账户管理系统
- 银行模拟系统(2)
- 银行系统模拟
- -模拟银行系统-
- 模拟银行储蓄系统
- ---模拟银行系统---
- 模拟银行排队系统
- 银行管理系统
- c++银行管理系统
- 银行调度管理系统
- 银行管理系统
- 银行管理系统
- 银行管理系统
- 银行管理系统
- 银行管理系统
- leetcode-Two Sum
- mysql5.6.10安装常见问题
- VB.net学习笔记之手柄控制:System.Runtime.InteropServices
- R中面向对象S3
- 批处理编译 *.sln 工程
- 模拟银行管理系统
- DWR的使用
- C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理
- Cocos2d-x之 CCDirector-->CCDisplayLinkDirector
- A-GPS介绍
- 矩阵LU分解求逆(学习笔记)
- 关于在集群中编程的问题
- java核心卷之接口学习笔记
- 陈硕 c++工程实践链接地址