Skip to content

Instantly share code, notes, and snippets.

@elgartoinf
Last active March 28, 2020 04:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elgartoinf/d4c723d70d4dc89e5e1bcefde3c3e560 to your computer and use it in GitHub Desktop.
Save elgartoinf/d4c723d70d4dc89e5e1bcefde3c3e560 to your computer and use it in GitHub Desktop.
programación IV
/*-Bancario
Una de las actividades más comunes en el mundo financiero es la realización de
simulaciones que permitan a los clientes saber el rendimiento de sus productos a través del tiempo, contemplando diferentes escenarios y posibles situaciones que se presenten. Se quiere crear un programa que haga la simulación en el tiempo de la cuenta bancaria de un cliente. Un cliente tiene un nombre y un número de cédula el cual identifica la cuenta.
Una cuenta, por su parte, está constituida por tres productos financieros básicos: (1) Una cuenta de ahorro, (2) una cuenta corriente y (3) un certificado de depósito a término (CDT).
Estos productos son independientes y tienen comportamientos particulares.
El saldo total de la cuenta es la suma de lo que el cliente tiene en cada uno de dichos productos. En la cuenta corriente el cliente puede depositar o retirar dinero. Su principal característica es que no recibe ningún interés por el dinero que se encuentre allí depositado. En la cuenta de ahorro, se paga un interés mensual del 0,6% sobre el saldo.
Cuando el cliente abre un CDT, define la cantidad de dinero que quiere invertir y negocia con el banco el interés mensual que va a recibir. A diferencia de la cuenta corriente o la cuenta de ahorro, en un CDT no se puede consignar ni retirar dinero. La única operación posible es cerrarlo, en cuyo caso, el dinero y sus intereses pasan a la cuenta corriente.
Se quiere que el programa permita a una persona simular el manejo de sus productos bancarios, dándole las facilidades de: (1) hacer las operaciones necesarias sobre los productos que conforman la cuenta, y (2) avanzar mes por mes en el tiempo, para que el cliente pueda ver el resultado de sus movimientos bancarios y el rendimiento de sus inversiones.
*/
import java.util.Scanner;
class Mes {
protected int numeroMes;
public Mes(int mes) {
this.numeroMes = mes;
}
public final int DiferenciaMeses(Mes mes) {
return (this.numeroMes - mes.numeroMes);
}
public final void AvanzarMes() {
this.numeroMes++;
}
}
class CDT {
private Float valorInvertido;
private Float interesMensual;
private Mes mesApertura;
public CDT() {
this.valorInvertido = Float.valueOf(0);
this.interesMensual = Float.valueOf(0);
this.mesApertura = new Mes(0);
}
public final void Invertir(Float valor, Float interes, int numeroMes) {
this.valorInvertido = valor;
this.interesMensual = interes;
this.mesApertura = new Mes(numeroMes);
}
public final Float ValorPresente(Mes mesActual) {
int mesesTranscurridos = mesActual.DiferenciaMeses(this.mesApertura);
return (this.valorInvertido + (mesesTranscurridos * (this.interesMensual * this.valorInvertido)));
}
public final Float Cerrar(Mes mesActual) {
Float valorCierre = this.ValorPresente(mesActual);
this.valorInvertido = Float.valueOf(0);
this.interesMensual = Float.valueOf(0);
this.mesApertura.numeroMes = 0;
return valorCierre;
}
}
class CuentaAhorros {
protected Float saldo;
public Float interesMensual;
public CuentaAhorros() {
this.saldo = Float.valueOf(0);
this.interesMensual = 0.006f;
}
public final void ConsigarValor(Float valor) {
this.saldo += valor;
}
public final void RetirarValor(Float valor) {
this.saldo -= valor;
}
public final void ActualizarSaldoTransicionMes() {
this.saldo = (this.saldo + (this.saldo * this.interesMensual));
}
}
class CuentaCorriente {
protected Float saldo;
public CuentaCorriente() {
this.saldo = Float.valueOf(0);
}
public final void ConsignarValor(Float valor) {
this.saldo = (this.saldo + valor);
}
public final void RetirarValor(Float valor) {
this.saldo = (this.saldo - valor);
}
}
class CuentaBancaria {
private String cedula;
private String nombre;
private Mes mesActual;
private CuentaCorriente corriente;
private CuentaAhorros ahorros;
private CDT inversion;
public CuentaBancaria(String cedula, String nombre) {
this.nombre = nombre;
this.cedula = cedula;
this.mesActual = new Mes(0);
this.corriente = new CuentaCorriente();
this.ahorros = new CuentaAhorros();
this.inversion = new CDT();
}
public final void invertirCDT(Float monto, Float interesMensual) {
this.inversion.Invertir(monto, interesMensual, this.mesActual.numeroMes);
}
public final void consignarCuentaCorriente(Float valor) {
this.corriente.ConsignarValor(valor);
}
public final void consignarCuentaAhorros(Float valor) {
this.ahorros.ConsigarValor(valor);
}
public final void cerrarCDT() {
this.corriente.ConsignarValor(this.inversion.Cerrar(this.mesActual));
}
public final void retirarCuentaCorriente(Float valor) {
this.corriente.RetirarValor(valor);
}
public final void retirarCuentaAhorro(Float valor) {
this.ahorros.RetirarValor(valor);
}
public final Float calcularSaldoTotal() {
return (this.corriente.saldo + (this.ahorros.saldo + this.inversion.ValorPresente(this.mesActual)));
}
public final Float calcularCuentaCorriente() {
return this.corriente.saldo;
}
public final Float calcularCuentaAhorros() {
return this.ahorros.saldo;
}
public final Float calcularCDT() {
return this.inversion.ValorPresente(this.mesActual);
}
public final void avanzarMesSimulacion() {
this.mesActual.AvanzarMes();
this.ahorros.ActualizarSaldoTransicionMes();
}
}
public class main {
public static void main(String[] args) {
print("Bienvenido al programa de simulaciónes del Banco UTP");
print("Ingresa una opcion: ");
print("1. Ingresar nombre y cedula");
print("2. Salir");
int ingresarOperacion = getIntFromKeyboard();
print(String.format("Seleccionaste: %s",ingresarOperacion));
if(ingresarOperacion == 1){
print("Ingresa tu nombre");
String nombreCuenta = getStringFromKeyboard();
print("Ingresa tu cedula");
String cedulaCuenta = getStringFromKeyboard();
CuentaBancaria cuenta = new CuentaBancaria(cedulaCuenta,nombreCuenta);
Boolean salir = false;
while (!salir){
print("Operaciones sobre tu cuenta:");
print("1. invertir CDT");
print("2. consignar cuenta corriente");
print("3. consignar cuenta de ahorros");
print("4. avanzar mes");
print("5. mostrar saldos");
print("6. Cerrar CDT");
print("7. Retirar cuenta corriente");
print("8. Retirar cuenta ahorros");
print("9. salir");
int operacionCuenta = getIntFromKeyboard();
print(String.format("Seleccionaste la opcion: %s",operacionCuenta));
switch(operacionCuenta) {
case 1:
print("Digite el monto que desea ingresar en el CDT:");
float montoCdt = getFloatFromKeyboard();
print("Digite el interes mensual");
float intereMensual = getFloatFromKeyboard();
cuenta.invertirCDT(montoCdt,intereMensual);
break;
case 2:
print("Digite monto a consignar");
float monto = getFloatFromKeyboard();
cuenta.consignarCuentaCorriente(monto);
break;
case 3:
print("Digite monto a consignar");
float montoAhorros = getFloatFromKeyboard();
cuenta.consignarCuentaAhorros(montoAhorros);
break;
case 4:
cuenta.avanzarMesSimulacion();
print("Se avanzo el mes correctamente");
break;
case 5:
print(String.format("En total tienes: %s",cuenta.calcularSaldoTotal()));
print(String.format("En total en tu cuenta de ahorros tienes: %s",cuenta.calcularCuentaAhorros()));
print(String.format("En total en tu cuenta corriente tienes: %s",cuenta.calcularCuentaCorriente()));
print(String.format("En total en tu CDT tienes: %s",cuenta.calcularCDT()));
break;
case 6:
cuenta.cerrarCDT();
break;
case 7:
print("Digite monto a retirar");
float retirarCorriente = getFloatFromKeyboard();
cuenta.retirarCuentaCorriente(retirarCorriente);
break;
case 8:
print("Digite monto a retirar");
float retirarAhorro = getFloatFromKeyboard();
cuenta.retirarCuentaAhorro(retirarAhorro);
break;
case 9:
salir = true;
break;
default:
print("operacion no soportada");
}
}
}
}
private static void print(String value) {
System.out.println(value);
}
private static int getIntFromKeyboard(){
Scanner in = new Scanner(System.in);
return in.nextInt();
}
private static String getStringFromKeyboard(){
Scanner in = new Scanner(System.in);
return in.nextLine();
}
private static Float getFloatFromKeyboard(){
Scanner in = new Scanner(System.in);
return in.nextFloat();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment