窗口排队系统c++要求:1窗口应有编号,业务类型,排队队列等属性2窗口数量无限制3窗口可以动态增加或删除,但存在排队的窗口不能被删除4窗口业务状态支持暂停,暂停时该窗口不再接受顾客排队5暂停的窗口支持业务恢复

时间: 2023-07-19 11:07:40 浏览: 37
以下是一个简单的窗口排队系统的C++代码,符合您的要求: ```cpp #include <iostream> #include <string> #include <vector> using namespace std; // 定义业务类型枚举 enum ServiceType { TYPE1, TYPE2, TYPE3 }; // 定义窗口类 class Window { public: Window(int id, ServiceType type) { this->id = id; this->type = type; this->isPaused = false; } // 获取窗口属性 int getId() { return id; } ServiceType getType() { return type; } bool getPaused() { return isPaused; } // 窗口业务状态控制 void pause() { isPaused = true; } void resume() { isPaused = false; } private: int id; // 窗口编号 ServiceType type; // 业务类型 bool isPaused; // 窗口是否暂停服务 }; // 定义排队队列类 class Queue { public: Queue(ServiceType type) { this->type = type; } // 添加窗口到队列 void addWindow(Window* window) { windows.push_back(window); } // 获取队列属性 ServiceType getType() { return type; } int getSize() { return windows.size(); } // 获取队列中等待服务的窗口 Window* getNextWindow() { for (auto it = windows.begin(); it != windows.end(); it++) { if (!(*it)->getPaused()) { return *it; } } return nullptr; } // 从队列中删除窗口 void removeWindow(Window* window) { for (auto it = windows.begin(); it != windows.end(); it++) { if (*it == window) { windows.erase(it); break; } } } private: ServiceType type; // 业务类型 vector<Window*> windows; // 窗口队列 }; // 定义窗口管理类 class WindowManager { public: // 动态添加窗口 void addWindow(ServiceType type) { int id = getLastWindowId() + 1; Window* window = new Window(id, type); windows.push_back(window); getQueue(type)->addWindow(window); } // 动态删除窗口 void removeWindow(Window* window) { if (!window->getPaused()) { getQueue(window->getType())->removeWindow(window); for (auto it = windows.begin(); it != windows.end(); it++) { if (*it == window) { windows.erase(it); break; } } delete window; } } // 获取所有窗口 vector<Window*> getAllWindows() { return windows; } // 获取所有队列 vector<Queue*> getAllQueues() { return queues; } // 业务暂停 void pause(Window* window) { if (!window->getPaused()) { window->pause(); getQueue(window->getType())->removeWindow(window); } } // 业务恢复 void resume(Window* window) { if (window->getPaused()) { window->resume(); getQueue(window->getType())->addWindow(window); } } private: vector<Window*> windows; // 窗口列表 vector<Queue*> queues; // 队列列表 // 获取上一个窗口的编号 int getLastWindowId() { if (windows.empty()) { return 0; } else { return windows.back()->getId(); } } // 获取业务类型对应的队列 Queue* getQueue(ServiceType type) { for (auto it = queues.begin(); it != queues.end(); it++) { if ((*it)->getType() == type) { return *it; } } Queue* queue = new Queue(type); queues.push_back(queue); return queue; } }; int main() { WindowManager wm; // 添加窗口 wm.addWindow(TYPE1); wm.addWindow(TYPE2); wm.addWindow(TYPE3); // 业务暂停 vector<Window*> windows = wm.getAllWindows(); wm.pause(windows[0]); wm.pause(windows[1]); // 业务恢复 wm.resume(windows[1]); // 删除窗口 wm.removeWindow(windows[0]); // 输出所有窗口和队列的属性 windows = wm.getAllWindows(); for (auto it = windows.begin(); it != windows.end(); it++) { cout << "Window " << (*it)->getId() << ": Type " << (*it)->getType() << ", Paused " << (*it)->getPaused() << endl; } vector<Queue*> queues = wm.getAllQueues(); for (auto it = queues.begin(); it != queues.end(); it++) { cout << "Queue Type " << (*it)->getType() << ": Size " << (*it)->getSize() << endl; } return 0; } ```

相关推荐

最新推荐

recommend-type

如何使用visual studio2019创建简单的MFC窗口(使用C++)

主要介绍了如何使用visual studio2019创建简单的MFC窗口(使用C++),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

VC实现A进程窗口嵌入到B进程窗口中显示的方法

主要介绍了VC实现A进程窗口嵌入到B进程窗口中显示的方法,对于理解windows程序运行原理的进程问题有一定的帮助,需要的朋友可以参考下
recommend-type

Visual C++窗口标题改变的几种方法.doc

Visual C++窗口标题改变的几种方法 在论坛中,经常有人会问到这个问题,所以今天整理了几种方法用来改变窗口标题,希望对这些朋友有所帮助。  一•单文档接口(SDI)类型窗口标题的改变  首先,我们来看Windows ...
recommend-type

C++二维动态数组的创建与删除

C++中用new动态创建二维数组的格式一般是这样:TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*[N],即是指向一个...
recommend-type

C++数据结构与算法之双缓存队列实现方法详解

主要介绍了C++数据结构与算法之双缓存队列实现方法,结合实例形式分析了双缓存队列的原理、实现方法与相关注意事项,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。