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:
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.
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");
}
}
}