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?