2025-08-31 23:33:31 +02:00

170 lines
4.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 { 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})";
}
}
}