private Sitzplan sitzplanGenerieren(int anzahlTische, int schuelerMaxProTisch, int index, bool beachteFirma, bool beachteBeruf)
        {
            int             strafPunkteMin;
            int             strafPunkte = 0;
            List <Schueler> liste       = new List <Schueler>();
            Sitzplan        preSitzplan = new Sitzplan(anzahlTische, schuelerMaxProTisch);
            Sitzplan        sitzplan    = new Sitzplan(anzahlTische, schuelerMaxProTisch);

            liste.AddRange(this.schuelerListe);
            sitzplan.verteileSchueler(liste);
            strafPunkteMin = sitzplan.berechneStrafpunkte(this.schuelerListe, beachteFirma, beachteBeruf);
            //Den Besten Sitzplan aus 500 bestimmen
            for (int j = 0; j < 500; j++)
            {
                liste = new List <Schueler>();
                liste.AddRange(this.schuelerListe);
                preSitzplan.verteileSchueler(liste);
                strafPunkte = preSitzplan.berechneStrafpunkte(this.schuelerListe, beachteFirma, beachteBeruf);
                if (index > 0)
                {
                    strafPunkte += moeglichstWenigSitzpartnerDopplungen(index, preSitzplan);
                }
                if (strafPunkteMin > strafPunkte)
                {
                    strafPunkteMin = strafPunkte;
                    sitzplan       = new Sitzplan(preSitzplan);
                    if (strafPunkteMin == 0)
                    {
                        j = 500;
                    }
                }
            }
            return(sitzplan);
        }
        public TischgruppenAendernGUI(int blocknummer)
        {
            this.Title = string.Join(" ", "Block", (blocknummer + 1).ToString(), "ändern");
            InitializeComponent();
            startseite.IsEnabled = true;
            schuelerListDerKartei.AddRange(sitzplanKartei.getSchuelerListe());

            sitzplanFuerBlock = sitzplanKartei.getSitzplan(blocknummer);
            setUpData();
            setUpDataGrid();
        }
 // Standard mit 5 Tischgruppen und 6 Schülern maximal pro Tisch
 public void sitzplaeneGenerieren(bool beachteFirma, bool beachteBeruf)
 {
     if (schuelerListe.Count > 0)
     {
         //Erstellen der einzelnen Sitzpläne
         for (int i = 0; i < 6; i++)
         {
             sitzplaene[i] = new Sitzplan(sitzplanGenerieren(i, beachteFirma, beachteBeruf));
         }
         Console.WriteLine("sitzplan fertiggestellt");
     }
 }
예제 #4
0
 public Sitzplan(Sitzplan sitzplan)
 {
     this.maxProTisch  = 6;
     this.tischgruppen = new List <Tischgruppe>();
     for (int i = 0; i < sitzplan.getTischgruppen().Count; i++)
     {
         int j = 0;
         this.tischgruppen.Add(new Tischgruppe());
         foreach (Schueler schueler in sitzplan.getTischgruppe(i).getSitzplaetze())
         {
             this.tischgruppen[i].setzeSchueler(schueler, j);
             j++;
         }
     }
 }
 //Sitzplan verteilen mit variablen Gruppengrößen/Anzahl Tischgruppen
 public void sitzplaeneGenerieren(int anzahlTische, int schuelerMaxProTisch, bool beachteFirma, bool beachteBeruf)
 {
     if (schuelerListe.Count > 0)
     {
         if (anzahlTische * schuelerMaxProTisch < schuelerListe.Count)
         {
             throw new ArgumentOutOfRangeException("Schüleranzahl", "Die aktuelle Schueleranzahl ist größer als die Anzahl der Sitzplätze.");
         }
         //Erstellen der 6 einzelnen Sitzpläne
         for (int i = 0; i < 6; i++)
         {
             sitzplaene[i] = new Sitzplan(sitzplanGenerieren(anzahlTische, schuelerMaxProTisch, i, beachteFirma, beachteBeruf));
         }
         Console.WriteLine("sitzplan fertiggestellt");
     }
 }
 private SortedList <String, int> sitzNachbarnbestimmen(Sitzplan sitzplan, Schueler schuelerAusListe, SortedList <String, int> sitznachbarn)
 {
     foreach (Tischgruppe tischgruppe in sitzplan.getTischgruppen())
     {
         int sitzposition = tischgruppe.getSitzplaetze().IndexOf(schuelerAusListe);
         if (sitzposition >= 0)
         {
             //0 sitzt neben 1
             if (sitzposition == 0)
             {
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[1]);
             }
             //1 sitzt neben 0 und 2
             if (sitzposition == 1)
             {
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[2]);
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[0]);
             }
             //2 sitzt neben 1 und 3
             if (sitzposition == 2)
             {
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[1]);
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[3]);
             }
             //3 sitzt neben 4 und 2
             if (sitzposition == 3)
             {
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[4]);
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[2]);
             }
             //4 sitzt neben 5 und 3
             if (sitzposition == 4)
             {
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[5]);
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[3]);
             }
             //5 sitzt neben 4
             if (sitzposition == 5)
             {
                 sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[4]);
             }
         }
     }
     return(sitznachbarn);
 }
        private void BlockButton_Checked(object sender, RoutedEventArgs e)
        {
            string buttonName;

            RadioButton radio = sender as RadioButton;

            if (radio != null)
            {
                buttonName = radio.Name.ToString();
            }
            else
            {
                return;
            }

            blockNummer  = Int32.Parse(Regex.Replace(buttonName, "[^0-9 _]", "")) - 1;
            aktiverBlock = sitzplaene[blockNummer];
            var tischGruppen = aktiverBlock.getTischgruppen();

            App.Current.Properties["Block"] = aktiverBlock;
            assignSitzplanView(tischGruppen.Count);
        }
        //Sitzplan mit den vorherigen Plänen vergleichen
        private int moeglichstWenigSitzpartnerDopplungen(int index, Sitzplan sitzplan)
        {
            Sitzplan pruefen     = new Sitzplan(sitzplan);
            int      strafPunkte = 0;

            foreach (Schueler schuelerAusListe in this.schuelerListe)
            {
                SortedList <String, int> sitznachbarn = new SortedList <string, int>();
                //Vergleichen mit früheren Sitzplänen
                for (int i = index - 1; i >= 0; i--)
                {
                    sitznachbarn = sitzNachbarnbestimmen(this.sitzplaene[i], schuelerAusListe, sitznachbarn);
                }
                sitznachbarn = sitzNachbarnbestimmen(sitzplan, schuelerAusListe, sitznachbarn);
                for (int k = 0; k < sitznachbarn.Count; k++)
                {
                    if (sitznachbarn.Values[k] > 1)
                    {
                        strafPunkte += sitznachbarn.Values[k] * 1000;
                    }
                }
            }
            return(strafPunkte);
        }
 public void setSitzplaene(Sitzplan sitzplan, int index)
 {
     this.sitzplaene[index] = sitzplan;
 }