Java - JopcionPane y arraylist en un meni

 
Vista:
sin imagen de perfil
Val: 13
Ha aumentado su posición en 347 puestos en Java (en relación al último mes)
Gráfica de Java

JopcionPane y arraylist en un meni

Publicado por Andres (3 intervenciones) el 23/08/2020 05:13:29
12


Hola, me podrían ayudar dando un código que valide todo eso, no me han explicado lo suficiente y he buscado pero no me responden las dudas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de Kabuto
Val: 2.672
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

JopcionPane y arraylist en un meni

Publicado por Kabuto (699 intervenciones) el 23/08/2020 13:12:02
Comienza tú un código.
Empieza por escribir la clase Producto, muéstrala aquí a ver si está correcta y ya después vamos al siguiente paso.
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
Val: 13
Ha aumentado su posición en 347 puestos en Java (en relación al último mes)
Gráfica de Java

JopcionPane y arraylist en un meni

Publicado por andres (3 intervenciones) el 23/08/2020 16:57:33
Hola, gracias por la ayuda, mira según lo que entiendo del ejercicio es crear dos clases, una la llamada producto en la cual debo guardar los atributos en un array incluyendo JOptionPane, que se supone que es esta que te envío, lo cual no entiendo como guardarlos en un arrary y también no se si esta deba ser la clase main o la otra.

En la otra clase vendría el menú e incluyendo la clase producto.
Gracias por la ayuda amigo, le agradecería que me ayudaras.



ede
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: 2.672
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

JopcionPane y arraylist en un meni

Publicado por Kabuto (699 intervenciones) el 25/08/2020 03:06:56
No.
Producto es una clase que modela, valga la redundancia, un producto.
No va a tener un método main(), porque no va a ser un programa ejecutable, solo es código que representa un objeto del mundo real.

Es decir, va a tener unos atributos, un constructor, y unos métodos (getter y setters) para recibir y modificar esos atributos.

Esta podría ser una clase Producto, donde además le incluyo un método toString() el cuál retorna un String que describe dicho producto.
Este String luego se puede mostrar por consola, o en un JOptionPane.

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
public class Producto {
 
	private String referencia;
	private String nombre;
	private int cantidad;
	private float precio;
 
	public Producto(String referencia, String nombre, int cantidad, float precio) {
		this.referencia = referencia;
		this.nombre = nombre;
		this.cantidad = cantidad;
		this.precio = precio;
	}
 
	public String getReferencia() {
		return referencia;
	}
 
	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public int getCantidad() {
		return cantidad;
	}
 
	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}
 
	public float getPrecio() {
		return precio;
	}
 
	public void setPrecio(float precio) {
		this.precio = precio;
	}
 
	@Override
	public String toString() {
		return "Referencia: " + referencia +
				"\nNombre: " + nombre +
				"\nCantidad: " + cantidad +
				"\nPrecio: " + String.format("%.2f", precio);
	}
}

Insisto, esta clase NO es un programa ejecutable. Por si sola no hace nada, no es funcional. Es solo un modelo de como ha de ser un Producto en este proyecto.

Ahora, si deberíamos escribir una clase ejecutable, es decir, con su método main().
Esta clase es la que va a gestionar objetos de la clase Producto.

Para almacenarlos usará un ArrayList, que podemos declarar como variable de ámbito global dentro de esta clase.
Usando JOptionPane, tenemos que mostrar un menú de opciones para que el usuario elija lo que quiera hacer.
Crear Producto, Modificar Precio, mostrar Listado, Salir del programa, etc..

Para cada función del menú se puede escribir un método separado, que se encargue solo y específicamente de llevar a cabo la opcíon ofrecida en el menú.
Por ejemplo, para crear producto usaremos un método que pida valores para los cuatro atributos que componen un Producto. Con esos atributos construiremos un nuevo Producto que añadiremos al ArrayList.

Puedes intentar escribir tú un código que muestre este menú, evalue la respuesta (un switch es lo ideal) y llame al correspondiente método según la opción escogida.

En cualquier caso, te dejo un código que hace lo que se pide, por si quieres consultarlo para guiarte o lo que sea. Pero importante que primero intentes tu propio código, salga bien o salga mal...

Un saludo.

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
public class Almacen {
 
	private static ArrayList<Producto> productos = new ArrayList<Producto>();
 
	public static void main(String[] args) {
		String opcion = "";
		///Mensaje/menu a mostrar por JOptionPane
		final String menuOpciones = "Elija una opción.\n1 - Crear Producto"
				+ "\n2 - Consultar producto por referencia"
				+ "\n3 - Modificar precio por referencia"
				+ "\n4 - Eliminar producto por referencia"
				+ "\n5 - Mostrar listado de productos"
				+ "\n0 - SALIR";
 
		do {
			opcion = JOptionPane.showInputDialog(menuOpciones);
			switch(opcion) {
			case "0":
				JOptionPane.showMessageDialog(null, "FIN DE PROGRAMA");
				break;
			case "1":
				crearProducto();
				break;
			case "2":
				consultarProducto();
				break;
			case "3":
				modificarPrecio();
				break;
			case "4":
				eliminarProducto();
				break;
			case "5":
				listarProductos();
				break;
			default:
				JOptionPane.showMessageDialog(null, "Opción incorrecta");
			}
 
		}while(!opcion.equals("0"));
 
	}
 
	//Metodo para crear un Producto
	private static void crearProducto() {
		String referencia = JOptionPane.showInputDialog("Referencia: ");
		String nombre = JOptionPane.showInputDialog("Nombre: ");
		int cantidad = Integer.parseInt(JOptionPane.showInputDialog("Cantidad: "));
		float precio = Float.parseFloat(JOptionPane.showInputDialog("Precio: "));
 
		productos.add(new Producto(referencia, nombre, cantidad, precio));
	}
 
	//Metodo para consultar un Producto
	private static void consultarProducto() {
		if (productos.isEmpty())
			JOptionPane.showMessageDialog(null, "No hay productos creados para consultar");
		else {
			String referencia = JOptionPane.showInputDialog("Referencia: ");
 
			Producto buscando = null;
			for (Producto p: productos)
				if (p.getReferencia().equals(referencia))
					buscando = p;
 
			if (buscando == null)
				JOptionPane.showMessageDialog(null, "No existe producto con referencia: " +
			referencia);
			else
				JOptionPane.showMessageDialog(null, buscando);
 
		}
	}
 
	//Metodo para modificar un Producto
	private static void modificarPrecio() {
		if (productos.isEmpty())
			JOptionPane.showMessageDialog(null, "No hay productos creados para modificar");
		else {
			String referencia = JOptionPane.showInputDialog("Referencia: ");
 
			Producto buscando = null;
			for (Producto p: productos)
				if (p.getReferencia().equals(referencia))
					buscando = p;
 
			if (buscando == null)
				JOptionPane.showMessageDialog(null, "No existe producto con referencia: " +
			referencia);
			else {
				float precio = Float.parseFloat(JOptionPane.showInputDialog("Introduzca nuevo precio: "));
				buscando.setPrecio(precio);
			}
		}
	}
 
	//Metodo para eliminar un Producto
	private static void eliminarProducto() {
		if (productos.isEmpty())
			JOptionPane.showMessageDialog(null, "No hay productos creados para modificar");
		else {
			String referencia = JOptionPane.showInputDialog("Referencia: ");
 
			Producto buscando = null;
			for (Producto p: productos)
				if (p.getReferencia().equals(referencia))
					buscando = p;
 
			if (buscando == null)
				JOptionPane.showMessageDialog(null, "No existe producto con referencia: " +
			referencia);
			else {
				productos.remove(buscando);
				JOptionPane.showMessageDialog(null, "Producto eliminado");
			}
		}
	}
 
	//Metodo para listar todos los Productos
	private static void listarProductos() {
		JOptionPane.showMessageDialog(null, "A continuación se mostrarán los Productos");
 
		for (Producto p: productos)
			JOptionPane.showMessageDialog(null, p);
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 13
Ha aumentado su posición en 347 puestos en Java (en relación al último mes)
Gráfica de Java

JopcionPane y arraylist en un meni

Publicado por andres (3 intervenciones) el 25/08/2020 03:52:43
Hola, muchas gracias por tomarse el tiempo el ayudarme y explicar el ejercicio, de verdad me ayuda mucho y claro que intentare hacerlo por mi cuenta, por ejemplo otra manera que me enseñaron de hacer todo dentro de los case del menú, me gustaría saber si llego a tener alguna duda poder contar con usted para la corrección.
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
Imágen de perfil de Kabuto
Val: 2.672
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

JopcionPane y arraylist en un meni

Publicado por Kabuto (699 intervenciones) el 25/08/2020 11:18:51
No respondo mensajes por privado.

Primero porque no es necesario. Cualquier duda que tengas la veré si la publicas en este hilo.

Segundo, porque al publicar aquí tus dudas, puedes recibir mi ayuda y también la de otros participantes. Y siempre te beneficiará recibir distintas soluciones y otros puntos de vista.

Tercero, gente que esté aprendiendo también le resultará útil poder visitar este hilo y ver los contenidos publicados.
Cuándo tú pides ayuda, indirectamente estás ayudando también a otros, así que se agradece que todo se haga en el foro público.

Todo esto no sería posible si lo hiciéramos por mensaje privado.


Sobre lo de hacer todo el código de las opciones del menú directamente dentro de los case del switch.
Se puede hacer, el programa va a funcionar igual y puesto que cada opción solo requiere unas cuantas líneas de código, no es problema.

Sin embargo, "modular" el programa aunque sea sencillo siempre es buena costumbre. Dividir el código en subrutinas que se dediquen a tareas muy específicas y extraerlas del código principal es más eficiente y el código más legible.

Si miras mi código, puedes ver que el método main() es muy escueto, apenas 35 líneas (y podrían haber sido menos) de un programa que en total son 127 líneas.
Casi puede leerse como un pseudocódigo.

Cualquiera que lea ese método main(), enseguida se hace una idea general de en qué consiste el programa y qué lógica esta siguiendo.
Luego si quiere entrar en detalles de cómo se lleva a cabo cada función del programa, puede pasar a leer los distintos métodos.

Si no estuviera modulado, si los cases tuvieran al completo todo el código, intentar leerlo a simple vista sería muy fatigoso.

En programación, el código que escribamos no solo ha de funcionar. También interesa que esté bien organizado y sea legible para las personas.


En fin, lo dicho, cualquier duda o consultar que te surja, publícala aquí en este hilo para que todos podamos participar.
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
3
Comentar