Continuamos.
Ya tenemos las clases, ahora hay que crear el programa principal.
El programa tendrá dos tareas.
La primera, crear automáticamente objetos PERSONA, EMPLEADO, FACTURA, PRODUCTO...
Dichos objetos los guardaremos en alguna colección de datos dinámica, por ejemplo en ArrayList.
Para crear esos objetos, haremos varias funciones donde crearemos objetos de cada clase y las añadiremos a los ArrayList.
Lo primero que hará nuestro main() será llamar a estas funciones para que vayan llenando los ArrayList con datos.
Terminado esto, pasamos a la segunda tarea, que es simplemente mostrar un menú al usuario dentro de un bucle para que elija las opciones que quiera hasta que decida terminar el programa.
El menú tiene que ofrecer consultar EMPLEADOS, PERSONAS(Clientes), y PRODUCTOS
Yo simplemente lo que hago es recorrer el ArrayList correspondiente y mostrar los datos de los objetos que contiene. Gracias a que a cada clase le hemos creado un método toString(), ahora nos va a bastar con un par de líneas de código para cada opción.
Hay otra opción más que ofrecer, que es la de mostrar FACTURAS según la PERSONA/Cliente.
Yo lo que hago es pedir al usuario un número de cédula. Compruebo en el ArrayList si existe una PERSONA con esa cédula.
Si existe, uso esa PERSONA para consultar el ArrayList de FACTURAS. A cada una de ellas le pido que me devuelva la PERSONA asociada y la comparo con la PERSONA que me ha indicado el usuario. Si coinciden (método equals() facilita esta comparación) mando imprimir en pantalla los datos de esa FACTURA y paso a la siguiente.
Y ya está, creo que no es difícil de entender. Aquí dejo mi código y cualquier duda, tan solo tienes que preguntarla.
Un saludo.
public class GestionRestaurante {
static ArrayList<Empleado> empleados = new ArrayList<Empleado>();
static ArrayList<Persona> clientes = new ArrayList<Persona>();
static ArrayList<Producto> productos = new ArrayList<Producto>();
static ArrayList<Factura> facturas = new ArrayList<Factura>();
public static void main(String[] args) {
//Inicializamos datos
crearEmpleados();
crearClientes();
crearProductos();
crearFacturas();
//Comienza el menú principal
Scanner teclado = new Scanner(System.in);
int opcion = 0;
while (opcion != 5) {
System.out.println("\n\t\tOPCIONES");
System.out.println("(1) Consultar Empleados");
System.out.println("(2) Consultar Productos");
System.out.println("(3) Consultar Clientes");
System.out.println("(4) Consultar Facturas por Cliente");
System.out.println("(5) TERMINAR PROGRAMA");
System.out.print("Seleccione opción (1-5): ");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
System.out.println("\n\t\tCONSULTAR EMPLEADOS");
for (Empleado emp: empleados) {
if (emp instanceof Chef)
System.out.println("\nTipo empleado: Chef");
else
System.out.println("\nTipo empleado: Mesero");
System.out.println(emp);
}
break;
case 2:
System.out.println("\n\t\tCONSULTAR PRODUCTOS");
for (Producto prod: productos)
System.out.println("\n" + prod);
break;
case 3:
System.out.println("\n\t\tCONSULTAR CLIENTES");
for (Persona cli: clientes)
System.out.println("\n" + cli);
break;
case 4:
System.out.println("\n\t\tCONSULTAR FACTURAS POR CLIENTE");
System.out.print("\nIndique cédula de cliente: ");
String cedula = teclado.nextLine();
//Buscamos cliente a ver si existe
Persona cliente = null;
for (Persona cli: clientes)
if (cli.getCedula().equals(cedula))
cliente = cli; //Encontrado, lo referenciamos en la variable cliente
//Comprobamos si lo hemos encontrado
if (cliente == null)
System.out.println("No se encontro cliente con cédula: " + cedula);
else {
//Mostramos facturas de esta Persona cliente
System.out.println("\n\tFacturas asociadas al Cliente:");
for (Factura fac: facturas) {
if (fac.getCliente().equals(cliente))
System.out.println(fac);
}
}
break;
case 5:
System.out.println("\n\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("\nOpción equivocada, elija entre 1-5");
}
}
teclado.close();
}
static void crearEmpleados() {
empleados.add(new Mesero("CED00", "Ramón", "Espinosa", 850));
empleados.add(new Mesero("CED01", "Susana", "López", 850));
empleados.add(new Chef("CED02", "Carlos", "Santana", 975));
empleados.add(new Chef("CED03", "María", "Reina", 975));
}
static void crearClientes() {
clientes.add(new Persona("CED04", "Federico", "fede@gmail.com"));
clientes.add(new Persona("CED05", "Cristina", "cristi@gmail.com"));
clientes.add(new Persona("CED06", "Raul", "raul@gmail.com"));
}
static void crearProductos() {
productos.add(new Producto("COD000", "Raviolis", "Ravioli, Ternera, Tomate, Salsa Queso",
"Nata", "Italia"));
productos.add(new Producto("COD010", "Pelmeni", "Carne Pollo, Sal, Harina, Aceite Oliva, Huevo",
"Cebolla picada", "Rusia"));
productos.add(new Producto("COD020", "Udon", "Fideos, Aceite, Ajo, Jengibre, Brócoli, Soja",
"Setas Shiitake", "Japón"));
productos.add(new Producto("COD030", "Paella", "Arroz, Gambas, Mejillones, Calamares, Ajo",
"Azafrán", "España"));
//Seteamos el Chef creador para cada producto
productos.get(0).setChefCreador((Chef)empleados.get(2));
productos.get(1).setChefCreador((Chef)empleados.get(3));
productos.get(2).setChefCreador((Chef)empleados.get(2));
productos.get(3).setChefCreador((Chef)empleados.get(3));
}
static void crearFacturas() {
facturas.add(new Factura("FAC000", "07/08/2019", "Efectivo", clientes.get(0), (Mesero)empleados.get(1),
new Detalle(2, productos.get(2))));
facturas.add(new Factura("FAC001", "06/08/2019", "Tarjeta VISA", clientes.get(1), (Mesero)empleados.get(1),
new Detalle(3, productos.get(1))));
facturas.add(new Factura("FAC002", "05/08/2019", "Efectivo", clientes.get(0), (Mesero)empleados.get(0),
new Detalle(4, productos.get(0))));
facturas.add(new Factura("FAC003", "07/08/2019", "PayPal", clientes.get(2), (Mesero)empleados.get(0),
new Detalle(1, productos.get(0))));
facturas.add(new Factura("FAC004", "05/08/2019", "Efectivo", clientes.get(1), (Mesero)empleados.get(1),
new Detalle(3, productos.get(1))));
facturas.add(new Factura("FAC005", "04/08/2019", "PayPal", clientes.get(0), (Mesero)empleados.get(0),
new Detalle(2, productos.get(2))));
facturas.add(new Factura("FAC006", "05/08/2019", "Tarjeta VISA", clientes.get(1), (Mesero)empleados.get(0),
new Detalle(4, productos.get(1))));
facturas.add(new Factura("FAC007", "03/08/2019", "Efectivo", clientes.get(2), (Mesero)empleados.get(1),
new Detalle(2, productos.get(2))));
facturas.add(new Factura("FAC008", "04/08/2019", "Tarjeta VISA", clientes.get(0), (Mesero)empleados.get(0),
new Detalle(3, productos.get(1))));
}
}