Autor Tema: Ejercicio Java Netbeans Tienda Abarrotes guardar buscar borrar registros menú  (Leído 4929 veces)

Javier De Regino

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Hola !!! Necesito ayuda en la solución de este ejercicio de netbeans java.

Ejercicio

Consiste en una tienda de abarrotes.

- El programa debe guardar, buscar, borrar, actualizar e imprimir todos los registros
- Menú de opciones para el usuario usando Switch o IF
- Deberá almacenar 10 OBJETOS del tipo que se le asigno como proyecto. (Uso de arreglo o arraylist)
- El objeto debe tener los siguientes atributos
   a. Id
   b. 4 atributos minimo, según el caso.
Con el id, no debe de registrar otro producto con ese mismo id

Muchas gracias por el apoyo!!!
« Última modificación: 19 de Junio 2022, 14:03 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio Netbeans Tienda Abarrotes Arraylist
« Respuesta #1 en: 18 de Mayo 2022, 19:52 »
Se puede crear una clase llamada Producto con los atributos que queramos inventarnos.
Para el tema de tener un ID único para cada producto, se puede declarar un valor estático que comience con un entero y cada vez que sea crea un producto, se le asigna ese valor y luego se incrementa para que el siguiente producto que se vaya a crear obtenga un ID distinto del anterior.

Para que esto funcione bien hay que declararlo como estático, para que sea un valor asociado a la clase, y no a los objetos de dicha clase.

Además, podemos incluir el método equals() y programarlo para que dos Productos se consideren iguales si tiene el mismo ID.
De esta manera, luego en el programa principal será fácil pedirle al ArrayList que compruebe si ya contiene un producto con el mismo ID que el producto que vayamos a registrar.

Que con el sistema del ID que se va incrementando, es prácticamente imposible que nos encontremos con dos productos usando el mismo ID, pero bueno.

Esta podría ser la clase Producto:
Código: [Seleccionar]
public class Producto {

private static int nuevoID = 100; //Para obtener id's únicos, de 100 en adelante
//Atributos
private int id;
private String nombre;
private int stock;
private double peso;
private String proveedor;

public Producto(String nombre, int stock, double peso, String proveedor) {
asignaID();
this.nombre = nombre;
this.stock = stock;
this.peso = peso;
this.proveedor = proveedor;
}

public void asignaID() {
id = nuevoID++; //Se asigna nuevoID actual y se incrementa para que proximo producto su ID sea distinto
}

public int getId() {
return id;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public int getStock() {
return stock;
}

public void setStock(int stock) {
this.stock = stock;
}

public double getPeso() {
return peso;
}

public void setPeso(double peso) {
this.peso = peso;
}

public String getProveedor() {
return proveedor;
}

public void setProveedor(String proveedor) {
this.proveedor = proveedor;
}

@Override
public String toString() {
return String.format("Id: %d\tnombre: %s\nStock: %s\tPeso: %.2f Kg\nProveedor: %s", id, nombre,
stock, peso, proveedor);
}

@Override
public boolean equals(Object objeto) {
if (objeto instanceof Producto) {
Producto otroProducto = (Producto) objeto;
return id == otroProducto.id; //Dos productos son iguales sin tiene el mismo ID
}
else
return false;
}

}


Luego, escribimos un programa principal que use un ArrayList para almacenar objetos Producto.

Ofrecemos un menú para que el usuario escoja una opción, la cuál analizamos con un switch y llamamos a un método que cumpla la opción escogida.

Dejo un ejemplo comenzado con las opciones de registrar producto e imprimir listado funcionando.
Las otras funciones inténtalas tú. Llega hasta donde puedas y cuando te atasques, muestra tu código para que podamos ayudarte.
Un saludo.

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Scanner;

public class Tienda {

private static ArrayList<Producto> productos = new ArrayList<Producto>();
private static Scanner teclado = new Scanner(System.in);

public static void main(String[] args) {

int opcion = 0;
do {
System.out.println("\n\t\tMENU TIENDA");
System.out.println("\t\t---- ------\n");
System.out.println("[1] -- Registrar Producto");
System.out.println("[2] -- Buscar Producto");
System.out.println("[3] -- Borrar Producto");
System.out.println("[4] -- Actualizar Producto");
System.out.println("[5] -- Imprimir Lista Productos");
System.out.println("[6] -- SALIR");
System.out.print("Opcion: ");
opcion = Integer.parseInt(teclado.nextLine());

switch(opcion) {
case 1:
registrar();
break;
case 2:
//buscar();
break;
case 3:
//borrar();
break;
case 4:
//actualizar();
break;
case 5:
imprimir();
break;
case 6:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("\nOpcion equivocada");
}
} while (opcion != 6);

}

private static void registrar() {
System.out.println("\nNUEVO PRODUCTO");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Stock: ");
int stock = Integer.parseInt(teclado.nextLine());
System.out.print("Peso(Kg): ");
double peso = Double.parseDouble(teclado.nextLine());
System.out.print("Proveedor: ");
String proveedor = teclado.nextLine();
Producto nuevo = new Producto(nombre, stock, peso, proveedor);

//Mientras ya exista un la lista un producto con el mismo ID..
while (productos.contains(nuevo))
nuevo.asignaID(); //...le asignamos un nuevo ID, hasta obtener uno que no exista en la lista

//Ya tenemos producto con un ID único
productos.add(nuevo);
System.out.println("\nNuevo Producto registrado...");
}

private static void imprimir() {
System.out.println("\nPRODUCTOS REGISTRADOS");
if (productos.isEmpty())
System.out.println("No hay Productos registrados.");
else
for (Producto prd: productos) {
System.out.println("\n*********************************");
System.out.println(prd);
System.out.println("*********************************\n");
}
}

}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Javier De Regino

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re: Ejercicio Netbeans Tienda Abarrotes Arraylist
« Respuesta #2 en: 24 de Mayo 2022, 22:52 »
Hola!!!

Quise agregar la opción de borrar, pero me marca error y modifique el código quitando un atributo que no necesitaba (Peso), pero ya ahorita que mejor de dejare ese atributo.

Código: [Seleccionar]
package preproyec;

import java.util.ArrayList;
import java.util.Scanner;

public class PreProyec {
   
