Está en la página 1de 19

AirUPM

Tu aerolínea universitaria de confianza

Proyecto de Programación: Desarrollo de AirUPM

Taller de Programación 2022-2023


Universidad Politécnica de Madrid
E.T.S. de Ingeniería en Sistemas Informáticos
Departamento de Sistemas Informáticos
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

1.Objetivos de la práctica
El desarrollo de esta práctica pretende que el alumnado aplique la mayoría de los conceptos
fundamentales de programación mediante la implementación de un proyecto de programación para
la asignatura Taller de Programación (TP). En concreto, el alumnado aplicará conceptos de:

• Manejo de Entrada y Salida


• Estructuras de control
• Manejo de Funciones
• Clases y Objetos
• Vectores y Matrices
• Manejo de Ficheros

Para ello, el alumnado desarrollará de forma grupal (por parejas) un proyecto de programación en
lenguaje Java mediante el uso del entorno de programación IntelliJ IDEA, el cual proporciona las
herramientas necesarias para el desarrollo, pruebas, documentación y depuración de código fuente
en Java.

2. Caso de estudio
La Universidad Politécnica de Madrid (UPM) ha decidido crear una aerolínea propia que permita tanto
a sus alumnos como al Personal Docente e Investigador (PDI) y al Personal de Administración y
Servicios (PAS) adquirir billetes de vuelos gestionados por la propia UPM. Para poder gestionar dicha
aerolínea, se ha decidido crear una aplicación de escritorio (AirUPM App) que permitirá a los gestores
encargados de mantener el sistema dar de alta vuelos y pasajeros, así como adquirir billetes de vuelo
para los pasajeros, generar facturas y listas de pasajeros. La UPM ha decidido encargar el desarrollo
de la aplicación AirUPM App a los alumnos de la asignatura Taller de Programación (TP) de la Escuela
Técnica Superior de Ingeniería de Sistemas Informáticos (ETSISI). Las componentes y funcionalidades
de esta herramienta se describen a continuación.

Componentes
2.1. Componente Aeropuertos
AirUPM ofrece servicios en un conjunto específico de aeropuertos. Para cada Aeropuerto se dispone
de los siguientes datos:

• Nombre del Aeropuerto.


• Código IATA del Aeropuerto (3 letras).
• Coordenadas, expresadas mediante latitud y longitud (expresados en grados).
• Número de terminales del Aeropuerto.

La lista de todos los aeropuertos gestionados por AirUPM se encuentran en un fichero .csv desde el
cual deberán ser cargados en la aplicación.

2.2. Componente Aviones


AirUPM dispone de una flota de aviones para poder ofrecer sus servicios aéreos. Para cada Avión se
dispone de los siguientes datos:

• Marca del Avión.


• Modelo del Avión.
• Matrícula del Avión.
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

• Número de filas y de columnas del Avión.


• Alcance máximo del Avión (en km). Los aviones NO podrán realizar vuelos entre Aeropuertos
cuya distancia supere el alcance del avión. Para calcular la distancia entre dos Aeropuertos se
hará uso de la trigonometría esférica, mediante la siguiente fórmula:
𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷𝐷(𝐴𝐴, 𝐵𝐵) = 𝑎𝑎𝑎𝑎𝑎𝑎 𝑐𝑐𝑐𝑐𝑐𝑐(sin 𝜙𝜙𝐴𝐴 × sin 𝜙𝜙𝐵𝐵 + cos 𝜙𝜙𝐴𝐴 × cos 𝜙𝜙𝐵𝐵 × cos(𝜆𝜆𝐴𝐴 − 𝜆𝜆𝐵𝐵 )) × 𝑅𝑅

donde R es el radio de la tierra, el cual se deberá aproximar como 6378, mientras que A y B
son los aeropuertos entre los que se calcula la distancia con 𝝓𝝓 la latitud en radianes y 𝝀𝝀 la
longitud en radianes de los respectivos aeropuertos. Por ejemplo, la distancia entre el
aeropuerto de Madrid-Barajas (40.4927751 -3.5778;4) y el de Barcelona-El Prat (41.289182
2.0746423) es aproximadamente 483.7557 km.

La lista de todos los aviones disponibles de AirUPM se encuentran en un fichero .csv desde el cual
deberán ser cargados en la aplicación.

2.3. Componente Vuelos


Los gestores de AirUPM podrán crear nuevos Vuelos. Para cada Vuelo se deberán definir los
siguientes datos:

• ID del Vuelo. Este consistirá en una cadena de 6 caracteres, de los cuales los dos primeros
serán ‘PM’ y los 4 siguientes serán dígitos aleatorios. Cada Vuelo debe tener un ID único (por
ejemplo, no puede haber dos Vuelos con el ID PM1234).
• Avión que se emplea en dicho Vuelo.
• Aeropuerto de origen del Vuelo.
• Terminal del aeropuerto origen.
• Fecha de salida del Vuelo.
• Aeropuerto de destino del Vuelo.
• Terminal del aeropuerto destino.
• Fecha de llegada del Vuelo.
• Precio base de un billete para dicho Vuelo.
• Matriz de asientos del Vuelo, indicando para cada fila y columna si el asiento está libre u
ocupado.
• Lista de billetes comprados para dicho Vuelo, limitada por el número de asientos del avión.

Al comienzo de la aplicación, se podrá cargar una lista de vuelos previamente creados en AirUPM, los
cuales se encuentran en un fichero .csv desde el cual deberán ser cargados en la aplicación. La
aplicación deberá mantener una lista de vuelos, la cual se podrá ampliar con nuevos vuelos hasta
cierto límite definido al comienzo de la aplicación.

2.4. Componente Pasajeros


Todo personal de la UPM podrá registrarse en la aplicación como Pasajero, lo cual le permitirá
posteriormente obtener billetes para vuelos. Para ello, deberán proporcionar los siguientes datos:

• Nombre.
• Apellidos.
• DNI. Deberá estar compuesto por 8 dígitos (como máximo) y una letra. Para que un DNI sea
correcto, se debe calcular el resto de la división de este número (de 8 dígitos) entre 23. La
letra del DNI debe corresponderse con la posición indicada en la siguiente tabla según el resto
obtenido. Por ejemplo, el DNI 12345678Z es correcto, pues el resto de 12345678 entre 23 es
14, que se corresponde en la tabla con la letra Z.
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

RESTO 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
LETRA T R W A G M Y F P D X B N J Z S Q V H L C K E

• Correo electrónico de la UPM. Debe acabar en @upm.es o en @alumnos.upm.es, y estar


compuesto únicamente por caracteres alfabéticos y el carácter punto ‘.’ entre estos (no
pudiendo por tanto estar al principio del correo ni justo delante de la @). Por ejemplo, el
correo cristian.ramirez@upm.es es válido, mientras que cristian.ramirez@gmail.com o
cristian-23@upm.es no lo son.
• Lista de billetes comprados por dicho Pasajero. La cantidad de billetes máxima por Pasajero
será establecida al comienzo de la aplicación.

La aplicación denegará el registro en aquellos casos en los que el usuario ya esté registrado en la
aplicación, ya que un usuario solamente se puede registrar una vez. Esto se comprobará mediante el
DNI y el correo electrónico, no permitiendo el registro de dos usuarios con el mismo DNI, ni de dos
usuarios con el mismo correo electrónico de la UPM.

Al comienzo de la aplicación, se podrá cargar una lista de pasajeros previamente registrados en


AirUPM, los cuales se encuentran en un fichero .csv desde el cual deberán ser cargados en la
aplicación. La aplicación deberá mantener una lista de pasajeros, la cual se podrá ampliar con nuevos
registros de pasajeros hasta cierto límite definido al principio de la aplicación.

2.5. Componente Billetes


Todo pasajero podrá comprar un Billete por Vuelo. Todo Billete está compuesto por los siguientes
datos:

• Localizador del Billete. Este consistirá en una cadena de 10 caracteres, de los cuales los seis
primeros será el ID del vuelo asociado y los 4 siguientes serán letras mayúsculas aleatorias.
Cada Localizador debe ser único (por ejemplo, no puede haber dos Billetes con el Localizador
PM1234ABCD).
• Vuelo asociado al Billete.
• Pasajero poseedor del Billete
• Tipo de Billete. Será un valor de tipo enumerado que puede ser clase TURISTA, PREFERENTE
o PRIMERA. Para cualquier Vuelo de AirUPM, se define que los asientos de la primera fila sean
de tipo PRIMERA, los de las filas 2 a 5 de tipo PREFERENTE, y el resto de asientos de tipo
TURISTA.
• Fila y columna del asiento adquirido con el Billete.
• Precio del Billete. Para el Tipo de Billete TURISTA, el precio del Billete será el definido por el
Vuelo. Para el Tipo de Billete PREFERENTE, se aplicará un incremento del 25% al precio base
definido por el Vuelo. Para el Tipo de Billete PRIMERA, se aplicará un incremento del 50% al
precio base definido por el vuelo. Por ejemplo, para un Vuelo con Precio base de 100€, el
billete TURISTA vale 100€, el PREFERENTE 125€ y el PRIMERA 150€.

Al comienzo de la aplicación, se podrá cargar una lista de Billetes previamente comprados en AirUPM,
los cuales se encuentran en un fichero .csv desde el cual deberán ser cargados en la aplicación. Cada
Vuelo deberá mantener su lista de Billetes asociados, al igual que cada Pasajero mantendrá su lista de
Billetes comprados.
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

Funcionalidades
2.6. Funcionalidad Alta Vuelo
AirUPM app tiene la funcionalidad Alta Vuelo, la cual consiste en la creación de un nuevo Vuelo. Se
deberá asegurar que el avión seleccionado tenga un alcance suficiente para realizar el trayecto entre
el aeropuerto origen y el aeropuerto destino, así como las distintas restricciones impuestas para la
creación de un Vuelo.

2.7. Alta Pasajero


AirUPM app tiene la funcionalidad Alta Pasajero, la cual consiste en el registro de un Pasajero. Se
deberá asegurar que los datos introducidos sean correctos y únicos.

2.8. Buscar Vuelo


AirUPM app tiene la funcionalidad Buscar Vuelo, la cual consiste en permitir la búsqueda de un
Vuelo mediante la entrada de los datos de origen, destino y fecha de salida. Se mostrará una sub-
lista de Vuelos que cumplan estas condiciones y se permitirá la selección del Vuelo deseado.

2.9. Comprar Billete


Tras haber seleccionado un Vuelo, la funcionalidad Comprar Billete permite adquirir un Billete para
dicho Vuelo. Primeramente, se mostrarán dos opciones: 1) adquirir el Billete para un Pasajero ya
registrado y 2) adquirir el Billete para un nuevo Pasajero, cuyo registro será ofrecido al momento,
llamando a la funcionalidad Alta Pasajero. Una vez seleccionado el Pasajero, se realizará la Compra
del Billete, para lo cual será necesario seleccionar el Tipo de Billete y el Asiento.

Una sub-funcionalidad asociada a Comprar Billete es Mostrar la Matriz de Asientos de un Vuelo, la


cual deberá representar mediante un esquema los asientos libres y ocupados del Vuelo, así como su
Tipo (TURISTA, PREFERENTE o PRIMERA). A continuación, se muestra un ejemplo de dicho esquema,
con el formato exacto con que deberá imprimirse (cada columna ocupa 3 posiciones, con los
números de fila alineados a la derecha y las letras de columnas centradas):
A B C D E F

1( )(X)( )( )( )( )

2{X}{X}{ }{ }{ }{ }

3{ }{ }{ }{X}{X}{X}

4{ }{ }{ }{ }{ }{ }

5{ }{ }{X}{ }{ }{ }

6[ ][ ][ ][ ][ ][ ]

7[X][X][X][ ][ ][ ]

8[ ][ ][ ][ ][ ][ ]

9[ ][X][ ][ ][ ][X]

10[ ][ ][ ][ ][ ][ ]

En este ejemplo se muestra un vuelo cuyo avión tiene 10 filas y 6 columnas. Los asientos marcados
con una X están ocupados (por ejemplo, el 3E), mientras que el resto están libres. Los paréntesis ( )
indican asientos de tipo PRIMERA, las llaves { } asientos de tipo PREFERENTE y los corchetes [ ]
asientos de tipo TURISTA.
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

2.10. Mostrar Lista de Billetes de un Pasajero


Esta funcionalidad permite la visualización de todos los Billetes adquiridos por un Pasajero. Para ello,
primero se debe seleccionar un Pasajero. En segundo lugar, se muestra (en caso de que haya Billetes
adquiridos) la Lista de Billetes del Pasajero y se permite seleccionar uno de los Billetes. Ejemplo de
como se muestran por pantalla la lista de billetes de un pasajero:
Billete PM1990FGAR para Vuelo PM1990 de CDT T1 (01/11/2022 15:00:00) a MAD T2
(01/11/2022 17:00:00) en asiento 3C (PREFERENTE) por 87,25€

Billete PM8765TRED para Vuelo PM8765 de MAD T4 (05/11/2022 07:35:00) a FRA T2


(05/11/2022 11:05:30) en asiento 8D (TURISTA) por 175,00€

Billete PM2357KIER para Vuelo PM2357 de FRA T2 (15/11/2022 21:27:00) a BCN T3


(16/11/2022 00:15:00) en asiento 10A (TURISTA) por 127,50€

2.11. Generar Factura de Billete


Tras haber seleccionado un Billete, esta funcionalidad permitirá generar una Factura con los datos
del Billete en un fichero de texto especificado por el usuario. A continuación se muestra un ejemplo
del contenido del fichero de texto en el que se ha almacenado una factura:
--------------------------------------------------
--------- Factura del billete PM1990FGAR ---------
--------------------------------------------------
Vuelo: PM1990
Origen: Castellón (CDT) T1
Destino: Adolfo Suarez Madrid - Barajas (MAD) T2
Salida: 01/11/2022 15:00:00
Llegada: 01/11/2022 17:00:00
Pasajero: John Smith, 09235258E, john.smith@upm.es
Tipo de billete: PREFERENTE
Asiento: 3C
Precio: 87,25€

2.12. Cancelar Billete


Tras haber seleccionado un Billete, esta funcionalidad permitirá cancelar dicho Billete, eliminándolo
de las listas de Billetes, tanto del Pasajero como del Vuelo asociado.

2.13. Generar Lista de Pasajeros de un Vuelo


Esta funcionalidad permitirá seleccionar un vuelo y generar una Lista de Pasajeros (en sus
respectivos asientos, con sus respectivos Tipos de Billete) en un fichero de texto especificado por el
usuario. A continuación se muestra un ejemplo de las 12 primeras líneas almacenadas en el fichero
de texto:
--------------------------------------------------
------- Lista de pasajeros en vuelo PM1990 -------
--------------------------------------------------
Asiento Tipo Pasajero
1A
1B PRIMERA John Smith, 09235258E, john.smith@upm.es
1C
1D
1E
1F
2A PREFERENTE Pedro Pablo Alarcón Paredes, 11245346W, pp.alarcon@upm.es
2B PREFERENTE Juan Luis Guerra, 87123524F, jl.guerra@alumnos.upm.es
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

Como se puede apreciar, se debe formatear las columnas para asegurar que estén bien alineadas
todas las filas. Aunque un asiento no haya sido reservado por ningún pasajero, se deberá generar
una línea para dicho asiento en la cual solo se mostrará el asiento sin ninguna información extra.

2.14. Almacenamiento de datos de la aplicación


Esta funcionalidad permitirá inicialmente cargar datos de Aeropuertos, Aviones, Pasajeros, Vuelos y
Billetes y, al cerrar la aplicación, guardar las Listas actualizadas de datos en ficheros .csv.

3. Instrucciones para el desarrollo del Proyecto


El proyecto de programación debe realizarse teniendo en cuenta la siguiente normativa:
• Se entrega un esqueleto de código (Skeleton.zip) para cada una de las clases obligatorias
que deberá tener el proyecto. Estas clases contienen únicamente la componente pública no
desarrollada (métodos públicos de cada clase). Se deberá definir tanto la componente
privada como desarrollar todos los métodos definidos. NO está permitido alterar los
nombres, parámetros ni tipo de retorno de ninguno de estos métodos. La alteración se
evaluará con un 0 para el método alterado.
• Adicionalmente, la clase Vuelo define el atributo obligatorio boolean[][] asientos, el cual
deberá ser usado para tratar la matriz de asientos del vuelo y no podrá ser alterado ni
cambiado por otro atributo.
• Se permite el desarrollo tanto de clases como métodos adicionales a los proporcionados en
el esqueleto de código, siempre y cuando estos no sean redundantes y sean invocados desde
alguna de las funcionalidades definidas en el esqueleto de código.
• Es obligatorio usar las variables pasadas como argumento en los métodos. Su no uso
implicará la calificación correspondiente a dicho método con un 0 (por ejemplo, si en la
función altaVuelo que recibe como parámetro un Scanner, se crea y usa otro objeto Scanner
distinto).
• Todas las clases, atributos y métodos deben estar documentados utilizando Javadoc.
• Se proporciona un ejemplo de estructuración, desarrollo y documentación con la clase
Fecha, la cual está completamente desarrollada y no será necesario alterarla ni actualizarla.

4. Normativa y evaluación
El proyecto de programación debe realizarse teniendo en cuenta la siguiente normativa:
• El proyecto se realizará de forma grupal (por parejas). Cada pareja deberá desarrollar de
manera independiente su propio proyecto de programación y realizar su propia entrega.
• El plagio del Proyecto queda estrictamente prohibido. La detección de plagio supondrá una
calificación de 0 en la convocatoria de la asignatura para todos los alumnos implicados, así
como la posibilidad de apertura de expediente académico disciplinar.
• Para ser evaluado del proyecto es obligatorio entregarlo en plazo, habiendo realizado
correctamente al menos una funcionalidad de las pedidas (tanto el método en la clase
AirUPM como sus clases asociadas para poder llevarla a cabo), y presentarse al examen final
del proyecto. Si la calificación del examen es inferior a un 4, no se evaluará la entrega del
proyecto. En este caso, se contabilizará la nota del examen, mientras que la nota de la
entrega será 0.
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

• El caso de estudio de partida supone el enunciado base para la realización del proyecto de
programación de la asignatura. Este enunciado podrá ser actualizado por el profesorado de
la asignatura con fines aclaratorios y/o ejemplificadores.

5. Entrega
El Proyecto de Programación de la asignatura Taller de Programación (TP) consta de una entrega,
cuyo plazo finaliza el 8 de enero de 2023, a las 23:59.

La práctica se entregará a través del Moodle de la asignatura. Cada entrega debe contener al menos
un proyecto de IntelliJ IDEA con todos los ficheros de configuración y código fuente de dicho proyecto
(no es necesario entregar los ficheros de bytecodes).

6. Ejemplo de Ejecución
La función main principal del Proyecto, localizada en la clase AirUPM, deberá recibir 10 argumentos
de programa estrictamente en el siguiente orden:
1. Número máximo de aeropuertos que tendrá la lista de aeropuertos de AirUPM.
2. Número máximo de aviones que tendrá la lista de aviones de AirUPM.
3. Número máximo de vuelos que tendrá la lita de vuelos de AirUPM.
4. Número máximo de pasajeros que tendrá la lista de pasajeros de AirUPM.
5. Número máximo de billetes por pasajero.
6. Nombre del fichero CSV que contiene la lista de aeropuertos de AirUPM (tanto para lectura
como escritura).
7. Nombre del fichero CSV que contiene la lista de aviones de AirUPM (tanto para lectura como
escritura).
8. Nombre del fichero CSV que contiene la lista de vuelos de AirUPM (tanto para lectura como
escritura).
9. Nombre del fichero CSV que contiene la lista de pasajeros de AirUPM (tanto para lectura
como escritura).
10. Nombre del fichero CSV que contiene los billetes adquiridos en AirUPM (tanto para lectura
como escritura).
En el caso de que no se reciban exactamente estos argumentos, el programa mostrará el siguiente
mensaje y concluirá la ejecución del mismo:

Número de argumentos incorrecto.

Las capacidades de las listas especificadas en los primeros 5 argumentos deberán respetarse durante
toda la ejecución del programa. Para los 5 últimos argumentos, se deberán realizar las lecturas y
escrituras en fichero necesarias para la carga y almacenamiento de datos. Los posibles errores en la
lectura/escritura de estos ficheros deberán tratarse y se deberá informar por pantalla con los
siguientes mensajes para cada error específico (se muestra ejemplo para fichero de Vuelos, en el
resto de los casos se sustituye la palabra “Vuelos” por “Aeropuertos”, “Aviones”, “Pasajeros” o
“Billetes”):
• El fichero no existe: Fichero Vuelos no encontrado.
• Error de lectura del fichero: Error de lectura de fichero Vuelos.
• Error de escritura del fichero: Error de escritura en fichero Vuelos.
• Error de cierre del fichero: Error de cierre de fichero Vuelos.
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

A continuación se muestra una ejecución del programa para los argumentos:


4 3 3 7 5 aeropuertos.csv aviones.csv vuelos.csv pasajeros.csv billetes.csv
donde los ficheros CSV especificados son los mismo que se proporcionan en Skeleton.zip:

1. Alta Vuelo AirUPM.menu


2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:6
Seleccione opción:1
Ingrese código de Aeropuerto Origen:JFK
Vuelo.altaVuelo
Código de aeropuerto no encontrado.
Ingrese código de Aeropuerto Origen:BCN
Ingrese Terminal Origen (1 - 2):0
Ingrese Terminal Origen (1 - 2):3
Ingrese Terminal Origen (1 - 2):2
Ingrese código de Aeropuerto Destino:LPA
Ingrese Terminal Destino (1 - 1):1
Ingrese matrícula de Avión:EC-LKA
Matrícula de avión no encontrada.
Ingrese matrícula de Avión:EC-LKE
Avión seleccionado con alcance insuficiente (menor que 2175.896 km).
Ingrese matrícula de Avión:EC-LKD
Fecha de Salida:
Ingrese día:0
Ingrese día:32
Ingrese día:29
Ingrese mes:2
Ingrese año:2023
Ingrese hora:15
Ingrese minuto:0
Ingrese segundo:0
Fecha u hora introducida incorrecta.
Ingrese día:1
Ingrese mes:1
Ingrese año:2023
Ingrese hora:15
Ingrese minuto:0
Ingrese segundo:0
Fecha de Llegada:
Ingrese día:1
Ingrese mes:1
Ingrese año:2023
Ingrese hora:12
Ingrese minuto:0
Ingrese segundo:0
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

Llegada debe ser posterior a salida.


Vuelo.altaVuelo
Fecha de Salida:
Ingrese día:1
Ingrese mes:1
Ingrese año:2023
Ingrese hora:15
Ingrese minuto:0
Ingrese segundo:0
Fecha de Llegada:
Ingrese día:1
Ingrese mes:1
Ingrese año:2023
Ingrese hora:17
Ingrese minuto:35
Ingrese segundo:35
Ingrese precio de pasaje:-15
Ingrese precio de pasaje:115,3
Vuelo PM4200 creado con éxito.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:1
No se pueden dar de alta más vuelos.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:2
Ingrese nombre:Juan Alberto
Pasajero.altaPasajero
Ingrese apellidos:García Gámez
Ingrese número de DNI:123456789
Ingrese número de DNI:123456
Ingrese letra de DNI:3
Ingrese letra de DNI:A
DNI incorrecto.
Ingrese número de DNI:123456
Ingrese letra de DNI:S
DNI ya existe.
Ingrese número de DNI:1234567
Ingrese letra de DNI:L
Ingrese email:ja.garcia@gmail.com
Email incorrecto.
Ingrese email:cristian.ramirez@upm.es
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

Email ya existe.
Pasajero.altaPasajero
Ingrese email:ja.garcia@alumnos.upm.es
Pasajero con DNI 01234567L dado de alta con éxito.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:MAD
AirUPM.buscarVuelo
Ingrese código de Aeropuerto Destino:VLC
Fecha de Salida:
Ingrese día:22
Ingrese mes:11
Ingrese año:2022
No se ha encontrado ningún vuelo.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:BCN
Ingrese código de Aeropuerto Destino:LPA
Fecha de Salida:
Ingrese día:22
Ingrese mes:11
Ingrese año:2022
No se ha encontrado ningún vuelo.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:BCN
Ingrese código de Aeropuerto Destino:LPA
Fecha de Salida:
Ingrese día:1
Ingrese mes:1
Ingrese año:2023
Vuelo PM0066 de Josep Tarradellas Barcelona-El Prat(BCN) T2 (01/01/2023 08:15:00)
a Gran Canaria(LPA) T1 (01/01/2023 11:00:05) en Boeing 747(EC-LKD) por 182,52€,
asientos libres: 409
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM
ListaVuelos.listarVuelos
Vuelo PM4200 de Josep Tarradellas Barcelona-El Prat(BCN) T2 (01/01/2023 15:00:00)
a Gran Canaria(LPA) T1 (01/01/2023 17:35:35) en Boeing 747(EC-LKD) por 115,30€,
asientos libres: 410
Ingrese ID de vuelo para comprar billete o escriba CANCELAR:PM1520
ID de vuelo no encontrado. ListaVuelos.seleccionarVuelo
Ingrese ID de vuelo para comprar billete o escriba CANCELAR:CANCELAR
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:MAD
Ingrese código de Aeropuerto Destino:BCN
Fecha de Salida:
Ingrese día:24
Ingrese mes:12
Ingrese año:2022
Vuelo PM1111 de Adolfo Suarez Madrid - Barajas(MAD) T4 (24/12/2022 12:35:00) a Josep
Tarradellas Barcelona-El Prat(BCN) T1 (24/12/2022 14:05:30) en Falcon 900(EC-LKF)
por 100,00€, asientos libres: 3
Ingrese ID de vuelo para comprar billete o escriba CANCELAR:PM1111
¿Comprar billete para un nuevo pasajero (n), o para uno ya existente (e)?r
El valor de entrada debe ser 'n' o 'e' AirUPM.comprarBillete
¿Comprar billete para un nuevo pasajero (n), o para uno ya existente (e)?e
Ingrese DNI del pasajero:12345678Z
DNI no encontrado.
Ingrese DNI del pasajero:34526179M
A B C
Billete.altaBillete
1(X)(X)(X)
2{ }{X}{X}
3{X}{X}{ }
4{X}{X}{X}
5{X}{X}{X}
6[X][ ][X]
Tipo de asiento: '[ ]' = TURISTA, '{ }' = PREFERENTE, '( )' = PRIMERA
Ingrese fila del asiento (1-6):0
Ingrese fila del asiento (1-6):7
Ingrese fila del asiento (1-6):1
Ingrese columna del asiento (A-C):2
Ingrese columna del asiento (A-C):A
El asiento 1A ya está reservado.
Ingrese fila del asiento (1-6):2
Ingrese columna del asiento (A-C):A
Billete PM1111IDIM comprado con éxito.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

4. Mostrar billetes de Pasajero


5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:MAD
Ingrese código de Aeropuerto Destino:BCN
Fecha de Salida:
Ingrese día:24
Ingrese mes:12
Ingrese año:2022
Vuelo PM1111 de Adolfo Suarez Madrid - Barajas(MAD) T4 (24/12/2022 12:35:00) a Josep
Tarradellas Barcelona-El Prat(BCN) T1 (24/12/2022 14:05:30) en Falcon 900(EC-LKF)
por 100,00€, asientos libres: 2
Ingrese ID de vuelo para comprar billete o escriba CANCELAR:PM1111
¿Comprar billete para un nuevo pasajero (n), o para uno ya existente (e)?e
Ingrese DNI del pasajero:34526179M
AirUPM.comprarBillete
El Pasajero seleccionado no puede adquirir más billetes.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:MAD
Ingrese código de Aeropuerto Destino:BCN
Fecha de Salida:
Ingrese día:24
Ingrese mes:12
Ingrese año:2022
Vuelo PM1111 de Adolfo Suarez Madrid - Barajas(MAD) T4 (24/12/2022 12:35:00) a Josep
Tarradellas Barcelona-El Prat(BCN) T1 (24/12/2022 14:05:30) en Falcon 900(EC-LKF)
por 100,00€, asientos libres: 2
Ingrese ID de vuelo para comprar billete o escriba CANCELAR:PM1111
¿Comprar billete para un nuevo pasajero (n), o para uno ya existente (e)?n
Ingrese nombre:Eusebio
Ingrese apellidos:Noguera
Ingrese número de DNI:98765432
Ingrese letra de DNI:M
Ingrese email:eusebio@upm.es
A B C
1(X)(X)(X)
2{X}{X}{X}
3{X}{X}{ }
4{X}{X}{X}
5{X}{X}{X}
6[X][ ][X]
Tipo de asiento: '[ ]' = TURISTA, '{ }' = PREFERENTE, '( )' = PRIMERA
Ingrese fila del asiento (1-6):6
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

Ingrese columna del asiento (A-C):B


Billete PM1111DUQN comprado con éxito.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:2
No se pueden dar de alta más pasajeros.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:MAD
Ingrese código de Aeropuerto Destino:BCN
Fecha de Salida:
Ingrese día:24
Ingrese mes:12
Ingrese año:2022
Vuelo PM1111 de Adolfo Suarez Madrid - Barajas(MAD) T4 (24/12/2022 12:35:00) a Josep
Tarradellas Barcelona-El Prat(BCN) T1 (24/12/2022 14:05:30) en Falcon 900(EC-LKF)
por 100,00€, asientos libres: 1
Ingrese ID de vuelo para comprar billete o escriba CANCELAR:PM1111
Ingrese DNI del pasajero:00123456S
A B C
1(X)(X)(X)
2{X}{X}{X}
3{X}{X}{ }
4{X}{X}{X}
5{X}{X}{X}
6[X][X][X]
Tipo de asiento: '[ ]' = TURISTA, '{ }' = PREFERENTE, '( )' = PRIMERA
Ingrese fila del asiento (1-6):3
Ingrese columna del asiento (A-C):C
Billete PM1111NRLP comprado con éxito.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:3
Ingrese código de Aeropuerto Origen:MAD
Ingrese código de Aeropuerto Destino:BCN
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

