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(); } // Erzeugt Dienstobjekte private void DiensteAnlegen() { _datenbankDienst = new DatabaseService(); _pdfDienst = new PdfService(); _fahrzeuge = new List(); } // Füllt die Listen mit Marken und Modellen 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"}}, {"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"}}, {"Dodge", new List{"Charger","Challenger","Durango","Journey","Ram","Viper"}}, {"Chrysler", new List{"200","300","Pacifica","Voyager","Aspen","Sebring"}}, {"Buick", new List{"Encore","Enclave","LaCrosse","Regal","Verano","Envision"}}, {"Cadillac", new List{"ATS","CTS","Escalade","XT5","XT4","CT6"}}, {"Infiniti", new List{"Q50","Q60","Q70","QX50","QX60","QX80"}}, {"Acura", new List{"ILX","TLX","RLX","MDX","RDX","NSX"}}, {"Suzuki", new List{"Swift","Vitara","Baleno","Jimny","SX4","Ignis"}}, {"Saab", new List{"9-3","9-5","900","9-4X","9-7X","96"}}, {"Lincoln", new List{"MKZ","MKX","Continental","Navigator","Corsair","Aviator"}}, {"Bentley", new List{"Continental GT","Flying Spur","Bentayga","Mulsanne","Arnage","Azure"}} }; cmbMarke.ItemsSource = _markenModelle.Keys; } // Holt Fahrzeuge aus der Datenbank private void FahrzeugeLaden() { _fahrzeuge = _datenbankDienst.LadeAlleFahrzeuge(); dgFahrzeuge.ItemsSource = _fahrzeuge; StatusAktualisieren(); } // Aktualisiert die Statuszeile private void StatusAktualisieren() { if (_fahrzeuge.Count == 0) { txtDetails.Text = "Keine Fahrzeuge vorhanden"; } else { txtDetails.Text = $"{_fahrzeuge.Count} Fahrzeug(e) gefunden"; } } // Speichert ein neues Fahrzeug private void BtnHinzufuegen_Click(object sender, RoutedEventArgs e) { if (!EingabenPruefen()) { return; } Fahrzeug 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(); } // Übernimmt Änderungen 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 alle Eingaben private bool EingabenPruefen() { List 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 EingabenLeeren() { cmbMarke.SelectedIndex = -1; cmbModell.ItemsSource = null; txtBaujahr.Clear(); txtLeistung.Clear(); txtKilometer.Clear(); txtKaufpreis.Clear(); txtFarbe.Clear(); cmbMarke.Focus(); } // Sucht nach einem Begriff private void BtnSuchen_Click(object sender, RoutedEventArgs e) { string suchbegriff = txtSuche.Text.Trim(); if (string.IsNullOrWhiteSpace(suchbegriff)) { return; } _fahrzeuge = _datenbankDienst.SucheFahrzeuge(suchbegriff); dgFahrzeuge.ItemsSource = _fahrzeuge; StatusAktualisieren(); } // Zeigt 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; } } // Erstellt ein PDF für das gewählte Fahrzeug private void BtnPdf_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null) { return; } SaveFileDialog 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 Daten neu private void BtnAktualisieren_Click(object sender, RoutedEventArgs e) { FahrzeugeLaden(); } // Tastenkürzel für Aktionen 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); } // Zeigt Modelle zur gewählten Marke private void CmbMarke_AuswahlGeaendert(object sender, SelectionChangedEventArgs e) { if (cmbMarke.SelectedItem == null) { cmbModell.ItemsSource = null; return; } string marke = cmbMarke.SelectedItem.ToString(); cmbModell.ItemsSource = _markenModelle[marke]; } } }