diff --git a/Caisses/Caisses.csproj b/Caisses/Caisses.csproj
index ac9707e..ff4d831 100644
--- a/Caisses/Caisses.csproj
+++ b/Caisses/Caisses.csproj
@@ -59,7 +59,7 @@
-
+
Form1.cs
diff --git a/Caisses/Checkout.cs b/Caisses/Checkout.cs
index 11344ca..ace3cb4 100644
--- a/Caisses/Checkout.cs
+++ b/Caisses/Checkout.cs
@@ -22,32 +22,16 @@ namespace Caisses
Clients = new List();
Open = false;
}
- public void Tick(int averageWaitingTime, int CrossoverTime)
+ public void Tick(int averageWaitingTime, int CrossoverTime, int openedCheckoutsCount)
{
- if (!Open && averageWaitingTime > CrossoverTime)
+ if (!Open && averageWaitingTime > CrossoverTime || openedCheckoutsCount == 0)
{
Open = true;
}
- if (Open && averageWaitingTime < CrossoverTime && Clients.Count == 0)
+ if (Open && averageWaitingTime < 1 && Clients.Count == 0 && openedCheckoutsCount > 1)
{
Open = false;
}
- /*
- if (Clients.Count != 0)
- {
- //This is the first client inline
- Client client = Clients[0];
- if (client.State == Client.ClientState.Inline)
- client.State = Client.ClientState.Checkout;
-
-
- if (client.CheckoutTime <= 0)
- {
- I think we need to do this processing in the store
- }
-
- }
- */
}
}
}
diff --git a/Caisses/GraphicalCheckout.cs b/Caisses/GraphicalCheckout.cs
index 06027b3..4cc0804 100644
--- a/Caisses/GraphicalCheckout.cs
+++ b/Caisses/GraphicalCheckout.cs
@@ -28,13 +28,37 @@ namespace Caisses
}
public void Draw(Bitmap checkoutAreaImage)
{
+ int radius = Math.Min(Size.Width, Size.Height / MAX_CAPACITY);
+ Size clientSize = new Size(radius,radius);
+ int xOffset = Size.Width / 2 - radius / 2;
Graphics g = Graphics.FromImage(checkoutAreaImage);
+
+
+
+
//g.DrawRectangle(new Pen(Color.FromArgb(Random.Next(0,255),Random.Next(0,255),Random.Next(0,255))),new Rectangle(Position,Size));
g.DrawRectangle(new Pen(Color.Black),new Rectangle(Position,Size));
if (Open)
{
g.FillRectangle(new SolidBrush(Color.Green),new Rectangle(Position, Size));
- g.DrawString(Clients.Count().ToString(), new Font("Arial", 16), new SolidBrush(Color.White), new PointF(Position.X, Position.Y));
+ //g.DrawString(Clients.Count().ToString(), new Font("Arial", 16), new SolidBrush(Color.White), new PointF(Position.X, Position.Y));
+
+ if(Clients.Count > 0)
+ {
+ for (int i = 0; i < Clients.Count; i++)
+ {
+ Point clientPos = new Point(Position.X + xOffset, (i) * clientSize.Height + Position.Y);
+ if (i == 0)
+ {
+ g.FillEllipse(Brushes.BlueViolet, new Rectangle(clientPos, clientSize));
+ g.DrawString(Clients[i].CheckoutTime.ToString(), new Font("Arial", 16), new SolidBrush(Color.White), clientPos);
+ }
+ else
+ {
+ g.FillEllipse(Brushes.Violet, new Rectangle(clientPos, clientSize));
+ }
+ }
+ }
}
else
{
diff --git a/Caisses/GraphicalClient.cs b/Caisses/GraphicalClient.cs
index 84d2e48..2b40cd8 100644
--- a/Caisses/GraphicalClient.cs
+++ b/Caisses/GraphicalClient.cs
@@ -60,11 +60,11 @@ namespace Caisses
g.DrawString(WaitingTime.ToString(), new Font("Arial", 16), new SolidBrush(Color.White), new PointF(Position.X, Position.Y));
break;
case ClientState.Inline:
- g.FillEllipse(new SolidBrush(Color.Violet), new RectangleF(Position, Size));
+ //g.FillEllipse(new SolidBrush(Color.Violet), new RectangleF(Position, Size));
break;
case ClientState.Checkout:
- g.FillEllipse(new SolidBrush(Color.Green), new RectangleF(Position, Size));
- g.DrawString(CheckoutTime.ToString(), new Font("Arial", 16), new SolidBrush(Color.Black), new PointF(Position.X, Position.Y));
+ //g.FillEllipse(new SolidBrush(Color.Green), new RectangleF(Position, Size));
+ //g.DrawString(CheckoutTime.ToString(), new Font("Arial", 16), new SolidBrush(Color.Black), new PointF(Position.X, Position.Y));
break;
default:
break;
diff --git a/Caisses/Store.cs b/Caisses/GraphicalStore.cs
similarity index 91%
rename from Caisses/Store.cs
rename to Caisses/GraphicalStore.cs
index 6aa0b1f..5c6ef0d 100644
--- a/Caisses/Store.cs
+++ b/Caisses/GraphicalStore.cs
@@ -67,25 +67,13 @@ namespace Caisses
FillStore(amountOfNewCLients);
}
- int cumulatedWaitingTime = 0;
- int averageWaitingTime = 0;
-
foreach (GraphicalClient client in Clients)
{
client.Tick();
- cumulatedWaitingTime += client.WaitingTime;
- }
- if (Clients.Count == 0)
- {
- averageWaitingTime = 0;
- }
- else
- {
- averageWaitingTime = cumulatedWaitingTime / Clients.Count;
}
foreach (GraphicalCheckout checkout in Checkouts)
{
- checkout.Tick(averageWaitingTime,CROSSOVER_TIME);
+ checkout.Tick(GetAverageWaitingTime(),CROSSOVER_TIME,GetAmountOfOpenCheckouts());
}
//Processing the checkout mechanism
@@ -207,22 +195,40 @@ namespace Caisses
}
return result;
}
+ public int GetAmountOfOpenCheckouts()
+ {
+ int result = 0;
+ foreach (GraphicalCheckout checkout in Checkouts)
+ {
+ if (checkout.Open)
+ {
+ result++;
+ }
+ }
+ return result;
+ }
public int GetAverageWaitingTime()
{
int cumulatedWaitingTime = 0;
int averageWaitingTime = 0;
+ int waitingClients = 0;
+
foreach (GraphicalClient client in Clients)
- {
- cumulatedWaitingTime += client.WaitingTime;
+ {
+ if (client.State == Client.ClientState.Waiting)
+ {
+ cumulatedWaitingTime += client.WaitingTime;
+ waitingClients += 1;
+ }
}
- if (Clients.Count == 0)
+ if (Clients.Count == 0 || waitingClients == 0)
{
averageWaitingTime = 0;
}
else
- {
- averageWaitingTime = cumulatedWaitingTime / Clients.Count;
+ {
+ averageWaitingTime = cumulatedWaitingTime / waitingClients;
}
return averageWaitingTime;