【银行管理系统】先实现一个普通窗口为普通客户服务,快速Vip类比
来源:互联网 发布:鲲鹏乐乎青年社区 编辑:程序博客网 时间:2024/04/29 18:58
银行业务调度系统
模拟实现银行业务调度系统逻辑,具体需求如下:
Ø 银行内有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(){@Overridepublic 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 {@Overridepublic String toString() {return "普通";}},Quick {@Overridepublic String toString() {return "快速";}},VIP {@Overridepublic 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();}}
0 0
- 【银行管理系统】先实现一个普通窗口为普通客户服务,快速Vip类比
- 迅雷面试题: 模拟银行一天的工作, 统计vip客户和普通客户的办理业务的平均等待时间.
- 银行客户管理系统的实现
- 银行VIP客户人脸识别系统--基于深度学习
- 系统服务和普通FORMS程序共存一体的实现
- 创建一个普通的应用程序窗口
- 华胜天成为中国邮储银行搭建金融客户管理系统
- 将普通应用程序制作成系统服务
- 将普通应用程序制作成系统服务
- 客户服务管理系统 bt
- 普通
- 普通
- 研发管理不等于项目管理,为何不可以用普通的项目管理软件来代替研发管理系统
- Dijkstra算法的一个普通实现
- 将普通对话框设置为CWnd*的子窗口
- 4 银行排队问题之单队列多窗口加VIP服务 (30分)----模拟
- PTA 7-6 银行排队问题之单队列多窗口加VIP服务
- 银行排队问题之单队列多窗口加VIP服务(30 分)
- Fragment、FragmentActivity与Activity的关系
- UML总结
- Wildcard Matching
- 涉及到ASSCI码细节的gets()函数和getchar()函数?
- [壹]Pomelo游戏服务器编程分享 之 序言
- 【银行管理系统】先实现一个普通窗口为普通客户服务,快速Vip类比
- 模拟Matlab显示图像的效果
- Java单例模式的七种写法
- 做错过的C语法题目
- 关于最少拦截系统的一些感想 HDU 1257
- Google C++编程规范 – 第二十七条 -《局部变量》
- set_magic_quotes_runtime() 函数过时
- 黑马程序员Java基础加强成员方法的反射
- @+id/和android:id有什么区别?