Advertisement
squidward98

Simulador Máquina Expendedora #1 Main

Apr 6th, 2020
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.98 KB | None | 0 0
  1. package maquinaExpendedora;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Main
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.         /*
  10.         * Nuestras máquinas trabajan con clientes que introducen dinero en ella y luego le solicitan que imprima un boleto.
  11.         * La máquina mantiene un registro de la cantidad de dinero que ha recaudado durante todo su funcionamiento.
  12.         * En la vida real, es frecuente que la máquina expendedora de boletos ofrezca un conjunto de boletos de diferentes tipos
  13.         * y los clientes escogen entre ellos, sólo el que desean. Nuestra máquina simplificada imprime sólo boletos de un único precio.
  14.         * Resulta significativamente más complicado programar una clase que sea capaz de emitir boletos de diferentes valores que si tienen un único precio.
  15.         * Por otra parte, con programación orientada a objetos es muy fácil crear varias instancias de la clase,
  16.         * cada una con su propio precio, para cumplir con la necesidad de diferentes tipos de boletos.
  17.         *
  18.         * 1) La máquina expendedora no emite boletos automáticamente. Modifique el comportamiento para que una
  19.         * vez que se ingreso el saldo suficiente, se imprima. O puede realizar validaciones en imprimirBoleto.
  20.         * 2) Añada un campo más del tipo boolean llamado estado. Además sus métodos de acceso y modificación.
  21.         * 3) Agregue el método ponerPrecio.
  22.         * 4) Agregue un constructor de la MaquinaDeBoletos de modo que no tenga ningún parámetro. En su lugar,
  23.         * el precio de los boletos debiera fijarse en 10 pesos
  24.         * 5) Mejore el método ingresarDinero de modo que no permita el ingreso de números negativos. Trate de
  25.         * no acoplar vista (impresiones de pantalla) al método. Sea creativo.
  26.         * 6) Agregue un campo estático que cuente la cantidad de boletos impresos. Agregue un metodo para
  27.         * conocer esa cantidad.
  28.         * 7) Implemente un método vaciar, que simule el efecto de quitar todo el dinero de la máquina. Este
  29.         * método debe tener un tipo de retorno void y su cuerpo simplemente pone en cero el valor del campo total.
  30.         * ¿Necesita tener algún parámetro? Pruebe su método creando una máquina, ingrese algo de dinero, emita
  31.         * algunos boletos, verifique el total y luego vacíe la máquina. ¿Es un método de modificación o de acceso?
  32.         * 8) Cambiar el main para que tenga un menu admin y menu cliente.
  33.         */
  34.        
  35.         Scanner scanner = new Scanner(System.in);  
  36.         MaquinaExpendedora maquinaExpendedora = new MaquinaExpendedora((double)100);
  37.         Menu menu = new Menu();
  38.        
  39.         /*comandos ocultos
  40.          * -66: "rompe" la máquina para repararla.
  41.          * -33: muestra el estado de la máquina y de estar dañada se da la opción de repararla.
  42.          * 333: inicia sesción de administrador.
  43.          * 666: apaga la máquina.
  44.          */
  45.        
  46.        
  47.         char c;
  48.         int op;
  49.         double vuelto = 0;
  50.         boolean estadoMaquina = maquinaExpendedora.isEstado();     
  51.         boolean danioMaquina = maquinaExpendedora.isDanio();
  52.         boolean admin = menu.isAdmin();
  53.         String pass;
  54.         System.out.println("Iniciando sistema...");
  55.         System.out.println("¿Iniciar en modo administrador? s/n");
  56.         c = scanner.nextLine().charAt(0);
  57.        
  58.         if(c == 's' || c == 'S')
  59.         {
  60.             do
  61.             {
  62.                 System.out.println("Ingrese contraseña:");
  63.                 pass = scanner.nextLine();
  64.                 System.out.println(menu.verificarPass(pass));
  65.                 admin = menu.isAdmin();
  66.             }while(!admin);
  67.         }
  68.            
  69.         do
  70.         {
  71.             if(!danioMaquina && estadoMaquina)
  72.             {
  73.                 System.out.println(menu.toString());
  74.                 op = scanner.nextInt();
  75.                
  76.                 switch (op)
  77.                 {
  78.                     case 0:
  79.                         vuelto = maquinaExpendedora.getSaldo();
  80.                         if(vuelto > 0) System.out.println("Su vuelto es $"+vuelto+".");
  81.                         if(!admin) System.out.println("\n¡Hasta la próxima! :)");
  82.                         maquinaExpendedora.vaciarSaldo();
  83.                         break;
  84.                     case 1:  /// imprimirBoleto tiene que invocarse automaticamente en ingresarDinero no en el main.
  85.                         boolean esNeg = true;
  86.                         while(esNeg)
  87.                         {
  88.                             System.out.println("Ingrese el monto que desea agregar a su saldo:");
  89.                             double dinero = scanner.nextDouble();
  90.                             if(dinero < 0) System.out.println("No se pueden agregar montos negativos.");
  91.                             else
  92.                             {
  93.                                 maquinaExpendedora.ingresarDinero(dinero);
  94.                                 esNeg = false;
  95.                             }
  96.                         }
  97.                         boolean conSaldo = maquinaExpendedora.verificarSaldo();
  98.                         if(conSaldo) System.out.println(maquinaExpendedora.imprimirBoleto());
  99.                         break;             
  100.                     case 2:
  101.                         System.out.println("Tu saldo es: $"+maquinaExpendedora.getSaldo()+".");
  102.                         break;
  103.                     case 3:
  104.                         System.out.println("El precio del boleto es: $"+maquinaExpendedora.getPrecio()+".");
  105.                         break;
  106.                     case 4:
  107.                         System.out.println(maquinaExpendedora.imprimirBoleto());
  108.                         break;
  109.                     case 5:
  110.                         if(admin)
  111.                         {
  112.                             System.out.println("La cantidad de bolesto vendidos hasta el momento es: "+MaquinaExpendedora.cantidadBoletosVendidos()+".");
  113.                         }
  114.                         else System.out.println("Opción inválida.");
  115.                         break;
  116.                     case 6:
  117.                         if(admin)
  118.                         {
  119.                             System.out.println("El dinero recaudado hasta el momento es: $"+maquinaExpendedora.getTotal()+".");
  120.                         }
  121.                         else System.out.println("Opción inválida.");
  122.                         break;
  123.                     case 7:
  124.                         if(admin)
  125.                         {
  126.                             System.out.println("El dinero recaudado hasta el momento es: $"+maquinaExpendedora.getTotal()+".");
  127.                             maquinaExpendedora.extraerDinero();
  128.                             System.out.println("Extracción de dinero finalizada, el total del dinero recaudado actual es: $"+maquinaExpendedora.getTotal()+". ¿Desea reiniciar el contador de boletos? s/n");
  129.                             scanner.nextLine();
  130.                             c = scanner.nextLine().charAt(0);
  131.                             if(c == 's' || c == 'S')
  132.                             {
  133.                                 MaquinaExpendedora.vaciarBoletosVendidos();
  134.                                 System.out.println("El contador de boletos vendidos se encuentra en: "+MaquinaExpendedora.cantidadBoletosVendidos()+".");
  135.                             }
  136.                         }
  137.                         else System.out.println("Opción inválida.");
  138.                         break;
  139.                     case 8:
  140.                         if(admin)
  141.                         {
  142.                              System.out.println("Ingrese nuevo precio:");
  143.                             double precio = scanner.nextDouble();
  144.                             maquinaExpendedora.setPrecio(precio);
  145.                             System.out.println("Precio cambiado con éxito.");
  146.                         }
  147.                         else System.out.println("Opción inválida.");
  148.                         break;
  149.                     case 9:
  150.                         if(admin)
  151.                         {
  152.                             vuelto = maquinaExpendedora.getSaldo();
  153.                             if(vuelto > 0) System.out.println("Su vuelto es: $"+vuelto+".");
  154.                             maquinaExpendedora.vaciarSaldo();
  155.                             System.out.println("Cerrando sesión");
  156.                             admin = menu.cerrarSesión();
  157.                         }
  158.                         else System.out.println("Opción inválida.");
  159.                         break;
  160.                     case -33:
  161.                         if(admin)
  162.                         {
  163.                             System.out.println("La maquina se encuentra activa y lista para su funcionamiento.");
  164.                         }
  165.                         else System.out.println("Opción inválida.");
  166.                         break;
  167.                     case -66:
  168.                         maquinaExpendedora.setDanio(true);
  169.                         danioMaquina = maquinaExpendedora.isDanio();
  170.                         System.out.println("Presentando problemas...");
  171.                         System.out.println("Máquina expendedora dañada. x_x");
  172.                         break;
  173.                     case 333:
  174.                         do
  175.                         {
  176.                             System.out.println("Ingrese contraseña:");
  177.                             scanner.nextLine();
  178.                             pass = scanner.nextLine();
  179.                             System.out.println(menu.verificarPass(pass));
  180.                             admin = menu.isAdmin();
  181.                         }while(!admin);
  182.                         break;
  183.                     case 666:
  184.                         System.out.println("Apagando sistemas...");
  185.                         System.out.println("Total del dinero en la máquina: $"+maquinaExpendedora.getTotal()+".");
  186.                         System.out.println("Total de boletos vendidos: "+MaquinaExpendedora.cantidadBoletosVendidos()+".");
  187.                         estadoMaquina = maquinaExpendedora.apagar(false);
  188.                         System.out.println("¡Hasta la próxima! :)");
  189.                         break;
  190.                     default:
  191.                         System.out.println("Opción inválida.");
  192.                         break;
  193.                 }
  194.             }
  195.             else
  196.             {
  197.                 System.out.println(menu.toString());
  198.                 op = scanner.nextInt();
  199.                
  200.                 switch (op)
  201.                 {
  202.                     case -33:
  203.                         boolean dps = false;
  204.                         if(!admin)
  205.                         {
  206.                             System.out.println("¿Iniciar en modo administrador para reparar máquina? s/n");
  207.                             scanner.nextLine();
  208.                             c = scanner.nextLine().charAt(0);
  209.                            
  210.                             if(c == 's' || c == 'S')
  211.                             {
  212.                                 do
  213.                                 {
  214.                                     System.out.println("Ingrese contraseña:");
  215.                                     pass = scanner.nextLine();
  216.                                     System.out.println(menu.verificarPass(pass));
  217.                                     admin = menu.isAdmin();
  218.                                 }while(!admin);
  219.                                
  220.                                 dps = true;
  221.                             }
  222.                         }
  223.                        
  224.                         if(admin)
  225.                         {
  226.                             System.out.println("La maquina se encuentra rota.");
  227.                             System.out.println("¿Desea repararla? s/n");
  228.                             if(!dps) scanner.nextLine();
  229.                             c = scanner.nextLine().charAt(0);
  230.                             if(c == 's' || c == 'S')
  231.                             {
  232.                                 danioMaquina = maquinaExpendedora.reparar(false);
  233.                                 System.out.println("Maquina reparada.");
  234.                             }
  235.                         }
  236.                         break;
  237.                     default:
  238.                         System.out.println("Error de sistema.");
  239.                         break;
  240.                 }
  241.             }          
  242.         }while(estadoMaquina);
  243.        
  244.         scanner.close();
  245.     }
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement