Quellcode Tilgungsplan: Fragen

adenosin

Grünschnabel
Hallo zusammen,

ich habe ein paar Fragen zu einem Programm, welches wir im Schulunterricht erstellen sollten, es handelt sich um die Ausgabe eines Tilgungsplans in Abhängigkeit von Kredit, Rate und Zinssatz:

Die Eingabe soll folgendermaßen aussehen:

Code:
Geben Sie bitte ihre Kreditdaten ein:
				Kreditvolumen (Euro): 	10000
				Zinssatz:		10
				monatl. Rate (Euro):	1000

Code:
Tilgungsplan
-------------------------------------------------------------------
Monat	Restkredit	mtl. Rate	Tilgung		Zinsen
-------------------------------------------------------------------
  1      10.000,00       1.000,00        916,67          83,33
  2       9.083,33       1.000,00        924,31          75,69
  3       8.159,03       1.000,00        932,01          67,99
  4       7.227,02       1.000,00        939,77          60,23
  5       6.287,24       1.000,00        947,61          52,39
  6       5.339,64       1.000,00        955,50          44,50
  7       4.384,14       1.000,00        963,47          36,53
  8       3.420,67       1.000,00        971,49          28,51
  9       2.449,18       1.000,00        979,59          20,41
 10       1.469,59       1.000,00        987,75          12,25
 11         481,83       1.000,00        481,83           4,02

Die Laufzeit war 11 Monate
Gesamtzinsen 485.84 Euro

Dies habe ich folgendermaßen realisiert:

Code:
	public void setzeTestwerte()
	{
		kredit = 10000;
		zinssatz = 10;
		raten = 1000;
	}

Code:
    public void tilgungsPlanAusgeben()
    {
   	
    	System.out.println("Tilgungsplan");
    	System.out.println("-------------------------------------------------------------------");
    	System.out.println("Monat\tRestkredit\tmtl. Rate\tTilgung\t\tZinsen");
    	System.out.println("-------------------------------------------------------------------");
    	
    	monat = 1;
    	rest = kredit;
    	gesamtZinsen = 0;
    	
    	
        while (rest > raten)
        {
        	zinsen = rest * ((zinssatz / 100) / 12);
        	tilgung = raten - zinsen; 
            
         	gesamtZinsen = gesamtZinsen + zinsen;
     		
     		System.out.println(anhaengenint("" ,monat, 3)+anhaengen("", rest, 15)+anhaengen("", raten, 15)+anhaengen("", tilgung, 14)+anhaengen("", zinsen, 15));   
             
         	rest = rest - tilgung;
         	
         	monat++;
        }     
        
        zinsen = zinssatz * (rest / 100) / 12;
    	tilgung = raten - zinsen;       
    	
    	gesamtZinsen = gesamtZinsen + zinsen;
    	gesamtZinsen = Math.round(gesamtZinsen * 100) / 100.0;
 		
 		System.out.println(anhaengenint("" ,monat, 3)+anhaengen("", rest, 15)+anhaengen("", raten, 15)+anhaengen("", rest, 14)+anhaengen("", zinsen, 15));
 		
		System.out.println(); 		
 		System.out.println("Die Laufzeit war "+ monat + " Monate");
 		System.out.println("Gesamtzinsen " + gesamtZinsen + " Euro"); 		
    }

Hier noch die anhaengen-Methode, welche ich nicht selbst programmiert, sondern aus dem Internet habe. Mit ihr wollte ich den rechtsbündigen Text in der Ausgabe realisieren:
Code:
	String anhaengen(String text, double zahl, int stellen)
	{
		// zum Formatieren von Dezimalzahlen
		DecimalFormat df = new DecimalFormat("#,###,##0.00");
		String tmp = df.format(zahl);
		
		// Leerstellen in Abhängigkeit der Länge der Zahl anhängen
		for(int leer = 0; leer < stellen-tmp.length(); leer++)
		{
			text +=" "; // Leerstelle addieren
		}
		text += tmp; // zahl addieren
		
		return text; // neuen String zurückgeben
	}

Nun habe ich folgende Fragen:

  • Die Rechtsbündigkeit kommt mir sehr unsauber umgesetzt bzw. falsch angewendet vor, gibt es Verbesserungstipps für Rundung und Bündigkeit?
  • Lässt sich die Dauer der Rückzahlung nicht auch über den Logarithmus bestimmen? Habe dazu folgende Formel von Wikipedia:
    113a1953e7fb566ae3037b44fc8c6331.png
    doch leider bekomme ich bei der Implementierung immer "Infinity" herraus.
  • Wir haben bisher nur Konsolenprogramme geschrieben, nun würde ich mir gerne paralell zur Konsolenausgabe der Tabelle eine grafische Ausgabe zweier Funktionsgraphen ausgeben lassen (lineare Funktion der Rückzahlung ohne Zinsen _und_ expotentielle Funktion der Rückzahlung mit Zinsen)
    Habe mir nun mehrere Quellcodes zur graphischen Darstellung angeschaut, doch je mehr es wurden, desto verwirrter wurde ich. Verstanden habe ich, dass ich einen Frame erstellen muss und in diesem Frame eine Zeichenoberfläche. Doch was am besten benutzen?
    *.awt.* oder *.swing.*? panel oder canvas? Bin leider unerfahren mit Grafiken, dafür umso interessierter es zu lernen :)

Ich bedanke mich im Vorraus für eure Hilfe.


Viele liebe Grüße
Kri
 
Ein wenig schöner mit dem Rechtsbündig scheint mir das so:

Java:
public static String anhaengen(double zahl, int stellen) {
	return String.format(Locale.GERMAN, "%1$," + stellen + ".2f", zahl);
}

Erklärung zu dem Format gibt's hier: http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax

Für eine graphische Darstellung würde ich Swing empfehlen. Hier findest du ein Beispiel was das ganze ein wenig erklärt: http://openbook.galileocomputing.de/javainsel8/javainsel_17_001.htm#t2t33
 
Hallo zeja,

danke dir für deine Antwort, hab nun alles bis auf die Logarithmusfunktion hinbekommen, danke dir für deine beiden Links!

Werde den Thread trotzdem als erledigt kennzeichnen.


Viele liebe Grüße
Kri
 
Zurück