using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using Microsoft.Win32; namespace FahrzeugVerwaltung { public partial class MainWindow : Window { private DatabaseService _datenbankDienst; private PdfService _pdfDienst; private List _fahrzeuge; private Fahrzeug _ausgewaehltesFahrzeug; private Dictionary> _markenModelle; public MainWindow() { InitializeComponent(); DiensteAnlegen(); MarkenVorbereiten(); FahrzeugeLaden(); } // Erstellt Hilfsdienste private void DiensteAnlegen() { _datenbankDienst = new DatabaseService(); _pdfDienst = new PdfService(); _fahrzeuge = new List(); } // Legt Marken und Modelle fest private void MarkenVorbereiten() { _markenModelle = new Dictionary> { {"Audi", new List{"A3","A4","A6","Q3","Q5","Q7"}}, {"BMW", new List{"1er","3er","5er","X1","X3","X5"}}, {"Mercedes", new List{"A-Klasse","C-Klasse","E-Klasse","GLA","GLC","GLE"}}, {"Volkswagen", new List{"Golf","Passat","Polo","Tiguan","T-Roc","Arteon"}}, {"Opel", new List{"Corsa","Astra","Insignia","Mokka","Crossland","Grandland"}}, {"Ford", new List{"Fiesta","Focus","Mondeo","Kuga","Puma","S-MAX"}}, {"Toyota", new List{"Yaris","Corolla","Camry","RAV4","C-HR","Auris"}}, {"Honda", new List{"Civic","Accord","Jazz","CR-V","HR-V","NSX"}}, {"Hyundai", new List{"i20","i30","i40","Tucson","Santa Fe","Kona"}}, {"Nissan", new List{"Micra","Juke","Qashqai","X-Trail","Leaf","Navara"}}, {"Kia", new List{"Rio","Ceed","Sportage","Sorento","Picanto","Stonic"}}, {"Mazda", new List{"Mazda2","Mazda3","Mazda6","CX-3","CX-5","MX-5"}}, {"Peugeot", new List{"208","308","508","2008","3008","5008"}}, {"Renault", new List{"Clio","Megane","Talisman","Captur","Kadjar","Scenic"}}, {"Skoda", new List{"Fabia","Octavia","Superb","Kodiaq","Karoq","Scala"}}, {"Seat", new List{"Ibiza","Leon","Ateca","Arona","Tarraco","Toledo"}}, {"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"}} }; cmbMarke.ItemsSource = _markenModelle.Keys; } // Lädt alle Fahrzeuge aus der Datenbank private void FahrzeugeLaden() { _fahrzeuge = _datenbankDienst.LadeAlleFahrzeuge(); dgFahrzeuge.ItemsSource = _fahrzeuge; StatusAktualisieren(); } // Zeigt die aktuelle Anzahl der Fahrzeuge an private void StatusAktualisieren() { if (_fahrzeuge.Count == 0) txtDetails.Text = "Keine Fahrzeuge vorhanden"; else txtDetails.Text = $"{_fahrzeuge.Count} Fahrzeug(e) gefunden"; } // Fügt ein neues Fahrzeug hinzu private void BtnHinzufuegen_Click(object sender, RoutedEventArgs e) { if (!EingabenPruefen()) return; var fahrzeug = new Fahrzeug { Marke = cmbMarke.SelectedItem.ToString(), Modell = cmbModell.SelectedItem.ToString(), Baujahr = int.Parse(txtBaujahr.Text.Trim()), Leistung = int.Parse(txtLeistung.Text.Trim()), Kilometerstand = int.Parse(txtKilometer.Text.Trim()), Kaufpreis = decimal.Parse(txtKaufpreis.Text.Trim()), Farbe = txtFarbe.Text.Trim() }; fahrzeug.Id = _datenbankDienst.SpeichereFahrzeug(fahrzeug); MessageBox.Show("Fahrzeug gespeichert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); EingabenLeeren(); FahrzeugeLaden(); } // Aktualisiert das ausgewählte Fahrzeug private void BtnBearbeiten_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null || !EingabenPruefen()) return; _ausgewaehltesFahrzeug.Marke = cmbMarke.SelectedItem.ToString(); _ausgewaehltesFahrzeug.Modell = cmbModell.SelectedItem.ToString(); _ausgewaehltesFahrzeug.Baujahr = int.Parse(txtBaujahr.Text.Trim()); _ausgewaehltesFahrzeug.Leistung = int.Parse(txtLeistung.Text.Trim()); _ausgewaehltesFahrzeug.Kilometerstand = int.Parse(txtKilometer.Text.Trim()); _ausgewaehltesFahrzeug.Kaufpreis = decimal.Parse(txtKaufpreis.Text.Trim()); _ausgewaehltesFahrzeug.Farbe = txtFarbe.Text.Trim(); if (_datenbankDienst.AktualisiereFahrzeug(_ausgewaehltesFahrzeug)) MessageBox.Show("Fahrzeug aktualisiert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); FahrzeugeLaden(); } // Entfernt das gewählte Fahrzeug private void BtnLoeschen_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null) return; if (MessageBox.Show("Fahrzeug wirklich löschen?", "Bestätigung", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { if (_datenbankDienst.LoescheFahrzeug(_ausgewaehltesFahrzeug.Id)) { MessageBox.Show("Fahrzeug gelöscht.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); EingabenLeeren(); FahrzeugeLaden(); } } } // Prüft die Eingaben private bool EingabenPruefen() { var fehler = new List(); if (cmbMarke.SelectedItem == null) fehler.Add("Marke wählen"); if (cmbModell.SelectedItem == null) fehler.Add("Modell wählen"); if (!int.TryParse(txtBaujahr.Text, out int baujahr) || baujahr < 1900 || baujahr > DateTime.Now.Year) fehler.Add($"Baujahr zwischen 1900 und {DateTime.Now.Year}"); if (!int.TryParse(txtLeistung.Text, out int leistung) || leistung <= 0) fehler.Add("Leistung muss positiv sein"); if (!int.TryParse(txtKilometer.Text, out int kilometer) || kilometer < 0) fehler.Add("Kilometerstand muss 0 oder größer sein"); if (!decimal.TryParse(txtKaufpreis.Text, out decimal kaufpreis) || kaufpreis <= 0) fehler.Add("Kaufpreis muss positiv sein"); if (string.IsNullOrWhiteSpace(txtFarbe.Text)) fehler.Add("Farbe angeben"); if (fehler.Any()) { MessageBox.Show(string.Join("\n", fehler), "Eingabefehler", MessageBoxButton.OK, MessageBoxImage.Warning); return false; } return true; } // Setzt alle Eingaben zurück private void EingabenLeeren() { cmbMarke.SelectedIndex = -1; cmbModell.ItemsSource = null; txtBaujahr.Clear(); txtLeistung.Clear(); txtKilometer.Clear(); txtKaufpreis.Clear(); txtFarbe.Clear(); cmbMarke.Focus(); } // Sucht Fahrzeuge per Text private void BtnSuchen_Click(object sender, RoutedEventArgs e) { var suchbegriff = txtSuche.Text.Trim(); if (string.IsNullOrWhiteSpace(suchbegriff)) return; _fahrzeuge = _datenbankDienst.SucheFahrzeuge(suchbegriff); dgFahrzeuge.ItemsSource = _fahrzeuge; StatusAktualisieren(); } // Zeigt wieder alle Fahrzeuge private void BtnAlle_Click(object sender, RoutedEventArgs e) { txtSuche.Clear(); FahrzeugeLaden(); } // Reagiert auf Auswahl in der Tabelle private void Liste_AuswahlGeaendert(object sender, SelectionChangedEventArgs e) { _ausgewaehltesFahrzeug = dgFahrzeuge.SelectedItem as Fahrzeug; if (_ausgewaehltesFahrzeug != null) { txtDetails.Text = $"Ausgewählt: {_ausgewaehltesFahrzeug.HoleBeschreibung()}"; cmbMarke.SelectedItem = _ausgewaehltesFahrzeug.Marke; CmbMarke_AuswahlGeaendert(null, null); cmbModell.SelectedItem = _ausgewaehltesFahrzeug.Modell; txtBaujahr.Text = _ausgewaehltesFahrzeug.Baujahr.ToString(); txtLeistung.Text = _ausgewaehltesFahrzeug.Leistung.ToString(); txtKilometer.Text = _ausgewaehltesFahrzeug.Kilometerstand.ToString(); txtKaufpreis.Text = _ausgewaehltesFahrzeug.Kaufpreis.ToString(); txtFarbe.Text = _ausgewaehltesFahrzeug.Farbe; btnPdf.IsEnabled = true; } else { StatusAktualisieren(); btnPdf.IsEnabled = false; } } // Speichert das Fahrzeug als PDF private void BtnPdf_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null) return; var dialog = new SaveFileDialog { Filter = "PDF-Dateien (*.pdf)|*.pdf", FileName = $"Fahrzeug_{_ausgewaehltesFahrzeug.Marke}_{_ausgewaehltesFahrzeug.Modell}_{DateTime.Now:yyyyMMdd_HHmmss}.pdf" }; if (dialog.ShowDialog() == true) { if (_pdfDienst.ErstelleFahrzeugPdf(_ausgewaehltesFahrzeug, dialog.FileName)) MessageBox.Show("PDF erstellt.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); } } // Lädt die Liste neu private void BtnAktualisieren_Click(object sender, RoutedEventArgs e) { FahrzeugeLaden(); } // Unterstützt einfache 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) { BtnHinzufuegen_Click(null, null); e.Handled = true; } else if (e.Key == System.Windows.Input.Key.F && System.Windows.Input.Keyboard.Modifiers == System.Windows.Input.ModifierKeys.Control) { txtSuche.Focus(); e.Handled = true; } else if (e.Key == System.Windows.Input.Key.F5) { BtnAktualisieren_Click(null, null); e.Handled = true; } else if (e.Key == System.Windows.Input.Key.Escape) { EingabenLeeren(); e.Handled = true; } base.OnKeyDown(e); } // Aktualisiert die Modelle zur Marke private void CmbMarke_AuswahlGeaendert(object sender, SelectionChangedEventArgs e) { if (cmbMarke.SelectedItem == null) { cmbModell.ItemsSource = null; return; } var marke = cmbMarke.SelectedItem.ToString(); cmbModell.ItemsSource = _markenModelle[marke]; } } }