面向对象设计:银行业务调度系统模拟与逻辑实现

需积分: 9 9 下载量 34 浏览量 更新于2024-09-22 收藏 217KB DOC 举报
银行业务调度系统是一个针对银行内部的自动化服务管理系统,主要目标是模拟不同类型的客户在六个窗口中的办理流程,以提升效率并优化客户服务体验。项目的核心需求包括: 1. **业务窗口划分**: - 有6个窗口,分为4个普通窗口(1-4号)、1个快速窗口(5号)和1个VIP窗口(6号)。 - 不同窗口针对不同的客户群体:普通客户(1-4号)、快速客户(5号)、VIP客户(6号)。 2. **客户类型与概率分布**: - 生成客户时,VIP客户、普通客户和快速客户的概率分别为1:6:3,即VIP客户最少,快速客户最多。 3. **业务办理时间**: - 普通客户和VIP客户办理业务所需时间随机设定在一定范围,快速客户办理时间最短。 - 业务办理过程通过多线程的`Sleep`模拟。 4. **优先级规则**: - 当VIP窗口和快速窗口无等待客户时,可处理普通客户业务;一旦有相应客户,优先服务该类客户。 5. **系统逻辑与实现**: - 面向对象设计方法:通过设计"号码管理器"来生成和管理不同类型的客户编号,每个窗口通过询问相应的号码管理器获取待服务号码。 - 号码管理器作为单例模式,确保在整个系统中只有一个实例,便于资源管理和控制。 - 业务流程通过窗口间的通信进行,服务窗口与号码管理器紧密协作。 6. **简化界面**: - 项目着重于系统逻辑实现,不涉及图形用户界面(GUI),而是通过日志记录来展示程序运行结果。 7. **参数可配置**: - 客户生成时间间隔、业务办理时间的最大值和最小值等参数可以根据需求进行自定义设置。 这个项目的解题思路强调了面向对象的设计原则和银行业务场景的理解,通过创建核心对象如号码管理器和窗口,实现了系统的逻辑组织和高效运行。对于开发者来说,这提供了在实际业务环境中应用软件工程方法的一个良好示例。
2019-03-05 上传
用Java编写银行业务调度系统,附主类: package com.isoftstons.interview.bank; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class Mainlass { public Mainlass() { } public static void main(String[] args) { ServiceWindow vipWindow; for(int i = 1; i < 5; ++i) { vipWindow = new ServiceWindow(); vipWindow.setWindowId(i); vipWindow.start(); } ServiceWindow expressWindow = new ServiceWindow(); expressWindow.setType(CustomerType.EXPRESS); expressWindow.start(); vipWindow = new ServiceWindow(); vipWindow.setType(CustomerType.VIP); vipWindow.start(); Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { public void run() { Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager(); System.out.println(number + "号普通客户等待服务"); } }, 0L, (long)Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS); Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { public void run() { Integer number = NumberMachine.getInstance().getExpressManager().generateNewManager(); System.out.println(number + "号快速客户等待服务"); } }, 0L, (long)(Constants.COMMON_CUSTOMER_INTERVAL_TIME * 6), TimeUnit.SECONDS); Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { public void run() { Integer number = NumberMachine.getInstance().getVipManager().generateNewManager(); System.out.println(number + "号VIP客户等待服务"); } }, 0L, (long)(Constants.COMMON_CUSTOMER_INTERVAL_TIME * 2), TimeUnit.SECONDS); } }