File size: 3,131 Bytes
938244c
 
 
8efe770
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
---
license: epl-2.0
---
import java.util.*;

public class CinemaEclipse {
   
   public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println("Bienvenido al Cine en Eclipse. \n Por favor, seleccione una de las opciones a continuación:");
      System.out.println("1. Comprar entradas");
      System.out.println("2. Ver cartelera");
      System.out.println("3. Ver promociones");
      System.out.println("4. Salir");
      int opcion = scanner.nextInt();
      
      switch(opcion){
         case 1: 
            comprarEntradas();
            break;
         case 2:
            verCartelera();
            break;
         case 3:
            verPromociones();
            break;
         case 4:
            System.out.println("Gracias por visitar el cine en Eclipse. Hasta luego!");
            break;
      }
   }
   
   // Implementación del patrón GoF Factory
   private static MovieFactory movieFactory = new MovieFactory();
   
   // Colección de películas de la cartelera
   private static List<Movie> cartelera = new ArrayList<>();
   
   // Colección de promociones
   private static Set<Promotion> promociones = new HashSet<>();
   
   // Coleccion de entradas vendidas
   private static Map<Movie, Integer> entradasVendidas = new HashMap<>();
   
   // Método para comprar entradas
   private static void comprarEntradas(){
      Scanner scanner = new Scanner(System.in);
      System.out.println("Por favor, seleccione una de las películas de la cartelera:");
      for(Movie movie : cartelera){
         System.out.println(movie.getTitle());
      }
      String peliculaSeleccionada = scanner.nextLine();
      
      // Busca la película dentro de la cartelera
      Movie movie = cartelera.stream()
         .filter(m -> m.getTitle().equals(peliculaSeleccionada))
         .findFirst()
         .orElse(null);
      
      if(movie != null){
         System.out.println("Cuántas entradas desea comprar?");
         int cantidadEntradas = scanner.nextInt();
         
         // Usa una expresión Lambda Supplier para obtener el precio de la entrada
         double precio = () -> movie.getPrice() * cantidadEntradas;
         
         // Usa una expresión Lambda Consumer para guardar la cantidad de entradas vendidas
         entradasVendidas.merge(movie, cantidadEntradas, Integer::sum);
         
         System.out.println("El precio total es: " + precio);
         System.out.println("Gracias por su compra!");
      }
   }
   
   // Método para ver la cartelera
   private static void verCartelera(){
      System.out.println("Cartelera:");
      cartelera.forEach(movie -> {
         // Usa una expresión Lambda Function para imprimir la cartelera
         System.out.println(movie.getTitle() + " - " + movie.getPrice() + "€");
      });
   }
   
   // Método para ver las promociones
   private static void verPromociones(){
      System.out.println("Promociones:");
      promociones.forEach(promotion -> {
         System.out.println(promotion.getName() + ": " + promotion.getDiscount() + "% de descuento!");
      });
   }
}