using System; using System.ComponentModel; namespace FahrzeugVerwaltung { public class Fahrzeug : INotifyPropertyChanged { private int _id; private string _marke; private string _modell; private int _baujahr; private int _leistung; private int _kilometerstand; private decimal _kaufpreis; private string _farbe; public int Id { get => _id; set { _id = value; OnPropertyChanged(nameof(Id)); } } public string Marke { get => _marke; set { _marke = value; OnPropertyChanged(nameof(Marke)); } } public string Modell { get => _modell; set { _modell = value; OnPropertyChanged(nameof(Modell)); } } public int Baujahr { get => _baujahr; set { _baujahr = value; OnPropertyChanged(nameof(Baujahr)); OnPropertyChanged(nameof(AktuellerWert)); OnPropertyChanged(nameof(AktuellerWertFormatiert)); } } public int Leistung { get => _leistung; set { _leistung = value; OnPropertyChanged(nameof(Leistung)); } } public int Kilometerstand { get => _kilometerstand; set { _kilometerstand = value; OnPropertyChanged(nameof(Kilometerstand)); OnPropertyChanged(nameof(KilometerstandFormatiert)); OnPropertyChanged(nameof(AktuellerWert)); OnPropertyChanged(nameof(AktuellerWertFormatiert)); } } public decimal Kaufpreis { get => _kaufpreis; set { _kaufpreis = value; OnPropertyChanged(nameof(Kaufpreis)); OnPropertyChanged(nameof(KaufpreisFormatiert)); OnPropertyChanged(nameof(AktuellerWert)); OnPropertyChanged(nameof(AktuellerWertFormatiert)); } } public string Farbe { get => _farbe; set { _farbe = value; OnPropertyChanged(nameof(Farbe)); } } public string KilometerstandFormatiert => $"{Kilometerstand:N0} km"; public string KaufpreisFormatiert => $"{Kaufpreis:C}"; public string AktuellerWertFormatiert => $"{AktuellerWert:C}"; // berechnet den geschätzten aktuellen Wert public decimal AktuellerWert => BerechneAktuellenWert(); // ermittelt den aktuellen Wert basierend auf Alter und Laufleistung public decimal BerechneAktuellenWert() { if (Kaufpreis <= 0 || Baujahr <= 0) return 0; int alter = DateTime.Now.Year - Baujahr; decimal wertverlust = 0; for (int i = 0; i < alter; i++) wertverlust += (i < 3) ? 0.15m : 0.10m; wertverlust += (Kilometerstand / 10000m) * 0.02m; if (wertverlust > 0.90m) wertverlust = 0.90m; decimal wert = Kaufpreis * (1 - wertverlust); decimal mindestwert = Kaufpreis * 0.05m; if (wert < mindestwert) wert = mindestwert; return Math.Round(wert, 2); } // liefert eine kurze Beschreibung public string GetDetailedDescription() => $"{Marke} {Modell} ({Baujahr}) - {Leistung} PS - {KilometerstandFormatiert} - {Farbe}"; // gibt das Alter des Fahrzeugs zurück public int GetAlter() => DateTime.Now.Year - Baujahr; // prüft, ob das Fahrzeug ein Oldtimer ist public bool IsOldtimer() => GetAlter() >= 30; public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); public override string ToString() => $"{Marke} {Modell} ({Baujahr})"; } }