Java - Ayuda con el programa de un banco para N clientes, lo he intentado hacer pero no me sale,

 
Vista:
sin imagen de perfil

Ayuda con el programa de un banco para N clientes, lo he intentado hacer pero no me sale,

Publicado por programadorprincipiante (1 intervención) el 18/03/2022 00:48:43
// solo ya hice para 2 clientes
- Pero quiero hacerlo para "N clientes" es decir, que el programa me pida cuantos clientes quiero ingresar

import java.util.Scanner;
public class viernes18java {
public static void main(String args[]) {
Scanner teclado=new Scanner(System.in);
String nombre,nombre2;
int i, a, b, c, d, numCuenta, edad, numCuenta2, edad2;
double saldo,saldo2,importeDepositar,importeRetirar,importeTransf;
int opcion;


//cliente y cuenta 1
System.out.println("Escribe un ID o numero de cuenta 1: ");
numCuenta=teclado.nextInt();

System.out.println("Escribe tu nombre: ");
nombre=teclado.next();

System.out.println("Escribe tu edad");
edad=teclado.nextInt();

System.out.println("Escribe tu saldo");
saldo=teclado.nextDouble();

Cuenta cuenta1=new Cuenta(numCuenta, nombre, edad, saldo);
//cliente y cuenta 2
System.out.println("");
System.out.println("Escribe un ID o numero de cuenta 2: ");
numCuenta2=teclado.nextInt();

System.out.println("Escribe tu nombre: ");
nombre2=teclado.next();

System.out.println("Escribe tu edad");
edad2=teclado.nextInt();

System.out.println("Escribe tu saldo");
saldo2=teclado.nextDouble();

Cuenta cuenta2=new Cuenta(numCuenta2, nombre2, edad2, saldo2);
do{
System.out.println();
System.out.println("-------------------------------------------");
System.out.println("MENU DE OPCIONES");
System.out.println("1.Depositar a una cuenta específica");
System.out.println("2.Retirar de cuenta específicas");
System.out.println("3.Realizar traspasos entre cuentas");
System.out.println("4.Consultar el saldo de una cuenta específica");
System.out.println("5.Consultar el saldo de todas las cuentas");
System.out.println("6.Salir");
System.out.println("Selecciona una opcion: ");
opcion=teclado.nextInt();
System.out.println("-------------------------------------------");
System.out.println();


//OPCION1
if(opcion==1){
System.out.println("A que cuenta quieres depositar?(1-para la primera cuenta, 2-para segunda cuenta");
a=teclado.nextInt();
if(a==1){//if para saber a q cuenta depositar
System.out.println("Cuanto quieres depositar a la cuenta 1? ");
importeDepositar=teclado.nextDouble();
if(importeDepositar<=0){
System.out.println("<<DEPOSITO NO REALIZADO>>");
System.out.println("No se puede depositar una cantidad menor a 0 pesos");
}
if(importeDepositar>0){
cuenta1.depositar(importeDepositar);//llama al metodo depositar
System.out.println("<<DEPOSITO REALIZADO>>");
}
}
else if(a==2){
System.out.println("Cuanto quieres depositar a la cuenta 2? ");
importeDepositar=teclado.nextDouble();
if(importeDepositar<=0){
System.out.println("<<DEPOSITO NO REALIZADO>>");
System.out.println("No se puede depositar una cantidad menor a 0 pesos");
}
if(importeDepositar>0){
cuenta2.depositar(importeDepositar);//llama al metodo depositar
System.out.println("<<DEPOSITO REALIZADO>>");
}
}
}
//OPCION 2
else if(opcion==2){
System.out.println("De que cuenta quieres retirar?(1-Para la primera cuenta, 2-Para segunda cuenta)");
b=teclado.nextInt();
//if para saber de que cuenta retirar
if(b==1){
System.out.println("Cuanto quieres retirar de la cuenta 1?");
importeRetirar=teclado.nextDouble();
//No poder retirar de una cuenta más dinero que el saldo que tiene la cuenta 1

if(importeRetirar<saldo){
System.out.println("<<RETIRO NO REALIZADO>>");
System.out.println("<<No se puede retirar más dinero que el saldo que tiene la cuenta>>");
}
else if(importeRetirar>=saldo){
cuenta1.retirar(importeRetirar);
System.out.println("<<RETIRO REALIZADO>>");
}
}
//fin del if para no poder retirar de una cuenta más dinero que el saldo que tiene la cuenta 1
else if(b==2){
System.out.println("Cuanto quieres retirar de la cuenta 2?");
importeRetirar=teclado.nextDouble();
//No poder retirar de una cuenta más dinero que el saldo que tiene la cuenta 2
if(importeRetirar<saldo){
System.out.println("<<RETIRO NO REALIZADO>>");
System.out.println("<<No se puede retirar más dinero que el saldo que tiene la cuenta>>");
}
else if(importeRetirar>saldo){
cuenta2.retirar(importeRetirar);
System.out.println("<<RETIRO REALIZADO>>");
}
//fin del if para no poder retirar de una cuenta más dinero que el saldo que tiene la cuenta 2
}
}
else if(opcion==3){
System.out.println("A que cuenta quieres transferir?");
System.out.println("(1-De la cuenta 1 a la cuenta 2 ó 2-De la cuenta 2 a la cuenta 1)");
c=teclado.nextInt();
//if para la transferencia
if(c==1){
System.out.println("Cuanto quieres transferir de la cuenta 1 a la cuenta 2?");
importeTransf=teclado.nextDouble();

//if para que no el importe no sea negativo
if(importeTransf<=0){
System.out.println("<<TRANSFERENCIA NO REALIZADA>>");
System.out.println("<<NO SE PERMITEN NUMEROS NEGATIVOS>>");
}
else if(importeTransf>0){
cuenta1.retirar(importeTransf);
cuenta2.depositar(importeTransf);
System.out.println("<<TRANSFERENCIA REALIZADA>>");
}
}
//fin if para que no el importe no sea negativo
else if(c==2){
System.out.println("Cuanto quieres transferir de la cuenta 2 a la cuenta 1?");
importeTransf=teclado.nextDouble();

//if para que no el importe no sea negativo
if(importeTransf<=0){
System.out.println("<<TRANSFERENCIA NO REALIZADA>>");
}
else if(importeTransf>0){
cuenta2.retirar(importeTransf);
cuenta1.depositar(importeTransf);
System.out.println("<<TRANSFERENCIA REALIZADA>>");
}
//fin if para que no el importe no sea negativo
}
}
//fin if de la opcion 3
else if(opcion==4){
System.out.println("De que cuenta quieres consultar el saldo? (1-Para la primera cuenta, 2-Para segunda cuenta)");
d=teclado.nextInt();
//if para saber de que cuenta consultar
if(d==1){
System.out.println("El saldo de la cuenta 1 es: "+cuenta1.consultarSaldo());
}
else if(d==2){
System.out.println("El saldo de la cuenta 2 es: "+cuenta2.consultarSaldo());
}
}
else if(opcion==5){
System.out.println("El saldo de la cuenta 1 es: "+cuenta1.consultarSaldo());
System.out.println("El saldo de la cuenta 2 es: "+cuenta2.consultarSaldo());
}
else if(opcion==6){
System.out.println("GRACIAS POR USAR!");
}
}while(opcion!=6);
}
}
class Cuenta{
int numCuenta;
String nombre;
int edad;
double saldo;


Cuenta(int numCuenta,String nombre,int edad, double saldo){
this.numCuenta=numCuenta;
this.nombre=nombre;
this.edad=edad;
this.saldo=saldo;
}
void depositar(double importe){
saldo=saldo+importe;
}
void retirar(double importe){
saldo=saldo-importe;
}
double consultarSaldo(){
return saldo;
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con el programa de un banco para N clientes, lo he intentado hacer pero no me sale,

Publicado por Kabuto (1381 intervenciones) el 18/03/2022 14:02:11
Hola.

Necesitas usar algún tipo de colección, por ejemplo, un ArrayList en el que ir almacenando objetos de la clase Cuenta.
Esta colección va creciendo según se añaden objetos, así que se pueden almacenar todas las que se quieran.

Esto implica que en el menú de opciones, tendrás que añadir una opción para crear nuevas cuentas.

Por cierto, otros consejos...

Para cumplir con las "buenas costumbres" de Java, y sobre todo con el principio de encapsulación, conviene indicar el nivel de acceso de los atributos y métodos de nuestras clases.

En la clase Cuenta, salvo que tengamos una razón de peso, lo normal será declarar como privados los atributos y como públicos los métodos que permiten interactuar con esos atributos, los métodos que solemos denominar como getters(obtener dato atributo) y setters(establecer dato atributo)

Puesto que ahora vamos a trabajar con N cuentas, para poder saber con que cuenta debemos operar en cada caso, vamos a necesitar al menos un getter para el número de cuenta, que será el dato que podemos usar para distinguir una cuenta de las demás.
Y si queremos, también el nombre, para poder mostrar más información en pantalla.

Y yo además, esta clase la escribirá por separado, en su propio archivo .java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Cuenta {
 
	private int numCuenta;
	private String nombre;
	private int edad;
	private double saldo;
 
 
	public Cuenta(int numCuenta,String nombre,int edad, double saldo){
		this.numCuenta=numCuenta;
		this.nombre=nombre;
		this.edad=edad;
		this.saldo=saldo;
	}
 
	public int getNumCuenta() {
		return numCuenta;
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public void depositar(double importe){
		saldo=saldo+importe;
	}
 
	public void retirar(double importe){
		saldo=saldo-importe;
	}
 
	public double consultarSaldo(){
		return saldo;
	}
}


Bien, respecto al programa principal.
Aquí recomiendo usar un switch para comprobar que opción se ha escogido, en lugar de concatenar numerosos if else.
Y para cada opción del menú, escribir un método específico.
Es decir, un método se dedicará exclusivamente a registrar una nueva cuenta.
Otro método se dedicará a hacer un depósito.
Otro para retirar...
Cada método se escribe por separado y cada uno se encargará de pedir los datos que pueda necesitar, declarando sus propias variables.

Mira, este podría ser el "esqueleto" del programa, es decir, la estructura del código.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import java.util.ArrayList;
import java.util.Scanner;
 
public class Banco {
 
	private static ArrayList<Cuenta> cuentas = new ArrayList<Cuenta>();
	private static Scanner teclado = new Scanner(System.in);
 
	public static void main(String[] args) {
 
		int opcion = 0;
 
		do {
			System.out.println("\n\n\t\tMENU DE OPCIONES");
			System.out.println("\t\t---- -- --------\n");
			System.out.println("1.Registrar nueva cuenta");
			System.out.println("2.Depositar a una cuenta específica");
			System.out.println("3.Retirar de cuenta específicas");
			System.out.println("4.Realizar traspasos entre cuentas");
			System.out.println("5.Consultar el saldo de una cuenta específica");
			System.out.println("6.Consultar el saldo de todas las cuentas");
			System.out.println("7.Salir");
			System.out.print("Selecciona una opcion: ");
			opcion = Integer.parseInt(teclado.nextLine());
 
			switch (opcion) {
			case 1:
				nuevaCuenta();
				break;
			case 2:
				hacerDeposito();
				break;
			case 3:
				hacerRetirada();
				break;
			case 4:
				hacerTraspaso();
				break;
			case 5:
				consultarSaldo();
				break;
			case 6:
				listarSaldos();
				break;
			case 7:
				System.out.println("\n\nFIN DE PROGRAMA");
				break;
			default:
				System.out.println("Opción equivocada");
			}
 
		}while(opcion != 7);
 
	}
 
	private static void nuevaCuenta() {
 
 
	}
 
	private static void hacerDeposito() {
 
 
	}
 
	private static void hacerRetirada() {
 
 
	}
 
	private static void hacerTraspaso() {
 
 
	}
 
	private static void consultarSaldo() {
 
 
	}
 
 
	private static void listarSaldos() {
 
 
	}
 
}

Vamos a ver el primer método, el de registrar una nueva cuenta.
Es muy sencillo, se piden los 4 datos por teclado y añadimos al ArrayList un nuevo objeto Cuenta.
Y ya está, así de sencillo.
1
2
3
4
5
6
7
8
9
10
11
12
13
private static void nuevaCuenta() {
		System.out.println("\n\tRegistrar nueva cuenta");
		System.out.print("ID de la nueva cuenta: ");
		int id = Integer.parseInt(teclado.nextLine());
		System.out.print("Nombre: ");
		String nombre = teclado.nextLine();
		System.out.print("Edad: ");
		int edad = Integer.parseInt(teclado.nextLine());
		System.out.println("Saldo inicial: ");
		double saldo = Double.parseDouble(teclado.nextLine());
 
		cuentas.add(new Cuenta(id, nombre, edad, saldo));
	}

De esta manera, podemos crear tantas cuentas como queramos.

Bien, veamos ahora el método para hacer un depósito.
Aquí hay que pedir un ID de cuenta al usuario y buscar en el ArrayList una cuenta que tenga ese ID.
Si no hay ninguna, informamos en pantalla.
Si la encontramos, la referenciamos en otra variable de clase Cuenta y ya podemos trabajar con ella.
Ahora habrá que pedir el importe del depósito y hacerlo.
Si queremos, podemos mostrar más datos en pantalla para "adornar" la información, como el nombre del cliente, el saldo actual y el nuevo saldo tras hacer el depósito.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private static void hacerDeposito() {
		System.out.println("\n\tHacer un depósito");
		System.out.print("ID de la cuenta: ");
		int id = Integer.parseInt(teclado.nextLine());
		//Buscamos la cuenta asociada a ese id
		Cuenta buscar = null; //Aquí referenciaremos la cuenta que buscamos
		for (Cuenta cuenta: cuentas) //Recorremos el ArrayList con un for each
			if (cuenta.getNumCuenta() == id) //Si coincide el id...
				buscar = cuenta; // ...cuenta encontrada, la referenciamos.
		//Comprobamos si hemos encontrado la cuenta
		if (buscar == null) //No se encontró la cuenta
			System.out.println("No existe cuenta con el ID: " + id);
		else { //Cuenta encontrada
			System.out.println("Nombre Cliente: " + buscar.getNombre());
			System.out.println("Saldo actual: " + buscar.consultarSaldo());
			System.out.print("¿Cuánto quiere depositar?: ");
			double deposito = Double.parseDouble(teclado.nextLine());
			buscar.depositar(deposito);
			System.out.println("\nSaldo actualizado: " + buscar.consultarSaldo());
		}
 
	}


Pues con estos dos ejemplo, intenta tú completar los método restantes.
Pregunta lo que no entiendas y vuelve a pedir ayuda si te atascas.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar