
public class PruebaPilaEnlazada {

    /* para el apartado 2 */


    public static void rellenarPila(PilaEnlazada pe)
    {
        /* llenamos la pila con objetos */
        String obj01 = "objeto 01";
        String obj02 = "objeto 02";
        String obj03 = "objeto 03";
        String obj04 = "objeto 04";
        String obj05 = "objeto 05";
        String obj06 = "objeto 06";
        String obj07 = "objeto 07";
        String obj08 = "objeto 08";
        String obj09 = "objeto 09";
        String obj10 = "objeto 10";
        String obj11 = "objeto 11";
        String obj12 = "objeto 12";
        pe.insertar(obj01);
        pe.insertar(obj02);
        pe.insertar(obj03);
        pe.insertar(obj04);
        pe.insertar(obj05);
        pe.insertar(obj06);
        pe.insertar(obj07);
        pe.insertar(obj08);
        pe.insertar(obj09);
        pe.insertar(obj10);
        pe.insertar(obj11);
        pe.insertar(obj12);
    }

    public static void operacionesCaja(Caja caja)
    {
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.SALDO, 300.0));
        /* venta de producto, importe 29.75. Entrada 30, cambio 0.25 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 30.0));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 0.25));
        /* venta de producto, importe 42.5. Entrada 50, cambio 7.5 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 50));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 7.5));
        /* venta de producto, importe 12.0. Entrada 20, cambio 8.0 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 20));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 8));
        System.out.println("Elementos de la pila (top->final): \n" + caja.pila.toString());
        System.out.println("El error de la caja es: " + caja.comprobarCaja(384.25));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.SALDO, 320.0));
        /* venta de producto, importe 29.75. Entrada 30, cambio 0.25 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 30.0));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 0.25));
        /* venta de producto, importe 42.5. Entrada 50, cambio 7.5 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 50));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 7.5));
        /* venta de producto, importe 12.0. Entrada 20, cambio 8.0 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 20));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 8.28));
        System.out.println("El error de la caja es: " + caja.comprobarCaja(384.25));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.SALDO, 320.0));
        /* venta de producto, importe 29.75. Entrada 30, cambio 0.25 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 30.0));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 0.25));
        /* venta de producto, importe 42.5. Entrada 50, cambio 7.5 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 50));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 7.5));
        /* venta de producto, importe 12.0. Entrada 20, cambio 8.0 */
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.ENTRADA, 20));
        caja.registrarOperacion(new OperacionCaja(OperacionCaja.CAMBIO, 8.28));
        System.out.println("El error de la caja es: " + caja.comprobarCaja(408.55));

    }

    public static void primerApartado()
    {
        PilaEnlazada pe = new PilaEnlazada();
        rellenarPila(pe);
        System.out.println("Elementos de la pila (top->final): \n" + pe.toString());
    }

    public static void segundoApartado()
    {
        operacionesCaja(new Caja());
    }

    public static void tercerApartado()
    {
        PilaEnlazada pe = new PilaEnlazada();
        pe.insertar("Primer");
        pe.insertar("Segundo");
        pe.insertar("Tercer");
        pe.insertar("cuarto");
        System.out.println("Elementos de la pila ANTES de eliminar el de la posicion 2(top->final): \n" + pe.toString());
        pe.eliminarDelMedio(2);
        System.out.println("Elementos de la pila TRAS de eliminar el de la posicion 2( top->final): \n" + pe.toString());

    }

    public static void main(String args[])
    {
        boolean ejecutada = false;

        if (args.length == 1) {
            try {
                int apartado = Integer.parseInt(args[0]);
                if (apartado == 1) {
                    primerApartado();
                    ejecutada = true;
                } else if (apartado == 2) {
                    segundoApartado();
                    ejecutada = true;
                } else if (apartado == 3) {
                    tercerApartado();
                    ejecutada = true;
                }
            } catch (NumberFormatException e) {
                // nada...
            }
        }

        if (!ejecutada) {
            System.out.println("El programa de pruebas debe recibir");
            System.out.println("el número de ejercicio como parámetro");
            System.out.println("Ejemplo: java PruebaPilaEnlazada 1");
        }
    }

}

