Пример #1
0
 public void VerwijderKOBRij(KOBRij rij)
 {
     if (rij != null && Rijen.Contains(rij))
     {
         Rijen.Remove(rij);
     }
 }
Пример #2
0
 public void BerekenResultaat()
 {
     Resultaat = Rijen.Sum(r => r.Resultaat);
     if (Formule == Formule.FormuleKost1)
     {
         Resultaat *= 12;
     }
 }
Пример #3
0
 public void VulKOBRijIn(KOBRij rij)
 {
     if (ControleerOfKOBRijMetNummerAlIngevuldIs(rij.KOBRijId))
     {
         Rijen.Remove(GeefKOBRijMetNummer(rij.KOBRijId));
     }
     Rijen.Add(rij);
 }
Пример #4
0
        public List <State> Run()
        {
            List <State> states = new List <State>();

            for (int i = 0; i < Iteraties; i++)
            {
                if (Visualiseer)
                {
                    Display.Show(this);
                    Thread.Sleep(300);
                    //Console.ReadKey();
                }

                states.Add(new State
                {
                    AantalKlanten = Rijen.Sum(r => r.Count),
                    AVGRijlengte  = Rijen.Average(r => Convert.ToDouble(r.Count)),
                    Weggelopen    = Step(),
                    AantalKassas  = Rijen.Where(rij => rij.IsOpen).Count()
                });
            }

            return(states);
        }
Пример #5
0
 public bool ControleerOfKOBRijMetNummerAlIngevuldIs(int nummer)
 {
     return(Rijen.Any(r => r.KOBRijId == nummer));
 }
Пример #6
0
 public KOBRij GeefKOBRijMetNummer(int nummer)
 {
     return(Rijen.FirstOrDefault(r => r.KOBRijId == nummer));
 }
Пример #7
0
        /// <summary>
        /// Update de huidige staat met een tijdstap
        /// </summary>
        public int Step()
        {
            List <Klant> verwijder = new List <Klant>();

            // Klanten
            for (int i = 0; i < IntroductionTimes[CurrentTime]; i++)
            {
                Klanten.Add(new Klant(R.Next(1, 150), R.Next(0, 5), 40)); //TODO Hardcoded Value!!!
            }
            int klantenweggelopen = 0;

            foreach (Klant k in Klanten)
            {
                k.Opgeven -= 1;
                Rij huidig = null;
                try
                {
                    huidig = Rijen.Find(r => r.Bevat(k));
                }
                catch (ArgumentNullException) { /* huidig blijft null */ }


                switch (Klant.Besluit(k, huidig, Kortste))
                {
                case Klant.KlantActie.Blijf:
                    break;

                case Klant.KlantActie.WisselNaarKortste:
                    Kortste.Push(k);
                    if (huidig != null)
                    {
                        huidig.Pop(k);
                    }
                    break;

                case Klant.KlantActie.GeefOp:
                    verwijder.Add(k);
                    Uitgestapt.Add(k);
                    klantenweggelopen++;
                    break;
                }
            }

            // Rijen
            // Ik heb de voortgang nu gedaan voor het wisselen van de klanten, anders krijg je rare situaties waar er 3 mensen in 1 rij staan terwijl er ook een rij leeg is.

            foreach (Rij r in Rijen)
            {
                r.Step();

                if (r.klanten.Count != 0)       //Zodat head niet aangeroepen word op een lege lijst
                {
                    if (r.Head.Voortgang >= 10) //Aangezien de voortang alleen omhoog gaat moeten we poppen op een standaard hoge value, ipv op 0
                    {
                        verwijder.Add(r.Head);
                    }
                }


                foreach (Klant kl in verwijder) // Ga langs alle klanten in de verwijder lijst en haal ze uit de rijen, een probleempje ik weet niet of self-checkout kassas in de rijen lijst mogen
                {
                    if (r.Bevat(kl))
                    {
                        r.Pop(kl);
                        Klanten.Remove(kl);
                    }
                }
            }

            if (Kortste.Count < 3 && Sluitbaar.Count > 0)
            {
                Sluitbaar.Last().Sluit();
            }

            if (Gesloten.Count > 0 && Kortste.Count > 4 && CurrentTime % 5 == 0)
            {
                Gesloten[0].Open();
            }

            // Tijd
            CurrentTime += 1;
            return(klantenweggelopen);
        }