// Lädt die Daten aller Parkhäuser aus einer Datei private void LadenParkhaueser() { string Textzeile; // Öffne Textdatei zum Lesen // Hier fehlt noch die Fehlerbehandlung, falls Datei nicht geöffnet werden kann System.IO.StreamReader file = new System.IO.StreamReader(@"Parkhaeuser.txt"); // Schleife bis alle Textzeilen gelesen wurden while ((Textzeile = file.ReadLine()) != null) { // Prüfe Datenzeile und erzeuge Parkhaus, wenn Datenzeile OK ist. // Die Funktion Parkhaus.ErzeugeParkhaus gibt ein Parkhaus-Objekt zurück, // wenn die Datenzeile Ok ist, sonst wird null zurückgegeben. Parkhaus ph = Parkhaus.ErzeugeParkhaus(Textzeile); if (ph != null) { // Datenzeile war OK und Parkhaus wurde erzeugt // Füge Parkhaus zur Parkhausliste hinzu Parkhaeuser.Add(ph); } } // Schliesse Datei nachdem alle Daten gelesen wurden file.Close(); }
// Kontruktor für den Stellplatz zuweisen Dialog public FormStellplatzZuweisen(Verwaltung pVerwaltung, Fahrzeug pFahrzeug) { verwaltung = pVerwaltung; fahrzeug = pFahrzeug; // Initialisiere alle Elemente des Dialogs // Der Inhalt dieser Funktion wird von Visual Studio erzeugt und soll nicht mauell verändert werden InitializeComponent(); // Fülle Combobox mit allen vorhandenen Parkhäusern for (int iParkhaus = 0; iParkhaus < verwaltung.AnzahlParkhaeuser; iParkhaus++) { // Hole Parkhaus-Objekt aus der Parkhausliste Parkhaus ph = verwaltung.ParkhausGet(iParkhaus); // Füge Parkhaus (Nummer, Ort, Strasse) zur Combobox hinzu comboBoxParkhaus.Items.Add("Parkhaus " + ph.ParkhausNummer + ", " + ph.Ort + ", " + ph.Strasse); } // Füge zusätzlichen Eintrag "Zuweisung löschen" hinzu, wenn Fahrzeug bereits einen zugwiesenen Stellplatz hat if ((fahrzeug.ParkhausNummer > 0) && (fahrzeug.StellplatzNummer > 0)) { comboBoxParkhaus.Items.Add("Stellplatzzuweisung löschen"); } // Wähle erstes (Index = 0) Parkhaus aus comboBoxParkhaus.SelectedIndex = 0; }
// 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; } } }
// Speichert die Daten aller Parkhäuser in einer Datei // Die Daten eines Parkhauses sind in einer Zeile gespeichert // Die einzelnen Daten eines Parkhauses sind durch das Zeichen ; getrennt private void SpeichernParkhaueser() { // Öffne Datei zum Schreiben der Parkhausdaten System.IO.StreamWriter file = new System.IO.StreamWriter("Parkhaeuser.txt"); // Schleife über alle Parkhaeuser for (int ii = 0; ii < AnzahlParkhaeuser; ii++) { // Hole Parkhausobjekt aus der Parkhausliste Parkhaus ph = ParkhausGet(ii); // Wandle Parkhausobjekt in String und speichere diesen als Textzeile in Datei file.WriteLine(ph.ToString()); } // Schliesse Datei nachdem alle Daten geschrieben wurden file.Close(); }
// Aktualisiert die Darstellung der Parkhäuser im Hauptfenster private void ViewParkhaeuser_Update() { // Lösche alle Einträge im Listview listViewParkhaeuser.Items.Clear(); // Füge die Daten aller Parkhäuser zum Listview hinzu for (int ii = 0; ii < Verwaltung.AnzahlParkhaeuser; ii++) { // Hole Parkhausobjekt aus der Parkhausliste Parkhaus ph = Verwaltung.ParkhausGet(ii); // Alle dargestellten Daten eines Parkhauses werden in ein Array kopiert // Das Array entspricht einer Zeile im Listview // Jedes Array-Element entspricht dabei einer Spalte im Listview string[] ListviewZeile = new string[7]; // Spalten 1: Parkhausnummer ListviewZeile[0] = ph.ParkhausNummer.ToString(); // Spalten 2 - 4: Addresse ListviewZeile[1] = ph.PLZ; ListviewZeile[2] = ph.Ort; ListviewZeile[3] = ph.Strasse; // Spalte 5: Anzahl der PKW Stellplätze (Belegt/Frei) ListviewZeile[4] = ph.AnzahlStellplaetze_Belegt_Typ("PKW").ToString() + " von " + ph.AnzahlStellplaetze_Typ("PKW").ToString(); // Spalte 6: Anzahl der LKW Stellplätze (Belegt/Frei) ListviewZeile[5] = ph.AnzahlStellplaetze_Belegt_Typ("LKW").ToString() + " von " + ph.AnzahlStellplaetze_Typ("LKW").ToString(); // Spalte 7: Anzahl der Motorrad Stellplätze (Belegt/Frei) ListviewZeile[6] = ph.AnzahlStellplaetze_Belegt_Typ("Motorrad").ToString() + " von " + ph.AnzahlStellplaetze_Typ("Motorrad").ToString(); // Füge neue Zeile mit Parkhausdaten zum Listview hinzu listViewParkhaeuser.Items.Add(new ListViewItem(ListviewZeile)); } // Passe die Breite aller Spalten so an, dass alle Daten sichtbar sind foreach (ColumnHeader ch in listViewParkhaeuser.Columns) { ch.Width = -2; } }
// Funktion wird aufgerufen wenn der Übernehmen Button gedrückt wurde // Die Funktion weist dem Fahrzeug den ausgewählten Stellplatz im ausgewählten Parkhaus zu. private void buttonUebernehmen_Click(object sender, EventArgs e) { // Es muss ein Parkhaus und ein Stellplatz ausgewählt ein if ((comboBoxParkhaus.Items.Count > 0) && (comboBoxStellplatz.Items.Count > 0)) { // Am Ende der Liste in der Parkhaus-ComboBox existiert eventuell der Spezialeintrag "Zuweisung löschen". // 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); // Lese Stellplatznummer aus der ComboBox und wandle sie in einen int Wert um // Der Index des ausgewählten Stellplatzes in der ComboBox kann NICHT direkt verwendet werden, // um auf die Stellplatzliste zuzugreifen, da nicht alle Stellplätze (nicht frei, falscher Typ) // in die ComboBox eingetragen wurden. int StellplatzNummer = 0; if (Int32.TryParse(comboBoxStellplatz.Text, out StellplatzNummer) == true) { // Die Stellplatzzuweisung für das Fahrzeug mit der ausgewählten // Parkhaus-und Stellplatznummer wird von der Verwaltungsklasse durchgeführt verwaltung.StellplatzZuweisen(fahrzeug, ph.ParkhausNummer, StellplatzNummer); } } // Spezialeintrag "Zuweisung löschen" wurde gewählt else { // Durch übergabe der 0 für die Parkhaus und Stellplatznummer wird die Zuweisung gelöscht // verwaltung.StellplatzZuweisen(fahrzeug, 0, 0); } } }
// Speichert alle Daten, Dialogfenster wird anschliesen geschlossen private void buttonUebernehmen_Click(object sender, EventArgs e) { string PLZ; string Ort; string Strasse; int AnzahlStellplaetze; // Alle Parkhausdaten aus den Texboxen auslesen Parkhaus.TextToPLZ(textBoxPLZ.Text, out PLZ); Parkhaus.TextToOrt(textBoxOrt.Text, out Ort); Parkhaus.TextToStrasse(textBoxStrasse.Text, out Strasse); Parkhaus.TextToAnzahlStellplaetze(textBoxAnzahlParkplaetze.Text, out AnzahlStellplaetze); // Neues Parkhaus mit eingegebenen Daten erzeugen Parkhaus = new Parkhaus(ParkhausNummer, AnzahlStellplaetze, PLZ, Ort, Strasse); // Zwischenlösung bis Stellplatztypen geändert werden können // 5% der Stellplätze werden Motorrad bzw. LKW-Stellplätze for (int iStellplatz = 0; iStellplatz < AnzahlStellplaetze / 20; iStellplatz++) { Parkhaus.StellPlaetze[iStellplatz].Typ = "Motorrad"; Parkhaus.StellPlaetze[(AnzahlStellplaetze / 20) + iStellplatz].Typ = "LKW"; } }
// Anzeige der Fahrzeugdaten in der LabelBox. private void showExtendedFahrzeugInformations_Click(object sender, EventArgs e) { if (lBFahrzeugInformationen.SelectedItem.ToString() != "") { cBParkhaus.Text = "Parkhaus"; cBParkplatz.Text = "Stellplatz"; List <Parkhaus> parkhaus = FP.getParkhaus(); System.IO.StreamReader file = new System.IO.StreamReader(@"Fahrzeuge.txt", true); string line; while ((line = Convert.ToString(file.ReadLine())) != null) { string[] splitchar = line.Split(';'); string fahrzeugInformation = lBFahrzeugInformationen.SelectedItem.ToString(); string[] kennzeichen = fahrzeugInformation.Split('\t'); if (splitchar[2] == kennzeichen[0]) { label1.Text = splitchar[0]; //Marke label2.Text = splitchar[1]; //Modell label3.Text = splitchar[2]; //Kennzeichen label4.Text = splitchar[3]; //Erstzulassung label5.Text = splitchar[4]; //Preis label6.Text = splitchar[5]; //Parkhaus //-- label10.Text = splitchar[6]; //Stellplatz label14.Text = (FP.steuerEinzeln(splitchar[2])).ToString(); label15.Text = FP.steuerAlle().ToString(); int stellplatzTyp = parkhaus[Convert.ToInt32(label6.Text) - 1].parkplaetze[Convert.ToInt32(label10.Text) - 1].Stellplatztyp; if (stellplatzTyp == 0) { lblHeader.Text = "PKW"; } else if (stellplatzTyp == 1) { lblHeader.Text = "Motorrad"; } else { lblHeader.Text = "LKW"; } if (splitchar[5] != "") { Parkhaus parkhausObj = parkhaus[Convert.ToInt32(splitchar[5]) - 1]; label7.Text = parkhausObj.Ort; //Ort label8.Text = parkhausObj.PLZ.ToString(); //PLZ label9.Text = parkhausObj.Straße; //Straße } else { label7.Text = ""; label8.Text = ""; label9.Text = ""; } if (splitchar.Length == 8) { label11.Text = splitchar[7]; lblHubraum.Show(); lblZuladung.Hide(); lblAnzAchsen.Hide(); lblLeistung.Hide(); lblSchadstoffklasse.Hide(); label11.Show(); label12.Hide(); label13.Hide(); break; } else if (splitchar.Length == 9) { label11.Text = splitchar[7]; label12.Text = splitchar[8]; lblAnzAchsen.Show(); lblZuladung.Show(); lblHubraum.Hide(); lblLeistung.Hide(); lblSchadstoffklasse.Hide(); label11.Show(); label12.Show(); label13.Hide(); break; } else if (splitchar.Length == 10) { label11.Text = splitchar[7]; label12.Text = splitchar[8]; label13.Text = splitchar[9]; lblHubraum.Show(); lblLeistung.Show(); lblSchadstoffklasse.Show(); lblAnzAchsen.Hide(); lblZuladung.Hide(); label11.Show(); label12.Show(); label13.Show(); break; } } } file.Close(); showFahrzeugInformationen(); cBParkhaus.Items.Clear(); for (int i = 0; i < parkhaus.Count(); i++) { cBParkhaus.Items.Add(i + 1); } } }
// Fügt ein Parkhaus zur Liste hinzu public void ParkhausHinzufuegen(Parkhaus value) { Parkhaeuser.Add(value); }
// 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); }