#include <stdio.h>
#include <stdlib.h>

void Condition1(float );
void Condition2(float );
void The_interval(float );
void Serving_Interval_Custm(float );
float serve(int);
float NumbOfCustomers;
float WaitingTime;
float AverageWaiting;
int queue;
int line1Busy;
int line2Busy;
int line1Delay;
int line2Delay;
int Customer_New;
int main(void)
{
float r;
int options;
int i;
for(i=0;i<10;i++)
{
printf("\nSimulation of a Restaurant By ---------------\n");
printf("\n\nPlease Select an Option[1-3]\n(1) If there is 1 line available\n(2) If there are 2 lines available\n(3) If you wish to EXIT Simulation\n");
scanf("%d",&options);
if(options == 3)
return 0;
printf("\n Enter the customer arrivaing rate \n");
scanf("%f",&r);
switch(options)
{
case 1: Condition1(r);break;
case 2: Condition2(r);break;
default: printf("*****ERROR: PLEASE ENTER A NUMERICAL VALUE*****");
}
}
return 0;
}
void Condition1(float r)
{
r = (r * 1.0) / 60;	// customer arrival rate per second
int i;
for(i=1;i<18;i++)
{
printf("\n interval %d :",i);
The_interval(r);
}
}
float serve(int c)
{
float salad1 = rand()%11+55;
float burger1 = rand()%20+111;
float salad2 = rand()%11+65;
float burger2 = rand()%20+121;
switch( rand() % 3)
{
case 0:
{
if(c == 1)
return salad1;
else
return salad2;
}
case 1:
{
if(c==1)
return burger1;
else
return burger2;
}
default:
{
if(c==1)
return (salad1+burger1);
else
return(salad2+burger2);
}
}
}
void The_interval(float r)
{
NumbOfCustomers = 0.0;
WaitingTime = 0.0;
AverageWaiting = 0.0;
queue = 0;
line1Busy = 0;
line2Busy = 0;
line1Delay = 0;
line2Delay = 0;
Customer_New = 0;
int i;
for(i=0;i<600;i++)
{
float salad1 = rand() % 11 + 55;
float burger1 = rand() % 20 + 111;
float salad2 = rand() % 11 + 65;
float burger2 = rand() % 20 + 121;
line1Delay--;
line2Delay--;
if(line1Busy == 1 && line1Delay <= 0)
{
line1Busy = 0;
line1Delay = 0;
}
if(line2Busy == 1 && line2Delay <= 0)
{line2Busy = 0;
line2Delay = 0;
}
float n = (float) rand() / (float) RAND_MAX;
if( r >= n )
Customer_New++;
int toss = rand() % 2;
if( ( (line1Busy == 0) && (line2Busy == 1 || toss == 1) ) && (Customer_New > 0))
{line1Busy = 1;
NumbOfCustomers++;
Customer_New--;
if(queue > 0)
queue;
switch( rand() % 3)
{
case 0:
WaitingTime += salad1; break;
case 1:
WaitingTime += burger1; break;
default:
WaitingTime += salad1 + burger1;
}
}
else if( line2Busy == 0 && (Customer_New > 0) )
{
line2Busy = 1;
NumbOfCustomers++;
Customer_New--;
if(queue > 0)
queue;
switch( rand() % 3)
{
case 0:
WaitingTime += salad2; break;
WaitingTime += burger2; break;
default:
WaitingTime += salad2 + burger2;
}}
else
{
queue++;
}
}
if(queue > 0)
printf("%d Average Waiting time is not available",queue);
else
{AverageWaiting = WaitingTime/NumbOfCustomers;
printf("Average Waiting Time for this Customer is: = %f \n",AverageWaiting);}}
int queue1;
int queue2;
void Condition2(float r)
{
r = (r * 1.0) / 60;
queue1 = 0;
queue2 = 0;
line1Delay = 0;
line2Delay = 0;
line1Busy = 0;
line2Busy = 0;
int i;
for(i=1;i<18;i++)
{
printf("\n interval %d :",i);
Serving_Interval_Custm(r);
}
getch();
}
void Serving_Interval_Custm(float r)
{
NumbOfCustomers = 0;
WaitingTime = 0;
AverageWaiting = 0;
int i;
for(i=0;i<600;i++)
{
float n = (float) rand() / (float) RAND_MAX;
if( r >= n )
{
if( queue1 == 0 )
{
line1Busy = 1;
NumbOfCustomers++;
line1Delay = serve(1);
WaitingTime += line1Delay;}
else if( queue2 == 0 )
{
line2Busy = 1;
NumbOfCustomers++;
line2Delay = serve(2);
WaitingTime += line2Delay;
}
if(queue1 !=0 && queue2 !=0)
{if(queue1 < queue2) //Service in the first line
queue1++;
else if(queue2 < queue1) // Service in the second line
queue2++;
else
{
switch(rand()%2)
{
case 0: queue1++;break;
case 1: queue2++;break;
}}}}
if(queue1 > 0)
{
if( line1Busy == 0 )
{
line1Busy = 1;
queue1;
line1Delay = serve(1);
WaitingTime += line1Delay;}
}if(queue2 > 0)
{if(line2Busy == 0)
{
line2Busy = 1;
queue2;
line2Delay = serve(2);
WaitingTime += line2Delay;
}}
if(line1Delay > 0)
line1Delay--;
else
line1Busy = 0;
if(line2Delay > 0)
line2Delay--;
else
line2Busy = 0;
}
if(queue1 > 0 || queue2 > 0)
printf("%d Average Waiting time is not available",queue);
else
{
if(NumbOfCustomers != 0)
{
AverageWaiting = WaitingTime/NumbOfCustomers;
printf("Average Waiting Time For This Customer is = %f Seconds\n",AverageWaiting);
}
else
printf("0 customers arrived\n");
}}

