CAJERO AUTOMATICO


Ejercicio que simula el funcionamiento de un cajero automático en el cual se aplican los siguientes principios:


·       Sobre carga de constructores
·       Polimorfismo
·       Herencia
·       Métodos virtuales
·       Métodos abstractos
·       Interface
·       Manejo de excepciones


Clase abstract
packagecajero;
public abstract class Operaciones {

protected String Nombre;
protected double Saldo;
protected int Numero;
protected int Contraseña;
//Atributos a utilizar

public Operaciones(String Nombre, double Saldo, int Numero, int Contraseña) {
this.Nombre = Nombre;
this.Saldo = Saldo;
this.Numero = Numero;
this.Contraseña = Contraseña;}

public Operaciones() {
this.Nombre = null;
this.Saldo = 0;
this.Numero = 0;
this.Contraseña = 0;}

public Operaciones(String Nombre) {
this.Nombre = Nombre;
this.Saldo = 500.99;}   
//Sobrecarga de constructores solo el primero vamos a utilizar los demás solo.
//se han creado para demostrar el principio de sobrecarga.

public abstract boolean Retiro(double Cantidad);
public abstract boolean Transferencia(double Cantidad);
public abstract void Consulta();
publicabstract void info();
//Métodos abstractos
}

Interface
package cajero;
public interface Impuestos {

intImp = 1;
//Variables estaticas o finales

public double Impuesto(double Cantidad); 
//Metodos abstracto no es necesario el uso de la palabra abstract ya que solo
//pueden existir métodos abstractos en una interface.
//Este metodo lo usamos para calcular el impuesto de cada retiro y transferencia.
}

Clase cuenta
package cajero;
public class Cuenta extends Operaciones implements Impuestos{

private int ultMovimiento=0;
//Atributo de tipo privado usado para la contraseña de la cuenta 

public Cuenta(String Nombre, double Saldo, int Numero, int Contraseña) {
super(Nombre, Saldo, Numero, Contraseña);
    }

//Constructor de la clase cuenta que inicializa primero al de la clase padre

public int getContraseña() {
returnContraseña;
    }

public int getNumero() {
returnNumero;
}

//propiedades de lectura que usaremos en la principal

     @Override
public boolean Retiro(double Cantidad) {
double Total=Cantidad+Impuesto(Cantidad);
if(super.Saldo>=Total){
super.Saldo=super.Saldo-Total;
this.ultMovimiento = 1;
return true;}
else{ return false;}
    }//Fin de metodo Retiro


    @Override
public boolean Transferencia(double Cantidad) {
double Total=Cantidad+Impuesto(Cantidad);
if(super.Saldo>=Total){
super.Saldo=super.Saldo-Total;
this.ultMovimiento = 2;
return true;}
else{ return false;} 
    }//Fin de metodo Transferencia

    @Override
public void Consulta() {
    System.out.println("Señor/a                    "+super.Nombre);
System.out.println("Su saldo es                "+super.Saldo);
System.out.println("Su numero de cuenta es     "+this.Numero);
if(this.ultMovimiento==1){System.out.println("Su ultimo movimiento fue un Retiro");}
if(this.ultMovimiento==2){System.out.println("Su ultimo movimiento fue una Transferencia");}  
    }//Fin del metodo Consulta

    @Override
public void info() {
System.out.println("Bienvenido Señor/a         "+super.Nombre);
System.out.println("Su saldo es                "+super.Saldo); 
System.out.println("Que operacion desea realizar ?");
System.out.println("1.-Retiro   2.-Transferencia   3.-Consulta   4.-Salir");
    }

    @Override
public double Impuesto(double Cantidad) {return super.Saldo*Imp/100; }}

clase principal
package cajero;
import java.io.*;

public class CAJERO {
public static InputStreamReader Leer = new InputStreamReader(System.in);
public static BufferedReaderTeclado = new BufferedReader(Leer);
public static void main(String[] args) throws IOException {
intnc=0,h=0,cont,nIntentos=0,mov=0,op;
booleanerror,enc=false;
//Variables a usar en la clase ejecutora

Operaciones [] Base =new Operaciones[5];

Base[h++]=new Cuenta("Danny"  ,500.56,1234,1109);
Base[h++]=new Cuenta("Nadia"  ,600.15,1235,1111);
Base[h++]=new Cuenta("Gissel" ,770.46,1236,2222);
Base[h++]=new Cuenta("Roberto",444.46,1237,3333);
Base[h++]=new Cuenta("Maliza" ,888.26,1238,4444);
//Creamos 5 cuentas

do{
System.out.println("Bienvenido");  
do{
error=false;
System.out.println("Ingrese su numero de cuenta");
try{
nc=Integer.parseInt(Teclado.readLine());
}
catch(NumberFormatException e){
error=true;
System.out.println("No debe ingresar ninguna letra");   
System.out.println("Vuelva a ingresar su numero de cuenta");   
}
}while(error);
//Bloque para el ingreso del número de cuenta el cual solo admite números


for(int i=0;i<5;i++){
if (Base[i].Numero==nc){
h=i;
enc=true;}}
if(enc==false){System.out.println("No se encuentra el numero de cuenta");  }     
//Bloque que realiza la busqueda del numero de cuenta ingresado
    }while(enc==false);

System.out.println("Ingrese su contraseña");
do{  
enc=false;
nIntentos++;
cont=Integer.parseInt(Teclado.readLine());
if (Base[h].Contraseña==cont){
System.out.println("Contraseña correcta");
enc=true;
}       
else  {System.out.println("Contraseña incorrecta");      
System.out.println("Vuelva a ingresarla"); }

}while((nIntentos<3)&&(!enc));

if(!enc){System.out.println("Ha excedido el numero de intentos");
System.out.println("No puede seguir usando el cajero");
System.exit(0);}
//Bloque que realiza la funcion de comprobar la contaseña ingresada por el
//usuario permitiendole solo un maximo de tres intentos

do{
Base[h].info();
do{
System.out.println("Escoja una opcion entre 1 y 4");
op=Integer.parseInt(Teclado.readLine());}while((op<1)||(op>4));

switch(op){
case 1:
do{error=false;
System.out.println("Ingrese la cantidad");
try{
mov=Integer.parseInt(Teclado.readLine());}
catch(NumberFormatException e){
System.out.println("Ingrese solo numeros");
error =true;
        }
        }while(error);
if((mov<5)||(mov>200)){
System.out.println("El monto minimo de retiro es de 5$ y el max de 200$");
        }//LLave del if
else{
if(Base[h].Retiro(mov)){System.out.println("Operacion realizada con exito");}
else{System.out.println("No cuenta con saldo suficiente");}
}//llave del else
break;

case 2:
do{error=false;
System.out.println("Ingrese la cantidad");
try{
mov=Integer.parseInt(Teclado.readLine());}
catch(NumberFormatException e){
System.out.println("Ingrese solo numeros");
error =true;
        }
        }while(error);
do{
error=false;
System.out.println("Ingrese numero de cuenta a la que va a enviar");
try{
nc=Integer.parseInt(Teclado.readLine());
    }
catch(NumberFormatException e){
error=true;
System.out.println("No debe ingresar ninguna letra");   
System.out.println("Vuelva a ingresar el numero de cuenta");   
    }
    }while(error);
if(Base[h].Transferencia(mov)){System.out.println("Operacion realizada con exito");}
else{System.out.println("No cuenta con saldo suficiente");}
break;

case 3:
        Base[h].Consulta();
break;

}//switch

}while(op<4)}}



2 comentarios:

Diany Arias dijo...

Hola! me podrías ayudar con un código para dibujar el cajero por fa?

newton mix dijo...

me pasariar tu proyecto x correo por fas???
isaac_lone@hotmail.com

Publicar un comentario en la entrada