预约排队系统第三小组:xx——问题分析xx——结构算法xx——代码实现问题分析:(孙鹏飞)排队系统的背景:预约排队问题在我们的现实生活中广泛存在,大到如银行排队叫号系统、医院门诊挂号系统、火车票预售订购系统等,小到餐饮消费、交通出行、购物付款等。也许你会想这些问题十分简单,不就是排队吗?按照先来后到的秩序就OK了呗,有什么好讨论的。可事实却并非如此!试想如果考虑到银行客户的VIP身份、医院就诊患者的病况、订票人员是否为老人军人或残疾人等特殊情况,先来后到的秩序还适用吗?再者,传统的排队观念都是一个队伍排成“长龙”,当人数过多时,考虑到效率问题,就要改变排成多只队伍,那多只队伍同时开工又该如何处理呢?可见预约排队问题并非想象中那么简单,研究它也具有一定的现实意义!鉴于实际情况,我们小组本次讨论课就选取银行排队叫号系统作为讨论主题,来研究预约排队系统。其它预约排队问题则大同小异,基本处理方法可以效仿解决之。银行排队系统的意义:银行预约排队系统是为模拟银行排队而设计的。随着银行业务量的快速发展,银行柜台业务承受的压力越来越大,排队等待现象屡见不鲜,银行排长队现象成为困扰银行和用户的难题。为了解决这一难题,目前大部分银行的营业厅都使用了取号系统来改善银行窗口排长队的现象,提高银行的服务效率。图为市民在工商银行排队银行排队——每个人都经历过的痛本次讨论计划设计并实现银行取号模拟系统,模拟取号的整个过程,实现取号、排队、服务、及管理等功能。系统能够记录用户及工作人员的相关信息,管理员通过对用户及工作人员信息的统计和分析,可以进一步优化银行营业厅的排队问题,提高银行业务办理效率。系统需求分析:系统要求智能化管理,柜台业务非责人可以根据实时顾客流量合理分配柜台数量,实行动态的科学管理。根据柜台个人的业务能力可以划分成不同的业务级别,在自己的级别内可以实现“互助”式的柜台转移呼叫操作,并要随着业务员能力的提高和降低随时进行增加和减少的量化控制。在顾客需在多个柜台(业务)服务时,可持同一张号票自动进入排队队列,而不需要重新取号。登录:在一天工作开始前,输入员工代码(最大四位数)进行登录退出:在一天工作结束后,退出系统。当工作人员暂时离开,可通过终端关闭此柜台,同时,该柜台显示屏自动关闭。优先:碰到紧急或有特殊关系的顾客,可优先呼叫。转移:偶尔顾客拿错部门号票或需要多柜台服务,可即时传送其他部门,无需重新取号等待。延后:当多次重呼后,顾客依然没有响应,把该顾客延后到本服务类型的最后一位(漏号顾客处理方法之二)。柜台:可修改柜台服务类型,从而实现临时帮助其他服务柜台的额目的。清屏:清除错误的输入。插前:顾客需多柜台服务时,完成一段服务后,其号码被移到另一队列的首位。储存:当呼叫时而顾客恰好不在,可暂时储存,然后继续呼叫下一位顾客,办理完毕后再重新呼叫,顾客无需担心错过时间。询问:查询当前等待人数。查看:查看储存的号码。密码登录:根据需要,可设定用户个人密码,使用密码登录。(PS:以上只是初步设想,后续不一定实现全部功能!)业务流程分析:系统结构分析和设计:根据前面的描述,画出该银行排队叫号系统的控制流程图如下:结构算法:(朱思敏)数据结构:银行排队系统应采用了队列的方法实现。队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。例如:在银行排队系统中,先进入队列的成员总是先离开队列。因此队列亦称作先进先出(FirstInFirstOut)的线性表,简称FIFO表。当队列中没有元素时称为空队列。在空队列中依次加入元a1,a2,…an之后,a1是队头元素,an是队尾元素。显然退出队列的次序也只能是a1,a2,…an,也就是说队列的修改是依先进先出的原则进行的。队列的链式存储结构简称为链队列,它是限制仅在表头删除和表尾插入的单链表。显然仅有单链表的头指针不便于在表尾做插入操作,为此再增加一个尾指针,指向链表的最后一个结点,一个链队列由头指针和尾指针唯一确定。详细设计:本系统分为以下6个功能模块,分别是:顾客到达,顾客离开,查看业务办理,查看排队情况,系统查询,退出。顾客到达界面:当客户到达时,在主菜单输入“1”进入“客户到达面”。此界面区分VIP客户到达和普通客户到达。VIP:客户在“到达界面”输入“1”,进入VIP验证,通过VIP卡号和密码验证就可以进入VIP区办理业务。普通客户:客户在“到达界面”输入“2”,系统即为客户分配业务号,凭此号办理业务、排队或离开。客户离开界面:当客户完成办理业务需要离开时。在主菜单输入“2”进入“客户离开界面”。此界面提供服务评分。首先输入自己的客户号,然后选择自己办理业务的柜台号,结合自己对这次服务的满意度给出评分,然后系统给出此柜台的平均分和自己办理业务过程中所需要的时间。业务查询界面:在主菜单输入“3”进入“业务查询界面”,在此界面可查询到正在业务办理的情况。排队查询界面:在主菜单输入“4”,进入“排队查询界面”,此界面提供客户的排队情况、排队人数。查询系统:因为此功能为内部工作人员使用,所以通道选项在主菜单上隐藏。在主菜单输入“6”,进入“系统查询界面”。通过此此界面的卡号、密码验证,就可以查询到系统开起至查询时办理业务的普通客户、VIP客户人数。并可以显示所有普通客户办理业务的总时间,每个客户所用的平均时间。查询系统运行的时间。数据类型定义:1、数组的结构体定义:structList{intA[n+1];//顾客用来办理业务的N个窗口intlen;//表示数组中的元素个数}L;2、链表节点的结构体定义:structLnode{//链表结点类型intdata;Lnode*next;};3、链式存储的的结构体定义structLinkqueue{//链式存储的等候队列的类型定义Lnode*front;Lnode*rear;}Q;4、子程序及功能设计1)vip(a)源程序:此界面区分VIP客户到达和普通客户到达。2)daoda(v)源程序:解决顾客到达事件算法。3)likai(x)源程序:解决顾客离开事件算法。4)intpingfeng()源程序:判断输入的分数是否正确。5)print2()源程序:输出队列算法。6)printl()源程序:显示正在办理业务的客户。7)intDlqueue(Linkqueue*Q)源程序:出队算法。在本设计中,设计的主要工作围绕着事件表进行,按照一定的规则把事件加入事件表或从事件表中取出事件,并根据事件的类型、事件发生的时间来调度程序的运行.作业在进行排队时,也需要队列表来保持作业的属性。为便于事件表和队列的实现,本设计中使用的数据结构主要是循环队列,并采用带有头尾标志的数组来实现循环队列。代码实现:(周华毅)源代码&分析:程序正常运行界面:•放映结束谢谢观看!