【银行管理系统】先实现一个普通窗口为普通客户服务,快速Vip类比

来源:互联网 发布:鲲鹏乐乎青年社区 编辑:程序博客网 时间:2024/04/29 18:58

银行业务调度系统

模拟实现银行业务调度系统逻辑,具体需求如下:

Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。

Ø 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。

Ø 异步随机生成各种类型的客户,生成各类型用户的概率比例为:

        VIP客户 :普通客户 :快速客户   1 3

Ø 客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。

Ø 各类型客户在其对应窗口按顺序依次办理业务。 

Ø 当VIP6号)窗口和快速业务(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
原创粉丝点击