銀行排隊叫號系統的模擬

模擬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

源代碼:

#include

#include

#include

#include

#include

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 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 << "普通客戶 進入排隊, 編號:" <

NormalUserQueue.push(user);

}

else if(user.type==1)

{

cout << "VIP客戶 ?進入排隊, ?編號:"<

VIPUserQueue.push(user);

}

else if (user.type == 2)

{

cout << "對公客戶 進入排隊, ?編號:" <

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();

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容