使用C++实现银行排队叫号系统

1|0模拟20秒的输出结果

--------模拟开始-------- 初始化用户: 普通客户 进入排队, 编号:1000 VIP客户 进入排队, 编号:1001 普通客户 进入排队, 编号:1002 普通客户 进入排队, 编号:1003 VIP客户 进入排队, 编号:1004 VIP客户 进入排队, 编号:1005 VIP客户 进入排队, 编号:1006 对公客户 进入排队, 编号:1007 普通客户 进入排队, 编号:1008 VIP客户 进入排队, 编号:1009 普通客户 编号为: 1000 请进入0号普通窗口服务 普通客户 编号为: 1002 请进入1号普通窗口服务 普通客户 编号为: 1003 请进入2号普通窗口服务 VIP客户 编号为: 1001 请进入3号VIP窗口服务 对公客户 编号为: 1007 请进入4号对公窗口服务 -当前模拟时间:0s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1000 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1002 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1003 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1001 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 -当前模拟时间:1s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1000 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1002 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1003 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1001 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 -当前模拟时间:2s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1000 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1002 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1003 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1001 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 VIP客户 进入排队, 编号:1010 -当前模拟时间:3s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1000 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1002 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1003 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1001 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 对公客户 进入排队, 编号:1011 -当前模拟时间:4s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1000 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1002 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1003 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1001 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 对公客户 进入排队, 编号:1012 -当前模拟时间:5s - 窗口号:0 -等待服务- 窗口号:1 -等待服务- 窗口号:2 -等待服务- 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1001 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 普通客户 编号为: 1008 请进入0号普通窗口服务 普通客户 进入排队, 编号:1013 -当前模拟时间:6s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1008 窗口号:1 -等待服务- 窗口号:2 -等待服务- 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1001 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 普通客户 编号为: 1013 请进入1号普通窗口服务 普通客户 进入排队, 编号:1014 -当前模拟时间:7s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1008 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1013 窗口号:2 -等待服务- 窗口号:3 -等待服务- 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 普通客户 编号为: 1014 请进入2号普通窗口服务 VIP客户 编号为: 1004 请进入3号VIP窗口服务 普通客户 进入排队, 编号:1015 -当前模拟时间:8s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1008 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1013 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1014 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1004 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1007 VIP客户 进入排队, 编号:1016 -当前模拟时间:9s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1008 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1013 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1014 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1004 窗口号:4 -等待服务- 对公客户 编号为: 1011 请进入4号对公窗口服务 VIP客户 进入排队, 编号:1017 -当前模拟时间:10s - 窗口号:0 -等待服务- 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1013 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1014 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1004 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 普通客户 编号为: 1015 请进入0号普通窗口服务 普通客户 进入排队, 编号:1018 -当前模拟时间:11s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1015 窗口号:1 -等待服务- 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1014 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1004 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 普通客户 编号为: 1018 请进入1号普通窗口服务 VIP客户 进入排队, 编号:1019 -当前模拟时间:12s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1015 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1018 窗口号:2 -等待服务- 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1004 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 普通客户 进入排队, 编号:1020 -当前模拟时间:13s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1015 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1018 窗口号:2 -等待服务- 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1004 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 普通客户 编号为: 1020 请进入2号普通窗口服务 普通客户 进入排队, 编号:1021 -当前模拟时间:14s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1015 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1018 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1020 窗口号:3 -等待服务- 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 VIP客户 编号为: 1005 请进入3号VIP窗口服务 对公客户 进入排队, 编号:1022 -当前模拟时间:15s - 窗口号:0 -等待服务- 窗口号:1 -正在服务- 客户类型: 普通 客户编号: 1018 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1020 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1005 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 普通客户 编号为: 1021 请进入0号普通窗口服务 对公客户 进入排队, 编号:1023 -当前模拟时间:16s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1021 窗口号:1 -等待服务- 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1020 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1005 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 VIP客户 进入排队, 编号:1024 -当前模拟时间:17s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1021 窗口号:1 -等待服务- 窗口号:2 -正在服务- 客户类型: 普通 客户编号: 1020 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1005 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1011 对公客户 进入排队, 编号:1025 -当前模拟时间:18s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1021 窗口号:1 -等待服务- 窗口号:2 -等待服务- 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1005 窗口号:4 -等待服务- 对公客户 编号为: 1012 请进入4号对公窗口服务 对公客户 进入排队, 编号:1026 -当前模拟时间:19s - 窗口号:0 -正在服务- 客户类型: 普通 客户编号: 1021 窗口号:1 -等待服务- 窗口号:2 -等待服务- 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1005 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1012 VIP客户 进入排队, 编号:1027 -当前模拟时间:20s - 窗口号:0 -等待服务- 窗口号:1 -等待服务- 窗口号:2 -等待服务- 窗口号:3 -正在服务- 客户类型: VIP 客户编号: 1005 窗口号:4 -正在服务- 客户类型: 对公 客户编号: 1012 普通客户 进入排队, 编号:1028

1|1源代码

#include<iostream> #include<stdlib.h> #include<time.h> #include<queue> #include<Windows.h> using namespace std; class User { public: int userID; int type;//0为普通用户,1为VIP用户,2为对公用户. User() { type = 0; userID = 1000; } User(int t, int id) { userID = id, type = t; } }; class BankWindow { public: int id;//0,1,2,为普通窗口,3为VIP窗口,4为对公窗口. bool isBusy; User client; int serviceStartTime=0; BankWindow() { isBusy = false; } BankWindow(int i) { id = i; isBusy = false; } }; class Simulater { private: int serviceTime[3] = {4,6,8}; int initID = 1000; BankWindow bankWindow0; BankWindow bankWindow1; BankWindow bankWindow2; BankWindow bankWindow3; BankWindow bankWindow4; queue<User> NormalUserQueue, VIPUserQueue, OfficialUserQueue; public: Simulater() { bankWindow0.id = 0; bankWindow1.id = 1; bankWindow2.id = 2; bankWindow3.id = 3; bankWindow4.id = 4; srand(unsigned(time(0))); } void enterQueue(User user) { if (user.type == 0) { cout << "普通客户 进入排队, 编号:" <<user.userID<< endl; NormalUserQueue.push(user); } else if(user.type==1) { cout << "VIP客户 进入排队, 编号:"<<user.userID<<endl; VIPUserQueue.push(user); } else if (user.type == 2) { cout << "对公客户 进入排队, 编号:" <<user.userID<< endl; OfficialUserQueue.push(user); } else { cout << "用户类型出错!"; } } void output(User user) { if (user.type == 0) { cout << "普通客户 " << "编号为: " << user.userID; } else if (user.type == 1) { cout << "VIP客户 " << " 编号为: " << user.userID; } else if (user.type == 2) { cout << "对公客户 " << "编号为: " << user.userID; } else { cout << "用户类型错误!" << endl; } } void output2(User user) { if (user.type == 0) { cout << " 客户类型: " << "普通 "<< "客户编号: " << user.userID; } else if (user.type == 1) { cout << " 客户类型: " << "VIP " << "客户编号: " << user.userID; } else if (user.type == 2) { cout << " 客户类型: " << "对公 " << "客户编号: " << user.userID; } else { cout << " 用户类型错误!" << endl; } } void enterWindow(int time) { if (bankWindow0.isBusy == false && !NormalUserQueue.empty()) { bankWindow0.client = NormalUserQueue.front(); output(bankWindow0.client); cout<<" 请进入0号普通窗口服务" << endl; bankWindow0.isBusy = true; bankWindow0.serviceStartTime = time; NormalUserQueue.pop(); } if (bankWindow1.isBusy == false && !NormalUserQueue.empty()) { bankWindow1.client = NormalUserQueue.front(); output(bankWindow1.client); cout << " 请进入1号普通窗口服务" << endl; bankWindow1.isBusy = true; bankWindow1.serviceStartTime = time; NormalUserQueue.pop(); } if (bankWindow2.isBusy == false && !NormalUserQueue.empty()) { bankWindow2.client = NormalUserQueue.front(); output(bankWindow2.client); cout << " 请进入2号普通窗口服务" << endl; bankWindow2.isBusy = true; bankWindow2.serviceStartTime = time; NormalUserQueue.pop(); } if (bankWindow3.isBusy == false) { if (!VIPUserQueue.empty()) { bankWindow3.client = VIPUserQueue.front(); bankWindow3.isBusy = true; bankWindow3.serviceStartTime = time; VIPUserQueue.pop(); } else if (!NormalUserQueue.empty()) { bankWindow3.client = NormalUserQueue.front(); bankWindow3.isBusy = true; bankWindow3.serviceStartTime = time; NormalUserQueue.pop(); } else { } output(bankWindow3.client); cout << " 请进入3号VIP窗口服务" << endl; } if (bankWindow4.isBusy == false) { if (!OfficialUserQueue.empty()) { bankWindow4.client = OfficialUserQueue.front(); bankWindow4.isBusy = true; bankWindow4.serviceStartTime = time; OfficialUserQueue.pop(); } else if (!NormalUserQueue.empty()) { bankWindow4.client = NormalUserQueue.front(); bankWindow4.isBusy = true; bankWindow4.serviceStartTime = time; NormalUserQueue.pop(); } else {} output(bankWindow4.client); cout << " 请进入4号对公窗口服务" << endl; } } void display(int time) { cout << "-当前模拟时间:" << time << "s -" << endl; windowCondition(bankWindow0); windowCondition(bankWindow1); windowCondition(bankWindow2); windowCondition(bankWindow3); windowCondition(bankWindow4); } void customerEnter() { int type = rand() % 12;//不同概率生成用户. if (type >= 0 && type <= 5) { User u(0, initID); enterQueue(u); } if (type >= 6 && type <= 9) { User u(1, initID); enterQueue(u); } if (type >= 10 && type <= 11) { User u(2, initID); enterQueue(u); } initID++; } void windowCondition(BankWindow bankWindow) { cout << "窗口号:" << bankWindow.id<<" "; if (bankWindow.isBusy == true) { cout << "-正在服务-"; output2(bankWindow.client); } else { cout << "-等待服务-"; } cout << endl; } void isBusy(int time)//扫描一遍窗口,检测服务是否结束 { if (bankWindow0.isBusy == true) { if (time - bankWindow0.serviceStartTime >= serviceTime[bankWindow0.client.type]) { bankWindow0.isBusy = false; } } if (bankWindow1.isBusy == true) { if (time - bankWindow1.serviceStartTime >= serviceTime[bankWindow1.client.type]) { bankWindow1.isBusy = false; } } if (bankWindow2.isBusy == true) { if (time - bankWindow2.serviceStartTime >= serviceTime[bankWindow2.client.type]) { bankWindow2.isBusy = false; } } if (bankWindow3.isBusy == true) { if (time - bankWindow3.serviceStartTime >= serviceTime[bankWindow3.client.type]) { bankWindow3.isBusy = false; } } if (bankWindow4.isBusy == true) { if (time - bankWindow4.serviceStartTime >= serviceTime[bankWindow4.client.type]) { bankWindow4.isBusy = false; } } } void simulate() { int time = 0; cout << "--------模拟开始--------" << endl; cout << "初始化用户:" << endl; for (int i = 0; i < 10; i++) { customerEnter(); } enterWindow(time); while (1) { display(time); enterWindow(time); isBusy(time); if (time/2 != 0) { customerEnter();//没间隔两秒进入一位客户. } Sleep(1000); time++; if (time == 21) { getchar(); } } } }; int main() { Simulater simulater; simulater.simulate(); }

__EOF__

本文作者Rocky
本文链接https://www.cnblogs.com/nrocky/p/15229971.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -Rocky-  阅读(1390)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示