    private static Producto producto = null;
    private static ArrayList<Producto> productos = new ArrayList<Producto>();
    private static Scanner teclado = new Scanner(System.in);

    public static void main(String[] args) {
       
int opcion = 0;
do {
System.out.print("\n\t\tMENU TIENDA");
System.out.print("\n\t\t----- -----\n");
System.out.println("[1] Registrar Producto");
System.out.println("[2] Buscar Producto");
System.out.println("[3] Borrar Producto");
System.out.println("[4] Actualizar Producto");
System.out.println("[5] Imprimir Lista Productos");
System.out.println("[6] SALIR");
System.out.print("Opcion: ");
opcion = Integer.parseInt(teclado.nextLine());

switch(opcion) {
case 1:
registrar();
break;
case 2:
//buscar();
break;
case 3:
borrar();
break;
case 4:
//actualizar();
break;
case 5:
imprimir();
break;
case 6:
System.out.println("\tFIN DE PROGRAMA");
break;
default:
System.out.println("No Existe Opcion...");
}
} while (opcion != 6);

}

private static void registrar(){
System.out.println("\nNUEVO PRODUCTO");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Stock: ");
int stock = Integer.parseInt(teclado.nextLine());
System.out.print("Peso(Kg): ");
double peso = Double.parseDouble(teclado.nextLine());
System.out.print("Proveedor: ");
String proveedor = teclado.nextLine();
Producto nuevo = new Producto(nombre, stock, proveedor);

//Mientras ya exista un la lista un producto con el mismo ID..
while (productos.contains(nuevo))
nuevo.asignaID(); //...le asignamos un nuevo ID, hasta obtener uno que no exista en la lista

//Ya tenemos producto con un ID único
productos.add(nuevo);
System.out.println("\nNuevo Producto registrado...");
}

private static void imprimir(){
System.out.println("\nPRODUCTOS REGISTRADOS");
if (productos.isEmpty())
System.out.println("No hay Productos registrados.");
else
for (Producto prd: productos) {
System.out.println("\n*********************************");
System.out.println(prd);
System.out.println("*********************************\n");
}
        private static void borrar(){
           
            System.out.println("\n\t--ELIMINAR DEPORTISTA--");
System.out.print("Codigo: ");
String codigo = teclado.nextLine();

Producto buscado = null;
for (int i = 0; i < productos.size(); i++)
if (productos.get(i).getCodigo().equals(codigo))
buscado = productos.get(i);

if (buscado == null)
System.out.println("\nNo existe deportista con el codigo: " + codigo);
else {
productos.remove(buscado);
System.out.println("\nDeportista eliminado");
}
}

}

A si fue como intente poner la opcion de borrar pero me da error y no se ocupe poner algo en la clase o todo va en la clase principal
« Última modificación: 19 de Junio 2022, 14:04 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio Netbeans Tienda Abarrotes Arraylist
« Respuesta #3 en: 25 de Mayo 2022, 17:11 »
El problema es que has copiado demasiado literalmente ese método de otro ejercicio sobre "deportistas" (recuerda cambiar el texto de los mensajes que se mostrarán en pantalla) y estás usando un método equivocado para obtener el ID del producto.
Ese método getCodigo() no existe en la clase Producto.

Citar
      Producto buscado = null;
      for (int i = 0; i < productos.size(); i++)
         if (productos.get(i).getCodigo().equals(codigo))
            buscado = productos.get(i);

Para los productos no estamos usando un "código", si no un identificador "ID"-
Que además es un int, no un String como era el código del deportista.

El método borrar() debería quedar algo como esto:
Código: [Seleccionar]
private static void borrar() {
System.out.println("\n\t--ELIMINAR PRODUCTO--");
System.out.print("ID producto: ");
int id = Integer.parseInt(teclado.nextLine());

Producto buscado = null;
for (int i = 0; i < productos.size(); i++)
if (productos.get(i).getId() == id)
buscado = productos.get(i);

if (buscado == null)
System.out.println("\nNo existe producto con el ID: " + id);
else {
productos.remove(buscado);
System.out.println("\nProducto eliminado");
}
}

Está bien buscar ejemplos de otros ejercicios para aplicar la misma lógica, pero no servirá hacer un simplemente copy-paste. Hay que entender esa lógica para poder adaptarla al ejercicio actual.

También es importante saber interpretar los errores que nos da el compilador.
Se supone que el error te habrá mostrado un mensaje similar a "The method getCodigo() is undefined for the type Producto"

Está claro que eso significa que estamos llamando a un método que no ha sido definido para la clase/tipo Producto. Así que al ver ese error, lo que haremos será revisar la clase Producto y comprobar cuál sería el método equivalente al que tenemos que llamar realmente.

Un saludo.


NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Javier De Regino

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re: Ejercicio Netbeans Tienda Abarrotes Arraylist
« Respuesta #4 en: 27 de Mayo 2022, 07:07 »
Hola!!!

Ya modifique como usaria el codigo solo que para asignar un id unico no he podido y asi es como tengo mi clase y mi clase principal

Clase Persona
Código: [Seleccionar]
package personas;

public class Persona {
   
