2025-08-31 18:10:01 +02:00

83 lines
3.4 KiB
C#

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; MeldeEigenschaft(nameof(Id)); } }
public string Marke { get => _marke; set { _marke = value; MeldeEigenschaft(nameof(Marke)); } }
public string Modell { get => _modell; set { _modell = value; MeldeEigenschaft(nameof(Modell)); } }
public int Baujahr { get => _baujahr; set { _baujahr = value; MeldeEigenschaft(nameof(Baujahr)); MeldeEigenschaft(nameof(AktuellerWert)); MeldeEigenschaft(nameof(AktuellerWertFormatiert)); } }
public int Leistung { get => _leistung; set { _leistung = value; MeldeEigenschaft(nameof(Leistung)); } }
public int Kilometerstand { get => _kilometerstand; set { _kilometerstand = value; MeldeEigenschaft(nameof(Kilometerstand)); MeldeEigenschaft(nameof(KilometerstandFormatiert)); MeldeEigenschaft(nameof(AktuellerWert)); MeldeEigenschaft(nameof(AktuellerWertFormatiert)); } }
public decimal Kaufpreis { get => _kaufpreis; set { _kaufpreis = value; MeldeEigenschaft(nameof(Kaufpreis)); MeldeEigenschaft(nameof(KaufpreisFormatiert)); MeldeEigenschaft(nameof(AktuellerWert)); MeldeEigenschaft(nameof(AktuellerWertFormatiert)); } }
public string Farbe { get => _farbe; set { _farbe = value; MeldeEigenschaft(nameof(Farbe)); } }
public string KilometerstandFormatiert => $"{Kilometerstand:N0} km";
public string KaufpreisFormatiert => $"{Kaufpreis:C}";
public string AktuellerWertFormatiert => $"{AktuellerWert:C}";
// Geschätzter aktueller Wert
public decimal AktuellerWert => BerechneAktuellenWert();
// Berechnet aktuellen Wert
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);
}
// Beschreibung für Anzeige
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 Eigenschaft
private void MeldeEigenschaft(string eigenschaft)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(eigenschaft));
}
public override string ToString() => $"{Marke} {Modell} ({Baujahr})";
}
}