黑马程序员---银行业务调动系统 学习笔记

原创 2012年03月21日 04:49:07
---------------------- android培训java培训、期待与您交流! ----------------------

银行业务调动系统:    

系统需求::

           <1>. 一共有6个窗口,1到4号是普通窗口,5号是快速窗口,6号VIP窗口; 分别对应三种类型客户,普通的客户, 快速的客户, VIP的客户;

           <2>. 随机生成各种类型客户, 生成的概率比例是, 6 : 3 :1;

           <3>. 办理业务时间有最大值和最小值, VIP客户和普通客户需要服务的时间在允许范围内, 随机设定的, 快速客户是最小值

          <4>. 具体服务的逻辑和现实生活是相同的;     

1. 具体思路:

          <1>. 生成客户: 每一个银行都有一个取号器, 取号器可以生产三种类型客户, 每产生一个号, 就等于生产了一个相应类型的客户, 每种类型客户号码编排都是独立的;        

<2>. 银行办理过程: 业务办理由窗口叫号来完成, 办理业务不是客户自己去办理, 是等到某一个窗口叫到自己的号码时, 就等于开始服务了, 所以要有一个叫号器;

          <3>. 窗口叫号分析: 叫号器要先知道取号器那里当前总共有多少个号码, 然后每一个相应类型的窗口优先叫自己对应类型的客户, 当没有获取到本类型客户服务时,VIP客户和快速窗口客户也可以去叫普通号码, 这里需要将取号器产生的所有号码存起来, 可以用一个集合, 这样当取号器那里生成了一个号码时, 叫号器就记录这个号码, 然后开始一次叫号:

     2. 实现代码:

          <1>. NumberManager类-----定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合,定义一个产生新号码的方法和获取马上要为之服务的号码的方法,这两个方法被不同的线程操作了相同的数据,所以,要进行同步

          public class NumberManager {
          private int lastNumber = 0;
          private List queueNumbers = new ArrayList();
 
          public synchronized Integer generateNewNumber(){
                 queueNumbers.add(++lastNumber);
                 return lastNumber;
          }
 
         public synchronized Integer fetchNumber(){
                if(queueNumbers.size()>0){
                return (Integer)queueNumbers.remove(0);
               }else{
              return null;
        }
      }
   }

       <2>.NumberMachine类-----定义三个成员变量分别指向三个NumberManager对象,分别表示普通.快速和VIP客户的号码管理器,定义三个对应的方法来返回这个NumberManager对象,将NumberMachine类设计成单例

          private NumberMachine(){}
          private static NumberMachine instance = new NumberMachine();
          public static NumberMachine getInstance(){
                  return instance;
          }
 
          private NumberManager commonManager = new NumberManager();
          private NumberManager expressManager = new NumberManager();
          private NumberManager vipManager = new NumberManager();
          public NumberManager getCommonManager() {
                  return commonManager;
          }
         public NumberManager getExpressManager() {
                 return expressManager;
         }
         public NumberManager getVipManager() {
                return vipManager;
         }

      <3>.ServiceWindow类-----定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法,定义三个方法分别对三种客户进行服务,为了观察运行效果,应详细打印出其中的细节信息

       public void start(){
                 Executors.newSingleThreadExecutor().execute(
                         new Runnable(){
                                 public void run(){
                                         //下面这种写法的运行效率低,最好是把while放在case下面
                                         while(true){
                                                switch(type){
                                                        case COMMON:
                                                                 commonService();
                                                                 break;
                                                        case EXPRESS:
                                                                 expressService();
                                                                 break;
                                                        case VIP:
                                                                 vipService();
                                                                 break;
                                               }
                                          }
                                 }
                        }
               );
         }

 

在看完张老师所讲的银行业务调动系统的视频后, 干觉自己在对面向对象方面的逻辑提高了很多, 使自己丰富了很多扩展性的知识,张老师在视频中传授给我们一些很重要的经验

“ 面向对象设计把握一个重要的经验: 谁拥有数据, 谁就对外提供操作这些数据的方法 ”和在解决问题上非常实用的经验 “ 画图非常有助于理解和分析问题, 你还有比画图更好的办法吗? ”看过张老师的视频后非常充实, 谢谢张前辈!

---------------------- android培训java培训、期待与您交流! ----------------------

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1499

黑马程序员前端与移动开发学院2.0课程震撼来袭!

随着移动互联网深入发展,大前端时代的前端开发工程师在公司中的地位逐渐上升。前端工程师也摆脱了只是写写HTML标签、CSS样式、写写简单的JS效果的时代。大前端时代的前端工程师要求既能掌握基本的设计图的...
  • itcast_cn
  • itcast_cn
  • 2016年11月04日 11:15
  • 1461

黑马程序员—黑马的学习环境没有亲身经历的人是很难体会的!!!

文章来源:黑马程序员,黑马论坛     公元2013年1月10号我拖着沉重的行李箱和对未来的憧憬来到了黑马,公元2013年6月7号我怀抱着满满的知识和对老师的不舍离开了黑马。到现在离开黑马也有一个...
  • heima_28
  • heima_28
  • 2014年08月26日 15:16
  • 1393

【黑马程序员】银行业务调度系统_学习笔记

------- android培训、java培训、期待与您交流! ---------- 银行业务调度系统,起初gan...
  • BuXingDeYouShou
  • BuXingDeYouShou
  • 2014年06月23日 18:02
  • 240

黑马程序员技术博客之银行业务调度系统学习笔记

以下是我学习张老师银行业务调度系统面试题的笔记 模拟银行业务调度系统的具体需求: 1.银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 2.有三种对应类型的客...
  • u013712460
  • u013712460
  • 2014年02月28日 11:45
  • 568

黑马程序员_java学习笔记15—银行业务调度系统

------- android培训、java培训、期待与您交流! ---------- 银行业务调度系统 一、银行业务调度系统分析需求 1、 银行内有6个业务窗口,1 - 4号窗口为...
  • gawain1990
  • gawain1990
  • 2012年08月27日 23:45
  • 165

黑马程序员-学习笔记/银行业务系统

------- android培训、java培训、期待与您交流! ---------   黑马程序员培训-android培训,java面试题之 ---- 银行系统业务   根据我们在银行办理业...
  • zhu_chan
  • zhu_chan
  • 2014年02月24日 00:52
  • 414

黑马程序员 JAVA学习笔记 ——银行业务调度系统

android培训、java培训、期待与您交流! android培训、java培训、期待与您交流!...
  • Dunamis
  • Dunamis
  • 2014年05月16日 15:33
  • 302

黑马程序员 java学习笔记——银行业务调度系统

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------- ...
  • PleaseCallMeWisely
  • PleaseCallMeWisely
  • 2014年08月05日 13:23
  • 263

黑马程序员学习笔记十——银行业务管理系统

---------------------- android培训、java培训、期待与您交流! ---------------------- 银行业务调度系统 分析设计 顾客不定时不结对的去银...
  • huchuan90
  • huchuan90
  • 2012年06月14日 14:59
  • 171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员---银行业务调动系统 学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)