C语言实现银行业务模拟问题,单队列,多窗口,键盘输入营业时间,文件输入客户到达时间,编号,处理时间
时间: 2024-04-14 11:30:50 浏览: 157
您好!对于银行业务模拟问题,可以使用C语言来实现单队列多窗口的模拟。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_CUSTOMERS 100
typedef struct {
int arrivalTime;
int processingTime;
int customerNumber;
} Customer;
typedef struct {
int windowNumber;
int servingCustomer;
int finishTime;
} Window;
int main() {
int numWindows, businessHours;
Customer customers[MAX_CUSTOMERS];
Window windows[MAX_CUSTOMERS];
printf("请输入营业时间(分钟):");
scanf("%d", &businessHours);
printf("请输入窗口数量:");
scanf("%d", &numWindows);
for (int i = 0; i < numWindows; i++) {
windows[i].windowNumber = i + 1;
windows[i].servingCustomer = -1;
windows[i].finishTime = 0;
}
FILE *inputFile = fopen("customer_data.txt", "r");
if (inputFile == NULL) {
printf("无法打开客户数据文件!");
return 1;
}
int numCustomers = 0;
while (fscanf(inputFile, "%d %d", &(customers[numCustomers].arrivalTime), &(customers[numCustomers].processingTime)) == 2) {
customers[numCustomers].customerNumber = numCustomers + 1;
numCustomers++;
}
fclose(inputFile);
int currentTime = 0;
int numCustomersServed = 0;
while (currentTime <= businessHours) {
for (int i = 0; i < numWindows; i++) {
if (windows[i].servingCustomer != -1 && windows[i].finishTime == currentTime) {
printf("窗口 %d 处理完顾客 %d\n", windows[i].windowNumber, windows[i].servingCustomer);
windows[i].servingCustomer = -1;
numCustomersServed++;
}
}
for (int i = 0; i < numCustomers; i++) {
if (customers[i].arrivalTime == currentTime) {
int minWindowIndex = -1;
int minFinishTime = businessHours + 1;
for (int j = 0; j < numWindows; j++) {
if (windows[j].servingCustomer == -1) {
minWindowIndex = j;
break;
}
if (windows[j].finishTime < minFinishTime) {
minWindowIndex = j;
minFinishTime = windows[j].finishTime;
}
}
if (minWindowIndex != -1) {
windows[minWindowIndex].servingCustomer = customers[i].customerNumber;
windows[minWindowIndex].finishTime = currentTime + customers[i].processingTime;
printf("窗口 %d 开始处理顾客 %d\n", windows[minWindowIndex].windowNumber, customers[i].customerNumber);
}
}
}
currentTime++;
}
printf("总共服务了 %d 位顾客\n", numCustomersServed);
return 0;
}
```
上述代码中,我们使用了两个结构体 `Customer` 和 `Window` 分别表示顾客和窗口的信息。通过键盘输入营业时间和窗口数量,并从文件中读取客户的到达时间和处理时间。然后,在每个时间步中,我们检查是否有窗口处理完了顾客,同时检查是否有顾客到达并分配给一个空闲的窗口进行处理。
请注意,此代码只是一个简单的示例,并且没有对输入进行错误检查。在实际应用中,您可能需要添加更多的错误处理和边界检查。
另外,您需要创建一个 `customer_data.txt` 文件,其中包含每个顾客的到达时间和处理时间,每行一个顾客的数据,格式如下:
```
到达时间1 处理时间1
到达时间2 处理时间2
...
```
希望这个示例能帮助您开始解决银行业务模拟问题!如果您有任何疑问,请随时提问。
阅读全文