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.
- import java.lang.String;
- import java.lang.Math;
- import cs1.*;
- import java.util.*;
- import java.text.*;
- import java.io.*;
- public class Teatre {
- public static void reservas (int [][] filas, double [][] vector,int columna, int num_entradas, int fila ) {
- double precio=0;
- boolean exit=true;
- for (int i=columna;i<num_entradas+columna; i++){
- if (filas[i][0]==0||filas[i][1]==0||filas[i][2]==0||filas[i][3]==0){
- filas[i][fila]=1;
- precio = vector[i][fila]*num_entradas;
- }
- else {
- exit=false;
- System.out.println("Error, la columna numero "+i+" introduida esta ocupada, reserva tus entradas en otras columnas o filas");
- for (int j=columna;j<num_entradas+columna; j++){
- filas[j][fila]=0;
- }
- }
- }
- if (exit==true){
- DecimalFormat dc = new DecimalFormat("#.##");
- System.out.println("El precio en total por la reserva es: "+dc.format(precio)+"€");}
- }
- public static String mostrar_graficament (int [][] filas, int num_fila, int num_fila_syst, int i ) {
- String fila="";
- if (filas[i][num_fila]==0) {
- fila=fila+"\nFila "+num_fila_syst+" - Butaca "+(i+1)+": L";
- }
- else if (filas[i][num_fila]==1) {
- fila=fila+"\nFila "+num_fila_syst+" - Butaca "+(i+1)+": O";
- }
- else if (filas[i][num_fila]==2) {
- fila=fila+"\nFila "+num_fila_syst+" - Butaca "+(i+1)+": P";
- }
- return fila;
- }
- public static void Editar_Texto(int [][] filas, String arxiu){
- try {
- BufferedWriter bw = new BufferedWriter(new FileWriter(arxiu,false));
- for (int i=0; i<21; i++) {
- bw.append(mostrar_graficament(filas,0,1,i)+System.getProperty("line.separator")+mostrar_graficament(filas,1,2,i)+System.getProperty("line.separator")+
- mostrar_graficament(filas,2,3,i)+System.getProperty("line.separator")+mostrar_graficament(filas,3,4,i));
- bw.newLine();
- }System.out.println("El fixer de resultats s'ha creat a c:\\temp\\resultats.txt");
- bw.close();
- }
- catch (IOException e) {System.out.print("Error al escribir!");}
- }
- public static void main(String args[])
- {
- double [][] vector = new double [21][4];
- int [][] filas = new int [21][4];
- boolean blnexit=false;
- while(blnexit==false){
- int opcion=0;
- double fila1=0, fila2=0, fila3=0, fila4=0;
- System.out.println();
- System.out.println ("Menu *************************");
- System.out.println ("1) Omplir");
- System.out.println ("2) Inicialitzar");
- System.out.println ("3) Reservar");
- System.out.println ("4) Calcular");
- System.out.println ("5) Exportar a fitxer de text");
- System.out.println ("6) Mostrar Gràficament");
- System.out.println ("0) Sortir *");
- System.out.println ("******************************");
- opcion=Keyboard.readInt();
- switch (opcion) {
- case 1:
- System.out.print("Introdueix el preu de la fila 1: ");
- fila1 = Keyboard.readInt();
- System.out.print("Introdueix el preu de la fila 2: ");
- fila2 = Keyboard.readInt();
- System.out.print("Introdueix el preu de la fila 3: ");
- fila3 = Keyboard.readInt();
- System.out.print("Introdueix el preu de la fila 4: ");
- fila4 = Keyboard.readInt();
- for (int i=0; i<21; i++) {
- if (i<=4||i>=17){
- vector[i][0]=fila1*0.15;
- vector[i][0]=fila1*0.15;
- vector[i][1]=fila2*0.15;
- vector[i][2]=fila3*0.15;
- vector[i][3]=fila4*0.15;
- }
- else if (i>=6 && i<=15) {
- vector[i][0]=fila1;
- vector[i][1]=fila2;
- vector[i][2]=fila3;
- vector[i][3]=fila4;
- }
- else if (i==5||i==16) {
- vector[i][0]=0;
- vector[i][1]=0;
- vector[i][2]=0;
- vector[i][3]=0;
- }
- }
- break;
- case 2:
- for (int i=0; i<21; i++) {
- if (i==5||i==16) {
- filas[i][0]=2;
- filas[i][1]=2;
- filas[i][2]=2;
- filas[i][3]=2;
- }
- else {
- filas[i][0]=0;
- filas[i][1]=0;
- filas[i][2]=0;
- filas[i][3]=0;
- }}
- break;
- case 3:
- int num_entradas, fila, columna;
- boolean salir=true;
- String zona="";
- while (salir==true) {
- System.out.print("Indica la zona on vols reservar E/C/D: ");
- zona=Keyboard.readString();
- System.out.print("Indica la fila on vols reservar (1-4): ");
- fila=Keyboard.readInt();
- System.out.print("Indica la columna on vols reservar(1-21): ");
- columna=Keyboard.readInt();
- System.out.print("Indica el numero d'entrades que vols reservar: ");
- num_entradas=Keyboard.readInt();
- zona = zona.toUpperCase();
- if (fila>4||columna>21) {
- System.out.println("Error. Los datos introducidos son incorrectos, vuelve a intentarlo\n");
- fila=1;
- salir=false;
- }
- if (zona.equals("E")|| zona.equals("C")|| zona.equals("D")){
- switch (zona){
- case "E":
- reservas(filas,vector, columna, num_entradas, fila);
- break;
- case "C":
- reservas(filas,vector, columna, num_entradas, fila);
- break;
- case "D":
- reservas(filas,vector, columna, num_entradas, fila);
- break;
- }
- }
- else {
- System.out.println("La zona introducida no es correcta, vuelve a intentarlo");
- salir=false;
- }}
- break;
- case 4:
- int e=0, c=0, d=0;
- double precio_total=0;
- for (int i=0; i<21;i++){
- if (filas[i][0]==1||filas[i][1]==1||filas[i][2]==1||filas[i][3]==1
- &&i<=4){
- e++;
- }
- else if(filas[i][0]==1||filas[i][1]==1||filas[i][2]==1||filas[i][3]==1
- &&i<=15&&i>=6){
- c++;
- }
- else if(filas[i][0]==1||filas[i][1]==1||filas[i][2]==1||filas[i][3]==1
- &&i>=17) {
- d++;
- }
- }
- precio_total = ((e*vector[1][0])+(c*vector[8][0])+(d*vector[18][0]));
- DecimalFormat df = new DecimalFormat("#.##");
- System.out.println("El preu total de recaptació es de "+df.format(precio_total)+"€");
- break;
- case 5:
- Editar_Texto(filas,"c:\\temp\\resultats.txt");
- break;
- case 6:
- for (int i=0; i<21; i++) {
- System.out.println(mostrar_graficament(filas,0,1,i));
- System.out.println(mostrar_graficament(filas,1,2,i));
- System.out.println(mostrar_graficament(filas,2,3,i));
- System.out.println(mostrar_graficament(filas,3,4,i));
- }
- break;
- case 0:
- blnexit=true;
- break;
- }}
- }}
No hay comentarios:
Publicar un comentario