Se va a realizar un proyecto a lo largo de las últimas semanas del curso de manera incremental, a medida que vayamos aprendiendo a manejar estructuras y archivos. El proyecto va a consistir en hacer un programa que realice diversas tareas de gestión y venta de billetes de avión de la Agencia de Viajes ICAI. La información referente a un tipo de avión se va a guardar en una estructura T_AVION que contiene la siguiente información: Identificador del avión (id_avion), es un número entero. Modelo del avión (modelo), es una cadena de caracteres de no más de 20 caracteres. Número de plazas del avión (num_plazas), es un número entero. Velocidad máxima de ese modelo de avión (vel_max), es un dato de tipo float. La información referente a un recorrido determinado se va a guardar en una estructura T_RECORRIDO que contiene la siguiente información: Número de vuelo (num_vuelo, tipo entero), es el número de vuelo de ese recorrido. Código del Aeropuerto de origen (origen), es una cadena de caracteres de no más de 4 caracteres. Código del Aeropuerto de destino (destino), es una cadena de caracteres de no más de 4 caracteres. Identificador del tipo de avión asignado a ese vuelo (id_avion), es un entero. Día de la semana (día), es una cadena de caracteres de no más de 10 caracteres. La hora de salida (hora_salida), es una variable de tipo T_HORARIO, que a su vez contiene la hora (en formato de 24 horas) y el minuto. Número de pasajeros (num_pas), es un valor entero que inicialmente, antes de comenzar la venta de billetes tendrá el valor 0 (indica que no se ha vendido ningún billete de ese recorrido). Precio del billete (precio), será un valor real (float) que indique el precio en euros de cada billete en este vuelo. Inicialmente, antes de poder comenzar con las tareas de gestión y venta de billetes, va a ser necesario cargar el vector dinámico de aviones (v_av) y el vector dinámico de recorridos (v_rec). En la carga manual (se le solicita la información al usuario), habrá que preguntar al usuario cuántos tipos de aviones se van a cargar, num_avi, y después de haber hecho la asignación dinámica, llamar a la función: void CargaManualAviones(T_AVION v[], int num_avi); La función CargaManualAviones() es la encargada de rellenar el vector con todos los tipos de avión. Para cargar cada avión hará una llamada a la función CargaUnAvion() cuyo prototipo es: void CargaUnAvion(T_AVION *av); que se encarga de solicitar los datos de un avión y guardarlos en la estructura que le han pasado por referencia. De la misma manera que en el caso de los aviones, se han de cargar manualmente los recorridos, solicitando al usuario previamente que indique cuántos recorridos va a incluir, num_rec, y después de haber hecho la asignación dinámica al vector de recorridos, llamar a la función CargaManualRecorridos(), que llamará a su vez a CargaUnRecorrido(). void CargaManualRecorridos(T_RECORRIDO v[], int num_rec); void CargaUnRecorrido(T_RECORRIDO *rec); Al rellenar el campo de número de pasajeros, siempre estará puesto a 0 inicialmente. Una vez cargados los dos vectores, se presentará un menú al usuario donde se podrá elegir la tarea a realizar: 1. Mostrar todos los tipos de avión, utilizando la función MostrarAviones(), que a su vez llamará a la función MostrarUnAvion() que imprimirá por pantalla cada uno de los campos de la estructura que recibe por referencia. void MostrarAviones(T_AVION v[], int num_avi); void MostrarUnAvion(T_AVION av); 2. Mostrar todos los recorridos, utilizando la función MostrarRecorridos(), que a su vez llamará a la función MostrarUnRecorrido()que imprimirá por pantalla cada uno de los campos de la estructura que recibe por referencia. void MostrarRecorridos(T_RECORRIDO v[], int num_rec); void MostrarUnRecorrido(T_RECORRIDO rec); 3. Mostrar todos los recorridos que cubren un origen y un destino (con los códigos de aeropuerto que indique el usuario). Para ello, se ha de utilizar la función RecorridoSeleccionado() que recibe la cadena con el código origen y con el código destino. Esta función devuelve el número de recorridos encontrados que cubran el trayecto, y devuelve por referencia el recorrido cuya hora de salida es la más temprana, independientemente del día de salida. int RecorridoSeleccionado(T_RECORRIDO v[], int num_rec, char *origen, char *destino, T_RECORRIDO *rec_temprano); Los datos que devuelve la función se mostrarán en el programa principal. 4. Salir
#include <iostream> using namespace std; struct T_AVION { int id_avion; char modelo[20]; int num_plazas; float vel_max; }; struct T_HORARIO { int hora; int min; }; struct T_RECORRIDO { int num_vuelo; char origen[4]; char destino[4]; int id_avion; char dia[10]; T_HORARIO hora_salida; int num_pas; float precio; }; void CargaManualAviones(T_AVION *v, int num_avi) { for (int i = 0; i < num_avi; i++) { int id_avion; char modelo[20]; int num_plazas; float vel_max; cout << "ID Avion: "; cin