    private String id;
    private String ape;
    private String nom;
    private String sex;
    private double peso;
    private int edad;
   
    public Persona(String id, String ape, String nom, String sex, double peso, int edad){
       
        this.id = id;
        this.ape = ape;
        this.nom = nom;
        this.sex = sex;
        this.peso = peso;
        this.edad = edad;
       
    }
   
    public Persona(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }
    public void setId(String id){
        this.id = id;
    }
    public String getApe(){
        return ape;
    }
    public void setApe(String ape){
        this.ape = ape;
    }
    public String getNom(){
        return nom;
    }
    public void setNom(String nom){
        this.nom = nom;
    }
    public String getSex(){
        return sex;
    }
    public void setSex(String sex){
        this.sex = sex;
    }
    public double getPeso(){
        return peso;
    }
    public void setPeso(double peso){
        this.peso = peso;
    }
    public int getEdad(){
        return edad;
    }
    public void setEdad(int edad){
        this.edad = edad;
    }
   
    @Override
    public String toString(){
        return String.format("Id: %s\tNombre: %s\tApellido %s\nSexo: %s\tPeso: %.2f kg\nEdad: %d", id, nom, ape, sex, peso, edad);
    }
    @Override
    public boolean equals(Object obj){
        if (obj instanceof Persona){
            Persona otroPersona = (Persona) obj;
            return otroPersona.id.equals(id);
        }else
            return false;
    }
}

Ya tambien estuve entiendo como funciona el codigo un poco pero no he podido que me registre un id unico

Código: [Seleccionar]
package personas;

import java.util.ArrayList;
import java.util.Scanner;

public class Personas {
   
