您的位置:首页 > 职场人生

黑马程序员 银行业务调度系统

2013-12-17 11:52 423 查看
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------面向对象设计:1.定义一个NumberManager类 用于管理客户服务号码 属性:int lastNumber 用于保存上一个客户号码List<Integer> queueNumber 用于存储客户队列的集合方法:Integer generateNewNumber() 将客户号码加入排队队列 Integer fecthServiceNumber() 用于返回队列第一位的客户号代码实现:
package com.tiheima.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 generateNewNumber(){
queueNumber.add(lastNumber);
return lastNumber++;
}

public synchronized Integer fecthServiceNumber(){
Integer number = null;
if(queueNumber.size()>0)
number = queueNumber.remove(0);
return number;
}}
2,定义一个NumberMachine类 做为取号机管理三个号码管理器  设计为单例模式
属性(分别为三个类型的号码管理器):NumberManager commonManager
NumberManager expressManager
                             NumberManager vipManager
方法:三个getter方法分别获得三个类型的号码管理器
代码实现:
package com.tiheima.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 getNumberchine(){
return instance;
}
private static NumberMachine instance = new NumberMachine();

}
3,设计一个ServiceWindow类,作为窗口
属性:CustomerType type  窗口类型
     int windowId       窗口编号
方法:start() 内建一个线程,根据窗口类型循环调用窗口服务方法
     三个窗口服务方法分别用于普通,快速,vip窗口
代码实现:
 package com.tiheima.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.newSingleThreadExecutor().execute(new Runnable(){public void run(){while(true){switch(type){case COMMON:commomService();break;case EXPRESS:expressService();break;case VIP:vipService();break;}}}});}private void commomService(){String windowName = "第"+windowId+"号"+type+"窗口";System.out.println(windowName+"正在获取普通任务");Integer serviceNumber = NumberMachine.getNumberchine().getCommonManager().fecthServiceNumber();if(serviceNumber!=null){System.out.println(windowName+"开始为第"+serviceNumber+"号普通客户服务");int maxRandomTime = Constants.MAX_SERVICE_TIME-Constants.MIN_SERIVCE_TIME;int serviceTime = new Random().nextInt(maxRandomTime)+1+Constants.MIN_SERIVCE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"号普通客户的服务,耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+"没有获取到任务,正在空闲一秒");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private void expressService(){String windowName = "第"+windowId+"号"+type+"窗口";System.out.println(windowName+"正在获取快速任务");Integer serviceNumber = NumberMachine.getNumberchine().getExpressManager().fecthServiceNumber();if(serviceNumber!=null){System.out.println(windowName+"开始为第"+serviceNumber+"号快速客户服务");int serviceTime =Constants.MIN_SERIVCE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"快速客户的服务,耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+"没有获取到快速任务");commomService();}}private void vipService(){String windowName = "第"+windowId+"号"+type+"窗口";System.out.println(windowName+"正在获取VIP任务");Integer serviceNumber = NumberMachine.getNumberchine().getVipManager().fecthServiceNumber();if(serviceNumber!=null){System.out.println(windowName+"开始为第"+serviceNumber+"号VIP客户服务");int maxRandomTime = Constants.MAX_SERVICE_TIME-Constants.MIN_SERIVCE_TIME;int serviceTime = new Random().nextInt(maxRandomTime)+1+Constants.MIN_SERIVCE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(windowName+"完成为第"+serviceNumber+"VIP客户的服务,耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+"没有获取到VIP任务");commomService();}}}
4,设计一个MainClass类  创建6个窗口 创建3个定时器定时创建3种客户号码  运行程序
代码实现:
 package com.tiheima.bank;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class MainClass { /*** @param args*/public static void main(String[] args) {for (int i = 1; i < 5; i++) {ServiceWindow window = new ServiceWindow();window.setWindowId(i);window.start();}ServiceWindow expressWindow = new ServiceWindow();expressWindow.setType(CustomerType.EXPRESS);expressWindow.start();ServiceWindow vipWindow = new ServiceWindow();vipWindow.setType(CustomerType.VIP);vipWindow.start();Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){Integer serviceNumber = NumberMachine.getNumberchine().getCommonManager().generateNewNumber();System.out.println("第"+serviceNumber+"号普通客户正在等待服务");}},0,Constants.COMMON_TIME,TimeUnit.SECONDS);Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){Integer serviceNumber = NumberMachine.getNumberchine().getExpressManager().generateNewNumber();System.out.println("第"+serviceNumber+"号快速客户正在等待服务");}},0,Constants.COMMON_TIME*2,TimeUnit.SECONDS);Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run(){Integer serviceNumber = NumberMachine.getNumberchine().getVipManager().generateNewNumber();System.out.println("第"+serviceNumber+"号VIP客户正在等待服务");}},0,Constants.COMMON_TIME*6,TimeUnit.SECONDS); }}
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: