Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: skatersezo en 29 de Noviembre 2016, 02:53
-
Hola, estoy comenzando a programar, y estoy creando una aplicación que gestiona un banco. He creado una clase Cuenta y quiero que para cada objeto que instancie de esa clase, se le asigne un numero de cuenta bancario que tenga esta forma
"ES00 0000 0000 00 0000000000"
Y que para cada objeto que yo instancie de esa clase, el último valor de esa cadena de caracteres se incremente en 1.
Creo que utilizando metodos de la clase Integer y StringBuilder podria, pero no se como hacer para que en el contador de los últimos 10 digitos que son con los que quiero operar se me respeten los 0 a la izquierda. No sé si me he explicado bien, espero que sí
-
Buenos días.
Accede al siguiente enlace para ver como publicar consultas en el foro:
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 (https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0)
Un saludo.
-
Deberias trabajar con una BD en la cual registres los numero generados, asi cuando instancies un objeto este consulte la BD y extraiga de alli la numeracion actual y de esa forma le sume uno.
-
Deberias trabajar con una BD en la cual registres los numero generados, asi cuando instancies un objeto este consulte la BD y extraiga de alli la numeracion actual y de esa forma le sume uno.
Estoy haciendo un grado superior de DAM y aún no hemos visto eso, esto es parte de un ejercicio propuesto para hacer en casa y lo tenemos que hacer sin base de datos por el momento.
-
public class Cuenta {
/** DECLARACION VARIABLES DE CLASE **/
private double saldo;
private final String nombre;
private StringBuilder numero_cuenta = new StringBuilder("ES21 0069 0666 01 ");
private static int num_sig=0;
/** CONSTRUCTORES **/
public Cuenta (String nombre){
this.nombre=nombre;
saldo=0;
numero_cuenta.append(num_sig);
num_sig++;
}
public Cuenta (String nombre, double saldo){
this.nombre=nombre;
this.saldo=saldo;
numero_cuenta.append(num_sig);
num_sig++;
}
Así lo tengo yo, pero quiero que se respete el número de 0, de manera que para el primer objeto, la secuencia sea de 10 0, "0000000000", para el segundo "0000000001", etc...
-
A ver si te sirve este código:
public class Cliente {
/** DECLARACION VARIABLES DE CLASE **/
private double saldo;
private String nombre;
private StringBuilder iban = new StringBuilder("ES21 ");
private StringBuilder numeroDeCuenta;
private int numeroDeCliente;
/** CONSTRUCTORES **/
public Cliente (String nombre,Double saldo){
this.nombre=nombre;
this.saldo=saldo;
}
public void setNombre(String nombre){this.nombre=nombre;}
public void setSaldo(Double saldo){this.saldo=saldo;}
public void setNumeroDeCuenta(StringBuilder numeroDeCuenta){this.numeroDeCuenta=numeroDeCuenta;}
public void setNumeroDeCliente(int numeroDeCliente){this.numeroDeCliente=numeroDeCliente;}
public StringBuilder getNumeroDeCuenta(){return iban.append(numeroDeCuenta);}
public String getNombre(){return nombre;}
public Double getSaldo(){return saldo;}
@Override
public String toString() {
return "\nCliente "+numeroDeCliente+"\n"+ "Nombre: "+nombre+"\n"+"IBAN :"+iban+numeroDeCuenta+"\n"+"Saldo: "+saldo ;
}
}
import java.util.*;
public class Prueba{
Scanner entradaTeclado = new Scanner(System.in);
int ultimosNumeros=0;
int numeroCliente=1;
List<Cliente> lp = new ArrayList<Cliente>();
public static void main(String[] args) {
Prueba d=new Prueba();
d.inicio();
}
public void inicio(){
int g=1;
while (g==1){
System.out.println("\n1.Añadir cliente :");
System.out.println("2.Ver clientes :");
System.out.println("3.Salir :");
int respuesta = entradaTeclado.nextInt();
if (respuesta==1){nuevaCuenta();}
if (respuesta==2){verClientes();}
if (respuesta==3){g=0;}
}
}
public void nuevaCuenta(){
StringBuilder numeroDeCuenta =new StringBuilder("0000000000");
String cadena = String.valueOf(ultimosNumeros);
System.out.println("Introduce nombre del cliente :");
String nombre = entradaTeclado.next();
System.out.println("Introduce saldo del cliente :");
Double saldo = entradaTeclado.nextDouble();
Cliente cliente = new Cliente(nombre,saldo);
cliente.setNumeroDeCuenta(numeroDeCuenta.delete(numeroDeCuenta.length()-cadena.length(),numeroDeCuenta.length()).append(ultimosNumeros));
cliente.setNumeroDeCliente(numeroCliente);
lp.add(cliente);
ultimosNumeros++;
numeroCliente++;
}
public void verClientes(){
Cliente temp = null;
Iterator<Cliente> it = lp.iterator();
while(it.hasNext())
{
temp = it.next();
System.out.println(temp);
}
}
}
-
Crea un array (de enteros) donde lo modifiques de derecha a izquierda, siempre haciendo comparaciones para validar la numeracion.
-
Lo primero mil gracias ESOJ, has solucionado mi problema, y además he aprendido cosas nuevas porque lo escribes super limpio y ordenado. Pero te quería preguntas por esta parte:
public void verCuentas(){
Cliente temp = null;
Iterator<Cliente> it = misCuentas.iterator();
while(it.hasNext())
{
temp = it.next();
System.out.println(temp);
}
}
No entiendo bien que significa la palabra "temp" y porqué la usas, ni lo que hay dentro del bucle while...
Yo para mostrar las cuentas por pantalla, hasta donde sé (llevo apenas un mes programando), habría usado un bucle for recorriendo todo el array.
Tampoco entiendo esta parte del código de la clase cliente:
@Override
public String toString() {
return "\nCliente "+numeroDeCliente+"\n"+ "Nombre: "+nombre+"\n"+"IBAN :"+iban+numeroDeCuenta+"\n"+"Saldo: "+saldo ;
}
-
Buenas tardes.
Me alegro de haberte sido de ayuda.
Con respecto a tus dudas:
1. temp es una variable de tipo cliente que declaro.Podría llamarse temp o como quisieras.La usaremos para almacenar temporalmente objetos Cliente
2. Con respecto al bucle while,te recomendaría consultar este enlace:
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=600:interface-iterator-api-java-recorrer-listas-maps-metodo-remove-borrar-objetos-ejemplo-practico-cu00919c&catid=58:curso-lenguaje-programacion-java-nivel-avanzado-i&Itemid=180 (http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=600:interface-iterator-api-java-recorrer-listas-maps-metodo-remove-borrar-objetos-ejemplo-practico-cu00919c&catid=58:curso-lenguaje-programacion-java-nivel-avanzado-i&Itemid=180).
Habla soble la interface Iterator.
3.Con respecto a tu tercera duda,en el código:
@Override
public String toString() {
return "\nCliente "+numeroDeCliente+"\n"+ "Nombre: "+nombre+"\n"+"IBAN :"+iban+numeroDeCuenta+"\n"+"Saldo: "+saldo ;
}
lo que hago es sobreescribir el método toString() para que cada vez que se imprima un objeto Cliente lo haga de esa manera.
En la línea System.out.println(temp); del while es como si hubiera escrito System.out.println(temp.toString());
Echale un vistazo a este enlace,donde viene esto mejor explicado.
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=666:sobreescribir-metodos-tostring-y-equals-en-java-ejemplos-y-ejercicios-resueltos-comparar-objetos-cu00694b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188 (http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=666:sobreescribir-metodos-tostring-y-equals-en-java-ejemplos-y-ejercicios-resueltos-comparar-objetos-cu00694b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188)
Si te queda alguna duda por aquí estamos.
Un saludo.