Fecha de Salida:
Ingrese día:24
Ingrese mes:12
Ingrese año:2022
Vuelo PM1111 de Adolfo Suarez Madrid - Barajas(MAD) T4 (24/12/2022 12:35:00) a Josep
Tarradellas Barcelona-El Prat(BCN) T1 (24/12/2022 14:05:30) en Falcon 900(EC-LKF)
por 100,00€, asientos libres: 0
Ingrese ID de vuelo para comprar billete o escriba CANCELAR:PM1111
El vuelo PM1111 está lleno, no se pueden comprar más billetes AirUPM.comprarBillete
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:4
Ingrese DNI del pasajero:01234567L
El pasajero seleccionado no ha adquirido ningún billete.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:4
Ingrese DNI del pasajero:34526179M
Billete PM1111AAAA para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 6C (TURISTA) por 100,00€
Billete PM1111DBEN para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 5C (PREFERENTE) por 125,00€
Billete PM1111XYIN para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 5B (PREFERENTE) por 125,00€
Billete PM0066AAAA para Vuelo PM0066 de BCN T2 (01/01/2023 08:15:00) a LPA T1
(01/01/2023 11:00:05) en asiento 7F (TURISTA) por 182,52€
Billete PM1111IDIM para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 2A (PREFERENTE) por 125,00€
Ingrese localizador del billete:PM1111BCDE
Localizador no encontrado.
Ingrese localizador del billete:PM1111IDIM
¿Generar factura del billete (f), cancelarlo (c) o volver al menú (m)?a
El valor de entrada debe ser 'f', 'c' o 'm'
¿Generar factura del billete (f), cancelarlo (c) o volver al menú (m)?f
Introduzca la ruta donde generar la factura:factura.txt
Facturada de Billete PM1111IDIM generada en factura.csv
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

0. Salir
Seleccione opción:4
Ingrese DNI del pasajero:34526179M
Billete PM1111AAAA para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 6C (TURISTA) por 100,00€
Billete PM1111DBEN para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 5C (PREFERENTE) por 125,00€
Billete PM1111XYIN para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 5B (PREFERENTE) por 125,00€
Billete PM0066AAAA para Vuelo PM0066 de BCN T2 (01/01/2023 08:15:00) a LPA T1
(01/01/2023 11:00:05) en asiento 7F (TURISTA) por 182,52€
Billete PM1111IDIM para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 2A (PREFERENTE) por 125,00€
Ingrese localizador del billete:PM1111AAAA
¿Generar factura del billete (f), cancelarlo (c) o volver al menú (m)?c
Billete PM1111AAAA cancelado.
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:4
Ingrese DNI del pasajero:34526179M
Billete PM1111DBEN para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 5C (PREFERENTE) por 125,00€
Billete PM1111XYIN para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 5B (PREFERENTE) por 125,00€
Billete PM0066AAAA para Vuelo PM0066 de BCN T2 (01/01/2023 08:15:00) a LPA T1
(01/01/2023 11:00:05) en asiento 7F (TURISTA) por 182,52€
Billete PM1111IDIM para Vuelo PM1111 de MAD T4 (24/12/2022 12:35:00) a BCN T1
(24/12/2022 14:05:30) en asiento 2A (PREFERENTE) por 125,00€
Ingrese localizador del billete:PM0066AAAA
¿Generar factura del billete (f), cancelarlo (c) o volver al menú (m)?m
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
0. Salir
Seleccione opción:5
Ingrese ID del vuelo:PM1111
Introduzca la ruta donde generar la lista de pasajeros:lista.txt
Lista de pasajeros del Vuelo PM1111 generada en lista.csv
1. Alta Vuelo
2. Alta Pasajero
3. Buscar Vuelo
4. Mostrar billetes de Pasajero
5. Generar lista de Pasajeros
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

0. Salir
Seleccione opción:0

Tras finalizar el programa, los archivos quedan como se muestra a continuación:

aeropuertos.csv
Adolfo Suarez Madrid - Barajas;MAD;40.4927751;-3.5778;4
Josep Tarradellas Barcelona-El Prat;BCN;41.289182;2.0746423;2
Gran Canaria;LPA;27.936844;-15.389758;1
Valencia;VLC;39.4919142;-0.4730416;3

aviones.csv
Boeing;747;EC-LKD;41;10;13450.0
Boeing;737;EC-LKE;30;6;1500.0
Falcon;900;EC-LKF;6;3;12000.0

