170 lines
4.4 KiB
C#
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})";
|
|
}
|
|
}
|
|
}
|