    private ArrayList<Persona>ListaPersonas;

    public static void main(String[] args) {
       
        int opcion;
        Personas proyectoPersona = new Personas();
        proyectoPersona.ListaPersonas = new ArrayList();
        Scanner sc = new Scanner (System.in);
       
        do {
            System.out.println("Menu");
            System.out.println("[1] Registrar");
            System.out.println("[2] Buscar");
            System.out.println("[3] Eliminar");
            System.out.println("[4] Actualizar");
            System.out.println("[5] Imprimir");
            System.out.println("[6] Salir");
            opcion = sc.nextInt();
           
            switch (opcion){
                case 1:
                    proyectoPersona.Registrar();
                    break;
                case 2:
                    //proyectoPersona.Buscar();
                    break;
                case 3:
                    //proyectoPersona.Elminar();
                    break;
                case 4:
                    //proyectoPersona.Actualizar();
                    break;
                case 5:
                    //proyectoPersona.Imprimir();
                    break;
                case 6:
                    System.out.println("\n\tFin Del Programa");
                    break;
                default:
                    System.out.println("\nOpcion equivocada");
                    break;
            }
        }while (opcion != 6);

    }
   
    public void Registrar(){
        String id, ape, nom, sex;
        int edad;
        double peso;
        Scanner sc = new Scanner(System.in);
        System.out.print("Id: ");
        id = sc.next();
        System.out.print("Nombre: ");
        nom = sc.next();
        System.out.print("Apellidos: ");
        ape = sc.next();
        System.out.print("Sexo: ");
        sex = sc.next();
        System.out.print("Peso: ");
        peso = sc.nextDouble();
        System.out.print("Edad: ");
        edad = sc.nextInt();
        Persona persona = new Persona(id, nom, ape, sex, peso, edad);
        ListaPersonas.add(persona);
    }
   
}

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio Netbeans Tienda Abarrotes Arraylist
« Respuesta #5 en: 27 de Mayo 2022, 17:36 »
Para el ID único, antes de añadir la nueva persona al ArrayList hay que comprobar si este ya contiene una persona con el mismo ID.
Si ya lo tuviera, pues habría que volver a pedir un nuevo ID al usuario, hasta que finalmente él nos de uno que no exista en el registro.

Citar
    public void Registrar(){
        String id, ape, nom, sex;
        int edad;
        double peso;
        Scanner sc = new Scanner(System.in);
        System.out.print("Id: ");
        id = sc.next();
        System.out.print("Nombre: ");
        nom = sc.next();
        System.out.print("Apellidos: ");
        ape = sc.next();
        System.out.print("Sexo: ");
        sex = sc.next();
        System.out.print("Peso: ");
        peso = sc.nextDouble();
        System.out.print("Edad: ");
        edad = sc.nextInt();
        Persona persona = new Persona(id, nom, ape, sex, peso, edad);
        //No añadimos la persona hasta asegurarnos de que su ID es único
        while (ListaPersonas.contains(persona) {
                System.out.print("Ya existe una persona con este ID, proporcione otro: ");
                persona.setId(sc.next());

        }

        ListaPersonas.add(persona);
    }


Si lo del ID no queremos dejarlo en manos del usuario, se puede hacer lo que hicimos con la clase Producto, que sea esta la que vaya generando los ID cada vez que se registraba un producto.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".