生活随笔
收集整理的這篇文章主要介紹了
队列仿真一个银行叫号系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
利用隊列仿真一個銀行叫號系統,定義開戶、取款、存款、銷戶四種業務,每個業務時長不同,大家可以提前定義好(比如開戶20分鐘,取款15分鐘,存款10分鐘,銷戶25分鐘),定義m個服務窗口,隨機生成n個業務(放在隊列中存儲),編寫程序仿真出這m個窗口具體辦理的客戶的順序。
叫號系統的的輸出類似這樣:比如10個人,他們辦理的業務類型是隨機的,有3個服務窗口,輸出的是:
客戶1,1號窗口,
客戶2,2號窗口,
客戶3,3號窗口;
客戶4,3號窗口;
…….
#include<iostream>
using namespace std;
typedef struct User
{int id;int val;
}User;
User stu[7] = { {1,1},{2,2},{3,3},{4,3},{5,1},{6,4},{7,3} };//客戶數組
int timenum[5] = {0,20,15,10,25 };//操作時間數組,多設一個便于檢索
int account[3] = { 0 };//三個窗口時間變化數組
//char string[4][12] = {"開戶","取款","存款","銷戶"};
class Queue
{
public:int maxsize;int front;int rear;struct User* stx;Queue(int size)//初始化{maxsize = size;stx = new User[size];front = rear = 0;}~Queue(){delete[]stx;}bool EnQueue(User x)//入棧{if ((rear + 1) % maxsize == front){cout << "棧滿,溢出" << endl;return false;}stx[rear] = x;rear = (rear + 1) % maxsize;return true;}bool DeQueue(User &x)//出棧{if (front == rear){cout << "隊列為空" << endl;return false;}x = stx[front];front = (front + 1) % maxsize;return true;}
};int main()
{Queue queue(8);for (int i = 0;i < 7;i++)//初始化{queue.EnQueue(stu[i]);}User w[3],cru;for (int i = 0;i < 3;i++)//初始化窗口{queue.DeQueue(cru);w[i] = cru;account[i] = timenum[w[i].val];cout << "客戶" << w[i].id << " 窗口" << i+ 1 << endl;}while (queue.front != queue.rear)//循環{int j = 0;while (j< 3){if (account[j] == 0)//如果有窗口結束,則換人{queue.DeQueue(cru);w[j] = cru;account[j] = timenum[w[j].val];cout << "客戶" << w[j].id << " 窗口" << j + 1 << endl;//一旦交替,就輸出}j++;}for (int i = 0;i < 3;i++)//表示時間的流逝{account[i]--;}}return 0;
}
總結
以上是生活随笔為你收集整理的队列仿真一个银行叫号系统的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。