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