entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Hola primero que nada debo decir que soy mas que nuevo en esto de programar(cuestion de meses) y en el proyecto de programación 1 nos piden usar el lenguaje java en el programa jdeveloper 11g para crear un cajero automático que tenga tres clases: cajero, cuenta, transacción; uno de los atributos de la clase cuenta es un PIN formado por cuatro digitos aleatorios que deben ser generador para cada cuenta y luego deben ser codigicados de manera que el primer digito cambia al segundo puesto a la misma vez que el segundo pasa al primero(lo mismo para el tercero con el cuarto).Mi problema es que cada vez que ingreso una cuenta se genera de nuevo el pin y por eso no puedo ingresar a ninguna cuenta por que cada vez que el programa ejecuta la cuenta tendria diferente pin abajo les voy a dejar mi codigo para que vean lo que hasta ahora he hecho(el metodo codificar no se como hacerlo, si necesitan algo mas de mi codigo me avisan).

public String asignarPin(){//este es mi generador de contraseñas
    String contrasena="";
    int generador;
    for(int i=0;i<4;i++){
    generador = (int)(Math.random()*10);
    contrasena+= generador;
    }
    public String incluirCuenta(Cuenta cuenta1){//Este es el metodo de la clase cajero para incluir la cuenta
        if(indice<arregloCuentas.length-1){
        indice++;
        arregloCuentas[indice]=cuenta1;
        return "Cuenta incluida en la lista en la posición: "+(indice+1)+".\n"+cuenta1.toString();
        }else{
        return "La siguiente cuenta no pudo ser incluida debido a las especificaciones de capacidad de la lista.\n"+cuenta1.toString();    
        }
    }
    public String toString(){//Este es el toString de la cuenta
    String hile1=asignarPin();
    String hile2=codificarPinyDecodificar();
    String hilera ="Datos del cliente\n"+
                   "------------------------------\n"+
                   "Cuenta número: "+this.num+"\n"+
                   "------------------------------\n"+
                   this.nombre+"\n"+
                   "------------------------------\n"+
                    this.cedula+"\n"+
                   "------------------------------\n"+
                   this.saldo+"\n"+
                   "------------------------------\n"+    
                   this.telefono+"\n"+
                   "------------------------------\n"+
                   "Pin codificado: "+hile1+"\n"+
                   "------------------------------\n"+
                   "Pin decodificado: "+hile2+"\n";
     return hilera;              
    }

1 Respuesta

5votos

magarzon Puntos30650

Hola.

Para empezar, no sé si el código que has pegado pertenece a una clase (parece que a la clase Cajero), a varias, o a ninguna. Y también creo que tienes un poco de lío entre lo que es una clase y lo que es una instancia u objeto de esa clase.

Así que vayamos por partes:

Primero, tu "programa" necesita tres clases: Cajero, Cuenta y Transacción.
Este sería tu modelo de datos. Estas clases van a tener unos métodos y unas variables miembro.

Ahora vamos a ver cuántos objetos de cada clase necesitamos y cómo se relacionan entre ellos. En principio, tu programa parece que solo va a tener un objeto/instancia de la clase Cajero, y este objeto tendrá la información sobre las cuentas, o más concretamente, de cada objeto/instancia de la clase Cuenta que generes en tu sistema (En un sistema un poco más real tendríamos una clase Banco, varios objetos de la clase Cajero, y los objetos de la clase Cuenta estarían asociados a Banco y no a Cajero, pero mejor no liarnos y ceñirnos a tu sistema).

Vamos también a obviar temas de patrones de diseño, porque quizás es algo avanzado para tu nivel (y el profesor se daría cuenta de que has recibido ayuda, si no es algo que os hayan explicado). Pero por si quieres investigar, el objeto/instancia Cajero sería un Singleton, y para crear las Cuentas podríamos usar el patrón Factoría.

Por tanto, tienes tu clase Cajero, donde tienes tu método incluirCuenta. El método para asignarPin lo vamos a meter en la clase Cuenta. Vamos a crear una cuenta, y añadirla al cajero:

//Creamos nuestro objeto cajero
Cajero cajero = new Cajero();

//Creamos una cuenta, supongamos que el constructor admite un nº de cuenta
Cuenta cuenta1 = new Cuenta('1234');

//Generamos un pin para esa cuenta, dentro de asignarPin se podría incluir el método de codificarlo también
cuenta1.asignarPin();

//Y la añadimos al cajero
cajero.incluirCuenta(cuenta1);

Ahora, lo que quieres es entrar al cajero con esa cuenta y hacer una transacción. Suponemos que primero habrá que introducir el nº de cuenta, y luego el pin:

System.out.print("Introduce nº de cuenta:");
String ncuenta = System.console().readLine();
System.out.print("Introduce pin:");
String pin = System.console().readLine();

//Este objeto cajero es el creado anteriormente, se supone que estamos bien en el mismo contexto, o que has guardado este objeto de alguna manera. Primero buscamos la cuenta

Cuenta cuenta = cajero.buscarCuenta(ncuenta);

if (null == cuenta) {
    System.err.println('Cuenta no encontrada');
    return;
}

//Si la cuenta existe, comprobamos el pin, el método de comprobación debería primero "deshacer" la codificación y luego comprobar que es igual al introducido
if (cuenta.comprobarPin(pin)) {
    //Aquí ya se hace lo que se quiera, se cogen los datos para la transacción o lo que sea
} else {
    System.err.println('El pin es incorrecto');
} 

Perdón si he metido algún error en el código, hace años que no programo en Java, he intentado dar solo una explicación por encima, si hace falta expandir la explicación, pídelo en los comentarios.

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta