Teatro


Nos proponen crear un programa modular en java que permita el control de un pequeño teatro. Este tendrá tres zonas bien determinadas: lateral_izquierda (E), central (C) y lateral_derecha (D). Nos será más sencillo si nos fijamos en el dibujo:

Escenario



0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
0






















1






















2






















3






















4























 

Las columnas 5 y 16 serán las que nos servirán para simular los pasillos de acceso, por lo que no tendremos butacas.

Las casillas de la matriz (las butacas) podrán tomar tres posibles estados:
0 -> asiento libre, 1 -> asiento ocupado, 2 -> pasillo

Tendremos también un pequeño vector asociado a las filas (0 .. 4) donde guardaremos el precio de las entradas en euros (dos decimales) de cada fila. Las entradas de los dos laterales serán siempre un 15% más baratas que las centrales.

Nos piden crear un menú donde se llamen a las siguientes acciones / funciones:

• Llenar automáticamente todo el vector con los precios de las filas.

        Por ejemplo: Fila 0: 60 € Fila 1: 50 € Fila 2: 40 € Fila 3: 35 € Fila 4: 30 €

• Iniciar el teatro -> todas las butacas vacías + los pasillos definidos. Cuidado! No hay mostrarlo por pantalla gráficamente.

• Reservar "n" entradas siempre consecutivas (en la misma fila) y en una misma zona del teatro. El indicaremos, la zona (E, C, D), la fila y la columna inicial, y cuántas entradas hacia la derecha queremos reservar. Si la reserva se puede efectuar, entonces nos devolverá el importe total en euros. Si no se puede dar un error.

• Calcular el precio total de la recaudación del teatro en euros (dos decimales).

• Exportar a archivo de texto (situado siempre en c: \ temp \ teatre.txt) el estado actual de todas las butacas del teatro. Si ya existe el sobreescrito.

• Mostrar gráficamente por pantalla en forma de matriz del estado de las butacas de las tres zonas (Coloque los numeritos de las filas y columnas.) Si un sillón está ocupada -> 'O', si está libre -> 'L ', y si se pasillo ->' P '. Sólo esta pregunta hay que mostrarse gráficamente, en las demás no es necesario.


  1. import java.lang.String;
  2.    import java.lang.Math;
  3.    import cs1.*;
  4.    import java.util.*;
  5.    import java.text.*;
  6.    import java.io.*;
  7.    public class Teatre   {
  8.      
  9.       public static void reservas (int [][] filas, double [][] vector,int columna, int num_entradas, int fila ) {
  10.          double precio=0;
  11.          boolean exit=true;
  12.          for (int i=columna;i<num_entradas+columna; i++){
  13.                
  14.             if (filas[i][0]==0||filas[i][1]==0||filas[i][2]==0||filas[i][3]==0){
  15.                filas[i][fila]=1;
  16.                precio = vector[i][fila]*num_entradas;
  17.             }
  18.             else {
  19.                exit=false;
  20.                System.out.println("Error, la columna numero "+i+" introduida esta ocupada, reserva tus entradas en otras columnas o filas");
  21.                for (int j=columna;j<num_entradas+columna; j++){
  22.                   filas[j][fila]=0;
  23.                
  24.                }
  25.             }
  26.          }
  27.          if (exit==true){
  28.             DecimalFormat dc = new DecimalFormat("#.##");
  29.             System.out.println("El precio en total por la reserva es: "+dc.format(precio)+"€");}
  30.      
  31.      
  32.       }
  33.        
  34.       public static String mostrar_graficament (int [][] filas, int num_fila, int num_fila_syst, int i ) {
  35.                
  36.          String fila="";
  37.          if (filas[i][num_fila]==0) {
  38.             fila=fila+"\nFila "+num_fila_syst+" - Butaca "+(i+1)+": L";
  39.                
  40.          }
  41.          else   if (filas[i][num_fila]==1) {
  42.             fila=fila+"\nFila "+num_fila_syst+" - Butaca "+(i+1)+": O";
  43.                
  44.          }
  45.          else if (filas[i][num_fila]==2) {
  46.             fila=fila+"\nFila "+num_fila_syst+" - Butaca "+(i+1)+": P";
  47.                        
  48.          }
  49.          return fila;
  50.      
  51.       }
  52.        
  53.    
  54.        
  55.        
  56.        
  57.       public static void Editar_Texto(int [][] filas, String arxiu){
  58.      
  59.          try {
  60.             BufferedWriter bw = new BufferedWriter(new FileWriter(arxiu,false));
  61.             for (int i=0; i<21; i++) {
  62.                bw.append(mostrar_graficament(filas,0,1,i)+System.getProperty("line.separator")+mostrar_graficament(filas,1,2,i)+System.getProperty("line.separator")+
  63.                   mostrar_graficament(filas,2,3,i)+System.getProperty("line.separator")+mostrar_graficament(filas,3,4,i));
  64.                bw.newLine();
  65.            
  66.                          
  67.             }System.out.println("El fixer de resultats s'ha creat a c:\\temp\\resultats.txt");
  68.             bw.close();
  69.          }
  70.             catch (IOException e) {System.out.print("Error al escribir!");}
  71.       }
  72.    
  73.        
  74.       public static void main(String args[])
  75.       {
  76.      
  77.          double [][] vector = new double [21][4];
  78.          int [][] filas = new int [21][4];
  79.          boolean blnexit=false;
  80.        
  81.        
  82.      
  83.          while(blnexit==false){
  84.          
  85.             int opcion=0;
  86.             double fila1=0, fila2=0, fila3=0, fila4=0;
  87.             System.out.println();
  88.             System.out.println ("Menu *************************");
  89.             System.out.println ("1) Omplir");
  90.             System.out.println ("2) Inicialitzar");
  91.             System.out.println ("3) Reservar");
  92.             System.out.println ("4) Calcular");
  93.             System.out.println ("5) Exportar a fitxer de text");
  94.             System.out.println ("6) Mostrar Gràficament");
  95.             System.out.println ("0) Sortir                   *");
  96.             System.out.println ("******************************");
  97.          
  98.             opcion=Keyboard.readInt();
  99.          
  100.             switch (opcion) {
  101.                case 1:
  102.                   System.out.print("Introdueix el preu de la fila 1: ");
  103.                   fila1 = Keyboard.readInt();
  104.                   System.out.print("Introdueix el preu de la fila 2: ");
  105.                   fila2 = Keyboard.readInt();
  106.                   System.out.print("Introdueix el preu de la fila 3: ");
  107.                   fila3 = Keyboard.readInt();
  108.                   System.out.print("Introdueix el preu de la fila 4: ");
  109.                   fila4 = Keyboard.readInt();
  110.                   for (int i=0; i<21; i++) {
  111.                      if (i<=4||i>=17){
  112.                         vector[i][0]=fila1*0.15;
  113.                         vector[i][0]=fila1*0.15;
  114.                         vector[i][1]=fila2*0.15;
  115.                         vector[i][2]=fila3*0.15;
  116.                         vector[i][3]=fila4*0.15;
  117.                      }
  118.                      else if (i>=6 && i<=15) {
  119.                        
  120.                         vector[i][0]=fila1;
  121.                         vector[i][1]=fila2;
  122.                         vector[i][2]=fila3;
  123.                         vector[i][3]=fila4;
  124.                      }
  125.                      else if (i==5||i==16) {
  126.                         vector[i][0]=0;
  127.                         vector[i][1]=0;
  128.                         vector[i][2]=0;
  129.                         vector[i][3]=0;
  130.                      }
  131.                  
  132.                   }
  133.                
  134.                   break;
  135.                case 2:
  136.                   for (int i=0; i<21; i++) {
  137.                      if (i==5||i==16) {
  138.                         filas[i][0]=2;
  139.                         filas[i][1]=2;
  140.                         filas[i][2]=2;
  141.                         filas[i][3]=2;
  142.                      }
  143.                      else {
  144.                         filas[i][0]=0;
  145.                         filas[i][1]=0;
  146.                         filas[i][2]=0;
  147.                         filas[i][3]=0;
  148.                      }}
  149.                
  150.                
  151.                   break;
  152.                case 3:
  153.                   int num_entradas, fila, columna;
  154.                
  155.                   boolean salir=true;
  156.                   String zona="";
  157.                   while (salir==true) {
  158.                      System.out.print("Indica la zona on vols reservar E/C/D: ");
  159.                      zona=Keyboard.readString();
  160.                  
  161.                      System.out.print("Indica la fila on vols reservar (1-4): ");
  162.                      fila=Keyboard.readInt();
  163.                      System.out.print("Indica la columna on vols reservar(1-21): ");
  164.                      columna=Keyboard.readInt();
  165.                      System.out.print("Indica el numero d'entrades que vols reservar: ");
  166.                      num_entradas=Keyboard.readInt();
  167.                      zona = zona.toUpperCase();
  168.                      if (fila>4||columna>21) {
  169.                         System.out.println("Error. Los datos introducidos son incorrectos, vuelve a intentarlo\n");
  170.                         fila=1;
  171.                         salir=false;
  172.                      }
  173.                      if (zona.equals("E")|| zona.equals("C")|| zona.equals("D")){
  174.                         switch (zona){
  175.                            case "E":
  176.                               reservas(filas,vector, columna, num_entradas, fila);          
  177.                            
  178.                               break;
  179.                            case "C":
  180.                               reservas(filas,vector, columna, num_entradas, fila);
  181.                            
  182.                               break;
  183.                            case "D":
  184.                               reservas(filas,vector, columna, num_entradas, fila);
  185.                               break;
  186.                         }
  187.                      }
  188.                      else {
  189.                         System.out.println("La zona introducida no es correcta, vuelve a intentarlo");
  190.                         salir=false;
  191.                      
  192.                      
  193.                      }}
  194.                  
  195.                   break;
  196.                case 4:
  197.                   int e=0, c=0, d=0;
  198.                   double precio_total=0;
  199.                   for (int i=0; i<21;i++){
  200.                  
  201.                      if (filas[i][0]==1||filas[i][1]==1||filas[i][2]==1||filas[i][3]==1
  202.                                 &&i<=4){
  203.                         e++;
  204.                      }
  205.                      else if(filas[i][0]==1||filas[i][1]==1||filas[i][2]==1||filas[i][3]==1
  206.                                 &&i<=15&&i>=6){
  207.                         c++;
  208.                      }
  209.                      else if(filas[i][0]==1||filas[i][1]==1||filas[i][2]==1||filas[i][3]==1
  210.                                 &&i>=17) {
  211.                         d++;
  212.                      }
  213.                   }
  214.                   precio_total = ((e*vector[1][0])+(c*vector[8][0])+(d*vector[18][0]));
  215.                   DecimalFormat df = new DecimalFormat("#.##");
  216.                   System.out.println("El preu total de recaptació es de "+df.format(precio_total)+"€");
  217.                   break;
  218.                case 5:
  219.                
  220.                   Editar_Texto(filas,"c:\\temp\\resultats.txt");
  221.                
  222.                   break;
  223.                case 6:
  224.                   for (int i=0; i<21; i++) {
  225.                      System.out.println(mostrar_graficament(filas,0,1,i));
  226.                      System.out.println(mostrar_graficament(filas,1,2,i));
  227.                      System.out.println(mostrar_graficament(filas,2,3,i));
  228.                      System.out.println(mostrar_graficament(filas,3,4,i));
  229.                  
  230.                   }
  231.                   break;
  232.                case 0:
  233.                   blnexit=true;
  234.                   break;
  235.             }}
  236.       }}

No hay comentarios:

Publicar un comentario