Beispiel #1
0
 public void NeuArbeitsplatz(Arbeitsplatz arb)
 {
     if (!this.arbeitsplatz.ContainsKey(arb.Nummer))
     {
         this.arbeitsplatz[arb.Nummer] = arb;
     }
     else
     {
         throw new Exception("Arbeitsplatz mit der Nummer " + arb.Nummer + " bereits vorhanden");
     }
 }
        /// <summary>
        /// findet die Reihenfolge für einen Aebreitsplatz
        /// </summary>
        /// <param name="arb">Arbeitsplatz objekt</param>
        /// <param name="tmp">temporäres Dictionary</param>
        private void ReihenfolgeAnpassung(Arbeitsplatz arb,ref Dictionary<int, int[]> tmp)
        {
            int lastPos;
              int counter=0;
              bool lastposChgd;
              bool notInserted;
              if (!tmp.ContainsKey(arb.Nummer))
              {
              tmp[arb.Nummer] = new int[arb.HergestelteTeile.Count];
              lastPos = arb.HergestelteTeile.Count - 1;
              foreach (ETeil hergestellt in arb.HergestelteTeile) // alle Teile die an diesem Arbeitsplatz hergestellt werden
              {
                  lastposChgd = false;
                  notInserted = true;
                  foreach (KeyValuePair<Teil, int> bestandTeil in hergestellt.Zusammensetzung) //die Teile aus dennen sich die hergestellten Teile Zusammensetzen
                  {
                      if (bestandTeil.Key is ETeil)
                      //Teil ist ETeil und wir produziert
                      {
                          if ((bestandTeil.Key.Lagerstand - bestandTeil.Key.VerbrauchAktuell) < 0) // Falls Verbrauch höher Lagerstand dieses Teil am Arbeitsplatz bevorzugen
                          {
                              tmp[arb.Nummer][lastPos] = hergestellt.Nummer;
                              lastposChgd = true;
                              notInserted = false;
                          }
                          if (bestandTeil.Key.Lagerstand - bestandTeil.Key.VerbrauchAktuell >= 0) // Falls Verbrauch kleiner/gleich Lagerstand
                          {
                              bool präferenz = false;
                              foreach (ETeil nachfolger in (bestandTeil.Key as ETeil).IstTeilVon) // Teile die von ersten Teil abhängig sind prüfen
                              {
                                  if (nachfolger.Lagerstand - nachfolger.VerbrauchAktuell < 0)
                                  {
                                      präferenz = true; // Diese Teile bevorzugen da nicht mehr vorhanden
                                      break;
                                  }
                              }
                              if (präferenz)
                              {
                                  int c = tmp[arb.Nummer][0];
                                  tmp[arb.Nummer][0] = hergestellt.Nummer;
                                  tmp[arb.Nummer][counter] = c;
                                  notInserted = false;

                              }
                              else
                              {
                                  tmp[arb.Nummer][counter] = hergestellt.Nummer;
                                  notInserted = false;

                              }
                          }
                      }
                  }//foreach KeyValuePair<Teil,int>
                  if (notInserted)
                  {
                      tmp[arb.Nummer][counter] = hergestellt.Nummer;
                  }
                  if (lastposChgd)
                  {
                      lastPos--;
                  }
                  else
                  {
                      counter++;
                  }
              }//foreach Eteil
              }//if
        }