// Weist einem Fahrzeug ein Parkhaus mit Stellplatz zu
        public void StellplatzZuweisen(Fahrzeug fz, int ParkhausNummer, int StellplatzNummer)
        {
            if ((ParkhausNummer > 0) && (StellplatzNummer > 0))
            {
                // Parkhaus suchen
                for (int iParkhaus = 0; iParkhaus < AnzahlParkhaeuser; iParkhaus++)
                {
                    Parkhaus ph = ParkhausGet(iParkhaus);
                    if (ph.ParkhausNummer == ParkhausNummer)
                    {
                        // Parkhaus gefunden, Stellplatz suchen
                        for (int iStellplatz = 0; iStellplatz < ph.AnzahlStellplaetze; iStellplatz++)
                        {
                            Stellplatz sp = ph.StellPlaetze[iStellplatz];
                            if (sp.Nummer == StellplatzNummer)
                            {
                                // Stellplatz gefunden, Parkhaus und Stellplatz dem Fahrzeug zuweisen
                                fz.ParkhausNummer   = ph.ParkhausNummer;
                                fz.StellplatzNummer = sp.Nummer;
                            }
                        }
                    }
                }
            }
            // Stellplatzzuweisung löschen
            else
            {
                fz.ParkhausNummer   = 0;
                fz.StellplatzNummer = 0;
            }

            // Aktualisiert die Stellplatzzuordnugen in allen Parkhäusern
            StellplatzZuordnungAktualisieren();
        }
Exemple #2
0
        // Wird aufgerufen wenn ein anderes Parkhaus in der ComboBox ausgewählt wurde
        private void comboBoxParkhaus_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Prüfe ob Parkhaus ausgewählt wurde (Liste könnte auch leer sein)
            if (comboBoxParkhaus.Items.Count > 0)
            {
                // Nachdem ein anderes Parkhaus gewählt wurde, muss die ComboBox mit den
                // verfügbaren Stellplätzen neu gefüllt werden.
                // Lösche zunächst alle Einträge in der ComboBox für Stellpätze
                comboBoxStellplatz.Items.Clear();

                // Am Ende der Liste in der Parkhaus-ComboBox existiert eventuell der Spezialeintrag "Zuweisung löschen".
                // Falls dieser ausgwählt wurde, wird die Stellpatz-ComboBox nicht gefüllt.
                // Ein echtes Parkhaus wurde ausgewählt, wenn der Index in der Combobox kleiner als AnzahlParkhaeuser ist.
                if (comboBoxParkhaus.SelectedIndex < verwaltung.AnzahlParkhaeuser)
                {
                    // Hole Parkhaus-Objekt aus Parkhaus-Liste
                    // Der Index des ausgewählten Parkhauses in der ComboBox kann direkt verwendet werden,
                    //  um auf die Parkhausliste zuzugreifen.
                    Parkhaus ph = verwaltung.ParkhausGet(comboBoxParkhaus.SelectedIndex);

                    // Fülle ComboBox mit Stellplätzen
                    for (int iStellplatz = 0; iStellplatz < ph.AnzahlStellplaetze; iStellplatz++)
                    {
                        Stellplatz sp = ph.StellPlaetze[iStellplatz];

                        // Es werden nur folgende Stellpätze angezeigt:
                        //   - Stellplatztyp (PKW, LKW, Motorrad) muss identisch mit dem Fahrzeugtyp sein
                        //   - der Stellplatz muss frei sein
                        if ((fahrzeug.Typ == sp.Typ) && (sp.FreierStellplatz() == true))
                        {
                            comboBoxStellplatz.Items.Add(sp.Nummer);
                        }
                    }
                }
                else
                {
                    comboBoxStellplatz.Items.Add("-");
                }

                // Wähle ersten Stellplatz in der ComboBox aus, wenn mindestens ein Stellplatz vorhanden ist
                if (comboBoxStellplatz.Items.Count > 0)
                {
                    comboBoxStellplatz.SelectedIndex = 0;
                }
            }
        }
        // Konstruktor
        public Parkhaus(int pParkhausNummer, int pAnzahlStellplaetze, string pPLZ, string pOrt, string pStrasse)
        {
            ParkhausNummer = pParkhausNummer;

            // Addresse des Parkhauses abspeichern
            Ort     = pOrt;
            PLZ     = pPLZ;
            Strasse = pStrasse;

            // Anzahl der Stellplätze des Parkhauses abspeichern
            AnzahlStellplaetze = pAnzahlStellplaetze;

            // Array für Stellplatzobjekte erzeugen
            StellPlaetze = new Stellplatz[AnzahlStellplaetze];

            // Erzeuge Stellplatzobjekte und speichere sie im Array
            for (int index = 0; index < AnzahlStellplaetze; index++)
            {
                StellPlaetze[index] = new Stellplatz(index + 1);
            }
        }
        // Trägt das Kennzeichen jedes Fahrzeugs, das einen Stellplatzeintag besitzt,
        // in den jeweiligen Stellplatz des jeweiligen Parkhauses ein.
        // Die Funktion muss nach folgenden Aktionen aufgerufen werden:
        //    - nach dem Laden der Parkhäuser und Fahrzeuge
        //    - nach dem Löschen eines Fahrzeuges
        //    - nach dem Hinzufügen eines Fahrzeuges
        //    - nach der Zuweisung eines Stellplatzes zu einem Parkhaus
        //    - nach dem Löschen eines Parkhauses
        private void StellplatzZuordnungAktualisieren()
        {
            // Alle Stellplatzzuweisungen in allen Parkhäusern löschen
            for (int iParkhaus = 0; iParkhaus < AnzahlParkhaeuser; iParkhaus++)
            {
                Parkhaus ph = Parkhaeuser[iParkhaus];

                // Lösche alle Kennzeichen aus allen Stellplätzen
                for (int iStellplatz = 0; iStellplatz < ph.AnzahlStellplaetze; iStellplatz++)
                {
                    ph.StellPlaetze[iStellplatz].Kennzeichen = "";
                }
            }

            // Suche für alle Fahrzeuge mit zugeordenten Stellplatz das Stellplatzobjekt
            for (int iFahrzeug = 0; iFahrzeug < AnzahlFahrzeuge; iFahrzeug++)
            {
                Fahrzeug fz = Fahrzeuge[iFahrzeug];

                int ZugeordnetesParkhaus   = fz.ParkhausNummer;
                int ZugeordneterStellplatz = fz.StellplatzNummer;

                // Für gültige Stellplatzzuordnung müssen Parkhaus- und Stellplatznummer größer 0 sein
                if ((ZugeordnetesParkhaus > 0) && (ZugeordneterStellplatz > 0))
                {
                    // Wird auf true gesetzt, wenn Stellplatz gefunden wurde
                    bool StellplatzGefunden = false;

                    // Suche zugeordnetes Parkhause
                    for (int iParkhaus = 0; (iParkhaus < AnzahlParkhaeuser) && (StellplatzGefunden == false); iParkhaus++)
                    {
                        Parkhaus ph = Parkhaeuser[iParkhaus];
                        if (ph.ParkhausNummer == ZugeordnetesParkhaus)
                        {
                            // Parkhaus gefunden, suche zugeordneten Stellplatz
                            for (int iStellplatz = 0; (iStellplatz < ph.AnzahlStellplaetze) && (StellplatzGefunden == false); iStellplatz++)
                            {
                                Stellplatz sp = ph.StellPlaetze[iStellplatz];
                                // Zuweisung wenn
                                //   - Stellplatznummer übereinstimmt und
                                //   - Stellplatztyp mit Fahrzeugtyp übereinstimmt und
                                //   - Stellplatz frei ist
                                if ((ZugeordneterStellplatz == sp.Nummer) &&
                                    (sp.Typ == fz.Typ) &&
                                    (sp.Kennzeichen.Length == 0))
                                {
                                    sp.Kennzeichen     = fz.Kennzeichen;
                                    StellplatzGefunden = true;
                                }
                            }
                        }
                    }
                    // Lösche Stellplatzzuordnung im Fahrzeug,
                    //  - wenn der Parkhaus oder Stellplatz nicht gefunden wurde oder
                    //  - wenn der Stellplatz nicht frei ist
                    if (StellplatzGefunden == false)
                    {
                        fz.ParkhausNummer   = 0;
                        fz.StellplatzNummer = 0;
                    }
                }
            }
        }
        // Erzeugt ein Parkhaus Objekt aus einer Datenzeile.
        // Die Datenzeile wird geprüft.
        // Sind die Daten OK wird ein Parkhausobjekt erzeugt und zurückgegeben.
        // Sind die Daten nicht OK wird kein Parkhausobjekt erzeugt und es wird null zurückgegeben.
        // Jede Datenzeile muss folgendermassen aufgebaut sein
        // <Parkhausnummer>;<Ort>;<PLZ>;<Strasse>;<Typ Stellplatz 1>;<Typ Stellplatz 2>; .... <Typ Stellplatz N>
        // Beispiel: 1;Köln;51105;Westerwaldstr. 99;P;P;P;P;P;P;P
        public static Parkhaus ErzeugeParkhaus(
            string Datenzeile)
        {
            Parkhaus ph = null;

            int    Parkhausnummer     = 0;
            string Ort                = "";
            string PLZ                = "";
            string Strasse            = "";
            int    AnzahlStellplaetze = 0;

            bool DatenOk = true;

            string[] DataArray = Datenzeile.Split(';');

            // 4 Datenelemente (Nummer, Ort, PLZ, Strasse), dann nur noch Stellplatztypen
            AnzahlStellplaetze = DataArray.Length - 4;

            // Prüfe und kopiere Parkhausnummer
            if (DatenOk)
            {
                DatenOk = TextToParkhausnummer(DataArray[0], out Parkhausnummer);
            }

            // Prüfe und kopiere Ort
            if (DatenOk)
            {
                DatenOk = TextToOrt(DataArray[1], out Ort);
            }

            // Prüfe und kopiere PLZ
            if (DatenOk)
            {
                DatenOk = TextToPLZ(DataArray[2], out PLZ);
            }

            // Prüfe und kopiere Strasse
            if (DatenOk)
            {
                DatenOk = TextToStrasse(DataArray[3], out Strasse);
            }

            if (DatenOk)
            {
                // Erzeuge Parkhaus mit Stellplätzen
                ph = new Parkhaus(Parkhausnummer, AnzahlStellplaetze, PLZ, Ort, Strasse);

                // Setze Stellplatztyp für alle Stellplätze
                // In der Datenzeile steht
                //   L für LKW
                //   M für Motorrad
                //   alle anderen Werte für PKW
                for (int iStellplatz = 0; iStellplatz < ph.AnzahlStellplaetze; iStellplatz++)
                {
                    Stellplatz sp = ph.StellPlaetze[iStellplatz];
                    if (DataArray[4 + iStellplatz] == "L")
                    {
                        ph.StellPlaetze[iStellplatz].Typ = "LKW";
                    }
                    else if (DataArray[4 + iStellplatz] == "M")
                    {
                        ph.StellPlaetze[iStellplatz].Typ = "Motorrad";
                    }
                    else
                    {
                        ph.StellPlaetze[iStellplatz].Typ = "PKW";
                    }
                }
            }

            return(ph);
        }