#ifndef QUEUE_H_
#define QUEUE_H_
class Customer
{
public:
Customer(){ m_arrive = m_processtime = 0; }
void set(long when);
long when()const{ return m_arrive; }
int ptime()const { return m_processtime; }
protected:
private:
long m_arrive;
int m_processtime;
};
typedef Customer Item;
class Queue
{
public:
Queue(int qs = Q_SIZE);
~Queue();
bool isempty() const;
bool isfull() const;
int queuecount()const;
bool enqueue(const Item &item);
bool dequeue(Item &item);
protected:
private:
struct Node {Item item; struct Node*next;};
enum {Q_SIZE = 10};
Node*m_front;
Node*m_rear;
int m_items;
const int m_qsize;
Queue(const Queue&q) :m_qsize(0){}
Queue&operator =(const Queue &q){ return *this; }
};
#endif
#include "queue.h"
#include <cstdlib>
Queue::Queue(int qs) : m_front(nullptr), m_rear(nullptr), m_items(0), m_qsize(qs)
{
}
Queue::~Queue()
{
Node*temp;
while (m_front!=nullptr)
{
temp = m_front;
m_front = m_front->next;
delete temp;
}
}
bool Queue::isempty() const
{
return m_items == 0;
}
bool Queue::isfull() const
{
return m_items == m_qsize;
}
int Queue::queuecount()const
{
return m_items;
}
bool Queue::enqueue(const Item &item)
{
if (isfull())
{
return false;
}
Node *add = new Node;
add->item = item;
add->next = nullptr;
m_items++;
if (m_front==nullptr)
{
m_front = add;
}
else
{
m_rear->next = add;
}
m_rear = add;
return true;
}
bool Queue::dequeue(Item &item)
{
if (m_front==nullptr)
{
return false;
}
item = m_front->item;
m_items--;
Node*temp = m_front;
m_front = m_front->next;
delete temp;
if (m_items==0)
{
m_rear = nullptr;
}
return true;
}
void Customer::set(long when)
{
m_processtime = std::rand() % 3 + 1;
m_arrive = when;
}
#include <iostream>
#include <cstdlib>
#include <ctime>
#include "queue.h"
const int MIN_PER_HR = 60;
using namespace std;
bool newcustomer(double x);
void main()
{
srand(std::time(0));
cout << "Case Study :Bank of Heather Automatic Teller\n";
cout << "Enter maximum size of queue: ";
int qs;
cin >> qs;
Queue line(qs);
cout << "Enter the number of simulation hours: ";
int hours;
cin >> hours;
long cyclelimit = MIN_PER_HR * hours;
cout << "Enter the average number of customers per hour: ";
double perhour;
cin >> perhour;
double min_per_cust;
min_per_cust = MIN_PER_HR;
Item temp;
long turnaways = 0;
long customers = 0;
int wait_time = 0;
long line_wait = 0;
long sum_line = 0;
long served = 0;
for (int cycle = 0; cycle < cyclelimit;cycle++)
{
if (newcustomer(min_per_cust))
{
if (line.isfull())
{
turnaways++;
}
else
{
customers++;
temp.set(cycle);
line.enqueue(temp);
}
}
if (wait_time<=0&&!line.isempty())
{
line.dequeue(temp);
wait_time = temp.ptime();
line_wait += cycle - temp.when();
served++;
}
if (wait_time>0)
{
wait_time--;
}
sum_line += line.queuecount();
}
cout<<"hello.."<<endl;
system("pause");
return ;
}
bool newcustomer(double x)
{
return (rand()*x / RAND_MAX < 1);
}