// 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(); }
// 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); }