您的位置:首页 > 职场人生

黑马程序员_银行业务调度系统

2011-09-22 23:05 253 查看
---------------------- android培训、java培训、期待与您交流! ----------------------

【银行业务调度系统】

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

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

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

异步随机生成各种类型的客户,生成各类型用户的概率比例为:VIP客户 :普通客户 :快速客户 = 1 :6 :3。

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

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

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

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

【面向对象的分析与设计】

有三种对应类型的客户:VIP,普通,快速 ,随机生成各种客户,在其对应窗口按顺序依次办理业务;首先,经常在银行办理业务的人更有利于理解本系统,每一个客户其实就是由银行的一个取号机器产生号码的方式来表示的。所以,要有一个号码管理器对象,让这个对象不断地产生号码,就等于随机生成了客户。//比如随便来银行转来两圈什么也没干的人当然不能算客户了。只有取过号等待办业务的人才能算是银行客户

三类客户的号码都是独立的;三个号码器归一个号码机,号码机只有一个,设计成singleton的;

各类型客户在其对应窗口按顺序依次办理业务 ,准确地说,应该是窗口依次叫号。

画出整个程序的类图:(静态方法下面要画下划线);

【NumberManager】和【NumberMachine类】

//题外话:薪水上1w的,一般英语都很棒;技术总监薪水1w3,再上不去了;8500是个坎,1w是个坎,1w3简直过不去了;

//尽量使用面向接口或父类编程,这样可以使程序更灵活;

//generrateNewManager()和fetchServiceNumber()处于两个线程中,并且同时使用queueNumber这个数据,所以会容易出问题,因此使用synchronized方法修饰;

NumberMachine有三个NumberManager;

//自己的疑惑:这里的NumberMachine在整个系统中确实只有一个,但是真的有必要设计为singleton模式吗?

【ServerWindow类】

//在使用jdk1.5以后的线程方法的题外话:人总是要主动卖弄一下学问的,不然谁知道你知道你有这些学问呢?

服务窗口只有三种窗口,所以可以使用枚举来弄,用type成员属性123也行,但是显然不够专业了;//自己要能够享受欣赏自己的工作;

if...else...为什么比switch效率低,张老师要大家去google看一下;

//看到老师使用type代替普通,vip这些字符串时,我还想这样不就成了英文大写了吗?但是演示时好像是对应的中文名字的,但是,老师居然想起来要改写每个枚举类的toString(),我承认确实当时没想到;

public string tostring()

{switch(){ case COMMON return 普通;。。。}

return null;}必须有最后一句,不然编译器会过不去,因为编译器是不管实际运行的结果的,它不知道其实永远运行不到这一句;

//突然感觉面向对象的编程还有一点重要的是你也要按照功能模块的思想来编程,不然几个功能一起编,只会搅成一锅粥,乱作一团,最后谁也实现不了;比如张老师就先把计算服务时间的代码写完,然后再在begintime和costtime之间进行其他功能的编写,这样自己的思路也清晰;

//常量定义一个专门的类,比如Constants;

//原来1:6:3是通过召唤取号机时的那三个个线程时间的间隔的时间比来实现的,我还纳闷了半天;还为此在contants类中定义了一个单位时间的常量;

【总测试和bug修正】

queueNumber.remove(0)要防止queue是空的,就没什么可取了

要注意提示语在同步方法的前面还是前面,因为同步方法有阻塞效果;

发现vip和express的service()忘记加了;

锁的内部还有一个锁就很有可能弄出死锁来,所以老师暂时不调试这部分了;

---------------------- android培训、java培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: