Java - Necesito ayuda con dos métodos, no he podido hacerlo como lo pide el enunciado

 
Vista:
sin imagen de perfil

Necesito ayuda con dos métodos, no he podido hacerlo como lo pide el enunciado

Publicado por Emanuel (9 intervenciones) el 19/11/2022 14:18:54
el enunciado es lo siguiente:

.La clase cuenta debe implementar el método Consignar () que le
permita la captura de valores para incrementar el saldo de la cuenta, en
el método se debe validar igualmente que no se digiten valores
negativos), igualmente cada vez que se realice una consignación de
debe realizar un conteo.
• La clase cuenta debe implementar el método Retirar () que le
permita disminuir el saldo de la cuenta validando que el valor del retiro
no supere el saldo actual y que el valor no sea negativo, igualmente
cada vez que se realice un retiro se debe realizar un conteo.

este es el código que llevo
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import javax.swing.JOptionPane;
 
public class Cuenta extends Titular
{
    /*• La clase Cuenta debe implementar 2 constructores, constructor
    vacío y constructor con argumentos*/
    public int Numerocuenta;
    public String Tipocuenta;
    public float Fpertura;
    public String Banco;
    public String Sede;
    public boolean Activa;
    public int Saldo;
 
 
    public Cuenta(String Nombres, String Apellidos, float Escolaridad, String Direccion, int Telefono, Double Ingresos,
            String Ciudad, float Estrato, int Numerocuenta, String Tipocuenta, float Fpertura, String Banco,
            String Sede, boolean Activa, int Saldo) {
        super(Nombres, Apellidos, Escolaridad, Direccion, Telefono, Ingresos, Ciudad, Estrato);
        this.Numerocuenta = Numerocuenta;
        this.Tipocuenta = Tipocuenta;
        this.Fpertura = Fpertura;
        this.Banco = Banco;
        this.Sede = Sede;
        this.Activa = Activa;
        this.Saldo = Saldo;
    }
 
    public Cuenta(){
        this.Numerocuenta=784554;
        this.Tipocuenta="ahorros";
        this.Fpertura=28/10/2020;
        this.Banco="Bancolombia";
        this.Sede="Monteria";
        this.Activa=true;
        this.Saldo=700000;
    }
    //METODO SETTER
 
    public void setNumerocuenta(int Numerocuenta) {
        this.Numerocuenta = Numerocuenta;
    }
 
    public void setTipocuenta(String Tipocuenta) {
        this.Tipocuenta = Tipocuenta;
    }
 
    public void setFpertura(float Fpertura) {
        this.Fpertura = Fpertura;
    }
 
    public void setBanco(String Banco) {
        this.Banco = Banco;
    }
 
    public void setSede(String Sede) {
        this.Sede = Sede;
    }
 
    public void setActiva(boolean Activa) {
        this.Activa = Activa;
    }
 
    public void setSaldo(int Saldo) {
        this.Saldo = Saldo;
    }
    //METODO GETTER
 
    public int getNumerocuenta() {
        return Numerocuenta;
    }
 
    public String getTipocuenta() {
        return Tipocuenta;
    }
 
    public float getFpertura() {
        return Fpertura;
    }
 
    public String getBanco() {
        return Banco;
    }
 
    public String getSede() {
        return Sede;
    }
 
    public boolean isActiva() {
        return Activa;
    }
 
    public int getSaldo() {
        return Saldo;
    }
 
 
 
         boolean Consignar(double Ingresos) {
         if (Ingresos>0){
           Saldo=(int) (Saldo+Ingresos);
           System.out.println("se ha consignado $"+ Ingresos+ " en la cuenta. Nuevo saldo es $"+Saldo);
            return true;
           }
          else {
            System.out.println("El valor a consignar debe ser mayor que cero");
             return false;
         }
 
 
        }
        boolean Retirar(int valor){
            if ((valor>0) && (valor<=Saldo)){
                Saldo=Saldo-valor;
                System.out.println("se ha retirado $ "+valor+" en la cuenta. Nuevo saldo es $" +Saldo);
                return true;
            }
            else {
                System.out.println("El valor a retirar debe ser menor que el saldo actual");
                return false;
            }
 
        }
 
        public void Reporte(){
            JOptionPane.showMessageDialog(null, "Numero de cuenta: "+Numerocuenta);
            JOptionPane.showMessageDialog(null, "Nombre: "+Nombres);
            JOptionPane.showMessageDialog(null, "Apellidos:"+Apellidos);
            JOptionPane.showMessageDialog(null, "Saldo actual"+Saldo);
 
 
 
 
 
        }
este es la clase padre(pero solamente necesito ayuda con los anunciados, ya despues creo una clase principal para instaciarlo y ejecutar el codigo)

aquí esta el código por si lo necesitan( por favor hagan su magia)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
public class Titular{
 
//ATRIBUTO DE LA CLASE
public String Nombres;
public String Apellidos;
public float Escolaridad;
public String Direccion;
public int Telefono;
public Double Ingresos;
public String Ciudad;
public float Estrato;
//CONSTRUCTOR CON ARGUMENTOS DE LA CLASE TITULAR
public Titular(String Nombres, String Apellidos, float Escolaridad, String Direccion, int Telefono, Double Ingresos,
        String Ciudad, float Estrato) {
    this.Nombres = Nombres;
    this.Apellidos = Apellidos;
    this.Escolaridad = Escolaridad;
    this.Direccion = Direccion;
    this.Telefono = Telefono;
    this.Ingresos = Ingresos;
    this.Ciudad = Ciudad;
    this.Estrato = Estrato;
}
public Titular(){
    this.Nombres="Emanuel";
    this.Apellidos="Negrete";
    this.Escolaridad=11;
    this.Direccion="carrera 3a Numero 1-10";
    this.Telefono=313656853;
    this.Ingresos=400.0000;
    this.Ciudad="Tierralta";
    this.Estrato=1;
}
 
public void setNombres(String Nombres) {
    this.Nombres = Nombres;
}
 
public void setApellidos(String Apellidos) {
    this.Apellidos = Apellidos;
}
 
public void setEscolaridad(float Escolaridad) {
    this.Escolaridad = Escolaridad;
}
 
public void setDireccion(String Direccion) {
    this.Direccion = Direccion;
}
 
public void setTelefono(int Telefono) {
    this.Telefono = Telefono;
}
 
public void setIngresos(Double Ingresos) {
    this.Ingresos = Ingresos;
}
 
public void setCuidad(String Ciudad) {
    this.Ciudad = Ciudad;
}
 
public void setEstracto(float Estracto) {
    this.Estrato = Estracto;
}
 
public String getNombres() {
    return Nombres;
}
 
public String getApellidos() {
    return Apellidos;
}
 
public float getEscolaridad() {
    return Escolaridad;
}
 
public String getDireccion() {
    return Direccion;
}
 
public int getTelefono() {
    return Telefono;
}
 
public Double getIngresos() {
    return Ingresos;
}
 
public String getCuidad() {
    return Ciudad;
}
 
public float getEstracto() {
    return Estrato;
}
public void  mostrarDatos(){
    System.out.println("Nombres"+Nombres);
   System.out.println("Apellidos "+Apellidos);
   System.out.println("Escolaridad "+Escolaridad);
   System.out.println("Direccion "+Direccion);
   System.out.println("Telefono "+Telefono);
   System.out.println("Ingresos "+Ingresos);
   System.out.println("Ciudad "+Ciudad);
   System.out.println("Estrato "+Estrato);
}
@Override
public String toString() {
    return "Titular [Nombres=" + Nombres + ", Apellidos=" + Apellidos + ", Escolaridad=" + Escolaridad + ", Direccion="
            + Direccion + ", Telefono=" + Telefono + ", Ingresos=" + Ingresos + ", Ciudad=" + Ciudad + ", Estrato="
            + Estrato + "]";
}
 
 
 
 
}

gracias, antemano
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

Necesito ayuda con dos métodos, no he podido hacerlo como lo pide el enunciado

Publicado por Kabuto (1381 intervenciones) el 20/11/2022 01:07:56
Hola.
Pues yo creo que sí se cumple lo que pide, al menos lo más importante. Tal vez por el enunciado se puede interpretar que lo que se pide es que sean esos métodos los encargados de capturar los datos.

Así que podemos modificarlos para que pidan el dato, admitiendo únicamente una entrada que sea válida y actualizando el saldo con el valor introducido.
Si quieres, podemos usar JOptionPane para pedir estos valores.

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
}
 
	public void consignar() {
		int valor = 0;
		while (valor <= 0) {
			String entrada = JOptionPane.showInputDialog("Valor a consignar:");
			valor = Integer.parseInt(entrada);
			if (valor <= 0)
				JOptionPane.showMessageDialog(null, "ERROR. Ha de consignar un monto mayor que 0");
		}
 
		Saldo += valor;
		JOptionPane.showMessageDialog(null, "Valor consignado.\nSaldo Actual: " + Saldo);
	}
 
	public void retirar() {
		int valor = 0;
		while (valor <= 0 && valor < Saldo) {
			String entrada = JOptionPane.showInputDialog("Valor a retirar:");
			valor = Integer.parseInt(entrada);
			if (valor <= 0)
				JOptionPane.showMessageDialog(null, "ERROR. Ha de retirar un monto mayor que 0");
			if (valor < Saldo)
				JOptionPane.showMessageDialog(null, "ERROR. No hay suficiente saldo para cubrir esta retirada");
		}
 
		Saldo -= valor;
		JOptionPane.showMessageDialog(null, "Valor retirado.\nSaldo Actual: " + Saldo);
	}

Por cierto, en el método Reporte(), usas 4 JOptionPane para mostrar los datos de la cuenta.
Esto no es óptimo. Para el usuario sería incómodo tener que ver y cerrar 4 ventanas emergentes, cada una con un solo dato.
Imagina que tienes que listar y mostrar los datos de 10 cuentas. Esto implica ver y cerrar 40 ventanas...

Es mejor construir un String con esos 4 datos y mostrarlo en un único JOptionPane.
Se puede usar la case String, o también la clase StringBuilder, que es un poco más óptima cuando queremos construir un String juntando varios.
1
2
3
4
5
6
7
8
public void Reporte(){
		StringBuilder mensaje = new StringBuilder();
		mensaje.append("Numero de cuenta: "+Numerocuenta);
		mensaje.append("\nNombre: "+Nombres);
		mensaje.append("\nApellidos:"+Apellidos);
		mensaje.append("\nSaldo actual"+Saldo);
		JOptionPane.showMessageDialog(null, mensaje.toString());
	}


Y ya por último, un comentario sobre la relación de herencia que se está haciendo
1
public class Cuenta extends Titular

Yo no estaría de acuerdo con esta relación.
Las relaciones de herencia tienen sentido cuando podemos decir que "la clase hija es una clase madre"

Es decir, ¿podemos decir que un Perro es un Animal?
Sí, por tanto esta relación tendría sentido:
1
public class Perro extends Animal

¿Podemos decir que un Empleado es una Persona?
Sí, tiene sentido:
1
public class Empleado extends Persona

¿Podemos decir que una Cuenta es un Titular?
Mmmmhhhh..., a mi eso me suena raro.
Yo creo que son cosas distintas.
Sin duda hay que relacionar de alguna forma estas dos clases, pero la relación de herencia no sería la adecuada.

Lo que sí podemos decir es que una Cuenta está asociada a un Titular.
Es decir, aquí lo ideal sería una relación de asociación (hay 6 tipos de relaciones entre clases)

Esta relación podemos hacerla simplemente haciendo que Titular fuese un atributo de Cuenta

1
2
3
4
5
6
7
8
9
10
11
12
public class Cuenta
{
	/*• La clase Cuenta debe implementar 2 constructores, constructor
    vacío y constructor con argumentos*/
	public Titular titularAsociado;
	public int Numerocuenta;
	public String Tipocuenta;
	public float Fpertura;
	public String Banco;
	public String Sede;
	public boolean Activa;
	public int Saldo;

Dicho Titular, se le puede hacer llegar por constructor o bien mediante un getter.

Con esto, no te estoy diciendo que lo cambies. Para este ejercicio, el programa te va a funcionar igual haciendo la relación de herencia.
Pero ten en cuenta que no es el tipo de relación correcta. Y que si esto fuera un programa para el "mundo real", sí que podrías encontrarte con dificultades.

Imagina que el banco que te ha encargado que le hagas el programa, quiere que una cuenta esté asociada a varios titulares. Esto es muy habitual, una cuenta en la que los titulares sean dos personas que son matrimonio, o una cuenta de una empresa donde los titulares sean el director, el presidente y el tesorero.

Pues en tu programa no se podría hacer. La relación de herencia limita a que solo un Titular esté asociado a una Cuenta.

En cambio, la relación se asociación esto no sería problema.
Antes hemos puesto de ejemplo un solo Titular como atributo. Pero también podemos poner un ArrayList de titulares.
Por lo que una Cuenta ahora podría estar asociada a montones de Titulares
1
2
3
4
5
6
7
8
9
10
11
12
public class Cuenta
{
	/*• La clase Cuenta debe implementar 2 constructores, constructor
    vacío y constructor con argumentos*/
	public ArrayList<Titular> titularesAsociados;
	public int Numerocuenta;
	public String Tipocuenta;
	public float Fpertura;
	public String Banco;
	public String Sede;
	public boolean Activa;
	public int Saldo;

Por esto la relación de herencia solo ha de usarse cuando tenga sentido.

Y ya lo último, que me he dado cuenta ahora xD
Has puesto los atributos de clase como public.
Muy mal ., no estás respetando el "principio de encapsulamiento"

La "norma" es que los atributos han de ser private siempre, de forma que solo dentro de la propia clase se tenga acceso directo a ellos (Encapsulamiento)

Si otras clases quieren acceder a esos atributos, podrán hacerlo mediante los setters y los getters, pero nunca directamente.
Mediante los getters, podemos establecer reglas de acceso, si queremos.

Por ejemplo. el método setIngresos() de la clase Titular, ahora mismo no establece ninguna regla.
1
2
3
public void setIngresos(Double Ingresos) {
        this.Ingresos = Ingresos;
}

Esto significa que este método acepta cualquier valor, pero seguramente no vamos a querer aceptar valores negativos, porque no tiene sentido que un "ingreso" sea negativo.
Se podría aceptar que sea 0 (una persona que tiene ningún ingreso), pero desde luego no que el valor sea negativo.
Así que podríamos establecer una regla para rechazar valores negativos
1
2
3
4
5
6
public void setIngresos(Double Ingresos) {
        if (ingresos < 0)
                System.out.println("No se aceptan valores negativos");
        else
                this.Ingresos = Ingresos;
}


Gracias a esta regla, si intentásemos setear un ingreso negativo, esto ya no sería posible

1
2
Titular titular = new Titular;
titular.setIngresos(-500);

Ese valor negativo será ignorado y saldrá un mensaje explicando el motivo.

Pero, si resulta que los atributos de Titular son public, esto significa que podemos acceder a ellos sin usar los setters.
Y podemos saltarnos la regla que dice que un ingreso no puede ser negativo
1
2
Titular titular = new Titular;
titular.Ingresos = -500;

En cambio, si establecemos los atributos como private, ya no se puede acceder directamente a los atributos. El código de antes daría error al compilar el programa avisando de que se está intentando un acceso "ilegal", así que ni siquiera podría ejecutarse.
Solo se podría acceder mediante el setter, quien ya tiene unas reglas para asegurar la "calidad" de los datos que se van a setear.


Así que los atributos de la clase Cuenta, deberían ser private

1
2
3
4
5
6
7
8
9
10
11
public class Cuenta extends Titular
{
	/*• La clase Cuenta debe implementar 2 constructores, constructor
    vacío y constructor con argumentos*/
	private int Numerocuenta;
	private String Tipocuenta;
	private float Fpertura;
	private String Banco;
	private String Sede;
	private boolean Activa;
	private int Saldo;

Y los atributos de la clase Titular, como probablemente vamos a querer sus clases hijas sí puedan acceder directamente a los atributos que están recibiendo como herencia, pues en este caso podemos declararlas como protected

1
2
3
4
5
6
7
8
9
10
11
public class Titular{
 
	//ATRIBUTO DE LA CLASE
	protected String Nombres;
	protected String Apellidos;
	protected float Escolaridad;
	protected String Direccion;
	protected int Telefono;
	protected Double Ingresos;
	protected String Ciudad;
	protected float Estrato;


Pregunta si algo no ha quedado claro.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Necesito ayuda con dos métodos, no he podido hacerlo como lo pide el enunciado

Publicado por Emanuel (9 intervenciones) el 20/11/2022 02:18:55
me gusta como explicas, te endiento a la perfección, gracias, por la ayuda y la clase, jejejje. gracias otra vez.
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
sin imagen de perfil

Necesito ayuda con dos métodos, no he podido hacerlo como lo pide el enunciado

Publicado por Emanuel (9 intervenciones) el 20/11/2022 15:35:35
hola. kabuto
buenos días o buenas noches
te pregunto, como puede hacer un conteo, como lo pide el enunciado
" igualmente cada vez que se realice un retiro o consignación se debe realizar un conteo."

Saludos
gracias de antemano
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
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

Necesito ayuda con dos métodos, no he podido hacerlo como lo pide el enunciado

Publicado por Kabuto (1381 intervenciones) el 20/11/2022 19:09:52
La verdad es que no sé a que se refiere con eso de "hacer un conteo"
¿Contar qué...? No hay ningún atributo ni nada que podamos "contar".

Pensé que quizás se refería a simplemente actualizar el saldo disponible y mostrarlo en pantalla.
Pero si se está refiriendo a otra cosa, pues ni idea la verdad...

Yo no le daría mayor importancia.

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
sin imagen de perfil

Necesito ayuda con dos métodos, no he podido hacerlo como lo pide el enunciado

Publicado por Emanuel (9 intervenciones) el 20/11/2022 19:56:11
okey. Gracias y lo siento por las molestias
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