CODIGO JAVA TABLA DE AMORTIZACION DEUDA
Para comenzar, debo haceros la siguiente advertencia: Presentare mi primer programa escrito en java, que quizas vaya modificando de acuerdo a los conocimientos adqueridos en el momento... o quisas nunca mas lo vuelva a mirar (por la verguenza que me daria). /****** Programa Escrito en GVIM *******
Este programa es GPL!
*********** Fin Presentacion ***********/
import javax.swing.*;
import java.text.*;
import java.text.NumberFormat.*;
public class TablaDeAmortizaciones
{
public static void main(String[] args)
{
// zinsen = tasa de interes, schulden = deuda, rate = cuota, antwort = respuesta
// init_monat = mes inicio, init_jahr = an~o inicio
double zinsen = 0, schulden = 0, rate = 0;
int init_monat = 1, init_jahr = 2005, num_raten =1, n, antwort, error;
NumberFormat formatter = NumberFormat.getNumberInstance();
do
{
// Primera Ventana; aqui aplique un manejador de excepciones para
// evitar que al ingresar valores no numericos, el programa no siguiera
// El primer paso es ingresar los valores correspondiente a la deuda original,
// fecha de inicio, cantidad de cuotas a pagar... todas a traves de ventanas
// En esta primera ventana se ingresa la deuda original
do {
try
{
do
{
String input = JOptionPane.showInputDialog
// Aqui se pregunta por la deuda?
("Wie viele Schulden haben Sie?\nBitte, geben Sie ein Zahl groesser als 0 ein");
schulden = Double.parseDouble(input);
error = 0; // Aqui se inicializa el factor de error que evitara los valores no numericos
if(schulden <= 0) // Aqui se evitan valores no negativos
JOptionPane.showMessageDialog(null,
"Sie haben eine falsche Schuldenszahl eingegeben.\nBitte geben Sie noch mal eine ein,\n aber jetzt richtig!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
} while (schulden <= 0);
}
catch (NumberFormatException nu)
{
JOptionPane.showMessageDialog(null,
"Sie haben eine falsche Schuldenszahl eingegeben.\nBitte geben Sie noch mal eine ein,\n aber jetzt richtig!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
error = 1;
}
} while (error == 1);
// Segunda Ventana; Aqui se solicitara la cantidad de cuotas a pagar
do {
try
{
do
{
String input = JOptionPane.showInputDialog
("Wie viele Raten werden Sie bezahlen?\nBitte, Sie geben ein Zahl groesser als 0 und kleiner als 100 ein");
num_raten = Integer.parseInt(input);
error = 0;
if(num_raten > 100 || num_raten < 1)
JOptionPane.showMessageDialog(null,
"Sie haben eine falsche Zifern eingegeben,\n Bitte,
geben Sie jetzt eine richtige ein!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
} while (num_raten > 100 || num_raten < 1);
}
catch (NumberFormatException nu)
{
JOptionPane.showMessageDialog(null,
"Sie haben eine falsche Zifern eingegeben,\n Bitte, geben Sie jetzt
eine richtige ein!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
error = 1;
}
} while (error == 1);
// Tercera Ventana; Aqui la tasa de interes a pagar
do {
try
{
do
{
String input = JOptionPane.showInputDialog
("Wie hoch sind die Zinsen, die Sie bezahlen werden?\nBitte, Sie geben ein Zahl groesser als 0 und kleiner als 100 ein");
zinsen = Double.parseDouble(input);
error = 0;
if(zinsen >= 100 || zinsen <= 0)
JOptionPane.showMessageDialog(null,
"Sie haben eine falsche Zinsszahl eingegeben.\nBitte geben Sie noch mal eine ein, aber jetzt richtig!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
} while (zinsen >= 100 || zinsen <= 0);
}
catch (NumberFormatException nu)
{
JOptionPane.showMessageDialog(null,
"Sie haben eine falsche Zinsszahl eingegeben.\nBitte geben Sie noch
mal eine ein, aber jetzt richtig!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
error = 1;
}
} while (error == 1);
// Cuarta Ventana; y aqui el mes que se comenzara a pagar [esto me agradaria mejorarlo]
do {
try
{
do
{
String input = JOptionPane.showInputDialog
("Welchen Monat werden Sie anfangen zu bezahlen?\nBitte, geben Sie eine Zahl zwischen 1 (Januar) und 12 (Dezember) ein");
init_monat = Integer.parseInt(input);
error = 0;
if(init_monat > 12 || init_monat < 1)
JOptionPane.showMessageDialog(null,
"Sie haben keine Monat eingegeben.\nBitte geben Sie
jetzt eine ein!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
} while (init_monat > 12 || init_monat < 1);
}
catch (NumberFormatException nu)
{
JOptionPane.showMessageDialog(null,
"Sie haben keine Monat eingegeben.\nBitte geben Sie jetzt eine ein!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
error = 1;
}
} while (error == 1);
// Quinta Ventana; Y por ultimo el an~o
do {
try
{
do
{
String input = JOptionPane.showInputDialog
("Welches Jahr werden Sie anfangen zu bezahlen?\nBitte, geben Sie eine Zahl zwischen 2005 und 2010 ein");
init_jahr = Integer.parseInt(input);
error = 0;
if(init_jahr < 2005 || init_jahr > 2010)
JOptionPane.showMessageDialog(null,
"Sie haben kein richtiges Jahrzahl eingeschrieben.\nBitte geben Sie jetzt eine ein!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
} while (init_jahr < 2005 || init_jahr > 2010);
}
catch (NumberFormatException nu)
{
JOptionPane.showMessageDialog(null,
"Sie haben kein richtiges Jahrzahl eingeschrieben.\nBitte geben Sie
jetzt eine ein!",
"Ich bin dumm",
JOptionPane.ERROR_MESSAGE);
error = 1;
}
} while (error == 1);
// Aqui se pide la confirmacion de que los valores ingresados son los deseados... de lo contrario el programa volvera a ejecutarse.
String string1 = "Ja wohl!";
String string2 = "Nein, ich war falsch";
Object[] options = {string1, string2};
n = JOptionPane.showOptionDialog(null,
"Sie haben als Schulden " + schulden + " Euro,\nals Zinsen " + zinsen + " % eingeschrieben.\n\nSie mochten seine/ihre Schulden in " + num_raten + " Raten bezahlen\nund am " + init_monat + "." + init_jahr + " anfangen.\n\nSind die Daten richtig?\n\nWenn Nein, das Programm wird noch mal anfangen\n\n ",
"Die Frage des Jahres!",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, // No usar Icono
options, // El titulo de la caja
string1); // La opcion por defecto
if (n == JOptionPane.YES_OPTION)
{
antwort = 1;
} else antwort = 0;
} while (antwort != 1);
double sum_rate = 0.00, sum_zinsen = 0.00, sum_tilgung = 0.00;
// Raten zu rechnen: Aqui se calculara el valor de la cuota en base a
// Cuota = Deuda / [ [1 - 1 / (1 + i / 1200)^n ] * 1200 / i]
// que es la forma de amortizacion con interes simple.
zinsen = zinsen / 1200;
double y = 1 + zinsen;
double x = Math.pow(y, num_raten);
double temp1 = 1 / x;
double temp2 = (1 - temp1) / zinsen;
rate = schulden / temp2;
// Definition einige Variablen: Aqui se definen variables extras
// laufjahr = an~o corriente, laufmonat = mes corriente (simples contadores)
int laufmonat = init_monat;
int laufjahr = init_jahr;
// Definicion de arreglos que almacenaran los valores generados en cada mes para
// el capital restante (calc_rest), la amortizacion (calc_tilgung), el interes pagado (calc_zinsen)
double [] calc_rate = new double [num_raten + 1];
double [] calc_zinsen = new double [num_raten + 1];
double [] calc_tilgung = new double [num_raten + 1];
double [] calc_rest = new double [num_raten + 1];
int [] calc_jahrzeit = new int [num_raten + 2];
int [] calc_monatzeit = new int [num_raten + 2];
System.out.println ("Zahlmonat Rate Zinsen Tilgung Rest ");
calc_jahrzeit[1] = init_jahr;
calc_monatzeit[1] = init_monat;
calc_rate[0] = rate;
calc_zinsen[0] = 0.00;
calc_rest[0] = schulden;
calc_tilgung[0] = 0.00;
for (int i = 1; i <= num_raten; i++) {
calc_rate[i] = rate;
sum_rate += calc_rate[i];
calc_zinsen[i] = calc_rest[i-1] * zinsen;
sum_zinsen += calc_zinsen[i];
calc_tilgung[i] = rate - calc_zinsen[i];
sum_tilgung += calc_tilgung[i];
calc_rest[i] = calc_rest[i-1] - calc_tilgung[i];
double calcu_rate = calc_rate[i];
double calcu_zinsen = calc_zinsen[i];
double calcu_tilgung = calc_tilgung[i];
double calcu_rest = calc_rest[i];
// Aqui se obliga a que los valores mostrados tengan como maximo
// y como minimo dos decimales despues de la coma.
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
String calc_rate_for = formatter.format(calcu_rate);
String calc_zinsen_for = formatter.format(calcu_zinsen);
String calc_tilgung_for = formatter.format(calcu_tilgung);
String calc_rest_for = formatter.format(calcu_rest);
int calcu_monatzeit = calc_monatzeit[i];
int calcu_jahrzeit = calc_jahrzeit[i];
// Aqui se formatea la salida para que las columnas se vean mas simetricas
// ademas se imprimen por pantalla los resultados
if(calcu_monatzeit < 10)
{
System.out.println (" " + calcu_monatzeit + "." + calcu_jahrzeit + " " + calc_rate_for + " " + calc_zinsen_for + " " + calc_tilgung_for + " " + calc_rest_for);
}
else System.out.println (" " + calcu_monatzeit + "." + calcu_jahrzeit + " " + calc_rate_for + "
" + calc_zinsen_for + " " + calc_tilgung_for + " " + calc_rest_for);
// Aqui nos preocupamos de que se separen los resultados cada 12 meses
// de tal forma que coincidan con el an~o
if (laufmonat > 11) {
double sume_rate = sum_rate;
double sume_zinsen = sum_zinsen;
double sume_tilgung = sum_tilgung;
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
String sume_rate_for = formatter.format(sume_rate);
String sume_zinsen_for = formatter.format(sume_zinsen);
String sume_tilgung_for = formatter.format(sume_tilgung);
System.out.println ("Summen: " + sume_rate_for + " " + sume_zinsen_for + " " + sume_tilgung_for + " n.a. ");
laufmonat = 1;
laufjahr++ ;
calc_jahrzeit[i+1] = laufjahr;
calc_monatzeit[i+1] = laufmonat;
System.out.println (" \n ");
System.out.println ("Zahlmonat Rate Zinsen Tilgung Rest ");
} else {
laufmonat++;
calc_monatzeit[i+1] = laufmonat;
calc_jahrzeit[i+1] = laufjahr;
}
}
double sume_rate = sum_rate;
double sume_zinsen = sum_zinsen;
double sume_tilgung = sum_tilgung;
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
String sume_rate_for = formatter.format(sume_rate);
String sume_zinsen_for = formatter.format(sume_zinsen);
String sume_tilgung_for = formatter.format(sume_tilgung);
System.out.println ("Summen: " + sume_rate_for + " " + sume_zinsen_for + " " + sume_tilgung_for + " n.a ");
}
}
// Espero todo los comentarios y criticas y aportes para mejorar este codigo
0 comentarios:
Publicar un comentario