Kreditrückzahlung

From S23Wiki

Bash-Script zur Berechnung einer Kreditrückzahlung


#!/bin/bash
# Bash-Script zur Berechnung einer Kreditrückzahlung
# Eingabe: Kreditbetrag, Zinssatz, Monatsrate  | Ausgabe: Laufzeit, Zinsen, Gesamtkosten
# benötigt das Programm "bc" (binary calculator) um Rechnen mit Dezimalstellen zu erlauben
# Initialisierung

let kreditbetrag=0
let kreditrestbetrag=0
let zinssatz=0
let zinsen=0
let monat=1
let monatsrate=0
let tilgung=0
let gesamtezinsen=0
let gesamtetilgung=0
let zinsplustilgung=0

let wucherfaktor=0
# Ab welchem Faktor zwischen Kreditbetrag und Gesamtkosten soll vor Wucher gewarnt werden?
wucherlimit=1.2

# Wieviel Jahre will man maximal zurückzahlen?
let maxjahre=5

drucken="n"

# Per default Keine zusätzliche Bestätigung der Eingabedaten? (j/n)
eingabekorrekt="n"

##

clear
echo -e " < ---               --- >\n (    Kreditrückzahlung v1.0    )\n < ---------------------------- >"

# Bis der Benutzer die Eingabe bestätigt ..
until [ $eingabekorrekt = "j" ]; do

# Eingabe Kreditbetrag
read -p "Wie hoch soll der Kreditbetrag sein? (€) " kreditbetrag

while [ $(echo "${kreditbetrag} > 0"| bc -l) = "0" ]; do
echo "Falsche Eingabe! $kreditbetrag < 0 und der Kreditbetrag darf nicht kleiner 0 sein."
read -p "Kreditbetrag: " kreditbetrag
done

# Eingabe Zinsen
read -p "Zu welchem Satz wird verzinst? (%/Jahr) " zinssatz

while [ $(echo "${zinssatz} > 0"| bc -l) = "0" ]; do
echo "Falsche Eingabe! $zinssatz < 0  und der Zinssatz darf nicht kleiner 0 sein."
read -p "Zinssatz: (%/Jahr) " zinssatz
done

# Eingabe Monatsrate / Tilgung
read -p "Wieviel soll monatlich gezahlt werden? (€) " monatsrate

# Eine Monatsrate darf nicht geringer als (der erste) Zinsanteil sein, sonst wird keine Tilgung erreicht.
minimalrate=$(echo "scale=2; $kreditbetrag*$zinssatz/1200+1" | bc -l)

while [ $(echo "${monatsrate} > ${minimalrate}"| bc -l) = "0" ]; do
echo "Falsche Eingabe! Bitte wählen sie eine Monatsrate von mindestens $minimalrate."
read -p "Monatsrate: " monatsrate
done

# Will der User drucken?
read -p "Wollen sie Ergebnisse drucken ? (j/n) " drucken

until [ $drucken = "j" -o $drucken = "n" ]; do
echo "Falsche Eingabe! Drucken kann nur j(a) oder n(ein) sein."
read -p "Drucken (j/n) ?" drucken
done

# Falls kein Drucker, (zumindest kein /bin/lpr) gefunden wird, Fehlermeldungen verhindern

if [ ! -e /bin/lpr ]; then
echo "Sie haben vermutlich keinen Drucker installiert, denn /bin/lpr wurde nicht gefunden. Schalte Drucken aus."
drucken="n"
fi
# User Kontrolle der Eingabe
echo -e "\nSie haben eingegeben:\nKreditbetrag: $kreditbetrag €\nZinssatz: $zinssatz % p.a.\nMonatsrate: $monatsrate €\nDrucken: $drucken"
read -p "Ist das korrekt? (j/n)" eingabekorrekt

done

# Eingabe ok

# Berechnung

# Anfangskreditbetrag für später merken, weil er jetzt heruntergezählt wird
kreditrestbetrag=$kreditbetrag

# Bis der Kreditrestbetrag kleiner oder gleich 0 ist ..
until [ $(echo "${kreditrestbetrag} > 0"| bc -l) = "0" ]; do

