1.8 Caso práctico Desarrollar un programa utilizando el paradigma orientado a objetos, para controlar una cuenta bancaria, una cuenta tiene un número que lo identifica, y pertenece a una persona al que se le denomina titular de la cuenta, como es natural una cuenta bancaria tiene un monto positivo asignado, así como información sobre el interés anual. Es posible realizar depósitos en la cuenta sin ningún límite obviamente no se puede hacer depósitos negativos, sin embargo no es posible hacer retiros de la cuenta cuando el monto a retirar supera el saldo disponible. Así mismo el interés generado por el monto depositado en la cuenta se calcula mensualmente, con la tasa de interés que consigna la cuenta. La cuenta debe poder emitir una alerta si la cuenta ha llegado a cero, siendo posible consultar el saldo disponible. Se debe aperturar dos cuentas bancarias, realizar depósitos, retiros, cálculo de los intereses generados en un mes, consulta de saldos y alertas cuando la cuenta queda sin fondos.
Solución: Mediante la abstracción identificamos la clase sus atributos y métodos, que permitan cumplir con los requerimientos antes descritos. Se considerarán atributos cuyo nivel de visibilidad serán privados: Número, titular, saldo e interésAnual. Los métodos a considerar: Los setter y getter serán para poder modificar y leer información de los atributos privados, el método depositar implementará la forma de ingresar montos a la cuenta, el método retirar para sacar fondos de la cuenta, ingresoInteresMes para calcular el interés correspondiente a un mes, enRojo para emitir una alerta si la cuenta tiene o no fondos.
Cuenta.java Cuenta.java public class Cuenta { //Atributos private long numero; private String titular; private float saldo; private float interesAnual; //Constructor public Cuenta(long numero, String titular, float interesAnual) { this.numero = numero; this.titular = titular; this.saldo=0; this.interesAnual = interesAnual; } //Métodos //Métodos para controlar el a los atributos public float getInteresAnual() { return interesAnual; } public void setInteresAnual(float interesAnual) {
if (interesAnual>0 && interesAnual<=1){ //Si el interes ingresado no es negativo y mayor al 100% this.interesAnual = interesAnual; } } public long getNumero() { return numero; } public void setNumero(long numero) { if (numero>0){ //si el numero de cuenta no es igual a cero o negativo this.numero = numero; } } public float getSaldo() { return saldo; } public String getTitular() { return titular; } public void setTitular(String titular) { if (titular.length()>0){ //Si el nombre del titular no es una cadena vacia this.titular = titular; } } //Métodos para realizar operaciones public boolean depositar(float cantidad){ if (cantidad>=0){ //La cantidad de depósito no sea negativa ni cero this.saldo=this.saldo+cantidad; return true; }else{return false;} } public boolean retirar(float cantidad){ if(cantidad>0){ //la cantidad a retirar debe ser positiva mayor que cero if (this.saldo>=cantidad){ //si hay suficiente saldo para realizar el retiro this.saldo=this.saldo-cantidad; return true; } else { return false; }
} else { return false; } } public void IngresoInteresesMes(){ if (this.saldo>0){ //Se calcula si la cuenta tiene saldo this.saldo= this.saldo+(this.saldo*this.interesAnual)/12; } } public boolean enRojo(){ return saldo==0; } } Código fuente de la clase PruebaCuenta, que será nuestra clase de ejecución para cumplir con lo requerido. PruebaCuenta.java PruebaCuenta.java public class PruebaCuenta { public static void main(String[] args) { //cremos dos objetos de la clase cuenta Cuenta cuenta1=new Cuenta(123456,"Ivan Mejia Cabrera",0.05f); Cuenta cuenta2=new Cuenta(623456,"José Diaz Diaz",0.10f); //Realizar depósito a las cuentas cuenta1.depositar(1500.70f); cuenta2.depositar(4500.50f); //Imprimir los datos de las cuentas System.out.println("Depositando en las cuentas..........."); imprimir(cuenta1); imprimir(cuenta2); System.out.println("-----------------------------------------------------------------------"); //Realizar retiro de las cuentas System.out.println("Retirando de las cuentas 1500.70 y 4000.89..........."); cuenta1.retirar(1500.70f); cuenta2.retirar(4000.89f); //Imprimir los datos de las cuentas imprimir(cuenta1);
imprimir(cuenta2); System.out.println("-----------------------------------------------------------------------"); //calcular intereses ganados en un mes System.out.println("Calculando el interes por mes"); cuenta1.IngresoInteresesMes(); cuenta2.IngresoInteresesMes(); //Imprimir los datos de las cuentas imprimir(cuenta1); imprimir(cuenta2); } public static void imprimir(Cuenta cuenta){ System.out.println("Reporte: "); System.out.println("Número: "+cuenta.getNumero() ); System.out.println("Titular: "+cuenta.getTitular()); System.out.println("Saldo: "+cuenta.getSaldo()); System.out.println("Tasa de interés anual: "+cuenta.getInteresAnual()*100 +"%"); if (cuenta.enRojo()) {System.out.println("Cuenta sin fondos ");} else {System.out.println("Cuenta con fondos ");}; } } Resultados de la ejecución: run: Depositando en las cuentas........... Reporte: Número: 123456 Titular: Ivan Mejia Cabrera Saldo: 1500.7 Tasa de interés anual: 5.0% Cuenta con fondos
Reporte: Número: 623456 Titular: José Diaz Diaz Saldo: 4500.5 Tasa de interés anual: 10.0% Cuenta con fondos ----------------------------------------------------------------------Retirando de las cuentas 1500.70 y 4000.89........... Reporte: Número: 123456 Titular: Ivan Mejia Cabrera Saldo: 0.0 Tasa de interés anual: 5.0% Cuenta sin fondos Reporte: Número: 623456 Titular: José Diaz Diaz Saldo: 499.6101 Tasa de interés anual: 10.0% Cuenta con fondos ----------------------------------------------------------------------Calculando el interés por mes Reporte:
Número: 123456 Titular: Ivan Mejia Cabrera Saldo: 0.0 Tasa de interés anual: 5.0% Cuenta sin fondos Reporte: Número: 623456 Titular: José Díaz Díaz Saldo: 503.77353 Tasa de interés anual: 10.0% Cuenta con fondos GENERACIÓN CORRECTA (total time: 0 seconds)