银行窗口排队系统C++
时间: 2023-08-24 08:07:22 浏览: 125
银行窗口排队系统是一种常见的应用场景,下面是一个基于C++的银行窗口排队系统的示例代码实现。
```c++
#include <iostream>
#include <queue>
#include <string>
using namespace std;
// 客户类
class Customer {
public:
Customer(string name, int id) : name(name), id(id) {}
string name;
int id;
};
// 窗口服务人员类
class ServiceStaff {
public:
ServiceStaff(string name, int id) : name(name), id(id) {}
string name;
int id;
};
// 银行服务系统类
class BankServiceSystem {
public:
BankServiceSystem(int window_num) {
for (int i = 1; i <= window_num; ++i) {
windows.push(i);
}
}
void AddCustomer(Customer customer) {
customers.push(customer);
}
void AssignTask(ServiceStaff staff) {
if (windows.empty()) {
cout << "All windows are busy now, please wait a minute." << endl;
return;
}
int window_id = windows.front();
windows.pop();
ServiceTask task = {staff, customers.front(), window_id};
tasks.push(task);
customers.pop();
cout << "Assign task to service staff " << staff.name << " at window " << window_id << endl;
}
void FinishTask(int window_id) {
ServiceTask task = tasks.front();
tasks.pop();
cout << "Finish task " << task.customer.name << " at window " << window_id << endl;
windows.push(window_id);
}
private:
// 服务任务类
struct ServiceTask {
ServiceStaff staff;
Customer customer;
int window_id;
};
queue<Customer> customers; // 等待服务的客户队列
queue<ServiceTask> tasks; // 正在服务的任务队列
queue<int> windows; // 空闲窗口队列
};
int main() {
BankServiceSystem system(3);
ServiceStaff staff1("John", 1);
ServiceStaff staff2("Tom", 2);
ServiceStaff staff3("Lucy", 3);
Customer c1("Alice", 1);
Customer c2("Bob", 2);
Customer c3("Charlie", 3);
Customer c4("David", 4);
system.AddCustomer(c1);
system.AddCustomer(c2);
system.AddCustomer(c3);
system.AddCustomer(c4);
system.AssignTask(staff1);
system.AssignTask(staff2);
system.AssignTask(staff3);
system.AssignTask(staff1);
system.FinishTask(1);
system.FinishTask(2);
system.AssignTask(staff3);
return 0;
}
```
在这个示例中,我们定义了一个BankServiceSystem类,它包含了等待服务的客户队列、正在服务的任务队列和空闲窗口队列。当有新的客户到来时,我们可以通过AddCustomer方法将其加入到等待服务的客户队列中。当有窗口服务人员空闲时,我们可以通过AssignTask方法将等待服务的客户队列中的第一个客户分配给它。当服务完成时,我们可以通过FinishTask方法将该任务从正在服务的任务队列中移除,并将窗口编号加入到空闲窗口队列中。
需要注意的是,这只是一个简单的示例,实际的银行服务系统需要考虑更多因素,例如客户信息管理、窗口服务人员管理和排队算法等。
阅读全文