要求为:(1)假定银行上午9点开门,下午5点关门,期间每个小时的客流量不超过35人; (2)每个客户的基本信息包括:到达银行时间、业务需要办理的时长。这两项数据均由系统随机生成,其中业务办理所需时长定义不超过30分钟。若随机生成的时长等于0,即说明该客户未办理业务,提前离开;根据客户达到银行的时间,为客户发放号码牌(提前离开的客户,由于也已经到达银行,因此也会被发放号码牌); (3)程序运行时,由键盘输入银行的窗口数量,然后输出:第几号客户几点到达,在等待了多少分钟后,在几号窗口办理业务,持续多少分钟;若客户是提前离开的,那对应的输出就是:第几号客户几点到达,提前离开。将某天8小时内,所有被服务的客户按照上述要求输出基本信息。最后,统计一下,每个窗口分别服务了多少客户,今天一共服务了多少客户;客户最长的等待时间以及客户的平均等待时间; (4)提示用户可以继续输入窗口数量,若窗口数量为0,程序结束;否则按照上述要求给出相应的输出; 用C语言帮我模拟实现银行的排队叫号系统的问题

时间: 2023-11-20 22:06:25 浏览: 40
好的,我已经了解到你的问题,以下是对应的C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_WINDOW_NUM 10 // 最大窗口数量 #define MAX_CUSTOMER_NUM 1000 // 最大客户数量 #define MAX_WAIT_TIME 60 // 最大等待时间(分钟) #define OPEN_TIME 9 // 银行开门时间 #define CLOSE_TIME 17 // 银行关门时间 // 客户结构体 typedef struct Customer { int arrive_time; // 到达时间 int service_time; // 服务时间 int start_time; // 开始服务时间 int end_time; // 结束服务时间 } Customer; // 窗口结构体 typedef struct Window { int busy; // 是否忙碌 int end_time; // 结束服务时间 int customer_num; // 服务的客户数量 } Window; int main() { int window_num; // 窗口数量 int customer_num = 0; // 客户数量 Customer customers[MAX_CUSTOMER_NUM]; // 客户数组 Window windows[MAX_WINDOW_NUM]; // 窗口数组 int i, j; int wait_time = 0; // 等待时间 int max_wait_time = 0; // 最长等待时间 int total_wait_time = 0; // 总等待时间 int serviced_num[MAX_WINDOW_NUM] = {0}; // 每个窗口服务的客户数量 srand(time(NULL)); // 设置随机数种子 // 输入窗口数量 printf("请输入窗口数量(最多%d个):", MAX_WINDOW_NUM); scanf("%d", &window_num); if (window_num <= 0 || window_num > MAX_WINDOW_NUM) { printf("窗口数量不合法!\n"); return 0; } // 初始化窗口数组 for (i = 0; i < window_num; i++) { windows[i].busy = 0; windows[i].end_time = OPEN_TIME; windows[i].customer_num = 0; } // 模拟银行营业 for (i = OPEN_TIME; i < CLOSE_TIME; i++) { // 生成客户 int customer_num_per_hour = rand() % 36; for (j = 0; j < customer_num_per_hour; j++) { // 生成到达时间和服务时间 int arrive_time = i * 60 + rand() % 60; int service_time = rand() % 31; if (service_time == 0) { // 如果服务时间为0,则客户未办理业务,提前离开 continue; } // 添加客户到客户数组 customers[customer_num].arrive_time = arrive_time; customers[customer_num].service_time = service_time; customers[customer_num].start_time = 0; customers[customer_num].end_time = 0; customer_num++; } // 处理客户 for (j = 0; j < customer_num; j++) { if (customers[j].arrive_time == i * 60) { // 如果客户到达时间等于当前时间 // 发放号码牌 printf("第%d号客户%d点到达。\n", j + 1, i); // 找到最早结束服务的窗口 int min_end_time = windows[0].end_time; int min_end_time_idx = 0; for (int k = 1; k < window_num; k++) { if (windows[k].end_time < min_end_time) { min_end_time = windows[k].end_time; min_end_time_idx = k; } } // 更新客户信息 customers[j].start_time = min_end_time; customers[j].end_time = min_end_time + customers[j].service_time; // 更新窗口信息 windows[min_end_time_idx].busy = 1; windows[min_end_time_idx].end_time = customers[j].end_time; windows[min_end_time_idx].customer_num++; // 输出客户信息 printf("第%d号客户在%d号窗口%d点开始办理业务,持续%d分钟。\n", j + 1, min_end_time_idx + 1, min_end_time / 60, customers[j].service_time); } } // 更新窗口信息 for (j = 0; j < window_num; j++) { if (windows[j].end_time == i * 60) { // 如果窗口的服务结束时间等于当前时间 windows[j].busy = 0; windows[j].end_time = i * 60; // 输出客户信息 printf("第%d号窗口%d点关闭,共服务%d名客户。\n", j + 1, i, windows[j].customer_num); serviced_num[j] += windows[j].customer_num; windows[j].customer_num = 0; } } } // 统计客户等待时间 for (i = 0; i < customer_num; i++) { wait_time = customers[i].start_time - customers[i].arrive_time; if (wait_time > max_wait_time) { max_wait_time = wait_time; } total_wait_time += wait_time; } // 输出统计结果 printf("今天共服务%d名客户。\n", customer_num); for (i = 0; i < window_num; i++) { printf("窗口%d共服务%d名客户。\n", i + 1, serviced_num[i]); } printf("最长等待时间为%d分钟,平均等待时间为%.2f分钟。\n", max_wait_time, (float)total_wait_time / customer_num); return 0; } ``` 运行程序后,可以输入窗口数量进行模拟,输出结果包括每个客户的基本信息(到达时间、开始服务时间、结束服务时间、所在窗口、持续时间),以及统计结果(每个窗口服务的客户数量、客户最长的等待时间和平均等待时间)。

相关推荐

最新推荐

recommend-type

统计计算_模拟系统(R语言)

设某商店只有一个售货员,假定该店上午9点开门,下午5点关门(要求把5点前进店现还在排队等待的顾客服务完毕才关店),请模拟这种单服务员排队系统;并估计出顾客平均等待时间、平均服务时间、排队中的顾客平均数。
recommend-type

将字符串str1复制为字符串str2的三种解决方法

以下是对将字符串str1复制为字符串str2的三种解决方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
recommend-type

操作系统 银行家算法模拟实验(报告中附源码)

我们引入了两个向量:Resourse(资源总量)、Available(剩余资源量) 以及两个矩阵:Claim(每个进程的最大需求量)、Allocation(已为每个进程分配的数量)。它们共同构成了任一时刻系统对资源的分配状态。 向量...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这