模拟银行业务调度系统逻辑

需求

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

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

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

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

VIP客户 :普通客户 :快速客户 = 1 :6 :3。

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

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

当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。

随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。

不要求实现GUI,,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

分析

我们知道客户去银行办理业务,首先要去取号机取号,然后等待窗口叫号,那么窗口是通过什么叫号的呢,就是根据取号机内部产生和维护的不同的业务队列来完成的

所以

涉及的对象有:业务窗口、客户、取号机、业务类型以及取号机内部维护的业务队列

为了简化设计,用字符串形式代替客户信息,主要实现系统逻辑为主

面向对象分析与设计 业务类型BusinessType类:

采用枚举的方式,创建3个实例分别表示普通业务、快速业务、VIP业务

内部维护的业务队列Queue类:

内部维护一个集合用来存放队列中的客户信息

以及一个整型变量用来表示当天的客户队列号

实现加入一个客户到队列的方法

以及从队列中取出一个客户的方法(即叫号过程)

取号机TicketMachine类:

简化编程,我们将取号机设计成一个单例

内部维护三个不同业务类型的队列

对外提供取号方法给用户

提供获取队列方法给业务窗口

业务窗口Windows类:

业务窗口属性有:业务类型及窗口编号

对外提供开始业务的方法供银行调度

思考:

在对业务窗口进行设计的时候发现,虽然各窗口同属一类,但在提供服务的过程不尽相同,所以考虑的两种实现方式,如图

第一种就是考虑到在开展业务的时候各窗口的代码有不同之处,所以考虑用这种方式来设计,将不同的业务类型的窗口分配到不同的类 第二种是直接将所有业务类型的服务代码写在同一个类中

由于不太懂设计模式,个人的感觉是,这里主要实现的是系统逻辑,所以每个窗口的服务代码差异并没有想象的大,故采用第二种方式

如果是一个比较系统的需要长期维护的项目,我会采用第一种,确保每个类的单一功能

代码实现

业务类型BusinessType类:

1: /** 2: * 业务类型 3: * @author Shawn 4: * 5: */BusinessType { 7:GENERAL,//普通业务类型 8:QUICK,//快速业务类型 9:VIP;//VIP业务类型 10: 11:@Override 12:public String toString() { 13:switch(this){ 14:case GENERAL:; 16:case QUICK:; 18:case VIP:; 20:} 21:return null; 22:} 23: }夫妇一条心,泥土变黄金。

模拟银行业务调度系统逻辑

相关文章:

你感兴趣的文章:

标签云: