0

Estoy en un ejercicio de gestión de un banco. Pongo el enunciado de lo que tengo que hacer:

En un banco se quiere tener registrados a todos sus clientes y las cuentas bancarias que éstos tengan asociadas.Cada cliente dispondrá de los siguientes datos: • Código cliente

• DNI del cliente

• Nombre y Apellidos

• Dirección completa

• Teléfono de contacto

Por otro lado, cada cuenta bancaria tiene la siguiente información: • Número de cuenta

• Saldo

• Fecha de apertura

Cuando se da de alta un cliente, debe tener obligatoriamente un DNI, nombre y apellidos. El código cliente es un entero único que se generará automáticamente de forma correlativa empezando por el código número 1.Para crear una cuenta bancaria en la aplicación es obligatorio que tenga asociado un cliente. El saldo inicial será por defecto 0 € y la fecha de apertura la del sistema.

Teniendo en cuenta todo lo expuesto:

• Diseña adecuadamente la clase Cliente, agregando los métodos constructores necesarios y todos los accesores

• Diseña la clase Cuenta, agregando los métodos constructores necesarios y todos los accesores. Agrega también dos operaciones más: ingresarDinero y extraerDinero, para permitir variar el saldo. El método extraerDinero devolverá el valor 0 si todo fue correcto y el valor 1 si se intentó extraer una cantidad mayor al saldo.

• Crea un programa principal que permita mediante un menú:

o Crear clientes

o Permitir que estos puedan ingresar o extraer dinero. Informará por pantalla si no se pudo extraer el dinero por falta de saldo.

o Mostrar el saldo de todos los clientes

o Mostrar los datos de todos los clientes

Añado que acabo de empezar con Java y me está costando la verdad con lo que nos han explicado y pasado de apuntes. Pongo el código de lo que tengo hecho hasta ahora.

Tengo dos clases, la de cliente y la de cuenta.

Programa principal:

public class pPrincipal {
static java.util.Date fecha;
//static BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in) );

public static void main(String[] args) {

    Cliente[] client = new Cliente[50];
    Cuenta[] account = new Cuenta[50];
    Cuenta[] VectorCuenta = new Cuenta[50];
    Scanner sc = new Scanner(System.in);

    int opcion;
    
    do {
        System.out.println("\n============");
        System.out.println("=== Menu principal ===\n");
        System.out.println("0. Salir.\n");
        System.out.println("1. Crear una cuenta.");
        System.out.println("2. Ingresar dinero.");
        System.out.println("3. Retirar dinero.");
        System.out.println("4. Mostrar saldo.");
        System.out.println("5. Mostrar cliente.\n");
        System.out.flush();
        
        opcion = sc.nextInt();
        
        switch (opcion) {

            case 1: crearCliente();
               break;

            case 2: ingreso();
                break;

            case 3: retirada();
                break;

            /*case 4: mostrarSaldo();
                    break;
                    
            case 5: mostrarCliente();
                    break;*/
                    
            default: System.out.println("Sesion terminada.");

          }
        
    } while (opcion != 0);
    
    System.out.println("\n>> Gracias por usar nuestro sistema bancario. <<");
    
}

       
   public static void crearCliente(){
       
       Scanner sc = new Scanner(System.in);
       Cuenta[] VectorCuenta = new Cuenta[50];
       int generador = 0;
       int incremento = 1;
       
       System.out.println("Introduzca nombre y apellidos: ");
       String NombreApellidos = sc.next();
       sc.nextLine();
       generador = generador + incremento;
       System.out.println("El código de cliente es: "+generador);
       int cCliente = generador;
       System.out.println("DNI del cliente:");
       String dni = sc.next();
       System.out.println("Direccion de contacto:");
       sc.nextLine();
       String direccion = sc.next();
       System.out.println("Telefono de contacto: ");
       sc.nextLine();
       String numeroTelf = sc.next();
       System.out.println("Numero de cuenta: ");
       String NumeroCuenta = sc.next();
       int saldo = 0;
       System.out.println("Saldo inicial: "+saldo);
       fecha = new Date();
       DateFormat formateadorFechaMedia = DateFormat.getDateInstance(DateFormat.MEDIUM);
       String fechaApertura = (formateadorFechaMedia.format(fecha));
       System.out.println("Fecha de apertura: "+fechaApertura);
       
       Cliente DatosCliente = new Cliente(NombreApellidos, cCliente, dni, direccion, numeroTelf);
       Cuenta DatosCuenta = new Cuenta(NumeroCuenta, saldo, fechaApertura);
       VectorCuenta[cCliente] = DatosCuenta;
       
   }

   public static void ingreso() {
       
       Scanner sc = new Scanner(System.in);
       System.out.println("Codigo de cliente para el ingreso: ");
       int cCliente = sc.nextInt();
       System.out.println("Cantidad a ingresar: ");
       double cant = sc.nextDouble();
       //VectorCuenta[cCliente].ingreso(cant);
       System.out.println("El saldo es: "+cant+"\n El saldo actual de la cuenta es: "
                            +VectorCuenta[cCliente].getSaldo());
       
   }
   
   public static void retirada() {
       Scanner sc = new Scanner(System.in);
       System.out.println("Codigo de cliente para la retirada de dinero: ");
       int cCliente = sc.nextInt();
       System.out.println("Cantidad a retirar: ");
       double cant = sc.nextDouble();
       System.out.println();
       
   }

}

Creo que se ha borrado lo que preguntaba, perdón.

Bien, los getters y setters me los piden obligatoriamente ya que son reglas de entrega de los ejercicios.

Tengo problemas en el programa principal con crear clientes, eso me funciona bien pero cuando voy a ingresar dinero que es el case 2, me sale error de pointer porque es nulo. Y para uno de los comentarios, si, compila, el error me lo da cuanto hago el ingreso de dinero (case 2).

Imagino que es porque no me devuelve el objeto, los datos que he ingresado en crearCliente. Si pongo el código directamente en el case 1,2,3... si me funciona bien ingresar dinero y sacar dinero, así que imagino que el problema es la devolución del método de creación de clientes.

No sé muy bien como hacerlo, he buscado como devolver objetos pero no termino de entenderlo y quizás me estoy complicando, pero querría saber cómo hacer para que me guarde todo lo que hago en crearCliente() y luego poder ingresar/sacar dinero sin que me dé fallo NPE después de realizar el ingreso o retirada.

No hago más que buscar y no doy con la tecla.

Un saludo. Gracias.

PD: parece que para escribir aquí hay que tener un máster, soy novato por favor. Me parece muy bien que tengáis años de experiencia, yo 0 años, soy estudiante de universidad y no quiero que me lo resuelvan porque si no, no llevaría 5 días con este maldito ejercicio. Un poquito de empatía, ¿sabéis lo que es?

Jesus
  • 1
  • 1
  • Delimita más tu pregunta: ¿cuál es _exactamente_ el problema que estás teniendo? ¿Qué no sale? Lee [ask] y haz el [tour] para conocer el funcionamiento del sitio. – padaleiana Nov 02 '21 at 12:43
  • Mira [ask] para que tu pregunta sea mejor recibida. También, aprovecha y haz el [tour] para entender mejor cómo funcionamos y de paso obtener tu primera [medalla](https://es.stackoverflow.com/help/badges)! – gbianchi Nov 02 '21 at 12:56
  • Una publicación que simplemente dice: "este es mi ejercicio, resuélvanlo", no es bien recibida. Es mejor que incluyas el contexto (usa el botón [edit] para hacer cambios en tu pregunta): incluye que intentaste/investigaste y también cual es el problema puntual que tuviste. Demuestra algo que nos indique que formas parte de la experiencia de aprender a solucionar tu problema. – gbianchi Nov 02 '21 at 12:56
  • Busca... ambito de variables, tambien conocido como scope (estas tratando de usar variables declaradas en otro metodo, esto no de debe ni compilar). Siempre marca tu error en la pregunta, deja claro el codigo involucrado (no todo tu programa) y no escribas una pared inseguible de cosas. Tene en cuenta, que quien lee debe entender de que hablas. Las clases que solo tienen get y set, no son nada... – gbianchi Nov 02 '21 at 13:11
  • Pues si compila, el NPE me da fallo después de ingresar dinero. – Jesus Nov 02 '21 at 13:31
  • 1
    "parece que para escribir aquí hay que tener un máster, soy novato por favor"... no, no es cierto. Te estamos indicando que necesitamos para poder darle una respuesta a tu pregunta... te dimos links para que revises y mejores tu pregunta. Cerramos tu pregunta para que le prestes mas atencion al problema señalado. Te dimos una pregunta que contesta exactamente lo que preguntas... la pregunta que te marcamos como duplicada, señala exactamente que hacer cuando tenes este problema. Todo eso, no te sirivio? viste los links que te indicamos? – gbianchi Nov 02 '21 at 14:07
  • 1
    De paso.. si declaras una variable dentro de un metodo, al terminar el metodo esa variable desaparece... por eso te dije que vieras sobre ambito de variables. – gbianchi Nov 02 '21 at 14:12
  • Si que he estado mirando las respuestas, pero no me sirve creo, o igual no lo veo por falta de experiencia. No lo sé, pero yo ya imaginaba que era problema de ámbito, pero llevo un lío tremendo. Voy a probar algo que se me acaba de ocurrir con lo que ya me has comentado. – Jesus Nov 02 '21 at 14:42

0 Answers0