Files
2026-03-05 13:39:39 +01:00

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--;
}
}