C语言实现银行业务模拟问题,单队列,多窗口,键盘输入营业时间,文件输入客户到达时间,编号,处理时间
时间: 2024-04-12 12:32:46 浏览: 52
你好!对于你的问题,我可以为你提供一个C语言的实现示例。以下是一个简单的单队列多窗口的银行业务模拟程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_CUSTOMERS 100
typedef struct {
int arrivalTime;
int serviceTime;
int customerNumber;
} Customer;
typedef struct {
int windowNumber;
int servingTime;
int customerNumber;
} Window;
Customer customers[MAX_CUSTOMERS];
Window windows[MAX_CUSTOMERS];
int main() {
int totalCustomers, totalWindows, openTime;
printf("请输入营业时间(分钟):");
scanf("%d", &openTime);
printf("请输入窗口数量:");
scanf("%d", &totalWindows);
printf("请输入顾客数量:");
scanf("%d", &totalCustomers);
printf("请按照到达时间、编号和处理时间的顺序输入顾客信息:\n");
for (int i = 0; i < totalCustomers; i++) {
scanf("%d %d %d", &customers[i].arrivalTime, &customers[i].customerNumber, &customers[i].serviceTime);
}
// 初始化窗口
for (int i = 0; i < totalWindows; i++) {
windows[i].windowNumber = i + 1;
windows[i].servingTime = 0;
windows[i].customerNumber = -1;
}
int currentTime = 0;
int servedCustomers = 0;
while (currentTime < openTime && servedCustomers < totalCustomers) {
for (int i = 0; i < totalCustomers; i++) {
if (customers[i].arrivalTime == currentTime) {
// 找到空闲窗口
int windowIndex = -1;
for (int j = 0; j < totalWindows; j++) {
if (windows[j].servingTime == 0) {
windowIndex = j;
break;
}
}
// 如果有空闲窗口,安排顾客服务
if (windowIndex != -1) {
windows[windowIndex].servingTime = customers[i].serviceTime;
windows[windowIndex].customerNumber = customers[i].customerNumber;
servedCustomers++;
}
}
}
// 更新窗口的服务时间
for (int i = 0; i < totalWindows; i++) {
if (windows[i].servingTime > 0) {
windows[i].servingTime--;
// 服务完成,打印顾客信息
if (windows[i].servingTime == 0) {
printf("窗口%d服务完成,顾客编号:%d\n", windows[i].windowNumber, windows[i].customerNumber);
}
}
}
currentTime++;
}
return 0;
}
```
这个程序中,首先会让你输入营业时间、窗口数量和顾客数量。然后,你需要按照到达时间、编号和处理时间的顺序输入每个顾客的信息。程序会模拟顾客到达和窗口服务的过程,并在服务完成时打印相应的顾客信息。
请注意,这只是一个简单的示例,没有考虑到一些复杂的情况,比如顾客等待时间、顾客超时等。如果你需要更复杂的模拟,你可能需要对程序进行进一步的修改和扩展。
希望这个示例对你有所帮助!如果你有任何问题,请随时提问。
阅读全文