文章学习自:小项目分析之C++ 实现模拟银行排队
使用C++实现银行排队系统
一、问题定义与分析
问题定义
•要解决的问题——银行一天之内的:
1.总客户数
2.客户总逗留时间
3.客户平均逗留时间
问题分析
•新来的人找个短的队伍,站在队尾开始排队
•排在队头的人可以办理业务
•排队等待办业务的客户是在分散的、随机的时间点到来的
•特点:离散事件、要排队
•掌握每个客户到达银行和离开银行这两个时刻
•统计出客户总数
•称客户到达银行和客户离开银行这两个时刻发生的事情为“事件”
•整个模拟按事件发生的先后顺序进行处理
•事件驱动模拟
•事件的主要信息是事件类型和事件发生的时刻
•两类事件:客户到达事件和客户离开事件
•事件应存储在有序表里
•有序表按照事件发生的时刻顺序排序
•队列中的客户的主要信息是客户到达的时刻和客户办理业务所需要的时间
•队列数量和银行的窗口数量相同
•每个队列的队头客户就是正在办理业务的客户
•每个队头客户都存在一个将要发生的客户离开事件
二、类与算法设计
类设计
•有序表选用有序链表,主要操作是插入和删除
•队列,客户排队
•类图:用来表示类以及类和类之间的关系的逻辑视图
•利用类图来记录类的结构,这些类构成了程序的架构
银行类:
•要有一个表示队列数量的属性
•要有一个打烊时间属性
•要有一个总客户数属性
•要有一个客户总逗留时间属性
•聚合一个或多个队列和一个有序链表
银行类的方法:
•开门营业
•处理客户到达事件
•处理客户离开事件
•帮助客户选择一个最短的队列
•确保按照事件发生的时间顺序处理事件
算法设计
一共定义三个类事件类Event、客户类Client、银行类Bank
事件类Event:包含两个成员,事件发生的时间,与时间的类型,类型主要是客户到达事件还是客户离开事件。
客户类Client:包含两个成员,客户到达的时间与客户停留的时间
银行类Bank:
包括成员队列数量