vuelos.csv
PM1111;EC-LKF;MAD;4;24/12/2022 12:35:00;BCN;1;24/12/2022 14:05:30;100.0
PM0066;EC-LKD;BCN;2;01/01/2023 08:15:00;LPA;1;01/01/2023 11:00:05;182.52
PM4200;EC-LKD;BCN;2;01/01/2023 15:00:00;LPA;1;01/01/2023 17:35:35;115.3

pasajeros.csv
Cristian;Ramírez Atencia;51231621;H;cristian.ramirez@upm.es
Víctor;Rodríguez Fernández;123456;S;victor.rfernandez@upm.es
Juan Pablo;Martin Robles;25058498;K;juan.martin.robles@alumnos.upm.es
Pedro;de la Serna;9235258;E;pedro.serna@alumnos.upm.es
Ramón;Pérez;34526179;M;ramon.perez@alumnos.upm.es
Juan Alberto;García Gámez;1234567;L;ja.garcia@alumnos.upm.es
Eusebio;Noguera;98765432;M;eusebio@upm.es

billetes.csv
PM1111BCDE;PM1111;00123456S;PREFERENTE;2;2;125.0
PM1111GFER;PM1111;51231621H;PRIMERA;1;1;150.0
PM1111FHTR;PM1111;25058498K;PREFERENTE;4;3;125.0
PM1111JKOR;PM1111;09235258E;TURISTA;6;1;100.0
PM1111DBEN;PM1111;34526179M;PREFERENTE;5;3;125.0
PM1111TRDF;PM1111;00123456S;PREFERENTE;2;3;125.0
PM1111MBRU;PM1111;51231621H;PRIMERA;1;2;150.0
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

PM1111QWSF;PM1111;25058498K;PREFERENTE;4;1;125.0
PM1111YRMB;PM1111;09235258E;PREFERENTE;5;1;125.0
PM1111XYIN;PM1111;34526179M;PREFERENTE;5;2;125.0
PM1111JVBE;PM1111;00123456S;PREFERENTE;3;2;125.0
PM1111KFLI;PM1111;51231621H;PRIMERA;1;3;150.0
PM1111WRKZ;PM1111;25058498K;PREFERENTE;4;2;125.0
PM1111POND;PM1111;09235258E;PREFERENTE;3;1;125.0
PM1111IDIM;PM1111;34526179M;PREFERENTE;2;1;125.0
PM1111DUQN;PM1111;98765432M;TURISTA;6;2;100.0
PM1111NRLP;PM1111;00123456S;PREFERENTE;3;3;125.0
PM0066AAAA;PM0066;34526179M;TURISTA;7;6;182.52

factura.txt
--------------------------------------------------
--------- Factura del billete PM1111IDIM ---------
--------------------------------------------------
Vuelo: PM1111
Origen: Adolfo Suarez Madrid - Barajas(MAD) T4
Destino: Josep Tarradellas Barcelona-El Prat(BCN) T1
Salida: 24/12/2022 12:35:00
Llegada: 24/12/2022 14:05:30
Pasajero: Ramón Pérez, 34526179M, ramon.perez@alumnos.upm.es
Tipo de billete: PREFERENTE
Asiento: 2A
Precio: 125,00€

lista.txt
--------------------------------------------------
------- Lista de pasajeros en vuelo PM1111 -------
--------------------------------------------------
Asiento Tipo Pasajero
1A PRIMERA Cristian Ramírez Atencia, 51231621H, cristian.ramirez@upm.es
1B PRIMERA Cristian Ramírez Atencia, 51231621H, cristian.ramirez@upm.es
1C PRIMERA Cristian Ramírez Atencia, 51231621H, cristian.ramirez@upm.es
2A PREFERENTE Ramón Pérez, 34526179M, ramon.perez@alumnos.upm.es
2B PREFERENTE Víctor Rodríguez Fernández, 00123456S, victor.rfernandez@upm.es
2C PREFERENTE Víctor Rodríguez Fernández, 00123456S, victor.rfernandez@upm.es
3A PREFERENTE Pedro de la Serna, 09235258E, pedro.serna@alumnos.upm.es
3B PREFERENTE Víctor Rodríguez Fernández, 00123456S, victor.rfernandez@upm.es
3C PREFERENTE Víctor Rodríguez Fernández, 00123456S, victor.rfernandez@upm.es
PROYECTO DE PROGRAMACIÓN: DESARROLLO DE AirUPM

4A PREFERENTE Juan Pablo Martin Robles, 25058498K, juan.martin.robles@alumnos.upm.es


4B PREFERENTE Juan Pablo Martin Robles, 25058498K, juan.martin.robles@alumnos.upm.es
4C PREFERENTE Juan Pablo Martin Robles, 25058498K, juan.martin.robles@alumnos.upm.es
5A PREFERENTE Pedro de la Serna, 09235258E, pedro.serna@alumnos.upm.es
5B PREFERENTE Ramón Pérez, 34526179M, ramon.perez@alumnos.upm.es
5C PREFERENTE Ramón Pérez, 34526179M, ramon.perez@alumnos.upm.es
6A TURISTA Pedro de la Serna, 09235258E, pedro.serna@alumnos.upm.es
6B TURISTA Eusebio Noguera, 98765432M, eusebio@upm.es
6C

También podría gustarte