黑马程序员_<<银行业务调度系统>>
---------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
异步随机生成各种类型的客户,生成各类型用户的概率比例为:
VIP客户:普通客户 :快速客户 = 1 :6 :3。
客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
各类型客户在其对应窗口按顺序依次办理业务。
当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
2. 面向对象设计 1. 客户与号码的设计
对于不同的客户,普通,快速客户,VIP客户,他们必须首先获得号码,来表示本客户是第几个客户,那么我们就使用集合来存储,便于操作。
2. 号码管理我们要使用线程来模拟选号,窗口对客户的服务,那么我们就需要线程池 和定时器。
3.服务窗口我们要定义号码管理类,那么在银行中有那么可以选号机器,并且只有一台,所以我们要有号码机器类,用于管理各个类型的号码管理。现实生活中是窗口中的工作人员通知已经有顺序的客户人员。并且对不同的客户限制不同的服务时间
3.编写 1.NumberManage
号码管理器
1.lastNumber:表示本类型的号码数
2.queueNumber:号码队列,模仿的是抽到号码的人进行排队
3.设置了抽取号码(generateNewManage)和取出号码(fetchServiceNumber)
4.抽取号码:就是获得号码后把存储到集合中。取出号码:就是把集合中的第一个号码删除,相当于队列
5.因为操作的是同一个队列,共享数据,所以要进行同步,增加锁
6.需要有普通,快速和VIP的号码管理器
2.总结1.用到的知识
1.面向对象的设计
2.枚举(CustomerType)
3.线程(线程池,定时器)
4.单例设计模式(NumberMachine)
2.完善
把服务和提示信息都提取出来,那么就是代码简单化了。
---------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------