clsQueueLine
#pragma once
#include <iostream>
#include "clsDate.h"
#include "queue"
#include "stack"
using namespace std;
class clsQueueLine
{
private:
short _TotalTickets = 0;
short _AverageServeTime = 0;
string _Prefix = "";
class clsTicket
{
private:
short _Number = 0;
string _Prefix;
string _TicketTime;
short _WaitingClients = 0;
short _AverageServeTime = 0;
short _ExpectedServeTime = 0;
public:
clsTicket(string Prefix, short Number, short WaitingClients, short AverageServeTime)
{
_Number = Number;
_TicketTime = clsDate::GetSystemDateTimeString();
_Prefix = Prefix;
_WaitingClients = WaitingClients;
_AverageServeTime = AverageServeTime;
}
string Prefix()
{
return _Prefix;
}
short Number()
{
return _Number;
}
string FullNumber()
{
return _Prefix + to_string(_Number);
}
string TicketTime()
{
return _TicketTime;
}
short WaitingClients()
{
return _WaitingClients;
}
short ExpectedServeTime()
{
return _AverageServeTime * _WaitingClients;
}
void Print()
{
cout << "\n\t\t\t _______________________\n";
cout << "\n\t\t\t\t " << FullNumber();
cout << "\n\n\t\t\t " << _TicketTime;
cout << "\n\t\t\t Wating Clients = " << _WaitingClients;
cout << "\n\t\t\t Serve Time In";
cout << "\n\t\t\t " << ExpectedServeTime() << " Minutes.";
cout << "\n\t\t\t _______________________\n";
}
};
public:
queue <clsTicket> QueueLine;
clsQueueLine(string Prefix, short AverageServeTime)
{
_Prefix = Prefix;
_TotalTickets = 0;
_AverageServeTime = AverageServeTime;
}
void IssueTicket()
{
_TotalTickets++;
clsTicket Ticket(_Prefix, _TotalTickets, WaitingClients(), _AverageServeTime);
QueueLine.push(Ticket);
}
int WaitingClients()
{
return QueueLine.size();
}
string WhoIsNext()
{
if (QueueLine.empty())
return "No Clients Left.";
else
return QueueLine.front().FullNumber();
}
bool ServeNextClient()
{
if (QueueLine.empty())
return false;
QueueLine.pop();
return true;
}
short ServedClients()
{
return _TotalTickets - WaitingClients();
}
void PrintInfo()
{
cout << "\n\t\t\t _________________________\n";
cout << "\n\t\t\t\tQueue Info";
cout << "\n\t\t\t _________________________\n";
cout << "\n\t\t\t Prefix = " << _Prefix;
cout << "\n\t\t\t Total Tickets = " << _TotalTickets;
cout << "\n\t\t\t Served Clients = " << ServedClients();
cout << "\n\t\t\t Wating Clients = " << WaitingClients(); ;
cout << "\n\t\t\t _________________________\n";
cout << "\n";
}
void PrintTicketsLineRTL()
{
if (QueueLine.empty())
cout << "\n\t\tTickets: No Tickets.";
else
cout << "\n\t\tTickets: ";
//we copy the queue in order not to lose the original
queue <clsTicket> TempQueueLine = QueueLine;
while (!TempQueueLine.empty())
{
clsTicket Ticket = TempQueueLine.front();
cout << " " << Ticket.FullNumber() << " <-- ";
TempQueueLine.pop();
}
cout << "\n";
}
void PrintTicketsLineLTR()
{
if (QueueLine.empty())
cout << "\n\t\tTickets: No Tickets.";
else
cout << "\n\t\tTickets: ";
//we copy the queue in order not to lose the original
queue <clsTicket> TempQueueLine = QueueLine;
stack <clsTicket> TempStackLine;
while (!TempQueueLine.empty())
{
TempStackLine.push(TempQueueLine.front());
TempQueueLine.pop();
}
while (!TempStackLine.empty())
{
clsTicket Ticket = TempStackLine.top();
cout << " " << Ticket.FullNumber() << " --> ";
TempStackLine.pop();
}
cout << "\n";
}
void PrintAllTickets()
{
cout << "\n\n\t\t\t ---Tickets---";
if (QueueLine.empty())
cout << "\n\n\t\t\t ---No Tickets---\n";
//we copy the queue in order not to lose the original
queue <clsTicket> TempQueueLine = QueueLine;
while (!TempQueueLine.empty())
{
TempQueueLine.front().Print();
TempQueueLine.pop();
}
}
};