- Zeige korrekte Jahressummen

- drucke letzte Summe Kreditjahr nach Ablauf
This commit is contained in:
fabianArbeit 2025-03-25 13:35:38 +01:00
parent 05debf0b80
commit 6d16191e0e

View File

@ -104,18 +104,22 @@ class Darlehenberechner {
private final Integer laufzeitJahre;
private final BigDecimal zinssatz;
private BigDecimal sondertilgung;
private int summeMonate;
private int summeMonate = 0;
private BigDecimal aktRestschuld;
private BigDecimal aktMonatlicheRate;
private BigDecimal aktZinsbetrag;
private BigDecimal aktTilgungsbetrag;
private Integer aktTilgungsfreieZeit;
private YearMonth aktMonat;
private BigDecimal summeZinsen;
private BigDecimal summeTilgung;
private BigDecimal jahressummeRatenKalenderjahr;
private BigDecimal jahressummeRatenKreditjahr;
private BigDecimal summeRaten;
private BigDecimal jahressummeZinsenKalenderjahr = BigDecimal.ZERO;
private BigDecimal jahressummeZinsenKreditjahr = BigDecimal.ZERO;
private BigDecimal summeZinsen = BigDecimal.ZERO;
private BigDecimal jahressummeTilgungKalenderjahr = BigDecimal.ZERO;
private BigDecimal jahressummeTilgungKreditjahr = BigDecimal.ZERO;
private BigDecimal summeTilgung = BigDecimal.ZERO;
private BigDecimal jahressummeRatenKalenderjahr = BigDecimal.ZERO;
private BigDecimal jahressummeRatenKreditjahr = BigDecimal.ZERO;
private BigDecimal summeRaten = BigDecimal.ZERO;
public static void main(String[] args) throws ParseException {
@ -186,22 +190,17 @@ class Darlehenberechner {
laufzeitJahre = konfig.getLaufzeitJahre();
zinssatz = konfig.getZinssatz();
sondertilgung = konfig.getSondertilgung() != null ? konfig.getSondertilgung().multiply(konfig.getDarlehenswert()) : BigDecimal.ZERO;
summeMonate = 1;
aktRestschuld = konfig.getDarlehenswert();
aktMonatlicheRate = konfig.getMonatlicheRate();
aktTilgungsfreieZeit = konfig.getaktTilgungsfreieZeit();
aktMonat = konfig.getAnfangsmonat();
summeZinsen = BigDecimal.ZERO;
summeTilgung = BigDecimal.ZERO;
jahressummeRatenKalenderjahr = BigDecimal.ZERO;
jahressummeRatenKreditjahr = BigDecimal.ZERO;
summeRaten = BigDecimal.ZERO;
}
private void berechneWerte() {
druckeUeberschrift();
while ((laufzeitJahre == null || summeMonate < (laufzeitJahre * 12)) && aktRestschuld.signum() > 0) {
while (laufzeitNichtVorbei()) {
erhoeheSummeMonate();
zahleSondertilgung();
berechneBeitragAufteilung();
berechneRestschuld();
@ -220,6 +219,21 @@ class Darlehenberechner {
}
private boolean laufzeitNichtVorbei() {
return (laufzeitJahre == null || summeMonate < (laufzeitJahre * 12)) && aktRestschuld.signum() > 0;
}
private boolean laufzeitVorbei() {
return !laufzeitNichtVorbei();
}
private void erhoeheSummeMonate() {
summeMonate++;
}
private void zahleSondertilgung() {
if (sondertilgung.signum() == 0) {
return;
@ -254,7 +268,11 @@ class Darlehenberechner {
private void berechneSummen() {
jahressummeZinsenKalenderjahr = jahressummeZinsenKalenderjahr.add(aktZinsbetrag);
jahressummeZinsenKreditjahr = jahressummeZinsenKreditjahr.add(aktZinsbetrag);
summeZinsen = summeZinsen.add(aktZinsbetrag);
jahressummeTilgungKalenderjahr = jahressummeTilgungKalenderjahr.add(aktTilgungsbetrag);
jahressummeTilgungKreditjahr = jahressummeTilgungKreditjahr.add(aktTilgungsbetrag);
summeTilgung = summeTilgung.add(aktTilgungsbetrag);
jahressummeRatenKalenderjahr = jahressummeRatenKalenderjahr.add(aktMonatlicheRate);
jahressummeRatenKreditjahr = jahressummeRatenKreditjahr.add(aktMonatlicheRate);
@ -263,28 +281,37 @@ class Darlehenberechner {
private void druckeJahressumeBedingt() {
boolean kreditjahrVergangen = summeMonate > 1 && summeMonate % 12 == 0;
boolean kreditjahrVergangen = summeMonate > 1 && summeMonate % 12 == 0 || laufzeitVorbei();
if (kreditjahrVergangen || aktMonat.getMonth() == Month.DECEMBER) {
BigDecimal jahressummeZinsen;
BigDecimal jahressummeTilgung;
BigDecimal jahressummeRaten;
String desc;
if (kreditjahrVergangen) {
jahressummeZinsen = jahressummeZinsenKreditjahr;
jahressummeTilgung = jahressummeTilgungKreditjahr;
jahressummeRaten = jahressummeRatenKreditjahr;
jahressummeZinsenKreditjahr = BigDecimal.ZERO;
jahressummeTilgungKreditjahr = BigDecimal.ZERO;
jahressummeRatenKreditjahr = BigDecimal.ZERO;
desc = "Kreditjahr " + summeMonate / 12;
} else {
jahressummeZinsen = jahressummeZinsenKalenderjahr;
jahressummeTilgung = jahressummeTilgungKalenderjahr;
jahressummeRaten = jahressummeRatenKalenderjahr;
jahressummeZinsenKalenderjahr = BigDecimal.ZERO;
jahressummeTilgungKalenderjahr = BigDecimal.ZERO;
jahressummeRatenKalenderjahr = BigDecimal.ZERO;
desc = "Kalenderjahr " + aktMonat.getYear();
}
System.out.println("Summe " + desc + ":\n" + DECIMAL_FORMAT.format(jahressummeRaten) + " = " + DECIMAL_FORMAT.format(summeZinsen) + " + "
+ DECIMAL_FORMAT.format(summeTilgung));
System.out.println("Summe " + desc + ":\n" + DECIMAL_FORMAT.format(jahressummeRaten) + " = " + DECIMAL_FORMAT.format(jahressummeZinsen)
+ " + " + DECIMAL_FORMAT.format(jahressummeTilgung));
}
}
private void aktualisiereZeitwerte() {
aktMonat = aktMonat.plusMonths(1);
summeMonate++;
if (aktTilgungsfreieZeit != null) {
aktTilgungsfreieZeit--;
}