银行调度系统
来源:互联网 发布:ubuntu lamp环境搭建 编辑:程序博客网 时间:2024/06/06 00:41
模拟实现银行业务调度系统逻辑,具体需求如下:
银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
异步随机生成各种类型的客户,生成各类型用户的概率比例为:
VIP客户 :普通客户 :快速客户 = 1 :6 :3。
客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,
快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
各类型客户在其对应窗口按顺序依次办理业务。
当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,
而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。、
二 面向对象的分析与设计:
1.有三种客户:VIP客户、普通客户、快速客户。需要异步随机产生各种类型的客户。
(1)每一个客户其实就是由银行的一个取号机器产生号码的方式来表示的。所以,要有一个号码管理器对象,
让这个对象不断地产生号码,就等于随机生成了客户。
(2)由于有三类客户,每类客户的号码编排都是完全独立的,所以,本系统一共要产生三个号码管理器对象,
各自管理一类用户的排队号码。这三个号码管理器对象统一由一个号码机器进行管理,
这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。
2.各类客户到对应的窗口办理业务,是窗口在叫号
(1)窗口内部知道如何叫号,是通过号码机器获取的号,所以它内部有这个叫号的方法
(2)各类客户并不知道怎么操作叫号的方法,只是被叫到
三 详细设计
NmuberManager类
NmuberManager类的编写-产生号码的机器类
分析:
1.定义一个动态数组即集合,用于存储未服务的号码
2.定义一个产生新号码的方法generateNewManager和获取马上要为之服务的号码的方法fetchServiceNumber,
这两个方法被不同的线程操作了相同的数据,所以,要进行同步。
3.同步问题:
要考虑generateNewManager和fetchServiceNumber两个方法是在两个不同的线程中,
两个不同的线程要访问相同的数据lastNumber,就需要使用多线程技术
分析:
1.定义三个成员变量分别指向三个NumberManager对象,分别表示普通、快速和VIP客户的号码管理器,
定义三个对应的方法来返回这三个NumberManager对象。
2.将NumberMachine类设计成单例。这三个号码管理器对象统一由一个号码机器进行管理,
这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。
1.CustomerType类
分析:
(1)系统中有三种类型的客户,所以用定义一个枚举类,其中定义三个成员分别表示三种类型的客户。
(2)重写toString方法,返回类型的中文名称。这是在后面编码时重构出来的,刚开始不用考虑。
2.Constants类
作为一个常量类,用于提供各种常量值
说明:
每个普通窗口服务一个客户的平均时间为5秒,一共有4个这样的窗口,也就是说银行的所有普通窗口合起来,
平均1.25秒内可以服务完一个普通客户,再加上快速窗口和VIP窗口也可以服务普通客户,
所以,1秒钟产生一个普通客户比较合理
ServiceWindow类
分析:
1.定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法。
2.定义三个方法分别对三种客户进行服务,为了观察运行效果,应详细打印出其中的细节信息。
测试类的编写
1.用for循环创建出4个普通窗口,再创建出1个快速窗口和一个VIP窗口。
2.再创建三个定时器,分别定时去创建新的普通客户号码、新的快速客户号码、新的VIP客户号码。
- 银行调度系统
- 银行调度管理系统
- 银行调度系统
- 银行调度系统
- 银行调度系统
- 银行调度系统
- 银行调度系统
- 银行调度系统
- 银行调度系统
- 银行调度系统详解
- 银行调度业务系统
- 银行调度系统
- 银行调度系统
- 银行调度系统
- 银行排号调度系统
- 银行调度系统
- 银行调度系统-张孝祥
- 银行调度系统
- Java实现爬取网页数据:PhantomJS+Webdriver
- CentOS7 通过VNC 下安装oracle数据库提示DISPLAY not set. Please set the DISPLAY and try again.解决方法
- HDU5727(贪心)
- Boost库的安装
- 从零开始学前端1
- 银行调度系统
- layer.js源码分析
- mysql系统时间获取
- spring ThreadPoolTaskExecutor 实现线程阻塞
- VMware下,虚拟机时间同步设置
- LIST_HEAD_INIT分析
- hdoj2001_计算两点间的距离
- springMVC中基于token防止表单重复提交
- 数值的整数次方