Julia Martínez Reyes

Main

package proyecto;

import javax.swing.JOptionPane;

public class Main {
    //establecer la matriz de los asientos
    private static int[][] matriz = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };

    public static void main(String[] args) {
        //crear pasajeros
        Pasajero[] pasajeros = new Pasajero[18];

        //seleccionar el vuelo
        int vuelo = Integer.parseInt(JOptionPane.showInputDialog(
                "Selecciona el vuelo que deseas reservar:\\n" + "1. Bogotá-Medellín\\n" + "2. Medellín-Bogotá"));
        int clase;
        
        switch (vuelo) {
            case 1:
                   //seleccionar clase
                  clase = Integer.parseInt(JOptionPane.showInputDialog(
                        "Selecciona la clase en la que deseas viajar:\\n" + "1. Primera Clase\\n" + "2. Clase Económica"));
                //verificar si hay asientos disponibles en la clase
                if (clase == 1 && !DisponiblesPClase()) {
                    JOptionPane.showMessageDialog(null, "No hay asientos disponibles en la primera clase.");
                    int respuesta = JOptionPane.showConfirmDialog(null, "¿Deseas ser ubicado en la clase económica?", "Confirmación", JOptionPane.YES_NO_OPTION);
                    if (respuesta == JOptionPane.YES_OPTION) {
                        clase = 2;
                    } else {
                        JOptionPane.showMessageDialog(null, "El próximo vuelo disponible es dentro de 9 horas.");
                        return;
                    }
                } else if (clase == 2 && !DisponiblesEconómica() && !DisponiblesEconómica()) {
                    JOptionPane.showMessageDialog(null, "No hay asientos disponibles en la clase económica.");
                    int respuesta = JOptionPane.showConfirmDialog(null, "¿Deseas ser ubicado en la primera clase?", "Confirmación", JOptionPane.YES_NO_OPTION);
                    if (respuesta == JOptionPane.YES_OPTION) {
                        clase = 1;
                    } else {
                        JOptionPane.showMessageDialog(null, "El próximo vuelo disponible es dentro de 9 horas.");
                        return;
                    }
                }
               //switch para decirle al usuario cuales asientos puede escoger depediendo de la clase
                switch (clase) {
                    case 1:
                        JOptionPane.showMessageDialog(null, "Escoge tu asiento en la primera fila");
                        break;
                    case 2:
                        JOptionPane.showMessageDialog(null, "Escoge tu asiento en la segunda o tercera fila");
                        break;
                }
                //llamar metodo para escoger asiento
                EscogerAsiento(pasajeros, vuelo);
                break;
            
            //mismo código que el primer vuelo
            case 2:
                clase = Integer.parseInt(JOptionPane.showInputDialog(
                        "Selecciona la clase en la que deseas viajar:\\n" + "1. Primera Clase\\n" + "2. Clase Económica"))
                if (clase == 1 && !DisponiblesPClase()) {
                    JOptionPane.showMessageDialog(null, "No hay asientos disponibles en la primera clase.");
                    int respuesta = JOptionPane.showConfirmDialog(null, "¿Deseas ser ubicado en la clase económica?", "Confirmación", JOptionPane.YES_NO_OPTION);
                    if (respuesta == JOptionPane.YES_OPTION) {
                        clase = 2;
                    } else {
                        JOptionPane.showMessageDialog(null, "El próximo vuelo disponible es dentro de 9 horas.");
                        return;
                    }
                } else if (clase == 2 && !DisponiblesEconómica() && !DisponiblesEconómica()) {
                    JOptionPane.showMessageDialog(null, "No hay asientos disponibles en la clase económica.");
                    int respuesta = JOptionPane.showConfirmDialog(null, "¿Deseas ser ubicado en la primera clase?", "Confirmación", JOptionPane.YES_NO_OPTION);
                    if (respuesta == JOptionPane.YES_OPTION) {
                        clase = 1;
                    } else {
                        JOptionPane.showMessageDialog(null, "El próximo vuelo disponible es dentro de 9 horas.");
                        return;
                    }
                }
                switch (clase) {
                    case 1:
                        JOptionPane.showMessageDialog(null, "Escoge tu asiento en la primera fila");
                        break;
                    case 2:
                        JOptionPane.showMessageDialog(null, "Escoge tu asiento en la segunda o tercera fila");
                        break;
                }
                EscogerAsiento(pasajeros, vuelo);
                break;
        }
    }

    //verificar asientos disponibles en la primera clase
    private static boolean DisponiblesPClase() {
        // Verificar solo la primera fila de la matriz (fila 0)
        for (int j = 0; j < matriz[0].length; j++) {
            if (matriz[0][j] == 0) {
                return true;
            }
        }
        return false;
    }
    
    //verificar asientos disponibles en la clase económica
    private static boolean DisponiblesEconómica() {
        // Verificar las filas 1 y 2 de la matriz (segunda y tercera fila)
        for (int i = 1; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                if (matriz[i][j] == 0) {
                    return true;
                }
            }
        }
        return false;
    }
    
    //método para escoger asientos
    private static void EscogerAsiento(Pasajero[] pasajeros, int vuelo) {
        //imprimir matriz pra mostrar asientos disponibles
        System.out.println("Los asientos disponibles son:");
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                System.out.print(matriz[i][j] + " ");
            }
            System.out.println();
        }

        // función para escoger el asiento
        String entrada = JOptionPane
                .showInputDialog("Escoge tu asiento (nombra fila y columna separadas por un espacio)");
        String[] coordenadas = entrada.split(" ");
        int fila = Integer.parseInt(coordenadas[0]) - 1; // Restar 1 para cambiar de 1-based a 0-based
        int columna = Integer.parseInt(coordenadas[1]) - 1; // Restar 1 para cambiar de 1-based a 0-based

        // Verificar si el asiento está ocupado
        while (matriz[fila][columna] == 1) {
            JOptionPane.showMessageDialog(null, "El asiento ya está ocupado. Por favor, selecciona otro asiento.");
            entrada = JOptionPane.showInputDialog("Escoge tu asiento (nombra fila y columna separadas por un espacio)");
            coordenadas = entrada.split(" ");
            fila = Integer.parseInt(coordenadas[0]) - 1; // Restar 1 para cambiar de 1-based a 0-based
            columna = Integer.parseInt(coordenadas[1]) - 1; // Restar 1 para cambiar de 1-based a 0-based
        }

        // Crear un objeto Asiento con la fila y columna escogidas
        Asiento asientoEscogido = new Asiento(fila, columna);

        // Guardar el asiento escogido en el objeto Pasajero correspondiente
        pasajeros[vuelo - 1] = new Pasajero();
        pasajeros[vuelo - 1].setAsiento(asientoEscogido);

        // Cambiar el valor de la matriz en la posición elegida de 0 a 1
        matriz[fila][columna] = 1; // Actualizar la matriz con el asiento seleccionado

        // Mostrar la matriz actualizada
        System.out.println("El asiento escogido es:");
        imprimirMatriz(matriz);

        // Pedir al usuario que ingrese su nombre
        String nombre = JOptionPane.showInputDialog("Ingresa tu nombre");
        pasajeros[vuelo - 1].setNombre(nombre);

        // Preguntar al usuario si desea escoger otro asiento
        int respuesta = JOptionPane.showConfirmDialog(null, "¿Deseas escoger otro asiento?", "Confirmación", JOptionPane.YES_NO_OPTION);
        if (respuesta == JOptionPane.YES_OPTION) {
            EscogerAsiento(pasajeros, vuelo);
        } else {
          
          //compra de tiquetes
            int comprar = JOptionPane.showConfirmDialog(null, "¿Deseas comprar ese/esos asiento/s?", "Confirmación", JOptionPane.YES_NO_OPTION);
            if (comprar == JOptionPane.YES_OPTION) {
                JOptionPane.showMessageDialog(null, "Realizando la transacción...");
                JOptionPane.showMessageDialog(null, "¡Tus tiquetes han sido comprados!\\n" + "Ten un buen viaje");
            } else {
                JOptionPane.showMessageDialog(null, "Transacción cancelada");
                return; // Salir de la función si la transacción es cancelada
            }
        }
    }

    // método para imprimir la matriz
    private static void imprimirMatriz(int[][] matriz) {
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz[i].length; j++) {
                System.out.print(matriz[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Pasajero

package proyecto;
public class Pasajero {

	//atributos
	private String nombre;
  private Asiento asiento;

// constructores para inicializar
  public Pasajero() {
        this.nombre = "";
        this.asiento = new Asiento();
    }

    public Pasajero(String nombre, Asiento asiento) {
        this.nombre = nombre;
        this.asiento = asiento;
    }

//getters y setters
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Asiento getAsiento() {
        return asiento;
    }

    public void setAsiento(Asiento asiento) {
        this.asiento = asiento;
    }
}

Asiento

package proyecto;

public class Asiento {

//atributos
	private int fila;
    private int columna;
    private int[][] matriz;

//constructor

    public Asiento(int fila, int columna) {
        this.fila = fila;
        this.columna = columna;
        this.matriz = new int[3][3];
    }

//getters y setters
    public int getFila() {
        return fila;
    }

    public void setFila(int fila) {
        this.fila = fila;
    }

    public int getColumna() {
        return columna;
    }

    public void setColumna(int columna) {
        this.columna = columna;
    }

    public int[][] getMatriz() {
        return matriz;
    }

    public void setMatriz(int[][] matriz) {
        this.matriz = matriz;
    }
}