c++版模拟银行窗口排队叫号系统
注:第一次写blog哪有不到的地方,请指点,以交流学习为主。
首先请参见:
http://blog.youkuaiyun.com/Solstice/archive/2011/04/15/6324749.aspx
http://blog.youkuaiyun.com/zhangxiaoxiang/archive/2011/04/01/6294132.aspx
看了两位LZ的银行排队系统blog,感觉不错,就也产生了用C++写个排号系统,原因有二,1、对Java不太熟悉,没有看太懂。2、练练手。3、提高一下C++的人气。
进入主题:
对于这一块的业务系统需求没有做过多的分析,只在两位LZ的基础做了小小的改动,然后用C++实现。
题目:
模拟实现银行业务调度系统逻辑,具体需求如下:
银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。
有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
异步随机生成各种类型的客户,生成各类型用户的概率比例为:
VIP客户:普通客户:快速客户 = 1 :6 :3。
客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
各类型客户在其对应窗口按顺序依次办理业务。
当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
修改:1、在这里为了简化程序的设计(只省了只行代码),FAST和VIP窗口只办理对应的客户,不办普通客户的业务。
2、由于对于客户的到来,也采用1S来一个的做法,但因为在console程序对于时间不太好控制,在这里只是设定了客户数,即每个1秒来一个客户,根据来的客户数控制时间。
开发环境:Linux
代码:
文件constances.h
该文件中定义了一些常量,其中MAX_WAITING_CLIENT_NUM指的是,最多正在等待的客户数,如果客户数到达最大,后来的客户将会离开。
文件main.cpp
1、每一个窗口对应一个线程,在此创建了6个线程,分别对应4个客户窗口,1个FAST窗口中,1个VIP窗口中。
2、在这里本想用Unix中的alarm信号来控制客户的间隔时间,但因为时间不好控制就废弃了
文件client.cpp client.h
定义了我们的客户,因为我们的客户比较简单,所有的客户共享一个class,只是clientType来区分不同的客户。
文件numMachine.cpp numMachine.h
文件中定义了排号机,在numMachine中定义了一个client list用来存放我们的客户。
文件serviceWin.cpp serviceWin.h
文件中定义了我们窗口。
结论:
经过几次测试发现在上述条件下,FAST窗口办理业务不能满足需求,在客户不在来的后5秒内,不能处理完FAST客户。