银行业务模拟c语言程序

客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。
第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应地
有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于
第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第二个队
等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。每接待完一
个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,
对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,
在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客
户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了
一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队
列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时
所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟
方法求出客户在银行内逗留的平均时间。利用动态存储结构实现模拟。

http://blog.sina.com.cn/s/blog_a1f9a1f50101i2lm.html

你好,你有这个源代码吗?孩子写不出来

😫😫😫

一模一样的题


#include <iostream>
#include <queue>
#include <cstdlib>
#include <ctime>
 using namespace std;
 // 客户类型
enum CustomerType {
    DEPOSIT, // 存款
    WITHDRAW // 取款
};
 // 客户结构体
struct Customer {
    int id; // 客户编号
    CustomerType type; // 客户类型
    int amount; // 申请金额
    int arrivalTime; // 到达时间
    int startTime; // 开始处理时间
    int endTime; // 结束处理时间
};
 // 银行结构体
struct Bank {
    int totalAmount; // 银行现存资金总额
    int maxQueueLength; // 最大队列长度
    int depositQueueLength; // 存款队列长度
    int withdrawQueueLength; // 取款队列长度
    queue<Customer> depositQueue; // 存款队列
    queue<Customer> withdrawQueue; // 取款队列
};
 // 生成客户
Customer generateCustomer(int id, int currentTime) {
    Customer customer;
    customer.id = id;
    customer.arrivalTime = currentTime;
    customer.type = (rand() % 2 == 0) ? DEPOSIT : WITHDRAW;
    customer.amount = rand() % 1000 + 1; // 申请金额在1~1000之间
    return customer;
}
 // 处理客户
void processCustomer(Bank& bank, Customer& customer, int currentTime) {
    if (customer.type == DEPOSIT) {
        if (customer.amount <= bank.totalAmount) {
            bank.totalAmount -= customer.amount;
            customer.startTime = currentTime;
            customer.endTime = currentTime;
        } else {
            bank.withdrawQueue.push(customer);
            bank.withdrawQueueLength++;
            customer.startTime = -1;
            customer.endTime = -1;
        }
    } else {
        if (customer.amount <= bank.totalAmount) {
            bank.totalAmount += customer.amount;
            customer.startTime = currentTime;
            customer.endTime = currentTime;
        } else {
            bank.depositQueue.push(customer);
            bank.depositQueueLength++;
            customer.startTime = -1;
            customer.endTime = -1;
        }
    }
}
 // 模拟银行业务
void simulateBank(Bank& bank, int simulationTime) {
    int currentTime = 0; // 当前时间
    int customerCount = 0; // 客户计数器
    int totalWaitingTime = 0; // 总等待时间
     // 模拟银行业务
    while (currentTime < simulationTime) {
        // 生成客户
        Customer customer = generateCustomer(customerCount++, currentTime);
         // 处理第一个队列的客户
        if (!bank.depositQueue.empty() && bank.totalAmount >= bank.depositQueue.front().amount) {
            Customer depositCustomer = bank.depositQueue.front();
            bank.depositQueue.pop();
            bank.depositQueueLength--;
            processCustomer(bank, depositCustomer, currentTime);
            totalWaitingTime += (currentTime - depositCustomer.arrivalTime);
        } else if (!bank.withdrawQueue.empty()) {
            Customer withdrawCustomer = bank.withdrawQueue.front();
            bank.withdrawQueue.pop();
            bank.withdrawQueueLength--;
            processCustomer(bank, withdrawCustomer, currentTime);
            totalWaitingTime += (currentTime - withdrawCustomer.arrivalTime);
        }
         // 处理当前客户
        if (customer.type == DEPOSIT) {
            if (bank.totalAmount >= customer.amount) {
                processCustomer(bank, customer, currentTime);
            } else {
                bank.depositQueue.push(customer);
                bank.depositQueueLength++;
            }
        } else {
            processCustomer(bank, customer, currentTime);
        }
         // 更新最大队列长度
        bank.maxQueueLength = max(bank.maxQueueLength, bank.depositQueueLength + bank.withdrawQueueLength);
         // 更新时间
        currentTime++;
    }
     // 输出结果
    cout << "Total waiting time: " << totalWaitingTime << endl;
    cout << "Average waiting time: " << (double)totalWaitingTime / customerCount << endl;
    cout << "Max queue length: " << bank.maxQueueLength << endl;
}
 int main() {
    srand(time(NULL)); // 初始化随机数生成器
     Bank bank;
    bank.totalAmount = 10000; // 银行现存资金总额
    bank.maxQueueLength = 0; // 最大队列长度
    bank.depositQueueLength = 0; // 存款队列长度
    bank.withdrawQueueLength = 0; // 取款队列长度
     simulateBank(bank, 1000); // 模拟1000个时间单位
     return 0;
}