예제 #1
0
        /// <summary>
        /// Legt ein neues E teil ein
        /// </summary>
        /// <param name="nr">Teilnummer</param>
        /// <param name="bestand">Bestand</param>
        /// <param name="verw">Verwendung{K,D,H,KDH}</param>
        public void NewTeil(int nr, string bezeichnung, int bestand, string verw)
        {
            if (!this.teile.ContainsKey(nr))
            {
                ETeil et = new ETeil(nr, bezeichnung);
                et.Lagerstand = bestand;
                et.Verwendung = verw;
                this.teile[nr] = et;

            }
            else
            {
                throw new InputException(string.Format("Es ist bereits ein Teil mit der nummer {0} vorhandet", nr));
            }
        }
예제 #2
0
 /// <summary>
 /// Fügt ein neues E teil hinzu
 /// </summary>
 /// <param name="teil">Objekt der KLasse E teil</param>
 public void AddETeil(ETeil teil)
 {
     if (!this.teile.ContainsKey(teil.Nummer))
     {
         this.teile[teil.Nummer] = teil;
     }
     else
     {
         throw new InputException(string.Format("Die Teilnummer {0} wird doppelt verwendet", teil.Nummer));
     }
 }
예제 #3
0
 public bool Equals(ETeil et)
 {
     if (this.nr == et.Nummer)
     {
         return true;
     }
     else
     {
         return false;
     }
 }
예제 #4
0
        private void VerbrauchBerechnen(ETeil teil)
        {
            foreach (KeyValuePair<Teil, int> kvp in teil.zusammensetzung)
              {
              if (kvp.Key.Nummer == 17 || kvp.Key.Nummer == 16 || kvp.Key.Nummer == 26)
              {
                  //Math.Ceiling berechnet ganzzahlig -> 7.2 wird zu 8
                  int Lagerbestand = Convert.ToInt32(Math.Ceiling(kvp.Key.Lagerstand / 3.0));
                  int Pufferwert = Convert.ToInt32(Math.Ceiling(kvp.Key.Pufferwert / 3.0));

                  ETeil eTemp = kvp.Key as ETeil;
                  int verbrauch = kvp.Value * teil.Produktionsmenge;
                  kvp.Key.VerbrauchAktuell += VerbrauchAlgorithmus(verbrauch, Lagerbestand, Pufferwert, eTemp.InWarteschlange);
                  //kvp.Key.VerbrauchAktuell += (kvp.Value * teil.Produktionsmenge) - Lagerbestand + Pufferwert - eTemp.InWarteschlange;

                  //TODO: was hat der Zähler c zu bedeutet?
                  if (c < 4 && kvp.Key.Lagerstand % 3 != 0)
                  {
                      kvp.Key.VerbrauchAktuell += 1;
                      c++;
                  }
              }
              else
              {
                  if (kvp.Key is Kaufteil)
                  {
                      //Lagerwert wird in PrimaerPlanung abgezogen
                      //kvp.Key.VerbrauchAktuell += (kvp.Value * teil.Produktionsmenge) - kvp.Key.Lagerstand + kvp.Key.Pufferwert;
                      int verbrauch = kvp.Value * teil.Produktionsmenge;
                      kvp.Key.VerbrauchAktuell += VerbrauchAlgorithmus(verbrauch, kvp.Key.Lagerstand, kvp.Key.Pufferwert, kvp.Key.Warteschlange);

                      if(kvp.Key.Warteschlange != 0)
                      {
                          Console.WriteLine(kvp.Key.Warteschlange);
                      }

                      kvp.Key.VerbrauchPrognose1 += kvp.Value * teil.VerbrauchPrognose1;
                      kvp.Key.VerbrauchPrognose2 += kvp.Value * teil.VerbrauchPrognose2;
                      kvp.Key.VerbrauchPrognose3 += kvp.Value * teil.VerbrauchPrognose3;

                  }
                  else
                  {
                      ETeil e = kvp.Key as ETeil;
                      int verbrauch = kvp.Value * teil.Produktionsmenge;
                      e.VerbrauchAktuell += VerbrauchAlgorithmus(verbrauch, e.Lagerstand, e.Pufferwert, e.InWarteschlange);
                      //e.VerbrauchAktuell += (kvp.Value * teil.Produktionsmenge) - e.Lagerstand + e.Pufferwert - e.InWarteschlange;
                  }
              }

              if(kvp.Key is ETeil)
              {
                  //TODO: Warum hier ein if? Sonderbehandlung notwendig?
                  /*if (kvp.Key.Nummer == 51 ||kvp.Key.Nummer == 16)
                  {
                   *
                  }*/

                  ETeil eteil = kvp.Key as ETeil;

                  if (eteil.VerbrauchAktuell < 0) {
                    eteil.Produktionsmenge = 0;
                  } else {
                    eteil.Produktionsmenge = eteil.VerbrauchAktuell;
                  }

                  eteil.VerbrauchPrognose1 += kvp.Value * teil.VerbrauchPrognose1;
                  eteil.VerbrauchPrognose2 += kvp.Value * teil.VerbrauchPrognose2;
                  eteil.VerbrauchPrognose3 += kvp.Value * teil.VerbrauchPrognose3;

                  VerbrauchBerechnen(eteil);
              }
              }
        }
예제 #5
0
        /// <summary>
        /// Berechnung: ProdMenge = aktuellerVerbrauch - Lagerbestand + Puffer
        /// </summary>
        private void PrimaereProduktionsplanung()
        {
            //TODO: Berücksichtung von Warteschlangen?!?
              ETeil p1 = this.cont.ETeilList[0];
              //p1.Produktionsmenge = - p1.Lagerstand + p1.Pufferwert; // +p1.Warteschlange;

              p1.Produktionsmenge = VerbrauchAlgorithmus( p1.VerbrauchAktuell, p1.Lagerstand, p1.Pufferwert, p1.Warteschlange);

              if(p1.Produktionsmenge > 0)
              {
              VerbrauchBerechnen(p1);
              }

              // Teile 16, 17 und 26 werden für alle drei Primärprodukte benötigt
              ETeil teil16 = cont.GetTeil(16) as ETeil;
              ETeil teil17 = cont.GetTeil(17) as ETeil;
              ETeil teil26 = cont.GetTeil(26) as ETeil;

              ETeil teil16tmp = new ETeil(16, "");
              ETeil teil17tmp = new ETeil(17, "");
              ETeil teil26tmp = new ETeil(26, "");

              teil16tmp.VerbrauchAktuell = teil16.VerbrauchAktuell;
              teil16tmp.VerbrauchPrognose1 = teil16.VerbrauchPrognose1;
              teil16tmp.VerbrauchPrognose2 = teil16.VerbrauchPrognose2;
              teil16tmp.VerbrauchPrognose3 = teil16.VerbrauchPrognose3;
              teil16.VerbrauchAktuell = 0;
              teil16.VerbrauchPrognose1 = 0;
              teil16.VerbrauchPrognose2 = 0;
              teil16.VerbrauchPrognose3 = 0;

              teil17tmp.VerbrauchAktuell = teil17.VerbrauchAktuell;
              teil17tmp.VerbrauchPrognose1 = teil17.VerbrauchPrognose1;
              teil17tmp.VerbrauchPrognose2 = teil17.VerbrauchPrognose2;
              teil17tmp.VerbrauchPrognose3 = teil17.VerbrauchPrognose3;
              teil17.VerbrauchAktuell = 0;
              teil17.VerbrauchPrognose1 = 0;
              teil17.VerbrauchPrognose2 = 0;
              teil17.VerbrauchPrognose3 = 0;

              teil26tmp.VerbrauchAktuell = teil26.VerbrauchAktuell;
              teil26tmp.VerbrauchPrognose1 = teil26.VerbrauchPrognose1;
              teil26tmp.VerbrauchPrognose2 = teil26.VerbrauchPrognose2;
              teil26tmp.VerbrauchPrognose3 = teil26.VerbrauchPrognose3;
              teil26.VerbrauchAktuell = 0;
              teil26.VerbrauchPrognose1 = 0;
              teil26.VerbrauchPrognose2 = 0;
              teil26.VerbrauchPrognose3 = 0;

              ETeil p2 = this.cont.ETeilList[1];
              //p2.Produktionsmenge = p2.VerbrauchAktuell - p2.Lagerstand + p2.Pufferwert;// -p2.InWarteschlange;
              p2.Produktionsmenge = VerbrauchAlgorithmus(p2.VerbrauchAktuell, p2.Lagerstand, p2.Pufferwert, p2.Warteschlange);

              if (p2.Produktionsmenge > 0)
              {
              VerbrauchBerechnen(p2);
              }

              // Teile 16, 17 und 26 werden für alle drei Primärprodukte benötigt
              teil16tmp.VerbrauchAktuell += teil16.VerbrauchAktuell;
              teil16tmp.VerbrauchPrognose1 += teil16.VerbrauchPrognose1;
              teil16tmp.VerbrauchPrognose2 += teil16.VerbrauchPrognose2;
              teil16tmp.VerbrauchPrognose3 += teil16.VerbrauchPrognose3;
              teil16.VerbrauchAktuell = 0;
              teil16.VerbrauchPrognose1 = 0;
              teil16.VerbrauchPrognose2 = 0;
              teil16.VerbrauchPrognose3 = 0;

              teil17tmp.VerbrauchAktuell += teil17.VerbrauchAktuell;
              teil17tmp.VerbrauchPrognose1 += teil17.VerbrauchPrognose1;
              teil17tmp.VerbrauchPrognose2 += teil17.VerbrauchPrognose2;
              teil17tmp.VerbrauchPrognose3 += teil17.VerbrauchPrognose3;
              teil17.VerbrauchAktuell = 0;
              teil17.VerbrauchPrognose1 = 0;
              teil17.VerbrauchPrognose2 = 0;
              teil17.VerbrauchPrognose3 = 0;

              teil26tmp.VerbrauchAktuell += teil26.VerbrauchAktuell;
              teil26tmp.VerbrauchPrognose1 += teil26.VerbrauchPrognose1;
              teil26tmp.VerbrauchPrognose2 += teil26.VerbrauchPrognose2;
              teil26tmp.VerbrauchPrognose3 += teil26.VerbrauchPrognose3;
              teil26.VerbrauchAktuell = 0;
              teil26.VerbrauchPrognose1 = 0;
              teil26.VerbrauchPrognose2 = 0;
              teil26.VerbrauchPrognose3 = 0;

              ETeil p3 = this.cont.ETeilList[2];
              //p3.Produktionsmenge = p3.VerbrauchAktuell - p3.Lagerstand + p3.Pufferwert;// -p3.InWarteschlange;
              p3.Produktionsmenge = VerbrauchAlgorithmus(p3.VerbrauchAktuell, p3.Lagerstand, p3.Pufferwert, p3.Warteschlange);

              if (p3.Produktionsmenge > 0)
              {
              VerbrauchBerechnen(p3);
              }

              // Teile 16, 17 und 26 werden für alle drei Primärprodukte benötigt
              teil16.VerbrauchAktuell += teil16tmp.VerbrauchAktuell;
              teil16.VerbrauchPrognose1 += teil16tmp.VerbrauchPrognose1;
              teil16.VerbrauchPrognose2 += teil16tmp.VerbrauchPrognose2;
              teil16.VerbrauchPrognose3 += teil16tmp.VerbrauchPrognose3;

              teil17.VerbrauchAktuell += teil17tmp.VerbrauchAktuell;
              teil17.VerbrauchPrognose1 += teil17tmp.VerbrauchPrognose1;
              teil17.VerbrauchPrognose2 += teil17tmp.VerbrauchPrognose2;
              teil17.VerbrauchPrognose3 += teil17tmp.VerbrauchPrognose3;

              teil26.VerbrauchAktuell += teil26tmp.VerbrauchAktuell;
              teil26.VerbrauchPrognose1 += teil26tmp.VerbrauchPrognose1;
              teil26.VerbrauchPrognose2 += teil26tmp.VerbrauchPrognose2;
              teil26.VerbrauchPrognose3 += teil26tmp.VerbrauchPrognose3;
        }
예제 #6
0
        /// <summary>
        /// Berücksichtigt, dass für ETeile in der Warteschlange noch die Komponententeile aus dem Lager geholt werden müssen.
        /// </summary>
        /// <param name="eteil">Das ETeil in der Warteschlange.</param>
        private void LagerbestandAbziehenZusammengesetzteTeile(ETeil eteil)
        {
            foreach (KeyValuePair<Teil, int> kvp in eteil.Zusammensetzung)
            {
                Teil teil = DataContainer.Instance.GetTeil(kvp.Key.Nummer);
                teil.Lagerstand -= eteil.InWarteschlange * kvp.Value;

                if (teil is ETeil)
                {
                    ETeil eteilNeu = teil as ETeil;
                    this.LagerbestandAbziehenZusammengesetzteTeile(eteilNeu);
                }
            }
        }