Que en paz descanse: CODIGO JAVA TABLA DE AMORTIZACION DEUDA
Tienes cuenta en Blogger? Entonces entra.

Una vez hayas entrado, vuelve!

2004-05-19

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: