银行业务调度系统

来源:互联网 发布:bodymovin插件 mac 编辑:程序博客网 时间:2024/06/06 12:48
银行业务调度系统
          
模拟实现银行业务调度系统逻辑,具体需求如下:
1,银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
            分析:窗口号码是属性;窗口服务类型也是属性;
2,有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
            分析:客户分类由号码机完成,一个号码机,三个产号器;
3,异步随机生成各种类型的客户,生成各类型用户的概率比例为:
        VIP客户 :普通客户 :快速客户  =  1 :6 :3。
            分析:1,异步随机生产用java5的Executors的调度线程池技术:定时间隔连环执行;
                  2,客户比例由Sleep来控制:速度比例:1:1.5:3  相同产生3个客户所需要的时间比为:3:2:1
4,客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
            分析:服务时间是叫号动作的sleep时间
5,各类型客户在其对应窗口按顺序依次办理业务。
            分析:窗口叫号需要向对应产号器获取最先号码,list[o]
6,当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
            分析:5、6号窗口启动后需要不断判断是否有对应的客户在等待;用到集合size是否为0实现;
                  这两个窗口必须具备服务普通客户的功能;
7,随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
            分析:要实现设置功能,必须把数据抽取成常量,封装到一个类中,面向这个类设置,而不直接去修改源码;
                 
8,不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
            分析:系统逻辑实现,不需要考虑客户属性和功能,所以没有什么属性和功能需要封装到客户类中;

 

设计思路:1,主函数直接面对那些对象?建立一代对象
          2,一代对象中有哪些变量或参数是对象?封装到二代对象
          3,各代对象中是否需要经常对固定常量进行修改?封装到枚举中
         
设计架构:1,系统由主函数类实现:MainClass.main
          2,主函数面向两类对象:A,产生号码的取号机
                                 B,呼叫号码的服务窗口
          3,建立1-4号普通窗口、5号快速窗口和6号VIP窗口,并启动服务功能;
              A,共性:都是窗口 ServiceWindow
              B,个性:不同号码 1-6号;
              C,个性:业务类型 CustomerType   COMMON,EXPRESS,VIP
              D,个性:服务时长 需要常量,已经在常量基础上进行随机取值;把最大最小值得封装到class Constants中,以方便日后设置;
             
          4,三类客户进行取号
              A, 共性:都是从号码机上拿;
              B, 个性:同一个号码机上不同的产号器上取号;所以需要封装 
              所以,把三个产号器封装到号码机上  class NumberMachine          
              可是,不同的产号器又是独立运行的,而且每个产号器都跟相应类型的窗口进行数据联系,所以又把属性和功能单独封装到产号器中 class NumberManager  
         
          5,有了窗口,有了客户,就开始不断把号码放入集合又把号码取出集合,持续连环地进行着;
         

系统主架构:
 
  MainClass
      一代对象:ServiceWindow
            二代对象:Constants
      一代对象:NumberMachine
            二代对象:NumberManager
           
            公共二代:CustomerType

 

关键技术:
       1,枚举 enum
       2,线程池 Executors
       3,随机值技术 new Random().nextInt(int)
       4,集合 List
       5,匿名内部类
原创粉丝点击