【银行管理系统】先实现一个普通窗口为普通客户服务,快速Vip类比
2014-04-06 14:23
531 查看
银行业务调度系统
模拟实现银行业务调度系统逻辑,具体需求如下:
Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
Ø 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
Ø 异步随机生成各种类型的客户,生成各类型用户的概率比例为:
VIP客户 :普通客户 :快速客户 = 1 :6 :3。
Ø 客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
Ø 各类型客户在其对应窗口按顺序依次办理业务。
Ø 当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
Ø 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
Ø 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
可以通过修改各种窗口的数量来观察现象
NumberManger,java
NumberMachine.java
ServiceWindow.java
CustomerType.java
MainClass.java
模拟实现银行业务调度系统逻辑,具体需求如下:
Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
Ø 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
Ø 异步随机生成各种类型的客户,生成各类型用户的概率比例为:
VIP客户 :普通客户 :快速客户 = 1 :6 :3。
Ø 客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
Ø 各类型客户在其对应窗口按顺序依次办理业务。
Ø 当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
Ø 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
Ø 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
可以通过修改各种窗口的数量来观察现象
NumberManger,java
package com.itheima.bank; import java.util.ArrayList; import java.util.List; public class NumberManger { private List<Integer>customers=new ArrayList<Integer>(); private int count = 1; public synchronized Integer addCustomer(){ customers.add(count); return count++; } public synchronized Integer removeCustomer(){ if(customers.size()>0) return customers.remove(0); return null; } }
NumberMachine.java
package com.itheima.bank; public class NumberMachine { private NumberManger commonNumberManger = new NumberManger(); private NumberManger quickNumberManger = new NumberManger(); private NumberManger vipNumberManger = new NumberManger(); public NumberManger getCommonNumberManger() { return commonNumberManger; } public NumberManger getQuickNumberManger() { return quickNumberManger; } public NumberManger getVipNumberManger() { return vipNumberManger; } private NumberMachine() { super(); } private static final NumberMachine MACHINE=new NumberMachine(); public static NumberMachine getMachine(){ return MACHINE; } }
ServiceWindow.java
package com.itheima.bank; public class ServiceWindow { private CustomerType windowType; private int windowId; public ServiceWindow(CustomerType type, int windowId) { super(); this.windowType = type; this.windowId = windowId; System.out.println(type+"窗口"+windowId+"开始工作!"); } //一个窗口开启一个线程服务顾客 public void start(){ new Thread(){ @Override public void run() { while(true){ switch (windowType) { case Common: commonService(); break; case Quick: quickService(); break; case VIP: vipService(); break; } } } public void commonService() { Integer customer=NumberMachine.getMachine().getCommonNumberManger().removeCustomer(); if(customer != null) { System.out.println(windowType+"窗口"+windowId+":为普通客户"+customer+"服务"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(windowType+"窗口"+windowId+":为普通客户"+customer+"服务完毕"); } } public void quickService() { Integer customer=NumberMachine.getMachine().getQuickNumberManger().removeCustomer(); if(customer != null) { System.out.println(windowType+"窗口"+windowId+":为快速客户"+customer+"服务"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(windowType+"窗口"+windowId+":为快速客户"+customer+"服务完毕"); }else{ commonService(); } } public void vipService() { Integer customer=NumberMachine.getMachine().getVipNumberManger().removeCustomer(); if(customer != null) { System.out.println(windowType+"窗口"+windowId+":为VIP客户"+customer+"服务"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(windowType+"窗口"+windowId+":为VIP客户"+customer+"服务完毕"); } else{ commonService(); } } }.start(); } }
CustomerType.java
package com.itheima.bank; public enum CustomerType { Common { @Override public String toString() { return "普通"; } }, Quick { @Override public String toString() { return "快速"; } }, VIP { @Override public String toString() { return "VIP"; } }; } /* * public enum CustomerType { * * Common, Quick, VIP; * * @Override public String toString() { switch (this) { case Common: return * "普通"; case Quick: return "快速"; case VIP: return "VIP"; } return "null"; }; * * } */
MainClass.java
package com.itheima.bank; public class MainClass { public static void main(String[] args) { //三个线程用来增加客户,三个线程用来服务客户,都是一秒产生或者服务一个客户 ServiceWindow commonWindow1=new ServiceWindow(CustomerType.Common,1); commonWindow1.start(); ServiceWindow quickWindow1=new ServiceWindow(CustomerType.Quick,5); quickWindow1.start(); ServiceWindow vipWindow1=new ServiceWindow(CustomerType.VIP,6); vipWindow1.start(); //下面三个线程用来增加顾客 new Thread(){ public void run() { while(true) { NumberMachine.getMachine().getCommonNumberManger().addCustomer(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }; }.start(); new Thread(){ public void run() { while(true) { NumberMachine.getMachine().getQuickNumberManger().addCustomer(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }; }.start(); new Thread(){ public void run() { while(true) { NumberMachine.getMachine().getVipNumberManger().addCustomer(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }; }.start(); } }
相关文章推荐
- 银行客户管理系统的实现
- 第四篇 ANDROID窗口管理服务实现机制 窗口管理是ANDROID框架一个重要部分,主要包括如下功能: (1)Z-ordered的维护 (2)窗口的创建、销
- 禁用开机时弹出窗口“ 服务控制管理器:在系统启动时至少一个服务或驱动程序产生错误”
- ANDROID窗口管理服务实现机制和架构分析
- SpringMvc+Mybatis实现一个简单人事管理系统(二)
- Java web----一个简单的客户管理系统(CRM)
- CRM 客户资源管理系统(四) 客户服务
- php--实现一个简单的学生管理系统
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十):接口服务整理
- 配置实现-快速开发实现信息管理系统
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十一):服务网关(Zuul)
- ANDROID窗口管理服务实现机制和架构分析
- 问题: 写一个多线程程序实现铁路卖票系统,4个窗口同时售票,线程同步
- 利用Java GUI 实现一个简易的用户管理系统
- win2003关闭开机 服务控制管理器 在系统启动时至少有一个服务或驱动程序产生错误
- 工作流管理在自来水营销管理系统(客户服务中心)中的应用(原创)
- 内存管理模拟实验之实现一个简单的固定(可变)分区存储管理系统
- 关于一个普通的系统中用户注销后以其他用户登录的实现
- 开源一个常用的小软件的源码——系统数据库服务管理软件
- 第四篇 ANDROID窗口管理服务实现机制--远程代理模式