import java.util.ArrayList;
import java.util.Scanner;
public class CaleucheAir {
private static ArrayList<Pasajero> pasajeros = new ArrayList<Pasajero>();
private static ArrayList<Pasaje> pasajes = new ArrayList<Pasaje>(20);
private static ArrayList<Integer> asientosDisponibles;
private static Scanner teclado = new Scanner(System.in);
public static void main(String[] args) {
inicializarAsientos();
int opcion = 0;
while (opcion != 4) {
mostrarMenu();
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
crearPasajero();
break;
case 2:
venderPasaje();
break;
case 3:
listarPasajes();
break;
case 4:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("Opcion invalida");
}
}
}
/**
* Muestra en pantalla el menú de opciones de la aerolínea
*/
private static void mostrarMenu() {
System.out.println("\n\t\tAEROLINEA CALEUCHEAIR");
System.out.println("\t\t--------- -----------");
System.out.println("[1] -- Crear Pasajero");
System.out.println("[2] -- Vender Pasaje");
System.out.println("[3] -- Listar Pasajes vendidos");
System.out.println("[4] -- Terminar programa");
System.out.print("Elija opcion: ");
}
/**
* Solicita los datos necesarios para crear un Pasajero
* y lo registra, excepto si ya existe el mismo RUT en el registro.
* @return Pasajero que se ha creado
*/
private static Pasajero crearPasajero() {
System.out.println("\n\tDATOS PASAJERO");
System.out.print("RUT: ");
String rut = pedirDato();
System.out.print("Nombre: ");
String nombre = pedirDato();
System.out.print("Apellido: ");
String apellido = pedirDato();
System.out.print("Edad: ");
int edad = Integer.parseInt(pedirDato());
Pasajero creado = new Pasajero(rut, nombre, apellido, edad);
if (pasajeros.contains(creado)) {
System.out.println("Ya existe un Pasajero con este RUT.\nImposible registrar otro.");
return null;
}
else {
pasajeros.add(creado);
System.out.println("Pasajero registrado.");
return creado;
}
}
/**
* Permite elegir un pasajero de entre los que hay registrados.
* @return Pasajero escogido.
*/
private static Pasajero elegirPasajero() {
Pasajero buscar = null;
System.out.println("Pasajeros registrados:");
for (Pasajero pas: pasajeros)
System.out.print("\n-> " + pas);
System.out.println("\nSeleccione pasajero indicando su RUT");
while (buscar == null) {
System.out.print("RUT: ");
String rut = pedirDato();
for (Pasajero pas: pasajeros)
if (pas.getRut().equals(rut))
buscar = pas;
if (buscar == null)
System.out.println("No se ha encontrado pasajero con ese RUT\n");
}
return buscar;
}
/**
* Solicita los datos necesarios para crea un Pasaje
* y lo retorna.
* @return El pasaje creado
*/
private static void venderPasaje() {
System.out.println("\n\n\t\tVENDER PASAJE");
System.out.println("\t\t------ ------");
if (asientosDisponibles.isEmpty())
System.out.println("No quedan pasajes disponibles.\nEl avion esta lleno.");
else {
Pasajero pasajero = null;
if (pasajeros.isEmpty()) {
System.out.println("No hay registros de Pasajeros\nProceda a registrar uno");
pasajero = crearPasajero();
}
else
pasajero = elegirPasajero();
int asiento = pedirAsiento();
System.out.print("Destino: ");
String destino = pedirDato();
boolean equipaje = preguntarEquipaje();
//Valor depende de si se han vendido ya los 8 primeros asientos.
int valor;
if (pasajes.size() < 8)
valor = 35990;
else
valor = 25990;
//Tenemos los datos para crear un Pasaje
Pasaje pasajeVendido = new Pasaje(asiento, destino, valor, pasajero, equipaje);
System.out.println("\nDatos del pasaje vendido:");
System.out.println("Pasajero: " + pasajeVendido.getPasajero().getNombre() + " "
+ pasajeVendido.getPasajero().getApellido());
System.out.println("Asiento: " + pasajeVendido.getNumAsiento());
System.out.println("Destino: " + pasajeVendido.getDestino());
System.out.println("Equipaje: " + (pasajeVendido.conEquipaje()?"Si":"No"));
System.out.println("Valor: " + pasajeVendido.getValor());
pasajes.add(pasajeVendido);
}
}
private static void listarPasajes() {
System.out.println("\n\n\t\tPASAJES VENDIDOS");
System.out.println("\t\t------- --------");
if (pasajes.isEmpty())
System.out.println("No hay ventas registradas");
else {
for (Pasaje pas: pasajes) {
System.out.println("\n\t***************************");
System.out.println(pas);
System.out.println("\t***************************");
}
}
}
/**
* Repite la solicitud de un dato hasta comprobar que
* el usuario ha proporcionado algo que no sea un campo vacío
* o espacios en blanco
* @return El dato introducido
*/
private static String pedirDato() {
String dato = "";
while (dato.isBlank()) {
dato = teclado.nextLine();
}
return dato;
}
/**
* Solicita un nº de asiento y se asegura de que la
* elección sea un asiento realmente disponible
* @return El nº de asiento escogido
*/
private static int pedirAsiento() {
int asiento = 0;
System.out.println("\nAsientos disponibles:");
for (int num: asientosDisponibles)
System.out.print(num + " ");
while (asiento == 0) {
System.out.print("\nElija asiento: ");
Integer elegido = Integer.parseInt(pedirDato());
if (asientosDisponibles.contains(elegido)) {
asientosDisponibles.remove(elegido); //Asiento deja de estar disponible
asiento = elegido;
}
else
System.out.println("Numero de asiento no disponible\n");
}
return asiento;
}
/**
* Pregunta si el pasajero viajará con equipaje
* y se asegura que se da una respuesta válida
* @return Verdadero o Falso que viaja con equipaje.
*/
private static boolean preguntarEquipaje() {
char equipaje = ' ';
while (equipaje == ' ') {
System.out.print("Viaja con equipaje(S/N): ");
String respuesta = pedirDato();
char letra = respuesta.toUpperCase().charAt(0);
if (letra != 'S' && letra != 'N')
System.out.println("Solo responda SI o NO");
else
equipaje = letra;
}
if (equipaje == 'S')
return true;
else
return false;
}
/**
* Inicializa el ArrayList de asientos disponibles
* numerándolos del 1 al 20
*/
private static void inicializarAsientos() {
asientosDisponibles = new ArrayList<Integer>(20);
for (int i = 1; i <= 20; i++)
asientosDisponibles.add(i);
}
}