From 943c9df59389686ba4dbd91db17c15d2fb265886 Mon Sep 17 00:00:00 2001 From: younes elhaddoury <167001847+elhy17@users.noreply.github.com> Date: Sun, 31 Aug 2025 18:10:01 +0200 Subject: [PATCH] =?UTF-8?q?Erweiterte=20Fahrzeugliste=20und=20moderne=20Ob?= =?UTF-8?q?erfl=C3=A4che?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ WpfApp4/App.xaml.cs | 6 +++--- WpfApp4/DatabaseService.cs | 14 ++++++------ WpfApp4/Fahrzeug.cs | 12 +++++------ WpfApp4/MainWindow.xaml | 16 ++++++++++++-- WpfApp4/MainWindow.xaml.cs | 44 +++++++++++++++++++++++--------------- WpfApp4/PdfService.cs | 4 ++-- 7 files changed, 63 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index f25a57f..a8d7089 100644 --- a/README.md +++ b/README.md @@ -31,3 +31,7 @@ Dieses Projekt dient als einfache Verwaltung von Fahrzeugen für ein Autohaus. D ## Autoren Dieses Projekt wurde im Rahmen einer Übung von **Younes**, **Saad** und **Ayman** erstellt. +- **Younes** kümmerte sich um Datenbank und grundlegende Geschäftslogik. +- **Saad** gestaltete die Oberfläche und implementierte den PDF-Export. +- **Ayman** verfasste die Dokumentation und begleitete die Tests. + diff --git a/WpfApp4/App.xaml.cs b/WpfApp4/App.xaml.cs index 0f0aa20..ba355bc 100644 --- a/WpfApp4/App.xaml.cs +++ b/WpfApp4/App.xaml.cs @@ -6,7 +6,7 @@ namespace FahrzeugVerwaltung public partial class App : Application { - // Startet das Programm und registriert Fehlerbehandlung + // Startet Programm und meldet Fehler protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); @@ -14,7 +14,7 @@ namespace FahrzeugVerwaltung DispatcherUnhandledException += App_UnbehandelteAusnahme; } - // Zeigt Fehler der Oberfläche an + // Zeigt Fehler in Oberfläche private void App_UnbehandelteAusnahme(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { MessageBox.Show($"Ein unerwarteter Fehler ist aufgetreten:\n{e.Exception.Message}", @@ -22,7 +22,7 @@ namespace FahrzeugVerwaltung e.Handled = true; } - // Meldet schwere Ausnahmen des Programms + // Meldet kritische Ausnahmen private void Domain_UnbehandelteAusnahme(object sender, UnhandledExceptionEventArgs e) { MessageBox.Show($"Ein kritischer Fehler ist aufgetreten:\n{((Exception)e.ExceptionObject).Message}", diff --git a/WpfApp4/DatabaseService.cs b/WpfApp4/DatabaseService.cs index d4dcedc..27081fd 100644 --- a/WpfApp4/DatabaseService.cs +++ b/WpfApp4/DatabaseService.cs @@ -17,7 +17,7 @@ namespace FahrzeugVerwaltung ErstelleDatenbank(); } - // Legt Datenbank und Tabelle an + // Erstellt Datenbank und Tabelle private void ErstelleDatenbank() { using var connection = new SQLiteConnection(_connectionString); @@ -38,7 +38,7 @@ namespace FahrzeugVerwaltung command.ExecuteNonQuery(); } - // Speichert ein Fahrzeug und liefert die neue Id + // Speichert Fahrzeug und gibt neue Id zurück public int SpeichereFahrzeug(Fahrzeug fahrzeug) { using var connection = new SQLiteConnection(_connectionString); @@ -58,7 +58,7 @@ namespace FahrzeugVerwaltung return Convert.ToInt32(command.ExecuteScalar()); } - // Lädt alle gespeicherten Fahrzeuge + // Lädt alle Fahrzeuge public List LadeAlleFahrzeuge() { var fahrzeuge = new List(); @@ -84,7 +84,7 @@ namespace FahrzeugVerwaltung return fahrzeuge; } - // Sucht Fahrzeuge anhand eines Textes + // Sucht Fahrzeuge mit Text public List SucheFahrzeuge(string suchbegriff) { if (string.IsNullOrWhiteSpace(suchbegriff)) @@ -120,7 +120,7 @@ namespace FahrzeugVerwaltung return fahrzeuge; } - // Aktualisiert ein vorhandenes Fahrzeug + // Aktualisiert Fahrzeug public bool AktualisiereFahrzeug(Fahrzeug fahrzeug) { using var connection = new SQLiteConnection(_connectionString); @@ -147,7 +147,7 @@ namespace FahrzeugVerwaltung return command.ExecuteNonQuery() > 0; } - // Entfernt ein Fahrzeug aus der Datenbank + // Löscht Fahrzeug public bool LoescheFahrzeug(int id) { using var connection = new SQLiteConnection(_connectionString); @@ -158,7 +158,7 @@ namespace FahrzeugVerwaltung return command.ExecuteNonQuery() > 0; } - // Gibt die Anzahl der gespeicherten Fahrzeuge zurück + // Zählt Fahrzeuge public int HoleAnzahlFahrzeuge() { using var connection = new SQLiteConnection(_connectionString); diff --git a/WpfApp4/Fahrzeug.cs b/WpfApp4/Fahrzeug.cs index 6f6640d..3a10386 100644 --- a/WpfApp4/Fahrzeug.cs +++ b/WpfApp4/Fahrzeug.cs @@ -27,10 +27,10 @@ namespace FahrzeugVerwaltung public string KaufpreisFormatiert => $"{Kaufpreis:C}"; public string AktuellerWertFormatiert => $"{AktuellerWert:C}"; - // Gibt den geschätzten aktuellen Wert zurück + // Geschätzter aktueller Wert public decimal AktuellerWert => BerechneAktuellenWert(); - // Berechnet den Wert anhand von Alter und Laufleistung + // Berechnet aktuellen Wert public decimal BerechneAktuellenWert() { if (Kaufpreis <= 0 || Baujahr <= 0) return 0; @@ -51,19 +51,19 @@ namespace FahrzeugVerwaltung return Math.Round(wert, 2); } - // Liefert eine kurze Fahrzeugbeschreibung + // Beschreibung für Anzeige public string HoleBeschreibung() { return $"{Marke} {Modell} ({Baujahr}) - {Leistung} PS - {KilometerstandFormatiert} - {Farbe}"; } - // Berechnet das Alter des Fahrzeugs + // Alter des Fahrzeugs public int HoleAlter() { return DateTime.Now.Year - Baujahr; } - // Prüft, ob das Fahrzeug als Oldtimer gilt + // Prüft auf Oldtimer public bool IstOldtimer() { return HoleAlter() >= 30; @@ -71,7 +71,7 @@ namespace FahrzeugVerwaltung public event PropertyChangedEventHandler PropertyChanged; - // Informiert die Oberfläche über eine geänderte Eigenschaft + // Meldet geänderte Eigenschaft private void MeldeEigenschaft(string eigenschaft) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(eigenschaft)); diff --git a/WpfApp4/MainWindow.xaml b/WpfApp4/MainWindow.xaml index 694bc0e..78cbdda 100644 --- a/WpfApp4/MainWindow.xaml +++ b/WpfApp4/MainWindow.xaml @@ -39,13 +39,25 @@ + + - + + + + + + + @@ -55,7 +67,7 @@ - + diff --git a/WpfApp4/MainWindow.xaml.cs b/WpfApp4/MainWindow.xaml.cs index 3abe262..7152500 100644 --- a/WpfApp4/MainWindow.xaml.cs +++ b/WpfApp4/MainWindow.xaml.cs @@ -22,7 +22,7 @@ namespace FahrzeugVerwaltung MarkenVorbereiten(); FahrzeugeLaden(); } - // Erstellt Hilfsdienste + // Legt Dienste an private void DiensteAnlegen() { _datenbankDienst = new DatabaseService(); @@ -30,7 +30,7 @@ namespace FahrzeugVerwaltung _fahrzeuge = new List(); } - // Legt Marken und Modelle fest + // Bereitet Marken und Modelle vor private void MarkenVorbereiten() { _markenModelle = new Dictionary> @@ -54,13 +54,23 @@ namespace FahrzeugVerwaltung {"Fiat", new List{"500","Panda","Tipo","Punto","Doblo","Bravo"}}, {"Volvo", new List{"S60","S90","V60","V90","XC60","XC90"}}, {"Subaru", new List{"Impreza","Legacy","Outback","Forester","XV","BRZ"}}, - {"Tesla", new List{"Model S","Model 3","Model X","Model Y","Roadster","Cybertruck"}} + {"Tesla", new List{"Model S","Model 3","Model X","Model Y","Roadster","Cybertruck"}}, + {"Chevrolet", new List{"Spark","Cruze","Malibu","Equinox","Traverse","Tahoe"}}, + {"Jaguar", new List{"XE","XF","XJ","F-Pace","E-Pace","I-Pace"}}, + {"Jeep", new List{"Renegade","Compass","Cherokee","Grand Cherokee","Wrangler","Gladiator"}}, + {"Land Rover", new List{"Discovery Sport","Discovery","Range Rover Evoque","Range Rover Sport","Defender","Velar"}}, + {"Lexus", new List{"IS","ES","GS","RX","NX","LC"}}, + {"Mitsubishi", new List{"Space Star","Lancer","Outlander","ASX","Eclipse Cross","Pajero"}}, + {"Porsche", new List{"911","Cayenne","Panamera","Macan","Taycan","Boxster"}}, + {"Citroën", new List{"C1","C3","C4","C5","C3 Aircross","Berlingo"}}, + {"Alfa Romeo", new List{"Giulia","Giulietta","Stelvio","MiTo","4C","Tonale"}}, + {"Mini", new List{"One","Cooper","Clubman","Countryman","Cabrio","Paceman"}} }; cmbMarke.ItemsSource = _markenModelle.Keys; } - // Lädt alle Fahrzeuge aus der Datenbank + // Lädt Fahrzeuge aus der Datenbank private void FahrzeugeLaden() { _fahrzeuge = _datenbankDienst.LadeAlleFahrzeuge(); @@ -68,7 +78,7 @@ namespace FahrzeugVerwaltung StatusAktualisieren(); } - // Zeigt die aktuelle Anzahl der Fahrzeuge an + // Zeigt Anzahl der Fahrzeuge private void StatusAktualisieren() { if (_fahrzeuge.Count == 0) @@ -77,7 +87,7 @@ namespace FahrzeugVerwaltung txtDetails.Text = $"{_fahrzeuge.Count} Fahrzeug(e) gefunden"; } - // Fügt ein neues Fahrzeug hinzu + // Fügt Fahrzeug hinzu private void BtnHinzufuegen_Click(object sender, RoutedEventArgs e) { if (!EingabenPruefen()) @@ -100,7 +110,7 @@ namespace FahrzeugVerwaltung FahrzeugeLaden(); } - // Aktualisiert das ausgewählte Fahrzeug + // Speichert Änderungen private void BtnBearbeiten_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null || !EingabenPruefen()) @@ -119,7 +129,7 @@ namespace FahrzeugVerwaltung FahrzeugeLaden(); } - // Entfernt das gewählte Fahrzeug + // Löscht ausgewähltes Fahrzeug private void BtnLoeschen_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null) @@ -136,7 +146,7 @@ namespace FahrzeugVerwaltung } } - // Prüft die Eingaben + // Prüft Eingaben private bool EingabenPruefen() { var fehler = new List(); @@ -165,7 +175,7 @@ namespace FahrzeugVerwaltung return true; } - // Setzt alle Eingaben zurück + // Leert Eingaben private void EingabenLeeren() { cmbMarke.SelectedIndex = -1; @@ -178,7 +188,7 @@ namespace FahrzeugVerwaltung cmbMarke.Focus(); } - // Sucht Fahrzeuge per Text + // Sucht Fahrzeuge private void BtnSuchen_Click(object sender, RoutedEventArgs e) { var suchbegriff = txtSuche.Text.Trim(); @@ -190,14 +200,14 @@ namespace FahrzeugVerwaltung StatusAktualisieren(); } - // Zeigt wieder alle Fahrzeuge + // Zeigt alle Fahrzeuge private void BtnAlle_Click(object sender, RoutedEventArgs e) { txtSuche.Clear(); FahrzeugeLaden(); } - // Reagiert auf Auswahl in der Tabelle + // Reagiert auf Tabellen-Auswahl private void Liste_AuswahlGeaendert(object sender, SelectionChangedEventArgs e) { _ausgewaehltesFahrzeug = dgFahrzeuge.SelectedItem as Fahrzeug; @@ -222,7 +232,7 @@ namespace FahrzeugVerwaltung } } - // Speichert das Fahrzeug als PDF + // Exportiert Fahrzeug als PDF private void BtnPdf_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null) @@ -241,13 +251,13 @@ namespace FahrzeugVerwaltung } } - // Lädt die Liste neu + // Aktualisiert Liste private void BtnAktualisieren_Click(object sender, RoutedEventArgs e) { FahrzeugeLaden(); } - // Unterstützt einfache Tastenkürzel + // Tastenkürzel protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e) { if (e.Key == System.Windows.Input.Key.S && System.Windows.Input.Keyboard.Modifiers == System.Windows.Input.ModifierKeys.Control) @@ -274,7 +284,7 @@ namespace FahrzeugVerwaltung base.OnKeyDown(e); } - // Aktualisiert die Modelle zur Marke + // Passt Modelle zur Marke an private void CmbMarke_AuswahlGeaendert(object sender, SelectionChangedEventArgs e) { if (cmbMarke.SelectedItem == null) diff --git a/WpfApp4/PdfService.cs b/WpfApp4/PdfService.cs index d7f5bdc..49c3596 100644 --- a/WpfApp4/PdfService.cs +++ b/WpfApp4/PdfService.cs @@ -7,7 +7,7 @@ namespace FahrzeugVerwaltung { public class PdfService { - // Erstellt ein PDF mit den Daten eines Fahrzeugs + // Erstellt PDF für ein Fahrzeug public bool ErstelleFahrzeugPdf(Fahrzeug fahrzeug, string dateiPfad) { try @@ -31,7 +31,7 @@ namespace FahrzeugVerwaltung } } - // Erstellt ein PDF mit allen Fahrzeugen + // Erstellt PDF mit allen Fahrzeugen public bool ErstelleFahrzeuglistePdf(List fahrzeuge, string dateiPfad) { try