# Monat für Monat
let monat=monat+1

# Zinsen und Tilgung berechnen so dass sie zusammen die gewünschte Monatsrate ergeben

zinsen=$(echo "scale=2; ${kreditrestbetrag}*${zinssatz}/1200" | bc -l)

tilgung=$(echo "scale=2; ${monatsrate}-${zinsen}" | bc -l)

# Die letzte Tilgungsrate, wenn der Restbetrag kleiner als die übliche Rate ist
if [ $(echo "${tilgung} > ${kreditrestbetrag}"| bc -l) = "1" ]
then
tilgung=$kreditrestbetrag
fi

# Gesamttilgung und -zinsen addieren
gesamtetilgung=$(echo "scale=2; ${gesamtetilgung}+${tilgung}" | bc -l)
gesamtezinsen=$(echo "scale=2; ${gesamtezinsen}+${zinsen}" | bc -l)
zinsplustilgung=$(echo "scale=2; ${zinsen}+${tilgung}" | bc -l)

# Monatsergebnisse zunächst in Array um vor Ausgabe auf maximale Dauer prüfen zu können
monatszeile[$monat]="Monat: ${monat} Kreditrestbetrag: ${kreditrestbetrag} € Zinsen: ${zinsen} € Tilgung: ${tilgung} € Monatsrate: ${zinsplustilgung} €"

# Berechnungsfortschritt zeigen (weil es lange dauern kann)
echo -en "\033[sBerechne Monate .. [$monat] \033[u"

# Tilgung subtrahieren
kreditrestbetrag=$(echo "${kreditrestbetrag}-${tilgung}" | bc -l)

done

# Gesamtkosten addieren
gesamtekosten=$(echo "scale=2; ${gesamtetilgung}+${gesamtezinsen}" | bc -l)

# Kostenfaktor des Kredits errechnen
wucherfaktor=$(echo "scale=2; ${gesamtekosten}/${kreditbetrag}*100" | bc -l)

# Dauer = Anzahl der Monate im Array
dauer=${#monatszeile[@]}
        trotzdem="j"
        # Zu viele Monate in der Ausgabe verhindern
        if [ $(echo "${dauer}/12 > ${maxjahre}"| bc -l) = "1" ]
        then
        trotzdem="n"
        echo -e "\nAchtung, das Rückzahlen dauert mit $dauer Monaten sehr lange."
        read -p "Trotzdem Details ausgeben? (j/n)" trotzdem
        fi

        # Ausgabe Monat für Monat aus Array
        if [ $trotzdem != "n" ]
        then
        monat=1
        while [ $monat -le $dauer ];
        do
        echo ${monatszeile[$monat]};
        # Drucken
        if [ $drucken == "j" ]; then
        echo ${monatszeile[$monat]} | lpr
        fi
        let monat=monat+1
        done
        fi
        # Ausgabe Endabrechnung

        echo -e "\nDer Kredit ist nach $monat Monaten zurückbezahlt.\nGesamte Tilgung: ${gesamtetilgung} €\nGesamte Zinsen: ${gesamtezinsen} €\nGesamte Kosten: ${gesamtekosten} € (${wucherfaktor}% des Kreditbetrages)"


        # Warnung falls Kredit zu teuer

        if [ $(echo "${wucherfaktor} > ${wucherlimit}*100"| bc -l) = "1" ]
        then
        echo -e "\nAchtung Wucher! Gesamtkosten betragen ${wucherfaktor} % des Kreditbetrages.\nSuchen Sie besser einen anderen Kredithai oder wählen Sie eine höhere Monatsrate."
        fi

        # Warnung falls Rückzahldauer zu lange

        if [ $(echo "${monat}/12 > ${maxjahre}"| bc -l) = "1" ]
        then
        echo -e "\nAchtung das Rückzahlen dauert mehr als $(echo "scale=2; ${monat}/12"| bc -l) Jahre! Wählen Sie besser eine höhere Monatsrate."
        fi

        # Ende

        echo "<---- Auf Wiedersehen ---->"
Personal tools