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:
- Añadir productos.
- Listar productos.
- Guardar y cargar los datos en/desde ficheros de texto y binarios.
- Buscar productos por nombre.
- Eliminar productos.
- 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
- Clase
Producto
:- Define un producto con nombre, precio y cantidad.
- Implementa
Serializable
para permitir la serialización de objetos.
- 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.
- Contiene una lista dinámica (
- 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
- La importancia de mantener un ritmo de estudio durante las navidades.
- Cómo Multiplicar Matrices en Java: Guía Completa con Ejemplo Práctico
- Triunfos y logros de nuestra Academia SanRoque
- Herramientas Imprescindibles para Realizar Ingeniería Inversa en Java
- ¿A qué nivel de conversación en inglés estás dispuesto a llegar con Academia SanRoque?
- Cómo Resolver una Ecuación de Segundo Grado con GNU Octave
- Cuando vienes a la Academia SaRoque justo antes del examen final.
- 25N Día Internacional para la Eliminación de la Violencia contra la Mujer
- Cuando el profesor nos da la última oportunidad.
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed