124 lines
4.0 KiB
C++
124 lines
4.0 KiB
C++
/* *********************************************************************** */
|
|
/* main.cpp 980910 */
|
|
/* Innehåller huvudprogram för köhantering */
|
|
/* *********************************************************************** */
|
|
/* Daniel Westerberg */
|
|
/* Christian Ohlsson */
|
|
/* Anna-Maria Haglund */
|
|
/* Ingela Johansson */
|
|
/* Charlotta Lagerkvist */
|
|
/* *********************************************************************** */
|
|
#include "lab1.hpp"
|
|
|
|
/* *********************************************************************** */
|
|
/* Klassarray */
|
|
/* *********************************************************************** */
|
|
class queue q[K];
|
|
|
|
/* *********************************************************************** */
|
|
/* funktionsprototyper som denna fil innehåller */
|
|
/* *********************************************************************** */
|
|
void betala(int);
|
|
void print(long);
|
|
void addkund(void);
|
|
|
|
/* *********************************************************************** */
|
|
/* main med huvud-loop och delay */
|
|
/* *********************************************************************** */
|
|
void main()
|
|
{
|
|
long clock=STARTTID;
|
|
int kund=0;
|
|
|
|
while(!kbhit())
|
|
{
|
|
print(clock++);
|
|
if (++kund == SPM)
|
|
{
|
|
addkund();
|
|
kund=0;
|
|
}
|
|
for(int x=0; x<K; x++)
|
|
betala(x);
|
|
delay(MS/T);
|
|
}
|
|
}
|
|
|
|
/* *********************************************************************** */
|
|
/* print() */
|
|
/* skriver ut allting på skärmen */
|
|
/* INPUT: klockan */
|
|
/* OUTPUT: Tiden på skärmen */
|
|
/* *********************************************************************** */
|
|
void print(long cl)
|
|
{
|
|
for(int x=0; x<K; x++)
|
|
{
|
|
gotoxy(2,x+MOVEX);
|
|
cout << "Kassa nr " << (x+1) << "; Varor: " << q[x].pay(0) << ' ';
|
|
gotoxy(23,x+MOVEX);
|
|
cout << ", Kunder: " << q[x].queueSize() << ' ';
|
|
}
|
|
gotoxy(1,1);
|
|
cout<<"Tid: "<<(cl/(SPM*SPM))<<':'<<((cl/SPM)%SPM)<<':'<<(cl%SPM)<<" ";
|
|
}
|
|
|
|
/* *********************************************************************** */
|
|
/* betala() */
|
|
/* beräknar tiden för varorna och tar bort varor och kunder */
|
|
/* INPUT: position i klassarray */
|
|
/* OUTPUT: inget */
|
|
/* *********************************************************************** */
|
|
void betala(int pos)
|
|
{
|
|
if(q[pos].isEmpty()==0)
|
|
if(q[pos].pay(0))
|
|
{
|
|
q[pos].r++;
|
|
if(q[pos].r==R)
|
|
if(q[pos].pay(-1)==0)
|
|
q[pos].r=B;
|
|
else
|
|
q[pos].r=0;
|
|
}
|
|
else
|
|
if(q[pos].r>0)
|
|
q[pos].r--;
|
|
else
|
|
q[pos].dequeue();
|
|
}
|
|
|
|
/* *********************************************************************** */
|
|
/* addkund() */
|
|
/* lägger till en kund med ett slumpmässigt antal varor i den minsta kön */
|
|
/* INPUT: inget */
|
|
/* OUTPUT: inget */
|
|
/* *********************************************************************** */
|
|
void addkund()
|
|
{
|
|
int in, x, min, pos=0;
|
|
unsigned int slumptal;
|
|
srand((unsigned) time(NULL));
|
|
slumptal = rand()%CENT;
|
|
if (slumptal < FALL1)
|
|
in=0;
|
|
else if (slumptal < FALL2)
|
|
in=1;
|
|
else if (slumptal < FALL3)
|
|
in=2;
|
|
else
|
|
in=3;
|
|
while(in)
|
|
{
|
|
min=q[0].warez();
|
|
for(x=1; x<K; x++)
|
|
if (min>q[x].warez())
|
|
{
|
|
min=q[x].warez();
|
|
pos=x;
|
|
}
|
|
q[pos].enqueue(rand()%MAV+1);
|
|
in--;
|
|
}
|
|
}
|