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 { return _id; } set { _id = value; MeldeEigenschaft(nameof(Id)); } } public string Marke { get { return _marke; } set { _marke = value; MeldeEigenschaft(nameof(Marke)); } } public string Modell { get { return _modell; } set { _modell = value; MeldeEigenschaft(nameof(Modell)); } } public int Baujahr { get { return _baujahr; } set { _baujahr = value; MeldeEigenschaft(nameof(Baujahr)); MeldeEigenschaft(nameof(AktuellerWert)); MeldeEigenschaft(nameof(AktuellerWertFormatiert)); } } public int Leistung { get { return _leistung; } set { _leistung = value; MeldeEigenschaft(nameof(Leistung)); } } public int Kilometerstand { get { return _kilometerstand; } set { _kilometerstand = value; MeldeEigenschaft(nameof(Kilometerstand)); MeldeEigenschaft(nameof(KilometerstandFormatiert)); MeldeEigenschaft(nameof(AktuellerWert)); MeldeEigenschaft(nameof(AktuellerWertFormatiert)); } } public decimal Kaufpreis { get { return _kaufpreis; } set { _kaufpreis = value; MeldeEigenschaft(nameof(Kaufpreis)); MeldeEigenschaft(nameof(KaufpreisFormatiert)); MeldeEigenschaft(nameof(AktuellerWert)); MeldeEigenschaft(nameof(AktuellerWertFormatiert)); } } public string Farbe { get { return _farbe; } set { _farbe = value; MeldeEigenschaft(nameof(Farbe)); } } public string KilometerstandFormatiert { get { return $"{Kilometerstand:N0} km"; } } public string KaufpreisFormatiert { get { return $"{Kaufpreis:C}"; } } public string AktuellerWertFormatiert { get { return $"{AktuellerWert:C}"; } } // Berechneter aktueller Wert public decimal AktuellerWert { get { return BerechneAktuellenWert(); } } // Ermittelt einen Schätzwert 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); } // Text für die Oberfläche public string HoleBeschreibung() { return $"{Marke} {Modell} ({Baujahr}) - {Leistung} PS - {KilometerstandFormatiert} - {Farbe}"; } // Alter des Fahrzeugs public int HoleAlter() { return DateTime.Now.Year - Baujahr; } // Prüft auf Oldtimer public bool IstOldtimer() { return HoleAlter() >= 30; } public event PropertyChangedEventHandler PropertyChanged; // Meldet geänderte Eigenschaften private void MeldeEigenschaft(string eigenschaft) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(eigenschaft)); } public override string ToString() { return $"{Marke} {Modell} ({Baujahr})"; } } }