第一篇:银行排队叫号系统需求分析 设计文档
银行排队叫号系统的分析与UML建模
一、需求分析
近年来,由于各行各业的信息化、智能化建设越来越普及,整个社会对各个行业的办事效率的要求也越来越高。例如像银行办业务,在顾客办业务过程中排队现象在所难免,为了在排队时减少顾客的等待时间,为顾客办业务创造一个良好的环境,银行排队叫号系统应运而生。银行排队系统的功能性需求包括以下内容:
1、排队系统可以分为票务打印系统和窗口操作系统。
2、票务打印系统(1)显示
发号机上的显示屏使用液晶显示,显示对待办业务的选择;(2)输入
输入过程即通过触摸屏对业务进行选择的过程;(3)输出打印
号票打印内容应该包括业务名称、排队号码、时间等;
3、窗口操作系统基本包括显示屏、语言提示,叫号按钮(1)显示屏
使用点阵式LED显示,显示内容应该是下一个号码以及办理业务窗口;(2)语音提示
语音播报时用语音的形式通过广播或者音箱给人一提示信息。语音提示不需要用户一直盯着提示屏或者排队情况。选择使用语音芯片,实现的功能应该是当操作员按下按钮后,语音播放下一个办理者的票号。(3)叫号按钮
设置叫号按钮,以便于操作员控制窗口模块的显示屏及语音提示。满足上述需求的系统主要包括以下几个小的系统模块:
(1)派号功能模块。派号功能模块主要是用于在用户进入服务大厅后,根据自己的业务需要,通过自助式触摸屏号票机领取票号;或者用户在服务大厅业务咨询台进行业务咨询后,咨询员可以为用户打印排队号票。号票是由排队服务器根据当前情况自动生成。
(2)叫号功能模块。工作人员可以通过座席软件键盘上的设置键对客户进行叫号;也可通过按键控制器对客户进行叫号;系统可以设置单语或双语进行语音播放;以及通过LED显示屏和其它视频显示设备显示票号。
(3)预约功能模块。用户可以通过电话预约领取排队号;预约成功后取得预约号;系统将此预约号按预约时间插入当前的排队队列,在系统处理后进行优先呼叫;在同时间下办理业务时,可以进行预约服务,优先办理。同时用户可以在网上进行预约。用户可以在正常受理业务的工作日和系统进行网上预约。系统将此预约日期的预约号检索到排队序列中。
(4)管理功能模块。实现窗口灵活安排,根据业务需要设置叫号规则;业务分类排队管理;鼠标、键盘、按键控制器混合使用。可以按业务和窗口分类统计业务办理情况。
二、用例图
● 客户能够通过该系统进行如下活动:
(1)顾客取票:需要办理业务的顾客到取票机前取号,并获得打印。(2)顾客休息等待:取到排队号的顾客在休息区休息等待,留意显示屏信息和语音提示。
(3)营业员按钮呼叫:窗口操作员按“下一位”,当前窗口就显示顾客排队号并语音呼叫“请XX到X”。(4)顾客到窗口办理业务:休息区的顾客听到呼叫就到相应窗口进行一对一服务。
根据以上的描述画出相应的用例图如下:
三、系统类图 我们可以识别系统中存在的主要实体类:顾客,柜台营业员,维修管理员,保安。界面类:取票机。
根据以上的描述画出相应的类图如下:
四、系统动态模型 顾客取号排队办理业务工作流程:
(1)取号:顾客取一张号票,上面有号码、时间、办理的业务类型等(2)休息等待:持号票在休息区休息并留意显示屏音箱叫号。(3)按键叫号:工作人员办完一笔业务后按下叫号器上的下一位按钮(4)前去办理:叫号时根据显示屏音箱的信息到指定位置享受一对一的服务。根据以上的描述画出序列图如下:
柜台营业员办理业务工作流程:
(1)登 录:工作开始前,输入员工代码进行登录。(2)退 出:在工作结束后,退出系统。(3)顺 呼:呼叫第一位或下一位顾客。
(4)重 呼:第一次呼叫顾客时没有响应,重新进行呼叫。
(5)转移窗口:对单一业务队列可在窗口间进行转移;对多业务队列,不但可以在本业务队列窗口间转移,还可以在不同的业务队列窗口间转移。(6)优先呼叫:碰到紧急或有特殊关系的顾客,可优先呼叫。
(7)回 呼:顾客错过机会或需多柜台服务时,键入其号码进行呼叫(注:回呼的号码必须是已被呼叫过的号码)。(8)弃 号:多次呼叫后,顾客依然没有响应,可能顾客已弃号,然后呼叫下一位顾客。
(9)询 问:查询当前等待人数。根据以上的描述可画出序列图如下:
管理员管理业务工作流程:
(1)系统管理:对系统中排队机、显示屏、座席及其它与系统相关的硬件进行管理;
(2)管理顾客动态:可实时提供当前各部门所有顾客取号时间、服务情况和等待人数等有关参考信息;
(3)员工效率管理(即监督工作):可获知员工几时上班、几时下班、服务人次、平均和最长及最短服务时间等有关信息;
(4)统计:统计多种有价值的信息,供管理层决策参考
五、状态图 排队叫号系统包含以下六种状态:顾客到达、取票、等候办理、办理业务、柜员呼叫、顾客离去。它们之间的转换规则是:
(1)需要办理业务的顾客到达取票机前取票,并获得打印。
(2)取到排队号的顾客在休息区休息等待,留意显示屏信息和语音提示。(2)柜台营业员办完一笔业务后按下叫号器上的下一位按钮。(3)叫号时根据显示屏音箱的信息到指定位置前去办理业务。(4)办理完业务后即可离开。根据以上的描述可绘制出状态图如下:
六、活动图 顾客对象的活动图:
(1)顾客在取票机的界面上输入选择所需办理的相关业务。
(2)界面将信息传递到控制业务逻辑的对象中心显示屏(动态显示所有等待服务的顾客号码以及相关的业务信息)进行验证,然后传递到窗口显示屏(显示顾客、业务受理员号码及宣传、服务用语)。(3)窗口显示屏获得到的信息显示顾客办理业务的详细信息。柜员对象的活动图:
(1)柜员获取中心显示屏传递过来的信息,然后通过对象呼叫机进行按键呼叫。(2)叫号时顾客根据显示屏音箱的信息到指定位置前去办理业务,办完业务后即可离开。
管理员对象的活动图:
(1)可实时提供当前各部门所有顾客取号时间、服务情况和等待人数等有关参考信息。
(2)可获知员工几时上班、几时下班、服务人次、平均和最长及最短服务时间等有关信息,进行监督。
(3)可监督维修人员对系统中排队机、显示屏、座席及其它与系统相关的硬件进行管理。
通过以上的描述可绘制出活动图如下:
七、系统构件图 在排队叫号系统中,可以对参与者和主要的业务实体类分别创建对应的构件进行映射。我们前面在类图中创建的顾客类、柜台营业员类、系统管理员类,所以可以映射出相同的构件类,包括顾客构件、柜台营业员构件、排队叫号系统构件,此外,还必须有一个主程序构件。由以上描述可绘制出构件图如下:
八、系统部署图 在排队叫号系统中,系统包括四个节点,分别是:主控箱节点,对系统中排队机、显示屏、座席及其它与系统相关的硬件进行管理;排队机节点,提供顾客排队取号的票据;叫号器节点,提供给柜台营业员通过叫号机对客户进行叫号;窗口显示屏节点,用于动态显示所有等待服务的顾客号码以及相关业务的信息;音箱节点,用于提示顾客办理相关业务。由以上描述可绘制出部署图如下:
第二篇:银行排队系统需求分析报告
银行排队系统需求分析报告
1.引言
编写目的
随着时代的发展,信息技术在各服务行业中的重要作用得到充分体现,通过服务模式的信息化,可以极大提高服务质量,节约人力成本,提高工作效率。
本产品是针对银行的排队取号业务而开发的新一代银行排队系统。本产品较现有的银行排队系统在功能上有一定的扩充,这体现在用户端用户体验的提升以及银行内部管理人员的管理效率的提升。
本产品目前版本号:ver.1.0 1.2项目风险 1.3 文档约定
1.4 预期读者和阅读建议 用户:各大银行
开发人员:熊宇轩,蒋雅楠,刘昕
项目经理:王萌
营销人员:暂缺
测试人员:蒋雅楠
文档编写入员:熊宇轩 1.3定义
静态数据:系统固化在内的描述系统实现功能的一部分数据。动态数据:在软件运行过程中用户输入的后系统输出给用户的一部分数据,也就是系统要处理的数据。
数据字典:数据字典中的名字都是一些属性与内容的抽象和概括,它们的特点是数据的“严密性”和“精确性”,没有半点含糊。1.4参考资料
NEUSOFT实习资料
2任务概述
2.1目标
本系统的设计目标是能够实现客户银行排队取号,柜员柜台叫号功能,并且使银行管理者能够查询排队记录。系统应该具有简单,易用,小巧,经典的特色,应该能够对银行排队取号业务进行优化,使其系统化,高效化,智能化。并保证工资管理的准确性,简易性,为学校财务人员提供便利。相应的需求如下:
(1)普通客户排队取号
(2)VIP客户优先取号
(3)移动端预约客户身份验证取号
(4)柜员叫号
(5)客户对柜员服务进行评分
(6)数据的统计,并且在经理客户端显示数据
(7)经理手动插队权限
(8)登录信息管理。(9)人性化服务体验提升功能 本软件系统的开发设计思想是:
1.系统应符合银行管理的规定,满足银行客户和管理人员的需要,并达到操作过程中的直观、方便、实用、安全等要求;
2.系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员对其进行补充、维护;
3.系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
2.2用户的特点
本软件的最终用户是各银行网点,由于该单位的员工的学历、素质较高,具有一定的计算机操作技能。本软件需要至少一名系统管理人员,由于本软件系统的易用性,并不需要受过专业训练人员。
2.3假定和约束
由于本软件系统较小,且在linux系统下采用c 语言开发,故在一般环境下基本没有什么限制。
一个更为完善的工资管理系统,应提供更为便捷与强大的信息查询功能,如相应的网络操作及服务,由于开发时间和计算机数量有限,该系统并未提供这一功能。对信息的保护手段仅限于设置用户级别,以及提供数据文件的备份,比较简单,不能防止恶意的破坏,安全性能有待进一步完善。
3需求规定
3.1对功能的规定
3.1.1功能模块及描述
本系统主要功能模块如下,系统功能模块图如图: 1)用户排队取号模块
叫号机当前服务信息: 普通用户VIP用户预约用户 图1-1 该模块可以实现普通用户取票,VIP 用户取票,移动客户端预约用户身份验证取号业务。三个按钮对应三个不同的服务客户对象类型,右侧的对话框显示当前叫号情况。
普通用户和VIP用户会跳转至图1-2所示的页面
窗体标题负债业务当前等候人数资产业务当前等候人数中间业务当前等候人数
图1-2-1
三个按钮对应不同的业务类型,按下之后就可以取票,通过socket通信将排队请求上传到服务器,并在服务器端口进行多线程任务管理,自动为客户分配排队号码。负债业务对应柜台1-3,资产业务对应4-6,中间业务对应7-9。
图1-2-2 预约用户可跳转至图1-2-2的界面,输入手机号和验证码来验证信息,并且取已预约的号
2)员工叫号模块 叫号界面正在为 服务叫号正在呼叫下一个
图1-3 员工可使用图1-3所示界面进行叫号,叫号按钮按下之后,会自动生成正在呼叫的客户排队号码。为了防止有的客户取号之后又离开银行的废票现象的发生,我们设置了跳转至下一个排队用户的按钮。右侧的对话框显示正在服务的客户,在柜员对面的客户服务端按下开始服务按钮之后,柜员的正在呼叫对话框内将被置空,而有侧的对话框会显示相应服务信息。
3)用户服务模块
用户界面评分1开始服务2345结束服务
图1-4 开始服务和结束服务按钮对应柜员端相应功能,在按下结束服务按钮之前,用户要通过右侧的按钮对服务进行评分。评分情况和服务时间可在经理端显示
4)经理管理模块
业务情况排队情况业务分类序号刷新插队退出排队号取号时间已等候时间负债业务已受理情况资产业务柜员评分信息统计中间业务
图1-5-1 经理可使用图1-5-1所示界面来查看当前排队信息,并且可以通过上方的插队按钮帮助特殊客户插队。业务情况排队情况业务分类序号刷新插队退出排队号开始时间结束时间负债业务已受理情况资产业务柜员评分信息统计中间业务
图1-5-2 经理可以通过左侧的已受理情况按钮查询以往客户的排队情况。业务情况排队情况业务分类柜员号刷新插队退出姓名已受理人数平均分负债业务已受理情况资产业务柜员评分信息统计中间业务
图1-5-3 经理可以通过评分按钮来查看客户对柜员的评分情况,便于内部考核使用。信息统计排队情况已受理情况柜员评分信息统计刷新
图1-5-4 经理可以查看总体的数据统计概要。
5)柜员/经理登陆模块
柜员登陆柜员号密码登陆 系统可以通过查询数据库中的记录来识别柜员/经理的身份。
4.业务流程图
系统的业务流程图如下图所示:
普通用户取号VIP用户取号插队插队插队负债业务资产业务中间业务预约用户取号等待叫号插队柜员叫号开始服务经理结束服务返回记录客户评分5.数据库管理
5.1 动态数据描述 输入数据:菜单选项,查找关键字,新建记录项。输出数据:由查询关键字确定的数据库记录集合。内部生成的数据:中间查询结果。数据库描述
5.2数据库描述
本系统使用MySQL数据库
第三篇:排队叫号系统示例文档
前言
电信市场的迅猛发展在给电信企业带来巨大商机的同时也带来了巨大压力。为了给客户提供方便、快捷的服务,通信企业在全国各地建立了众多的服务中心,每天接待许许多多的客户。客户在办理 缴费、开通新服务、申请新账户、余额查询、账单详细查询等业务时需要排若干次队,甚至经常发生排错队伍的现象,耗费了大量的时间和精力;另一方面,嘈杂、混乱的工作环境也影响了工作人员的办事效率与服务质量。
因此,为了提供高效率的服务、营造良好的工作环境,通信企业需要以高科技的客户管理手段代替 传统的人工排队方式,从根本上解决传统排队给客户及企业带来的不利影响。
排队管理系统是针对通信的行业特点专门研制开发出的、适用于各通信企业的理想的客户解决方案。该系统可以根据客户的流量即时调整工作人员及服务窗口的数量,最大程度减少客户等候时间,很好地解决客户在接受服务过程中所遇到的各种排队、等候、拥挤和混乱现象。同时也能统计客户情况及职员的工作状况,为企业管理层提供有效的管理手段和决策依据。
设计思想
2.1基本情况及要求
提高营业大厅的综合管理水平和合理的安排顾客办理各种业务,通过叫号服务,让顾客坐下来等候,避免窗口拥挤和排队,并且能合理的安排窗口服务,减少顾客的等候时间;与此同时,通信公司还可以通过排队系统的数据生成对大厅的服务进行科学化管理。
系统要求智能化管理 ,柜台业务负责人可以根据实时顾客流量合理分配柜台数量,实行动态的科学管理。
根据柜员个人的业务能力可以划分成不同的业务级别,在自己的级别内可以实现 “互助”式的柜台转移呼叫操作,并要随着业务员能力的提高和降低随时进行增加和减少的量化控制。
统计业务人员在遇到特殊情况时,能够通过操作器、语音、计算机对话框等手段进行对话和同级之间的调整。
在顾客需在多个柜台(业务)服务时),可持同一张号票自动进入排队队列,而不需重新取号。
语音要求和背景音乐相融合或互相切换,并能播发其他相关语音信息。
通过柜员用操作器可进行重呼、插队、转移、预约功能操作。
管理人员可通过表格、图形两种方式查询、打印排队信息与柜员工作量等数据,并可设置系统服务参数。2.2 系统设计思想 系统设计基于适应性、可靠性、应用可设计性、系统完整性、结构开放性的设计思想,采用模块化的结构方式,统一管理、分布处理,充分保证整个系统的先进可靠性和良好的扩展性。使营业大厅通过本排队管理系统的使用,形成良好有序的工作秩序,为顾客营造安静、舒适的环境,为员工改善工作环境,提高工作效率,树立良好的公众形象。
充分考虑营业大厅现有的工作流程和行业特点,结合以往安装使用的实际经验,使系统的设计与现有情况相适合;设备上还要考虑到现在或将来和现有网络的适当融合(如,服务语音监控录入系统、电视系统、大屏幕系统等)
系统设计除考虑顾客正常流程时排队处理,还充分考虑顾客由于某些原因而出现特殊情况如漏号、需转移至其它柜台、优先办理、取错号码时的排队处理,保证系统有秩序地进行。
基于柜员的工作情况需求,本系统可支持的呼叫终端采用物理呼叫器或虚拟呼叫终端,支持两种同时采用的方式,使柜员能够根据现实情况选择适合的方式,并可随着大厅计算机化的建立而逐步增加虚拟终端的使用比例。
本系统设计了强大的管理和统计功能,为通信行业进行现代化的科学管理提供了有效而便利的手段。
充分考虑系统工作的可靠性设计,具有软件升级时的数据自动保护功能,避免因系统升级而造成数据丢失或损坏。具有分散处理或备份功能,万一主控计算机系统出现故障,另外副主控计算机仍然运行,待网络恢复后自动将有关数据上传。2.3 排队系统设备配置
现场情况: 多 种业务,多个柜台
设备配置: 立式取号机 1 台 ;汉字窗口显示屏每个柜台(窗口)1 块;物理呼叫器每个柜台(窗口)1 只; 2.4 业务队列设计
2.5 取号机面板示意图 :
2.6 票号示意图
• 系统概述
3.1 排队系统说明
3.1.1 顾客办理业务流程图
3.1.2 顾客办理业务示意图
3.2 硬件系统功能说明
3.2.1 取号机(立式)
立式,按键式取号,顾客通过取号机自助取号;
取号机面板上设立代表服务内容的按键(对应相应的服务队列)顾客按键后,打印机打印出一个票号,同时系统内部将该号码转移到相应的服务队列中去排队;面板上和取号机上可根据需要印上行业标志 LOGO等;
取号机可以根据客户要求,在打印纸将要用尽时发出警报提醒,便于操作员及时更换打印纸。
取号机外观可以是立式,也可以根据现场配制台式;
取号机为用户提供多种功能接口
网络接口 :用于连接网络主机,便于网络管理及数据传输。磁卡机接口 :用于特种行业的身份识别,如重要大户等。
显示接口 :用于连接电视机、LED显示屏等,使娱乐、排队一替化。
触摸屏接口:用于连接触摸屏,使取号用户在查询中直接取号。
显示取号时间、等候人数、等候时间。
可以设置在任意时间段不出号票。
可以在取号机内安置语音系统用于呼叫或其它特殊需要。
可以根据客户要求设定等候人数 “临界值”,当某一个服务取号等候人数超过一定数量时,可以发出提示告知当前等候人数较多,大概需要等候时间等等(选项);或者当排队人数超过 “临界值”后,自动向计算机(或警告显示屏)传输警告界面,提示有关负责人需要增加服务柜台等信息。取号机按键寿命 50万次以上,为了便于将来业务变更和调整的需要面板可以更换;
取号机系统可以采用整体式(如顾客在取号机的触摸屏上查询,查询清楚后,可以按触摸屏上的取号提示,同样可以在取号机上得到一个票号)。
如果将来有采用触摸屏技术取号,可以采用我司即将推出的新款取号机机箱(触摸屏式),届时只需要改装即可无须花费整机的价钱。3.2.2 呼叫器
特殊功能
呼叫器分为物理呼叫器和虚拟呼叫器,二者可并用或单独使用。
工作人员通过呼叫器呼叫顾客办理业务。
通过定义键,可以在对服务过的顾客号码进行标注业务类别,如,某一个大项服务名称中含有 4 种以上的种业务,可设定其业务编码为 01、02、03、04„ 在顺呼下一位顾客前,可以通过 功能 + 输入代码的方式将刚办理完毕的业务进行标注,体现在业务报表中,为杜绝遗漏标注的操作,可以进行设定,如果没有标注业务类别操作,顺呼键将无法继续,用以提醒柜员进行标注操作(上述功能已经在上海沪东供电公司成功运用)。6 位 LCD 液晶显示:前两位显示队列号,后四位显示顾客排队号码
查询功能:可通过呼叫器查询等候人数、查询服务过人数或者通过
柜台号 + 功能 + 查询的操作方式查询其它业务的排队等候人数。转移插入功能:呼叫器可将当前票号,转移插入到其他队列的任何位置。
根据营业安排,可以随时改变业务内容去帮助其它柜台。
对有特殊要求的柜台(例如,顾客需要先递交申请单据进行审验然后等候通知的情况下)还可以将操作器设置成手动输入号码进行呼叫的方式,柜员将审验通过顾客的号码输入操作器上然后进行呼叫(该功能已经应用到北京 301 医院的药房取药系统、大连车管所和沈阳出入境管理处也将采用该种呼叫方式)。
基本功能:
工作人员通过呼叫器呼叫顾客办理业务。
登录:在一天工作开始前,输 入员工代码(最大 4 位数)进行登录(对于工作位置固定的员工,可以进行设置,每天只需要按 “ 登录 ” 键即可,无须输入员工代码,简化登录的操作过程)。
退出:在一天工作结束后,退出系统。
当工作人员暂时离开,可通过终端关闭此柜台,同时,该柜台显示屏自动关闭。可选择物理终端(硬件组成,放在柜台上),和虚拟终端(软件,安装在电脑中)两种功能。
顺呼:呼叫第一位或下一位顾客。
重呼:第一次呼叫顾客时没有响应,可以多次重新进行呼叫。
弃号:多次呼叫后,顾客依然没有响应,可能顾客已弃号,然后呼叫下一位顾客;还可以按照客户要求,系统内进行设置,在重呼若干次仍旧没有前来的情况下,系统直接按弃号处理(漏号顾客处理方法之一)
优先:碰到紧急或有特殊关系的顾客,可优先呼叫。
转移:偶尔顾客拿错部门号票或需要多柜台服务,可即时传送其他部门,无须重新取号等待。
延后:当多次重呼后,顾客依然没有响应,把该顾客延后到本服务类型的最后一位(漏号顾客处理方法之二)
柜台:可修改柜台服务类型,从而实现临时帮助其它服务柜台的目的。
清屏:清除错误的输入。插前:顾客需多柜台服务时,完成一段服务后,其号码被转移到另一队列的首位。
储存:当呼叫时而顾客恰好不在,可暂时储存,然后继续呼叫下一位顾客,办理完毕后再重新呼叫,顾客无须担心错过时间。
询问:查询当前等待人数。
查看:查看储存的号码。(暂未实现,因为需求面小,如果有要求可以实现)
密码登录:根据需要,可设定用户个人密码,使用密码登录。
呼叫终端物理参数
长 :16 cm 宽 :9 cm 高 :3.5 cm 电源电压 :12V(由通信控制器供电)最大功耗 :2W 3.2.3 窗口屏
(1).数码管窗口显示屏
• 安装于服务窗口上方;
• 4位数码管显示,动态闪烁显示该窗口正在呼叫号码;
• 静态显示正在办理业务中的顾客排队号码。
数码管窗口屏物理参数 37.5cm * 14.3cm * 5cm 最大功耗 :20W
(2).点阵窗口显示屏
• 安装于服务窗口上方;
• φ 5,4个汉字显示,动态显示该窗口正在呼叫号码、文明礼貌用语和广告信息; • 静态显示正在办理业务中的顾客排队号码;
• 静态还可以显示四个汉字以内的服务业务名称 如 “话费查询”等 • 显示次数可以按照客户要求设定。• 滚动方式可以按照客户要求设定。
• 设置屏幕保护功能 ,在长时间不用时,可以进行熄屏保护。点阵窗口显示屏 物理参数 点阵 42.6cm * 12.4cm * 5cm 最大功耗 :20W
3.2.4 综合屏
• 安装于等候区;
• 动态闪烁显示办理某项业务的顾客序号和相应窗口号; • 静态显示正在办理某项业务的顾客序号和相应窗口号; • 每组综合屏的数量可以自行定义; • 所显示业务类型可自行定义。
• 闪烁次数可以设定;显示单元可以增加用以增加效果。
• 安装于等候区显要处,动态闪烁显示,提示某位顾客前去相应窗口办理;
• 呼叫时带有尖头方向指示,使得听到呼叫的顾客很容易分辨窗口的左右方向,节省寻找对应窗口时间。综合显示屏:
3.2.6 通讯控制器
通讯控制器是用于连接系统各设备、为设备提供电源和通讯信号。
通讯控制器共有 16个RS-485总线接口(RJ-45网络接口)一个PC机用RS-232串口(DB9口)。一个电源指示灯、一个状态指示灯。
电源: 15V-20A开关电源供电(内置电源适配器)。3.2.7 语音系统
吸顶式
• 利用乐音或语音传递排队等待信息;
• 语音的呼叫方式根据客户的要求设定,例如:顺呼为 “叮咚”提示音加语音呼叫,重呼时为直接语音呼叫等等 „
• 采取背景音乐与语音呼叫相融合形式; • 音源设置要合理,避免大厅回音或震荡;
• 提示音除了 “叮咚”音外可以有多种乐音供客户进行个性化选择。• 可以分楼层、分业务类型进行不同乐音提示和控制。• 呼叫次数可以按照要求设定。
语音提示 “叮咚 请×××1到 ××号窗口 + 请×××2等候” 3.2.8 告警信息屏(可选)
• 告警信息屏用于对系统出现特殊情况时 ,提供文字告警信息。如:打印纸张将尽、某队列人数超量、前台柜员求助信息等。显示标题和安装方式可由用户自行选择。• 安装数量根据要求而定。3.3 网络系统说明
3.3.1 网络结构示意图
3.3.2 设备连接示意图
排队管理系统说明
网点排队系统结构图
3.4 软件系统说明
3.4.1 软件结构示意图
3.4.2 管理软件功能
3.4.2.1 底层数据库模块
底层数据库模块对系统中硬件设备、管理信息、人员信息、柜台参数、队列参数等提供底层数据支持,并进行处理,作为上层模块的信息源。
3.4.2.2 硬件设置模块
硬件系统模块是设置系统硬件设备地址及相关硬件参数,显示硬件设备的工作状态。
3.4.2.3 前台操作模块
前台操作模块是对前台各项业务进行操作处理。并提供内部通信服务。
3.4.2.4 实时监控模块
实时监控模块是对业务队列的实时信息及前台员工处理业务的实时信息进行监控。管理人员可以通过监控信息对前台柜员及队列情况进行直观的观察。
3.4.2.5 权限管理模块
权限管理模块是对系统操作人员的权限进行管理,为系统提供安全障。3.4.2.6 数据分析模块
数据分析模块对系统中的各项数据,进行有效分析。可提供多种数据分析结果如:顾客流量曲线图、业务队列柱状图、顾客业务饼形图。并为报表打印模块提供数据基础。(后附示意图,仅供参考)
3.4.2.7 报表打印模块
报表打印模块在系统数据分析的基础上,对数据进行直观化的报表输出。(后附部分报表,仅供参考)
3.5 特殊功能说明
3.5.1 远程告警系统:是通过实时监控模块、数据分析模块、前台操作模块及其他设备所提供的信息,进行系统分析发后出告警提示。如:某取号机打印纸张将尽、某窗口设备连接异常、某队列等候人数超量等信息提示。可配合告警信息屏、乐音提示及电脑主机,使管理人员能及时准确的掌握,前台所出现的一切情况,作出正确判断、快速解决问题。
3.5.2 断电保护功能
操作系统在突然断电的情况下,可保留原有数据,并在重新启动后继续记录
工程施工
4.1 布线
本系统采用总线形网络结构,连接线缆使用五类双绞线,接头为 RJ45,因此可以利用大楼原有的综合布线作为系统的传输线缆,避免了再次布线的繁琐、节约了工程费用。主通信控制器放置在总控制室,通过传输线缆连接整个大楼的排队系统终端设备。
4.2 设备安装
各个通信控制器放置在各楼层原有网络系统接口附近,自带电源示适配器,接 220V 交流电源;
取号机根据现场环境放置在各楼层入口处或其它位置,通过五类线与子通信控制器连接;
信息显示屏安装在柜员工作台上方位置,通过五类线和端子盒与子通信控制器连接。
物理呼叫终端放置在柜员的办公台上,与端子盒之间通过 PS-2 线连接,端子盒通过五类线与子通信控制器连接,不需接电;
系统软件通过机算机串口与主通信控制器连接,通过 RJ45 接口接入大楼局域网;
系统服务器放置在大楼信息中心,可用现有设备。
4.3 系统运行环境
温度:-10 ℃ — 55 ℃ 湿度: 45% — 90% 为保证系统的可靠稳定运行,建议为系统服务器使用 UPS 进行断电保护。电脑最低配置如下: 主 频 : P4 1G 以上 内 存 : 256M 以上 硬 盘 : 40G 以上 显示器 : VGA 14 英寸 RS-232 口
网 卡 : 10/100M 以太网卡 操作系统 : WINDOWS2000
售后服务
5.1 系统安装
我公司的工程技术人员,均经过专业培训,具有丰富的理论和实践工作经验 , 对安装与调试的每一个环节都采取严格的质量管理,以确保每一个环节品质达到优良;这一服务的标准是:我们将安排由专门工程师提供现场的安装、调试服务。服务的验收以系统达到预计的性能和功能,并得到客户的满意与认可为准。
5.1.1 公司对工程的每一个环节,无论其大小,都派专业技术人员到现场安装,避免完全依赖当地代理安装所可能导致的任何失误;
5.1.2 公司负责系统所有器件、设备、材料到工程现场的运输、安装及调试工作;
5.1.3 对于安装所涉及的各个器件部分,必须在总公司连续运行一周以后,经
全部检测合格后方可打包发送。
5.2 售后服务及质量保证
及时响应
如客户有任何关于合同中所涵盖的系统技术问题,在工作时间内可随时拨打公司电话,我们将通过电话协助或派技术人员客户及时解决难题,从接到求助电话到技术人员到达现场不超过 12 小时。
在工程结束后,鉴于贵公司是初次安装排队系统,为确保系统稳定运行和弥补预先理想设定流程和实际发生情况之间的差异情况,我司将派专人专项负责该工程后期工作,主要任务: 协助解决运行初期所遇到的技术问题,随时发现,随时调整;
负责对相关人员的技术专项培训,熟悉整个系统的各个环节,便于维护;
负责对操作员工的专项培训,达到熟练运用,避免前一个月试运行期间由于操作失误给系统运行带来的不便;
负责对贵公司技术负责人的专项培训和技术交流,做到一般小问题可以自行解决,不耽误运行;
负责收集前期运行时期可能出现的问题,反馈总公司进行调整(系统硬件、新增加的特殊要求、预想流程和实际运用之间差异以及运行之前没有考虑到的实际因素等)
5.2.3 提供专项的操作和维护技术手册
我司将为客户项目成立一个专门的管理小组,并将指派一名项目经理专门负责:与客户就项目的实施、变更管理、售后服务进行单点联系和统一的协调。该项目经理有责任协调和组织丰富的资源为客户提供最优质的服务。
项目经理将会对客户项目的售后服务情况进行记录,包括故障登记、备件更换和服务措施完成情况等,并与客户保持及时沟通。希望客户方亦指派一名专门的联络代表,以便在项目需要专业性支持和维护时,作为客户方面的代表与我们的项目经理进行沟通与合作。在整个维修和服务的执行过程中,负责合理调配资源,并争取将整个售后服务实施过程中对用户业务的影响降到最低。
5.3售后承诺
5.3.1 我公司对该系统壹年保修、终身维护。
5.3.2 保修期自系统安装、调试完毕并经双方验收合格之日算起。保修期内,属系统本身技术问题或其他非人为因素而造成的故障,由公司免费保修。保修期满后,只收取维修工本费,或另签订维护协议。
5.3.3 为确保系统的良好运转,具体维护方案如下:
安装、日常维护、维修服务档案,详细记录设备的使用、维修情况。
试运行 1-2个月后,召开双方技术碰头会,主要用于改进和调整,理想设定和实际运行之间有无不足和改进以及经过运行和实际操作后需要新增的功能等。
正常运行一年后,免费进行第二次升级和开发工作。
对于硬件设备提供长期的后备器件,先更换后维修,保证客户的正常使用。
免费提供系统使用培训和软件维护。协助提供消耗品,保证易耗品的供应。
我们将在管理上、制度上、物资上、技术上全面考虑该项目的售后服务,为该系统少出问题、不出问题提供全面保障。
5.4 排队管理系统运行后续服务
5.4.1 排队管理系统采取完全开放式接口,随时变更每一个窗口的业务类型,及对业务窗口的增加、删除、变更等可与所有开发平台接口,方便做系统的二次开发和功能扩展。
5.4.2排队系统今后的任何一次革新或升级(以及外观的改善)如果客户需要,我司都将免费和为客户予以更换和调整.
第四篇:排队叫号系统介绍
排队技术发展史回顾
排队技术最早出现于上个世纪的六、七十年代 , 开始主要集中在欧美等西方国家,后迅速得到普及。在国外,人们去银行等机构办理业务时,先取号再等候呼叫已属于常识,生产排队管理系统的公司也随着市场的发展逐渐形成一个专门的行业--排队技术产业。
起初 , 人们只是在进入营业场所的门口前领取一个早已制作好的号牌或印有号码的纸条 , 然后等着麦克风里的人工呼叫。随着现代技术的不断发展特别是计算机技术的应用,使排队技术进入一个全新的天地,就是我们今天看到的乐音提示、语音合成呼叫(Voice-calling);呼叫终端(OperationTerminal);以柜台显示(CounterDisplay)和综合显示(Main Display)为主的各种数码管显示、LCD 显示、LED 显示、PDP 显示...;号码发放也由取号机自动打印(Ticket Dispenser)到触摸屏查询取号、特殊识别取号等等...排队系统的服务范围也从营业厅迅速拓展到其他行业如:电信、快餐厅、涉外办事机构、海关、医院、药房等行业。。服务功能也由单纯的优化服务环境和客户秩序管理渐渐渗透到使用者的服务系统管理之中,成为使用机构行之有效的辅助服务手段。
在我国,排队产品概念的引进不过三、四年光景,特别是在中国加入 WTO 以后,批国人走出国门,将很多优秀和先进的服务方法、理念带回国内。“ 排队技术 ” 也随之被引进国内,并在我国特有的高速经济发展的环境里得到迅速的普及和应用。“ 排队 ” 这个我们再熟悉不过的词汇因为 “ 排队技术 ” 的出现而改变了它原有的含义 , 在银行、电信、邮局、海关、保险公司等公共场所,您再也无须透支体力和精力去排队,以往那种习惯了的 “ 排队长龙 ” 不见了,取而代之的是用您只需先取出一个票号,就可以到一旁休息区等候,当排到您时,通过语音、显示就会提醒您到相应的窗口办理业务...“ 一对一 ” 式的服务在尊敬顾客的同时又使得您的隐私得到极大的尊重,“ 一米线 ” 形同虚设的现象一去不复返 , 无形的 “ 一米线 ” 更拉近了服务者与被服务者的距离。
在产品的使用者方面:通过排队系统安排办理顺序,极大减轻了工作人员的精神压力,即提高了工作效率又避免了工作中可能导致的失误。不仅如此,管理者还可以通过排队系统中的管理功能对操作员进行工作分配,消除服务瓶颈,依靠时实的管理统计功能为管理者提供详实的动态数据,让有限的人力、设施资源得到最合理和高效的利用,更重要的是:在 “ 一切以顾客为中心 ” 的今天,排队系统已在服务机构和顾客之间架起一座新式的个性化联接桥梁,成为企业打造服务品牌,吸引客源、提高综合效益的重要辅助手段。不难看出,排队技术在中国的迅速普及和应用是我国经济腾飞,文明进步的必然结果。由于我国国情特殊,不同的行业、地域导致管理和服务模式上的千差万别,“中国的”、“本地的”、“ 特有的”排队技术已成为当今中国排队产品发展的必然选择和发展趋势。
我们有理由相信,科学的进步,经济的发展,必将带动精神文明与物质文明的进一步提高,排队技术必将为更多的用户所接受,并由日常工作中的辅助设备逐渐成为必备的设施之一,服务行业的市场将会被更加有序的挖掘、开发和推广,将文明服务和文明管理推上一个崭新的、更高的台阶!
排队产品基本知识
标准的排队系统主要包括:取号操作系统、显示系统、语音系统、呼叫操作终端系统组成 :
1、取号操作系统(Number Taking System)
协助要排队的人自助取号;并能够依据不同业务队列的排列顺序依次自动打印出一一对应的排队号码和信息。
系统在打印票号的同时,将票号信息通过网络传递给排队主控系统并分配到相应的队列中排队,等候系统呼叫响应。
2、呼叫操作系统(Working Terminal / Operation Terminal)
又称呼叫操作终端,是叫号方将呼叫信息发布出去的操作系统,系统终端还可以配合各种与呼叫有关的其它操作功能,并能够监测和查询有关排队、呼叫信息包括显示等。呼叫操作终端又可以分为:(1)物理操作系统终端 :物理器件,置于操做桌面;
(2)虚拟操作系统终端 :安放在计算机系统内,通过网线连结。
3、信息显示提示系统(Display System)
具调查结果显示:人们接受信息的来源约有 2/3 是通过眼睛,既所谓视觉提示取得的,另外 1/3 是来自听觉系统,即语言提示。排队系统中,依据人们的接受信息特点来发挥系统的呼叫信息传递的目的。排队系统中的视觉提示主要是指显示系统;听觉提示主要是指系统的语音呼叫。
显示系统
显示系统是排队系统中的一个重要系统组成部分,它可以最直接、最有效的将呼叫信息内容呈现和传示给排队者并引起视觉注意,引导指示排队者到对应的呼叫点办理业务。
在显示技术非常成熟的今天,有多种显示方式司可供用户选择如:数码管显示 LED 点阵显示、LCD 显示、PDP 等离子技术显示等等。其中,由于 LED 点阵显示具有诸多优点,因而在排队行业中得到比较广泛的应用。
按照显示功能和安放位置,显示系统又分为终端显示系统和综合显示系统。
终端信息显示系统: 分别只显示所有显示单元群中某个终端点的信息提示,通常指营业柜台或窗口的呼叫显示。为等候者提供呼叫提示和位置引导作用。如排队者根据柜台上方的显示就可以很容易确认呼叫信息和找到对应的服务位置。
综合显示系统:
例如:在人群密集或排队者视觉有死角的区域起到进一步提示的作用,同时可以在显示内容上增添其它排队信息,显示方法更加灵活并可以与其它媒体衔接。在实践中,依据现场的不同实际情况,两种显示方法即可以单独使用,也可以结合起来进行同步显示:
单独综合显示系统显示
-终端显示系统 + 综合显示系统显示、语音系统(Calling System)排队呼叫中,在呼叫信息内容通过显示系统传递给等候者视觉的同时,再将呼叫的 信息以语音的形式传播给排队者,达到提双重提示的作用。语音系统在排队应用中,通常采用韵律规则控制下的语音数字存储、合成技术,在系统控制下组合播放信息,实现自动语音呼叫的功能。
常用方法:
(1)提示乐音 + 语音信息播报
(2)提示乐音 + 呼叫信息显示
排队叫号系统介绍
主控机
系统的总体控制,包括自动出票及分类排序处理、与键盘终端的交互通信、LED 显示屏和自动语音呼叫的控制以及后台数据库的处理、系统维护设置等。键盘终端
供窗口岗位职员操作使用,要求主机执行呼叫“下一位”,或“暂停”服务等等各种指令。号票机
设在业务大厅的门口,开放给顾客使用或由总台使用,若是医院则应代替原来的分科挂号功能(或分诊台),它按顾客选择的类别科目自动排号出票,并会记录在主机进入队列排序,顾客取票后可自由活动,轮到时会自动呼叫通知以及 LED 电子屏字幕通知。岗位显示屏
设在每个服务岗位的上方,显示本岗位当前正在办理中的顾客的票号,办完后自动更新为新轮到的顾客的票号并闪烁,提示他前来本窗口。主显示屏
设在顾客等候区(就坐区),显示字幕例如“请 126 号到 22 号窗办理”通知新轮到的第 126 号顾客。语音控制器和音箱
控制语音自动呼叫。
第五篇:c++版模拟银行窗口排队叫号系统
c++版模拟银行窗口排队叫号系统
c++版模拟银行窗口排队叫号系统
看了两位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指的是,最多正在等待的客户数,如果客户数到达最大,后来的客户将会离开。
[cpp] view plaincopy
1.#ifndef CONSTANCES_H_
2.#define CONSTANCES_H_
3.enum {
4.MAX_SERVICE_TIME = 10, 5.MIN_SERVICE_TIME = 1, 6.CLIENT_INTERVAL_TIME = 1, 7.MAX_WAITING_CLIENT_NUM = 50, 8.MAX_CLIENT_NUM = 100, 9.};
10.#endif /* CONSTANCES_H_ */
文件main.cpp
1、每一个窗口对应一个线程,在此创建了6个线程,分别对应4个客户窗口,1个FAST窗口中,1个VIP窗口中。
2、在这里本想用Unix中的alarm信号来控制客户的间隔时间,但因为时间不好控制就废弃了
[cpp] view plaincopy
1.#include
2.#include
3.#include
4.#include
5.#include
6.#include
7.#include “numMachine.h”
8.#include “serviceWin.h”
9.#include “client.h”
10.#include “constances.h”
11.Client::ClientType createClientType(){ 12.int type;
13.type = rand()% 10 + 1;14.if(type <= 6)
15.return Client::CLIENT_COMMON;16.else if(type >= 7 && type <= 9)17.return Client::CLIENT_FAST;18.return Client::CLIENT_VIP;19.}
20.int createTasktime(){
21.return rand()% MAX_SERVICE_TIME + 1;22.}
23.void createClient(){
24.Client::ClientType clientType;25.int taskTime;
26.for(int i = 0;i < MAX_CLIENT_NUM;++i){ 27.clientType = createClientType();28.taskTime = createTasktime();
29.std::cout << “Come in a client : clientType = ” << clientType 30.<< “ taskTime = ” << taskTime << std::endl;
31.NumMachine::getInstance()->pressMachine(clientType, taskTime);32.sleep(1);33.}
34.sleep(5);35.}
36.void * serviceWin(void *win){
37.ServiceWin *serWin = static_cast
41.bool createServiceWin(){
42.pthread_t commonServiceWin[4];43.pthread_t fastServiceWin;44.pthread_t vipServiceWin;45.char tmp[10];46.ServiceWin *win;
47.for(int i = 0;i < 4;++i){ 48.sprintf(tmp, “CommonWin%d”, i);49.win = new CommonSerWin(tmp);50.if(win == NULL){
51.std::cout << “Create common service win error.” << std::endl;52.return-1;53.}
54.if(pthread_create(&commonServiceWin[i], NULL, serviceWin,(void*)win)
55.!= 0){
56.std::cout << “Create common service thread error.” << std::endl;
57.return false;58.} 59.} 60.sprintf(tmp, “FastWin”);61.win = new FastSerWin(tmp);62.if(win == NULL){
63.std::cout << “Create fast service win error.” << std::endl;64.return false;65.}
66.if(pthread_create(&fastServiceWin, NULL, serviceWin,(void*)win)!= 0){
67.std::cout << “Create fast service thread error.” << std::endl;68.return false;69.}
70.sprintf(tmp, “VipWin”);71.win = new VipSerWin(tmp);72.if(win == NULL){
73.std::cout << “Create vip service win error.” << std::endl;74.return false;75.}
76.if(pthread_create(&fastServiceWin, NULL, serviceWin,(void*)win)!= 0){
77.std::cout << “Create vip service thread error.” << std::endl;78.return false;79.}
80.return true;81.}
82.int main(int argc, char *argv[]){
83.std::cout << “/***start : please wait 5 seconds when progress suspend *****/” << std::endl;
84.srand((unsigned)time(0));85.if(!createServiceWin()){
86.std::cout << “Create service win error.” << std::endl;87.return-1;88.}
89.createClient();
90.delete NumMachine::getInstance();91.}
文件client.cpp client.h 定义了我们的客户,因为我们的客户比较简单,所有的客户共享一个class,只是clientType来区分不同的客户。
[cpp] view plaincopy 1.#ifndef CLIENT_H_
2.#define CLIENT_H_
3.class Client { 4.public:
5.enum ClientType {
6.CLIENT_COMMON, CLIENT_FAST, CLIENT_VIP 7.};
8.Client(ClientType type, int time);9.virtual ~Client();
10.ClientType getClientType();11.int getServiceTime();12.private:
13.ClientType clientType;14.int serviceTime;15.};
16.#endif /* CLIENT_H_ */
[c-sharp] view plaincopy
1.#include “client.h”
2.Client::Client(ClientType type, int time): 3.clientType(type), serviceTime(time){ 4.}
5.Client::~Client(){ 6.}
7.Client::ClientType Client::getClientType(){ 8.return clientType;9.}
10.int Client::getServiceTime(){ 11.return serviceTime;12.}
文件numMachine.cpp numMachine.h 文件中定义了排号机,在numMachine中定义了一个client list用来存放我们的客户。
[cpp] view plaincopy
1.#ifndef NUMMACHINE_H_
2.#define NUMMACHINE_H_
3.#include 4.#include
5.#include
7.#include
8.#include “client.h”
9.#include “constances.h”
10.class NumMachine { 11.public:
12.virtual ~NumMachine();
13.static NumMachine *getInstance();
14.void pressMachine(Client::ClientType clientType, int tasktime);15.Client * removeClient(Client::ClientType val);16.private:
17.NumMachine();
18.static NumMachine *numMachine;19.std::list
22.int handledClient;
23.pthread_mutex_t clientListLock;24.};
25.class DelClientList { 26.public:
27.void operator()(Client * item);28.};
29.class FindClient { 30.public:
31.FindClient(Client::ClientType t);32.bool operator()(Client * item);33.private:
34.Client::ClientType clientType;35.};
36.#endif /* NUMMACHINE_H_ */
[cpp] view plaincopy
1.#include “numMachine.h”
2./***************************************************************************************/
3.NumMachine * NumMachine::numMachine = new NumMachine;4.NumMachine::NumMachine():
5.leaveClient(0), total(0), handledClient(0){ 6.pthread_mutex_init(&clientListLock, NULL);7.} 8.NumMachine::~NumMachine(){
9.std::cout << “/********** end ****************/” << std::endl;
10.std::cout << “The number of total client is ” << total << std::endl;11.std::cout << “The number of handled client is ” << handledClient << std::endl;
12.std::cout << “The number of waiting client is ” << clientList.size()<< std::endl;
13.std::cout << “The number of client is ” << leaveClient 14.<< “ ,because waiting time too long.” << std::endl;15.for_each(clientList.begin(), clientList.end(), DelClientList());16.}
17.NumMachine * NumMachine::getInstance(){ 18.return numMachine;19.}
20.void NumMachine::pressMachine(Client::ClientType clientType, int taskTime){
21.++total;
22.if(clientList.size()< MAX_WAITING_CLIENT_NUM){ 23.Client * c = new Client(clientType, taskTime);24.if(c == NULL){
25.std::cout << “Can't create Client” << std::endl;26.exit(-1);27.}
28.clientList.push_back(c);29.} else {
30.++leaveClient;31.} 32.}
33.Client * NumMachine::removeClient(Client::ClientType val){ 34.std::list
36.pthread_mutex_lock(&clientListLock);
37.pos = find_if(clientList.begin(), clientList.end(), FindClient(val));38.tmp = *pos;
39.if(pos!= clientList.end()){ 40.clientList.erase(pos);41.++handledClient;
42.pthread_mutex_unlock(&clientListLock);43.return tmp;44.} else {
45.pthread_mutex_unlock(&clientListLock);46.return NULL;47.} 48.}
49./***************************************************************************************/
50.void DelClientList::operator()(Client *item){
51.std::cout << “Waiting client : clientType =” << item->getClientType()52.<< “ taskTime = ” << item->getServiceTime()<< std::endl;53.delete item;54.}
55./***************************************************************************************/
56.FindClient::FindClient(Client::ClientType t): 57.clientType(t){ 58.}
59.bool FindClient::operator()(Client * item){ 60.if(item->getClientType()== clientType)61.return true;62.else
63.return false;64.}
文件serviceWin.cpp serviceWin.h 文件中定义了我们窗口。
[cpp] view plaincopy
1.#ifndef SERVICEWIN_H_
2.#define SERVICEWIN_H_
3.#include
4.#include
5.#include “numMachine.h”
6.class ServiceWin { 7.public:
8.ServiceWin(std::string n);9.virtual ~ServiceWin();10.virtual void execute()= 0;11.std::string getWinName();12.private:
13.std::string winName;14.};
15.class CommonSerWin: public ServiceWin { 16.public:
17.CommonSerWin(std::string n);18.virtual ~CommonSerWin();19.virtual void execute();20.};
21.class FastSerWin: public ServiceWin { 22.public:
23.FastSerWin(std::string n);24.virtual ~FastSerWin();25.virtual void execute();26.};
27.class VipSerWin: public ServiceWin { 28.public:
29.VipSerWin(std::string n);30.virtual ~VipSerWin();31.virtual void execute();32.};
33.#endif /* SERVICEWIN_H_ */
[cpp] view plaincopy
1.#include “serviceWin.h”
2./*********************************************************************************************/
3.ServiceWin::ServiceWin(std::string n): 4.winName(n){ 5.}
6.ServiceWin::~ServiceWin(){ 7.}
8.std::string ServiceWin::getWinName(){ 9.return winName;10.}
11./*********************************************************************************************/
12.CommonSerWin::CommonSerWin(std::string n): 13.ServiceWin(n){ 14.}
15.CommonSerWin::~CommonSerWin(){ 16.}
17.void CommonSerWin::execute(){ 18.Client * client = NULL;19.while(1){
20.client = NumMachine::getInstance()->removeClient(Client::CLIENT_COMMON);
21.if(client!= NULL){ 22.std::cout << “A client be handled : clientType = ” << client->getClientType()
23.<< “ taskTime = ” << client->getServiceTime()<< “ ”<< getWinName()<< std::endl;
24.sleep(client->getServiceTime());25.delete client;26.} 27.} 28.}
29./*********************************************************************************************/
30.FastSerWin::FastSerWin(std::string n): 31.ServiceWin(n){ 32.}
33.FastSerWin::~FastSerWin(){ 34.}
35.void FastSerWin::execute(){ 36.Client * client = NULL;37.while(1){
38.client = NumMachine::getInstance()->removeClient(Client::CLIENT_FAST);
39.if(client!= NULL){
40.std::cout << “A client be handled : clientType = ” << client->getClientType()
41.<< “ taskTime = ” << client->getServiceTime()<< “ ”<< getWinName()<< std::endl;
42.sleep(client->getServiceTime());43.delete client;44.} 45.} 46.}
47./*********************************************************************************************/
48.VipSerWin::VipSerWin(std::string n): 49.ServiceWin(n){ 50.}
51.VipSerWin::~VipSerWin(){ 52.}
53.void VipSerWin::execute(){ 54.Client * client = NULL;55.while(1){
56.client = NumMachine::getInstance()->removeClient(Client::CLIENT_VIP);
57.if(client!= NULL){ 58.std::cout << “A client be handled : clientType = ” << client->getClientType()
59.<< “ taskTime = ” << client->getServiceTime()<< “ ”<< getWinName()<< std::endl;
60.sleep(client->getServiceTime());61.delete client;62.} 63.} 64.}
结论:
经过几次测试发现在上述条件下,FAST窗口办理业务不能满足需求,在客户不在来的后5秒内,不能处理完FAST客户。