Kreditrückzahlung

From s23
Jump to navigation Jump to search

Bash-Script zur Berechnung einer Kreditrückzahlung

<highlightSyntax>

  1. !/bin/bash
  2. Bash-Script zur Berechnung einer Kreditrückzahlung
  3. Eingabe: Kreditbetrag, Zinssatz, Monatsrate | Ausgabe: Laufzeit, Zinsen, Gesamtkosten
  4. benötigt das Programm "bc" (binary calculator) um Rechnen mit Dezimalstellen zu erlauben
  5. 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

  1. Ab welchem Faktor zwischen Kreditbetrag und Gesamtkosten soll vor Wucher gewarnt werden?

wucherlimit=1.2

  1. Wieviel Jahre will man maximal zurückzahlen?

let maxjahre=5

drucken="n"

  1. Per default Keine zusätzliche Bestätigung der Eingabedaten? (j/n)

eingabekorrekt="n"

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

  1. Bis der Benutzer die Eingabe bestätigt ..

until [ $eingabekorrekt = "j" ]; do

  1. 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

  1. 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

  1. Eingabe Monatsrate / Tilgung

read -p "Wieviel soll monatlich gezahlt werden? (€) " monatsrate

  1. 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

  1. 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

  1. 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

  1. 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

  1. Eingabe ok
  1. Berechnung
  1. Anfangskreditbetrag für später merken, weil er jetzt heruntergezählt wird

kreditrestbetrag=$kreditbetrag

  1. Bis der Kreditrestbetrag kleiner oder gleich 0 ist ..

until [ $(echo "${kreditrestbetrag} > 0"| bc -l) = "0" ]; do

  1. Monat für Monat

let monat=monat+1

  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)

  1. Die letzte Tilgungsrate, wenn der Restbetrag kleiner als die übliche Rate ist

if [ $(echo "${tilgung} > ${kreditrestbetrag}"| bc -l) = "1" ] then tilgung=$kreditrestbetrag fi

  1. 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)

  1. 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} €"

  1. Berechnungsfortschritt zeigen (weil es lange dauern kann)

echo -en "\033[sBerechne Monate .. [$monat] \033[u"

  1. Tilgung subtrahieren

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

done

  1. Gesamtkosten addieren

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

  1. Kostenfaktor des Kredits errechnen

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

  1. Dauer = Anzahl der Monate im Array

dauer=${#monatszeile[@]} trotzdem="j"

  1. 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

  1. 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

  1. Ausgabe Endabrechnung

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


  1. 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

  1. 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

  1. Ende

echo "<---- Auf Wiedersehen ---->" </highlightSyntax>