C++设计实现一个银行业务模拟系统() 问题描述:设某银行有四个服务窗口,一个等待队列,每个窗口均可以办理存款、取款、挂失、还贷等业务,每种业务所需的服务时间不同。客户到达银行后,先到打号机上打号,号...
时间: 2023-06-23 09:08:48 浏览: 188
这是一个经典的银行排队模拟问题,可以使用C++来实现。
首先,需要定义一些类来表示客户和服务窗口。
```c++
// 客户类
class Customer {
public:
int id; // 客户编号
int service_time; // 客户需要的服务时间
int start_time; // 客户开始接受服务的时间
int finish_time; // 客户完成服务的时间
};
// 服务窗口类
class ServiceWindow {
public:
int window_id; // 窗口编号
int current_customer_id; // 当前服务的客户编号
int busy_time; // 窗口忙碌结束的时间
};
```
然后,定义一个等待队列,将客户加入等待队列中。
```c++
queue<Customer> q;
```
接下来,需要实现主要的排队模拟逻辑。具体来说,可以按照以下步骤进行实现:
1. 定义常量和变量
首先,需要定义一些常量和变量,包括服务窗口数量、客户总数、客户到达的时间间隔、每种业务所需的服务时间等。
```c++
const int window_num = 4; // 窗口数量
const int total_customer_num = 20; // 客户总数
const int arrive_time_interval = 3; // 客户到达时间间隔
const int service_time[4] = {30, 60, 90, 120}; // 每种业务所需的服务时间
```
2. 初始化服务窗口
接下来,需要初始化服务窗口。将每个窗口的编号、当前服务的客户编号和忙碌结束的时间都设置为0。
```c++
ServiceWindow windows[window_num];
for (int i = 0; i < window_num; i++) {
windows[i].window_id = i + 1;
windows[i].current_customer_id = 0;
windows[i].busy_time = 0;
}
```
3. 模拟客户到达和排队
接下来,模拟客户到达和排队。首先,需要定义一个变量来表示当前时间,并将其初始化为0。然后,循环处理每个客户,直到所有客户都到达并接受了服务。
```c++
int current_time = 0; // 当前时间
for (int i = 0; i < total_customer_num; i++) {
// 模拟客户到达
Customer customer;
customer.id = i + 1;
customer.service_time = service_time[rand() % window_num];
customer.start_time = 0;
customer.finish_time = 0;
q.push(customer);
// 模拟客户排队等待
while (!q.empty()) {
// 找到空闲的窗口
int free_window_id = -1;
for (int j = 0; j < window_num; j++) {
if (windows[j].busy_time <= current_time) {
free_window_id = j;
break;
}
}
if (free_window_id == -1) {
// 所有窗口都忙碌,等待最早完成的窗口
int min_busy_time = INT_MAX;
for (int j = 0; j < window_num; j++) {
if (windows[j].busy_time < min_busy_time) {
min_busy_time = windows[j].busy_time;
free_window_id = j;
}
}
current_time = min_busy_time;
}
// 为客户分配窗口
Customer current_customer = q.front();
q.pop();
windows[free_window_id].current_customer_id = current_customer.id;
windows[free_window_id].busy_time = current_time + current_customer.service_time;
current_customer.start_time = current_time;
current_customer.finish_time = windows[free_window_id].busy_time;
// 输出客户信息
cout << "客户" << current_customer.id << "在窗口" << free_window_id + 1 << "开始接受服务,开始时间:" << current_customer.start_time << ",服务时间:" << current_customer.service_time << ",完成时间:" << current_customer.finish_time << endl;
}
}
```
4. 输出统计信息
最后,输出统计信息,包括每个客户的开始时间、服务时间和完成时间,以及每个窗口的忙碌时间。
```c++
// 输出统计信息
for (int i = 0; i < total_customer_num; i++) {
Customer customer = customers[i];
cout << "客户" << customer.id << "开始时间:" << customer.start_time << ",服务时间:" << customer.service_time << ",完成时间:" << customer.finish_time << endl;
}
for (int i = 0; i < window_num; i++) {
cout << "窗口" << i + 1 << "忙碌时间:" << windows[i].busy_time << endl;
}
```
完整代码如下:
阅读全文