C++实现银行排队系统

C++实现银行排队系统

介绍

银行排队系统是一种经典的模拟系统。该系统可以模拟银行中客户的流动、排队、服务等过程。通过模拟,可以帮助银行评估服务能力,从而提高工作效率。本文将介绍如何使用C++实现银行排队系统。

系统设计

  1. 队列的实现

队列是银行排队系统的核心数据结构。在C++中,可以使用STL中的队列容器来实现队列。以下是如何定义一个整型队列:

```c++
#include

std::queue myQueue;
```

  1. 客户对象的定义

银行排队系统中涉及到的主要对象是客户和服务员。客户对象需要记录客户的序号、到达时间、服务时间和离开时间。以下是客户对象的定义:

c++
struct Customer {
int id; // 客户序号
int arriveTime; // 到达时间
int serviceTime; // 服务时间
int leaveTime; // 离开时间
};

  1. 服务员对象的定义

服务员对象需要记录服务员的编号、服务开始时间和服务结束时间。以下是服务员对象的定义:

c++
struct Server {
int id; // 服务员编号
int startTime; // 服务开始时间
int endTime; // 服务结束时间
};

  1. 随机数生成器

银行排队系统需要生成指定范围内的随机数。在C++中,可以使用rand()函数和srand()函数来生成随机数。以下是如何生成指定范围内的随机数的示例:

c++
srand(time(nullptr)); // 初始化随机数种子
int randomNum = rand() % 10 + 1; // 生成1-10之间的随机数

  1. 主函数

银行排队系统的主函数需要完成以下功能:

  • 初始化队列和服务员对象;
  • 循环生成客户对象,并将客户对象插入到队列中;
  • 为每个客户对象分配服务员,计算客户离开的时间;
  • 输出结果。

示例说明

以下是银行排队系统的完整代码示例:

#include <iostream>
#include <queue>
#include <cstdlib>
#include <ctime>

struct Customer {
    int id;           // 客户序号
    int arriveTime;   // 到达时间
    int serviceTime;  // 服务时间
    int leaveTime;    // 离开时间
};

struct Server {
    int id;           // 服务员编号
    int startTime;    // 服务开始时间
    int endTime;      // 服务结束时间
};

int main() {
    std::queue<Customer> customerQueue;    // 客户队列
    Server server[3];                      // 三名服务员

    // 随机生成10个客户
    srand(time(nullptr));
    for (int i = 1; i <= 10; ++i) {
        Customer customer;
        customer.id = i;
        customer.arriveTime = rand() % 60 + 1;    // 如果时间单位是分钟,生成1-60之间的随机数即可
        customer.serviceTime = rand() % 10 + 1;
        customerQueue.push(customer);
    }

    // 开始模拟服务过程
    while (!customerQueue.empty()) {
        Customer customer = customerQueue.front();
        customerQueue.pop();

        // 为客户分配服务员
        int minEndTime = 100000;    // 初始化离开时间为无穷大
        int selectedServer = -1;    // 初始化选中的服务员为-1
        for (int i = 0; i < 3; ++i) {
            if (server[i].endTime < minEndTime) {
                minEndTime = server[i].endTime;
                selectedServer = i;
            }
        }

        // 如果所有服务员的离开时间都大于当前客户的到达时间,则客户等待
        if (customer.arriveTime <= minEndTime) {
            customer.leaveTime = minEndTime + customer.serviceTime;
            server[selectedServer].startTime = minEndTime;
            server[selectedServer].endTime = customer.leaveTime;
        } else {
            customer.leaveTime = customer.arriveTime + customer.serviceTime;
            server[selectedServer].startTime = customer.arriveTime;
            server[selectedServer].endTime = customer.leaveTime;
        }

        std::cout << "客户" << customer.id << "到达时间:" << customer.arriveTime << ",服务时间:" << customer.serviceTime << ",离开时间:" << customer.leaveTime << std::endl;
    }

    return 0;
}

以上代码中:

  • 客户队列中有10个客户,到达时间和服务时间是随机生成的;
  • 系统有3名服务员;
  • 每个客户到达时,都会分配一个服务员为其服务,服务员的编号、服务开始时间和服务结束时间都会被记录下来。

运行结果示例:

客户1到达时间:47,服务时间:3,离开时间:135
客户2到达时间:41,服务时间:6,离开时间:139
客户3到达时间:10,服务时间:1,离开时间:52
客户4到达时间:20,服务时间:7,离开时间:73
客户5到达时间:56,服务时间:8,离开时间:155
客户6到达时间:18,服务时间:9,离开时间:84
客户7到达时间:22,服务时间:6,离开时间:80
客户8到达时间:32,服务时间:10,离开时间:117
客户9到达时间:39,服务时间:2,离开时间:60
客户10到达时间:31,服务时间:1,离开时间:51

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现银行排队系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • java程序设计语言的优势及特点

    Java程序设计语言的优势及特点 Java是一种业界广泛使用的高级编程语言,具有许多优点和特点,如下所示: 1.可移植性强 Java程序可以在不同的平台和操作系统中运行,这是因为Java虚拟机(JVM)能够将Java程序的字节码解释成线程可执行代码。因此,Java程序只需要编译一次就可以在不同的平台和操作系统中运行,这大大降低了开发成本和维护成本,提高了开发…

    C 2023年5月22日
    00
  • win10系统出现0xc0000428错误的解决办法

    Win10系统出现0xc0000428错误的解决办法 问题描述 在使用Windows10系统时,有时会出现0xc0000428错误提示。该错误提示表示Windows无法验证计算机硬件或者启动配置文件,导致启动失败。这个问题可能会导致系统无法正常启动,对我们的工作和学习带来影响。因此,本文将详细介绍Win10系统出现0xc0000428错误的解决办法。 解决办…

    C 2023年5月24日
    00
  • Swift进阶教程Mirror反射示例详解

    下面是“Swift进阶教程Mirror反射示例详解”的完整攻略。 简介 本文主要介绍在Swift语言中如何使用Mirror反射来查看和修改一个类的属性。其中包括对Mirror得到的信息的解读以及如何通过Mirror来修改属性值。本文适合对Swift有一定基础的开发者。 Mirror反射 Mirror是Swift中一种用于在运行时获取任意类型的结构、类、枚举以…

    C 2023年5月23日
    00
  • C++11/14 线程中使用Lambda函数的方法

    C++11/14标准引入了Lambda表达式,Lambda表达式可以方便地定义匿名函数,并且Lambda表达式在多线程编程中具有很大的优势。本文将详细讲解C++11/14线程中使用Lambda函数的方法,并给出两个实例说明。 Lambda表达式简介 Lambda表达式可以用来创建匿名函数,这些函数通常用于需要手动创建函数的地方,比如函数指针的回调函数。 La…

    C 2023年5月22日
    00
  • C语言实现简单通讯录系统

    C语言实现简单通讯录系统攻略 1. 确定功能需求 在开始编写代码前,需要明确实现的功能需求。一个简单的通讯录功能包含以下几个方面: 添加联系人; 显示联系人列表; 修改联系人信息; 删除联系人。 2. 设计数据结构 在C语言中,可以使用结构体来存储联系人的相关信息。为了方便,我们可以使用动态内存分配来动态地创建存储联系人的结构体。 typedef struc…

    C 2023年5月23日
    00
  • C++求1到n中1出现的次数以及数的二进制表示中1的个数

    C++求1到n中1出现的次数 题目描述 给定一个整数 n,求出从 1 到 n 中数字 1 出现的次数。 示例 1 输入: n = 13输出: 6解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13。 实现思路 本题需要一些数学知识和代码技巧。我们可以分三个部分来考虑: 设定一个变量 count,用来记录数字 1 出现的次数。 对于从 1 …

    C 2023年5月23日
    00
  • JS使用JSON作为参数实例分析

    下面是关于”JS使用JSON作为参数实例分析”的详细攻略: 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人们阅读和编写,并且易于机器解析和生成。它是基于JavaScript语言的一个子集,所以在JS中使用JSON是非常方便的事情。 JSON语法 JSON语法是JavaScript语法的子集。…

    C 2023年5月23日
    00
  • 详解如何使用C++写一个线程安全的单例模式

    题目中要求讲解如何使用C++写一个线程安全的单例模式,因此我们需要对单例模式及线程安全等方面进行说明。 单例模式 单例模式是一种创建型设计模式,它保证某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式只需要一个类就可以完成所有的功能,这个类可以被系统中的任何一个对象使用。单例模式具有以下特点: 只有一个实例对象。 对外提供一个访问该实例对…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部