银行售票窗口系统

银行业务调度系统需求:

1、银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。2、有三种对应类型的客户:VIP客户,普通客户,快速客户。3、VIP客户以及普通客户办理业务所需的时间有最大值和最小值,快速客户办理业务所需时间为最小值,三种客户比例为VIP客户 :普通客户 :快速客户  =  1 :6 :3。4、当VIP窗口和快速窗口没有客户等待可以为普通客户服务。
系统分析:首先来银行的客户分为三类:普通客户,快速客户,VIP客户,异步随机生成各种类型的客户,然后去相对应的窗口办理业务。每个类型的客户拿到的号码都是独立的,号码管理器进行管理就需要三个,这样用一个发号机器来管理三个号码管理器,客户领号时根据自己的类型选择不同的号码管理器取得号码,这样才更接近于现实。这时可以大致确定下几个类,客户类、号码管理器类、发号机器类。在客户来银行办理业务时,他是要等到业务窗口喊号才可以到窗口办理业务,而喊号的依据便是发号机器那里得到的已经发出去的号码。
部分的代码实现:

号码管理:

package cn.itcast.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(){
return queueNumber.remove(0);
}
}

封装三个号码对象:

package cn.itcast.bank;


public class NumberMachine {
private NumberManager commonNumber= new NumberManager();
private NumberManager expressNumber= new NumberManager();
private NumberManager vipNumber= new NumberManager();
public NumberManager getCommonNumber() {
return commonNumber;
}
public NumberManager getExpressNumber() {
return expressNumber;
}
public NumberManager getVipNumber() {
return vipNumber;
}
private NumberMachine(){
}
private static NumberMachine instance=new NumberMachine();
static NumberMachine getInstance(){
return instance;
}
}

服务时间:

package cn.itcast.bank;


public class Constants {
static int MAX_SERVICE_TIME=10000;
static int MIN_SERVICE_TIME=1000;
}

服务自动选择:

package cn.itcast.bank;
public enum CustomerType {
COMMON,EXPRESS,VIP;
public String toString(){
switch(this){
case COMMON:
return "普通";
case EXPRESS:
return "快速";
case VIP:
return name();
}
return null;
}
}

窗口问票:

package cn.itcast.bank;


import java.util.Random;
import java.util.concurrent.Executors;


public class ServiceWindow {
private CustomerType type=CustomerType.COMMON;
String windowId;
public void start(){
Executors.newSingleThreadExecutor().execute(new Runnable() {

@Override
public void run() {
while(true){
switch(type){
case COMMON:
commonservice();
case EXPRESS:
expressservice();
case VIP:
vipservice();

}
}
}

});
}

普通窗口:
public void commonservice(){
String windowname="第"+windowId+"号"+type+"窗口";
System.out.println("正在获取号码");
Integer number=NumberMachine.getInstance().getCommonNumber().fetchServiceNumber();
if(number!=null){
long starttime=System.currentTimeMillis();
int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
long servicetime=new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(servicetime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long costtime=System.currentTimeMillis()-starttime;
System.out.println(windowname+"为第"+number+"个"+type+"用户消耗"+costtime/1000);
}else{
System.out.println("没有获取号码");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

快速窗口
public void expressservice(){
String windowname="第"+windowId+"号"+type+"窗口";
System.out.println("正在获取号码");
Integer number=NumberMachine.getInstance().getExpressNumber().fetchServiceNumber();
if(number!=null){
long starttime=System.currentTimeMillis();
//int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
//long servicetime=new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(servicetime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long costtime=System.currentTimeMillis()-starttime;
System.out.println(windowname+"为第"+number+"个"+type+"用户消耗"+costtime/1000);
}else{
System.out.println("没有获取号码");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

vip窗口:
public void vipservice(){
String windowname="第"+windowId+"号"+type+"窗口";
System.out.println("正在获取号码");
Integer number=NumberMachine.getInstance().getVipNumber().fetchServiceNumber();
if(number!=null){
long starttime=System.currentTimeMillis();
int maxRand=Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
long servicetime=new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(servicetime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long costtime=System.currentTimeMillis()-starttime;
System.out.println(windowname+"为第"+number+"个"+type+"用户消耗"+costtime/1000);
}else{
System.out.println("没有获取号码");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值