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 _databaseService; private PdfService _pdfService; private List _aktuelleFahrzeuge; private Fahrzeug _ausgewaehltesFahrzeug; private Dictionary> _markenModelle; public MainWindow() { InitializeComponent(); InitializeServices(); InitializeMarken(); LadeFahrzeuge(); } // legt die Dienste an private void InitializeServices() { _databaseService = new DatabaseService(); _pdfService = new PdfService(); _aktuelleFahrzeuge = new List(); } // füllt die Listen für Marken und Modelle private void InitializeMarken() { _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"}} }; cmbMarke.ItemsSource = _markenModelle.Keys; } // lädt alle Fahrzeuge private void LadeFahrzeuge() { _aktuelleFahrzeuge = _databaseService.LadeAlleFahrzeuge(); dgFahrzeuge.ItemsSource = _aktuelleFahrzeuge; UpdateStatusText(); } // zeigt Anzahl der Fahrzeuge an private void UpdateStatusText() { if (_aktuelleFahrzeuge.Count == 0) txtDetails.Text = "Keine Fahrzeuge vorhanden"; else txtDetails.Text = $"{_aktuelleFahrzeuge.Count} Fahrzeug(e) gefunden"; } // fügt ein neues Fahrzeug hinzu private void BtnHinzufuegen_Click(object sender, RoutedEventArgs e) { if (!PruefeEingaben()) 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 = _databaseService.SpeichereFahrzeug(fahrzeug); MessageBox.Show("Fahrzeug gespeichert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); ClearInputFields(); LadeFahrzeuge(); } // bearbeitet das ausgewählte Fahrzeug private void BtnBearbeiten_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null || !PruefeEingaben()) 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 (_databaseService.AktualisiereFahrzeug(_ausgewaehltesFahrzeug)) MessageBox.Show("Fahrzeug aktualisiert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); LadeFahrzeuge(); } // löscht das ausgewä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 (_databaseService.LoescheFahrzeug(_ausgewaehltesFahrzeug.Id)) { MessageBox.Show("Fahrzeug gelöscht.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); ClearInputFields(); LadeFahrzeuge(); } } } // prüft die Eingaben private bool PruefeEingaben() { 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; } // leert alle Eingabefelder private void ClearInputFields() { cmbMarke.SelectedIndex = -1; cmbModell.ItemsSource = null; txtBaujahr.Clear(); txtLeistung.Clear(); txtKilometer.Clear(); txtKaufpreis.Clear(); txtFarbe.Clear(); cmbMarke.Focus(); } // sucht Fahrzeuge nach Begriff private void BtnSuchen_Click(object sender, RoutedEventArgs e) { var suchbegriff = txtSuche.Text.Trim(); if (string.IsNullOrWhiteSpace(suchbegriff)) return; _aktuelleFahrzeuge = _databaseService.SucheFahrzeuge(suchbegriff); dgFahrzeuge.ItemsSource = _aktuelleFahrzeuge; UpdateStatusText(); } // zeigt alle Fahrzeuge private void BtnAlle_Click(object sender, RoutedEventArgs e) { txtSuche.Clear(); LadeFahrzeuge(); } // reagiert auf Auswahl in der Liste private void DgFahrzeuge_SelectionChanged(object sender, SelectionChangedEventArgs e) { _ausgewaehltesFahrzeug = dgFahrzeuge.SelectedItem as Fahrzeug; if (_ausgewaehltesFahrzeug != null) { txtDetails.Text = $"Ausgewählt: {_ausgewaehltesFahrzeug.GetDetailedDescription()}"; cmbMarke.SelectedItem = _ausgewaehltesFahrzeug.Marke; CmbMarke_SelectionChanged(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 { UpdateStatusText(); btnPdf.IsEnabled = false; } } // erstellt ein PDF zum Fahrzeug 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 (_pdfService.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) { LadeFahrzeuge(); } // 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) { ClearInputFields(); e.Handled = true; } base.OnKeyDown(e); } // passt Modellliste an private void CmbMarke_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (cmbMarke.SelectedItem == null) { cmbModell.ItemsSource = null; return; } var marke = cmbMarke.SelectedItem.ToString(); cmbModell.ItemsSource = _markenModelle[marke]; } } }