COMPARTE ESTE ARTÍCULO

Este ejercicio combinará varios conceptos fundamentales en Java: tipos de datos y operaciones de entrada y salida, estructuras básicas, programación modular y funciones, vectores unidimensionales y bidimensionales, programación orientada a objetos (POO), tratamiento de excepciones y ficheros de texto y binarios, y estructuras dinámicas de datos como ArrayList.

Descripción del Ejercicio

Vamos a crear un sistema de gestión de inventario que permita:

  1. Añadir productos.
  2. Listar productos.
  3. Guardar y cargar los datos en/desde ficheros de texto y binarios.
  4. Buscar productos por nombre.
  5. Eliminar productos.
  6. Manejar excepciones para operaciones como manejo de ficheros.

Estructura del Código

Clase Producto

import java.io.Serializable;

class Producto implements Serializable {
    private static final long serialVersionUID = 1L;
    private String nombre;
    private double precio;
    private int cantidad;

    public Producto(String nombre, double precio, int cantidad) {
        this.nombre = nombre;
        this.precio = precio;
        this.cantidad = cantidad;
    }

    public String getNombre() {
        return nombre;
    }

    public double getPrecio() {
        return precio;
    }

    public int getCantidad() {
        return cantidad;
    }

    @Override
    public String toString() {
        return "Producto [Nombre: " + nombre + ", Precio: " + precio + ", Cantidad: " + cantidad + "]";
    }
}

Clase Inventario

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Inventario {
    private ArrayList<Producto> productos;
    private static final String FICHERO_TEXTO = "inventario.txt";
    private static final String FICHERO_BINARIO = "inventario.bin";

    public Inventario() {
        productos = new ArrayList<>();
    }

    public void añadirProducto(Producto producto) {
        productos.add(producto);
    }

    public void listarProductos() {
        if (productos.isEmpty()) {
            System.out.println("No hay productos para mostrar.");
        } else {
            for (Producto producto : productos) {
                System.out.println(producto);
            }
        }
    }

    public void guardarEnFicheroTexto() {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(FICHERO_TEXTO))) {
            for (Producto producto : productos) {
                writer.write(producto.getNombre() + "," + producto.getPrecio() + "," + producto.getCantidad());
                writer.newLine();
            }
            System.out.println("Datos guardados en " + FICHERO_TEXTO);
        } catch (IOException e) {
            System.out.println("Error al guardar en fichero de texto: " + e.getMessage());
        }
    }

    public void cargarDesdeFicheroTexto() {
        try (BufferedReader reader = new BufferedReader(new FileReader(FICHERO_TEXTO))) {
            String linea;
            productos.clear();
            while ((linea = reader.readLine()) != null) {
                String[] partes = linea.split(",");
                productos.add(new Producto(partes[0], Double.parseDouble(partes[1]), Integer.parseInt(partes[2])));
            }
            System.out.println("Datos cargados desde " + FICHERO_TEXTO);
        } catch (IOException e) {
            System.out.println("Error al cargar desde fichero de texto: " + e.getMessage());
        }
    }

    public void guardarEnFicheroBinario() {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FICHERO_BINARIO))) {
            oos.writeObject(productos);
            System.out.println("Datos guardados en " + FICHERO_BINARIO);
        } catch (IOException e) {
            System.out.println("Error al guardar en fichero binario: " + e.getMessage());
        }
    }

    public void cargarDesdeFicheroBinario() {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FICHERO_BINARIO))) {
            productos = (ArrayList<Producto>) ois.readObject();
            System.out.println("Datos cargados desde " + FICHERO_BINARIO);
        } catch (IOException | ClassNotFoundException e) {
            System.out.println("Error al cargar desde fichero binario: " + e.getMessage());
        }
    }

    public void buscarProductoPorNombre(String nombre) {
        for (Producto producto : productos) {
            if (producto.getNombre().equalsIgnoreCase(nombre)) {
                System.out.println(producto);
                return;
            }
        }
        System.out.println("Producto no encontrado.");
    }

    public void eliminarProductoPorNombre(String nombre) {
        for (Producto producto : productos) {
            if (producto.getNombre().equalsIgnoreCase(nombre)) {
                productos.remove(producto);
                System.out.println("Producto eliminado.");
                return;
            }
        }
        System.out.println("Producto no encontrado.");
    }

    public static void main(String[] args) {
        Inventario inventario = new Inventario();
        Scanner scanner = new Scanner(System.in);
        int opcion;

        do {
            System.out.println("1. Añadir producto");
            System.out.println("2. Listar productos");
            System.out.println("3. Guardar en fichero de texto");
            System.out.println("4. Cargar desde fichero de texto");
            System.out.println("5. Guardar en fichero binario");
            System.out.println("6. Cargar desde fichero binario");
            System.out.println("7. Buscar producto por nombre");
            System.out.println("8. Eliminar producto por nombre");
            System.out.println("9. Salir");
            System.out.print("Seleccione una opción: ");
            opcion = scanner.nextInt();
            scanner.nextLine();  // Consumir el salto de línea

            switch (opcion) {
                case 1:
                    System.out.print("Nombre del producto: ");
                    String nombre = scanner.nextLine();
                    System.out.print("Precio del producto: ");
                    double precio = scanner.nextDouble();
                    System.out.print("Cantidad del producto: ");
                    int cantidad = scanner.nextInt();
                    scanner.nextLine();  // Consumir el salto de línea
                    inventario.añadirProducto(new Producto(nombre, precio, cantidad));
                    break;
                case 2:
                    inventario.listarProductos();
                    break;
                case 3:
                    inventario.guardarEnFicheroTexto();
                    break;
                case 4:
                    inventario.cargarDesdeFicheroTexto();
                    break;
                case 5:
                    inventario.guardarEnFicheroBinario();
                    break;
                case 6:
                    inventario.cargarDesdeFicheroBinario();
                    break;
                case 7:
                    System.out.print("Ingrese el nombre del producto a buscar: ");
                    String nombreBuscar = scanner.nextLine();
                    inventario.buscarProductoPorNombre(nombreBuscar);
                    break;
                case 8:
                    System.out.print("Ingrese el nombre del producto a eliminar: ");
                    String nombreEliminar = scanner.nextLine();
                    inventario.eliminarProductoPorNombre(nombreEliminar);
                    break;
                case 9:
                    System.out.println("Saliendo del programa.");
                    break;
                default:
                    System.out.println("Opción no válida.");
            }
        } while (opcion != 9);

        scanner.close();
    }
}

Explicación del Código

  1. Clase Producto:
    • Define un producto con nombre, precio y cantidad.
    • Implementa Serializable para permitir la serialización de objetos.
  2. Clase Inventario:
    • Contiene una lista dinámica (ArrayList) de productos.
    • Métodos para añadir, listar, buscar, eliminar productos, y para guardar y cargar datos desde ficheros de texto y binarios.
    • El método main proporciona un menú interactivo para gestionar el inventario.
  3. Manejo de Excepciones:
    • Se manejan excepciones durante la lectura y escritura de ficheros.
    • Uso de try-with-resources para asegurar el cierre de recursos como ficheros.

Este ejercicio proporciona una práctica completa para mejorar tus habilidades en Java, abarcando una amplia gama de conceptos y técnicas fundamentales. ¡Sigue practicando y explorando más sobre Java para convertirte en un programador más competente!


¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.


¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos. 

 

 


NUESTRAS ÚLTIMAS PUBLICACIONES

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO