# Tilgungsplan proc gui {} { wm title . "Tilgungsplan" # Konstruktion Menubar menu .menubar .menubar add cascade -label File -underline 0 -menu .menubar.file # Menü File menu .menubar.file -tearoff 0 .menubar.file add command -label Exit -command {exit} . config -menu .menubar # Eingabefelder label .lhyp -text "Hypothek:" entry .ehyp -textvariable hypothek label .lzins -text "Zinssatz:" entry .ezins -textvariable zinssatz100 label .ltilg -text "Tilgungssatz:" entry .etilg -textvariable tilgsatz100 label .llauf -text "Laufzeit:" entry .elauf -textvariable laufzeit button .bcomp -text Berechnung -command {compute} grid .lhyp -row 0 -column 0 grid .ehyp -row 0 -column 1 grid .lzins -row 1 -column 0 grid .ezins -row 1 -column 1 grid .ltilg -row 2 -column 0 grid .etilg -row 2 -column 1 grid .llauf -row 3 -column 0 grid .elauf -row 3 -column 1 grid .bcomp -row 3 -column 3 # Ausgabefeld text .txt -font fixed -yscrollcommand {.sb set} -width 50 scrollbar .sb -command {.txt yview} grid .txt -row 4 -column 0 -columnspan 2 grid .sb -row 4 -column 2 -sticky ns # Graphische Ausgabe canvas .c -width 310 -height 310 -background white grid .c -row 4 -column 3 -sticky ns } proc convert_input {} { # Globale Variable spezif. global hypothek zinssatz tilgsatz laufzeit zinssatz100 tilgsatz100 # Evt. Komma durch Dez.-Punkt ersetzen if {$hypothek == {}} {set hypothek 0} regsub {,} $hypothek {.} hypothek if {$zinssatz100 == {}} {set zinssatz100 0} regsub {,} $zinssatz100 {.} zinssatz100 if {$tilgsatz100 == {}} {set tilgsatz100 0} regsub {,} $tilgsatz100 {.} tilgsatz100 if {$laufzeit == {}} {set laufzeit 0} set zinssatz [expr $zinssatz100*0.01] set tilgsatz [expr $tilgsatz100*0.01] } proc compute {} { # Globale Variable spezif. global hypothek zinssatz tilgsatz laufzeit zins tilg # Umrechnung der Eingaben convert_input # Löschen der Ausgabe .txt delete 1.0 end # Ausgangswert erhalten, deshalb mit Kopie weiter set hyp $hypothek set belastung [expr $hyp*($zinssatz+$tilgsatz)] .txt insert end "Hypothekentilgungsplan\n" .txt insert end "======================\n\n" .txt insert end [format \ "Hypothek: %12.2f DM, Zinssatz: %5.2f %%\n" \ $hypothek [expr $zinssatz*100]] .txt insert end [format \ "Belastung: %11.2f DM, Tilgsatz: %5.2f %%\n" \ $belastung [expr $tilgsatz*100]] .txt insert end [format \ "Laufzeit: %11d Jahre\n\n" $laufzeit] # Tabellenkopf .txt insert end "Jahr Zinsen Tilgung Restschuld\n" .txt insert end "===================================\n" for {set i 1} {$i <= $laufzeit} {incr i} { set zinsen [expr $hyp*$zinssatz] set zins($i) $zinsen set tilgung [expr $belastung-$zinsen] set tilg($i) $tilgung set hyp [expr $hyp-$tilgung] .txt insert end [format \ "%4d %8.2f %8.2f %12.2f\n" $i $zinsen $tilgung $hyp] } graph } proc graph {} { global laufzeit zins tilg # Vorigen Graph löschen .c delete all .c create line 55 255 305 255 .c create line 55 5 55 255 # max ist Summe der Tilgung in vollen 1000ern set sumtilg 0 for {set i 1} {$i <= $laufzeit} {incr i} { set sumtilg [expr $sumtilg+$tilg($i)] } set max [expr round($sumtilg*0.001)] set dx [expr 250.0/($laufzeit+1)] set dy [expr 250.0/($max+1)] for {set i 1} {$i <= $laufzeit} {incr i} { set x [expr 55+$i*$dx] .c create line $x 252 $x 258 if {$i % 2 == 0} { .c create text $x 270 -text $i } } for {set i 1} {$i <= $max} {incr i} { set y [expr 255-$i*$dy] .c create line 52 $y 58 $y if {$i % 5 == 0} { .c create text 20 $y -text [expr $i*1000] } } set dy [expr 0.001*$dy] # Belastungsgerade zeichnen set y [expr 255-($zins(1)+$tilg(1))*$dy] .c create line [expr 55+$dx] $y [expr 55+$laufzeit*$dx] $y -fill red # Jahr 1 berechnen set x [expr 55+$dx] set sumtilg $tilg(1) set y [expr 255-$tilg(1)*$dy] set ys $y for {set i 2} {$i <= $laufzeit} {incr i} { set x0 $x set x [expr 55+$i*$dx] set y0 $y set ys0 $ys set y [expr 255-$tilg($i)*$dy] set sumtilg [expr $sumtilg+$tilg($i)] set ys [expr 255-$sumtilg*$dy] .c create line $x0 $y0 $x $y -fill blue .c create line $x0 $ys0 $x $ys -fill green } } # Hauptprogramm # Anfangswerte set hypothek 100000 set zinssatz100 5 set tilgsatz100 1 set laufzeit 10 gui