C/C++模拟实现银行的排队叫号系统[2024-04-30]

C/C++模拟实现银行的排队叫号系统[2024-04-30]

【问题描述】
模拟实现银行的排队叫号系统。

【基本要求】
(1)假定银行上午9点开门,下午5点关门,期间每个小时的客流量不超过25人;
(2)利用结构体数组保存顾客。每个顾客的基本信息包括:到达银行时间、前面几人排队、等待时长、办理业务时间、办理业务窗口编号、业务持续时长等;
(3)其中每个顾客的到达时间(几点几分)以及业务时长(分钟)利用rand函数随机生成,属于已知信息。注意,到达时间必须在开门后、关门前;业务持续时长在1—30分钟之间(也由rand函数生成)。所有顾客按照到达时间排序,此顺序即为顾客的号码牌(从1号开始,没有0号);
(4)注意顾客初始的总数量,可以按照每小时流量不超过25人的规定,从上午9点到下午5点,每个小时的顾客总数由rand 随机生成(0-25之间),然后这8小时以内的顾客总数就是初始的顾客总数;
(5)程序运行后,提示输入银行窗口数n,在1—7之间;
(6)输入窗口数量合法,即对顾客一一处理。若当前有n个窗口,则按照哪个窗口空闲,哪个窗口接待客户的原则,按顺序计算每个客户当下前面排队的人数(是指仍在等待或者正在办理业务的客户数量,业务结束已经离开的顾客不算在内)、等待时间、开始办理业务时间(几点几分)、在几号窗口办理(窗口编号也是从1开始,没有0号窗口)、业务持续多少分钟等客户基本信息;
(7)注意,要求根据等待时长做如下处理:如果某顾客等待时长超过30分钟,且他本身的业务时长不超过 10分钟,那么该顾客会提前离开;又或者某顾客等待时长超过45分钟,且他本身的业务时长不超过20分钟,那么该顾客也会提前离开。注意计算每个顾客当下前面排队人数时,提前离开的也要 计算在内,因为银行并不知道谁会提前离开;
(8)设置合理的程序结束条件。例如当处理完某顾客后已经到了银行关门时间,那么后面的顾客将不再被处理。当前的处理结束;
(9)从第1位顾客到最后一位被服务的顾客,输出:第几号客户几点几分到达,前面几人排队,在等待了多分钟后,儿点几分在儿号窗口办理业务,持续多少分钟,若客户是提可离开的,那对应的输出就是:第几号客户几点到达,前面几人排队,提前离开。最后,统计一下,每个窗口分别服务了多少客户(不包括提前离开的),今天一共服务了多少客户(不包括提前离开的);客户最长的等待时间以及客户的平均等待时间(计算平均值时,也同样不包括提前离开的);
(10)将当前在屏幕上输出的所有信息保存在数据文件内。要求存入的数据文件命名为当前保存的系统时间加自己姓名。例如,若当前时间是17:04 分23 秒,那么存储结果的文件名就应该是“170423 张三.txt”.
(11)提示用户可以继续输入窗口数量,若输入是 1—7以外的数据,程序结束;否则重新生成顾客信息,再重复上述步骤做处理和输出(注意输入了几次合法的窗口数,对应生成几个数据文件);

【输出样例】


【算法提示】
顾客用结构体数组表示。银行的窗口也可以用一个数组W表示,数组的每个元素W]用来保存第i个窗口当前将要工作到的时间。每次需要遍历数组W,找到最小的元素Wi1,表示第i个窗口会最早空闲下来,就将当前排在最前的客户推送到该窗口。根据该顾客的到达时间以及 W[i]的时间,计算顾客的等待时间,同时更新W[i]的取值。

源码联系UP主 -> https://space.bilibili.com/329101171

  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值