题目7:银行业务模拟(1~2人)[问题描述] 设银行有四个服务窗口, 一个等待队列,每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候,当任一服务窗口空闲时,处理等候客户中排在最前面的客户的业务。写一个上述银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。[基本要求]每个客户到达银行的时间和需要办理的业务随机产生,输出一天客户在银行的平均逗留时间和每个窗口每天办理的客户数和每种业务数。[测试数据] 营业时间为8小时,其他模拟量自行设定。请用c++编写代码
时间: 2024-02-16 20:04:20 浏览: 39
好的,以下是基于C++的银行业务模拟系统代码:
```cpp
#include <iostream>
#include <queue>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
// 定义业务类型
enum BusinessType {
Deposit, Withdraw, ReportLoss, Repay
};
// 定义客户类
class Customer {
public:
int id; // 客户编号
BusinessType business; // 客户需办理的业务
int arriveTime; // 客户到达时间
int serviceTime; // 客户需要的服务时间
int waitTime; // 客户等待时间
};
// 定义服务窗口类
class ServiceWindow {
public:
bool isBusy; // 服务窗口是否忙碌
Customer customer; // 当前服务的客户
int customerNum; // 当天服务的客户数量
int businessNum[4]; // 当天办理的业务数量,分别为存款、取款、挂失、还贷
};
// 定义全局变量
queue<Customer> waitingQueue;
ServiceWindow serviceWindows[4];
int currentTime = 0;
int customerCount = 0;
int totalWaitTime = 0;
const int OPEN_TIME = 8 * 60; // 开门时间为8小时
const int BUSINESS_TIME[4] = { 2, 3, 1, 4 }; // 四种业务所需的服务时间
// 打印客户信息
void printCustomerInfo(Customer customer) {
cout << "客户编号:" << customer.id << ",到达时间:" << customer.arriveTime
<< ",业务类型:";
switch (customer.business) {
case Deposit:
cout << "存款";
break;
case Withdraw:
cout << "取款";
break;
case ReportLoss:
cout << "挂失";
break;
case Repay:
cout << "还贷";
break;
}
cout << ",需要服务时间:" << customer.serviceTime << endl;
}
// 产生随机客户
Customer generateRandomCustomer() {
Customer customer;
customer.id = ++customerCount;
customer.arriveTime = currentTime;
customer.business = static_cast<BusinessType>(rand() % 4);
customer.serviceTime = BUSINESS_TIME[customer.business];
return customer;
}
// 处理等待队列中的客户
void handleWaitingQueue() {
while (!waitingQueue.empty()) {
bool isHandled = false; // 标记是否已经处理了一个客户
for (int i = 0; i < 4; i++) {
if (!serviceWindows[i].isBusy) {
serviceWindows[i].customer = waitingQueue.front();
serviceWindows[i].isBusy = true;
serviceWindows[i].customer.waitTime = currentTime - serviceWindows[i].customer.arriveTime;
totalWaitTime += serviceWindows[i].customer.waitTime;
serviceWindows[i].customerNum++;
serviceWindows[i].businessNum[serviceWindows[i].customer.business]++;
waitingQueue.pop();
isHandled = true;
break;
}
}
if (!isHandled) {
break;
}
}
}
// 处理服务窗口中的客户
void handleServiceWindows() {
for (int i = 0; i < 4; i++) {
if (serviceWindows[i].isBusy) {
serviceWindows[i].customer.serviceTime--;
if (serviceWindows[i].customer.serviceTime == 0) {
serviceWindows[i].isBusy = false;
}
}
}
}
// 输出服务窗口统计信息
void printServiceWindowInfo() {
for (int i = 0; i < 4; i++) {
cout << "窗口" << i + 1 << ":";
cout << "服务客户数:" << serviceWindows[i].customerNum << ",";
cout << "存款数:" << serviceWindows[i].businessNum[Deposit] << ",";
cout << "取款数:" << serviceWindows[i].businessNum[Withdraw] << ",";
cout << "挂失数:" << serviceWindows[i].businessNum[ReportLoss] << ",";
cout << "还贷数:" << serviceWindows[i].businessNum[Repay] << endl;
}
}
int main() {
srand(time(nullptr));
while (currentTime < OPEN_TIME) {
// 产生随机客户
if (rand() % 3 == 0) {
Customer customer = generateRandomCustomer();
printCustomerInfo(customer);
waitingQueue.push(customer);
}
// 处理等待队列和服务窗口
handleWaitingQueue();
handleServiceWindows();
// 时间推进
currentTime++;
}
// 输出统计信息
cout << "客户平均逗留时间:" << static_cast<double>(totalWaitTime) / customerCount << endl;
printServiceWindowInfo();
return 0;
}
```
代码中使用了队列(`queue`)和向量(`vector`)等 STL 容器,模拟了银行业务的整个流程。在主函数中,通过随机数产生客户并将其加入等待队列,然后不断处理等待队列和服务窗口中的客户,直到银行关门。最后输出客户平均逗留时间和每个服务窗口办理的客户数及业务数。
由于客户到达时间和需要办理的业务是随机产生的,每次运行程序的输出结果可能会有所不同。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)