Práctica Evaluable - Curso 2020-2021: Grado Ord Grupo Hora Entrega Apellidos, Nombre
Práctica Evaluable - Curso 2020-2021: Grado Ord Grupo Hora Entrega Apellidos, Nombre
Práctica Evaluable - Curso 2020-2021: Grado Ord Grupo Hora Entrega Apellidos, Nombre
1
No está permitida la modificación de una copia (total o parcial).
No está permitido trabajar a partir de una copia inicial (total o parcial).
No está permitido cualquier trabajo derivado de otro.
La práctica evaluable es un trabajo autónomo del alumno, guiado a lo largo de todo el semestre por el profesor.
Esta primera práctica evaluable consiste en la implementación del módulo Aeropuertos, el cual permite la gestión
de una lista de aeropuertos, de los cuales se conoce su código, país donde está establecido, así como la latitud y
longitud de su geo-localización.
Para facilitar la realización del módulo, el profesor suministra, en el campus virtual, los siguientes ficheros:
aeropuerto.hpp: contiene la definición de los métodos públicos de la clase Aeropuerto, que permite gestionar
la información de un solo aeropuerto.
aeropuertos.hpp: contiene la definición de los métodos públicos de la clase Aeropuertos, para la gestión de
listas de aeropuertos.
test_aeropuertos.cpp: contiene un programa principal de prueba (test unitarios) del módulo Aeropuertos.
localizacion.txt: datos de aeropuertos del mundo.
NOTA IMPORTANTE: Se deben respetar en todo momento los nombres especificados en el enun-
ciado y en los ficheros .hpp suministrados por el profesor (nombres de ficheros, espacio de nombres,
identificadores de tipos y de métodos), así como los prototipos especificados para los métodos re-
queridos.
Nota informativa: Los datos que se usan para esta práctica son datos reales, obtenidos de OpenFlights. El formato
usado en los ficheros de datos suministrados por el profesor está escrito de una manera ligeramente simplificada. El
precio del billete y la duración del vuelo son simulados. La longitud y la latitud son las posiciones del aeropuerto en
la Tierra. Se proporcionan datos para cada vuelo comercial programado en el mundo.
2
1. EL MÓDULO Aeropuertos
El módulo Aeropuertos desarrolla las clases necesarias para la gestión de listas de aeropuertos. Cada aeropuerto
contiene información básica sobre el nombre del aeropuerto, el país donde éste se halla y la geo-localización exacta
del mismo.
Para este módulo de la práctica deben desarrollarse las siguientes clases:
Aeropuerto: suministra los métodos públicos necesarios para gestionar la información relativa a un solo
aeropuerto.
Aeropuertos: suministra los métodos públicos necesarios para gestionar una lista de objetos de la clase
Aeropuerto.
Ficheros necesarios para la entrega del módulo Aeropuertos en el campus virtual:
aeropuerto.hpp
aeropuerto.cpp
aeropuertos.hpp
aeropuertos.cpp
Para probar el correcto funcionamiento del módulo Aeropuertos y de las clases Aeropuerto y Aeropuertos que
deben desarrollarse en este módulo, el profesor suministra, a través del campus virtual de la asignatura, el fichero
test_aeropuertos.cpp, que contiene un programa principal que invoca a funciones de prueba de cada uno de los
métodos públicos de la clase Aeropuertos. Para usar este programa principal, debe hacerse compilación separada
de cada una de las clases, así como del programa principal, pera proceder posteriormente al enlazado de los ficheros
objetos para obtener el programa ejecutable:
g++ aeropuerto.cpp -o aeropuerto.o -c -Wall -Werror -Wextra
Se pide desarrollar la clase Aeropuerto, que suministra los métodos públicos necesarios para la gestión de la
información relativa a un aeropuerto. Esta clase debe desarrollarse en los ficheros aeropuerto.hpp y aeropuerto.cpp.
3
Funciones miembro públicas de la clase Aeropuerto
La clase Aeropuerto suministra los siguientes métodos públicos (véase también el fichero aeropuerto.hpp suminis-
trado por el profesor):
Aeropuerto();
Constructor por defecto. Asigna cadenas vacías al nombre y pais del aeropuerto. Asigna longitud y latitud 0.0.
4
void escribir_aeropuerto() const;
Escribe por pantalla la información del aeropuerto en el formato siguiente:
<nombre>, <pais>, <latitud>, <longitud>
Se pide desarrollar la clase Aeropuertos, que suministra los métodos públicos necesarios para la gestión de una
lista de aeropuertos.
La estructura de datos de la clase Aeropuertos consiste en una array de objetos de la clase Aeropuerto, desarrollada
en el apartado anterior. Para ello, deben definirse los siguientes atributos:
MAX_AEROPUERTOS: constante estática (static), de tipo natural (unsigned), con valor 1000, usada para
especificar el tamaño del array de aeropuertos.
aeropuertos: array de elementos de tipo Aeropuerto, de tamaño MAX_AEROPUERTOS.
n_aeropuertos: natural que guarda el número de aeropuertos actual de la lista de aeropuertos.
Por otro lado y dentro del espacio de nombres bblProgII donde se define la clase, se suministran también algunos tipos
(Resultado), constantes (OK, FIC_ERROR, NO_EXISTE y YA_EXISTE) y funciones auxiliares (escribir_resultado)
necesarias para la gestión de los resultados de ejecución de los métodos de la clase Aeropuertos (véase el fichero
aeropuertos.hpp).
(El alumno puede definir e implementar los métodos privados auxiliares que considere oportunos
para el desarrollo de los métodos públicos de la clase.)
La clase Aeropuertos suministra los siguientes métodos públicos (véase también el fichero aeropuertos.hpp
suministrado por el profesor), que deben implementarse en aeropuertos.cpp:
Aeropuertos();
Constructor por defecto. Inicializa la lista de aeropuertos a lista vacía.
~Aeropuertos();
Destructor del objeto.
5
Operador de asignación de objetos Aeropuertos (implementado on-line por el profesor).
6
Lee de fichero una lista de aeropuertos correspondiente al pais que se pasa como parámetro y los inserta en la lista
actual de Aeropuertos. Si el país es "cualquiera", lee todos los aeropuertos del fichero.
El formato de entrada es el siguiente:
<nombre>,<pais>,<latitud>,<longitud>
Por ejemplo (nótese que no hay espacios de separación entres los campos, solo comas):
GKA,Papua New Guinea,-6.081689,145.391881
MAG,Papua New Guinea,-5.207083,145.7887
HGU,Papua New Guinea,-5.826789,144.295861
LAE,Papua New Guinea,-6.569828,146.726242
POM,Papua New Guinea,-9.443383,147.22005
WWK,Papua New Guinea,-3.583828,143.669186
UAK,Greenland,61.160517,-45.425978
GOH,Greenland,64.190922,-51.678064
SFJ,Greenland,67.016969,-50.689325
THU,Greenland,76.531203,-68.703161
...
Si el fichero puede abrirse para lectura correctamente, se devuelve OK, a través de res. Si no, se devuelve FIC_ERROR
a través de res.
Por último, debe implementarse en aeropuertos.cpp la siguiente función, que no es un método de la clase sino una
función auxiliar definida en el espacio de nombres bblProgII:
void escribir_resultado(const Resultado &res) {
switch (res) {
case OK: std::cout << " --- OK." << std::endl;
break;
case FIC_ERROR: std::cout << " --- ERROR DE FICHERO. " << std::endl;
break;
case NO_EXISTE: std::cout << " --- NO EXISTE. " << std::endl;
break;
case YA_EXISTE: std::cout << " --- YA EXISTE. " << std::endl;
break;
default: std::cout << " --- CÓDIGO DE ERROR DESCONOCIDO." << std::endl;
}
}
Escribe por pantalla la cadena de caracteres correspondiente al resultado que se pasa como parámetro.
7
Funciones miembro privadas de la clase Aeropuertos
El alumno puede implementar las funciones miembro privadas que considere adecuadas para la implementación de
las funciones miembro públicas.
Además, debe implementarse obligatoriamente la siguiente función miembro privada:
unsigned buscar_aeropuerto(const std::string &nombre) const;
Busca un aeropuerto en una lista de Aeropuertos. Si lo encuentra, devuelve su posición en la lista. Si no, devuelve
n_aeropuertos.
Finalmente, debe desarrollarse un programa principal en el fichero main.cpp donde se pruebe el correcto funciona-
miento de todos los métodos implementados en la clase Aeropuertos. Para ello, el alumno mostrará un menú que le
permita al usuario seleccionar el método que desea probar.
El programa principal consistirá en un bucle do-while que leerá por teclado una opción de menú y realizará las
acciones correspondientes. El bucle acabará cuando se introduzca por teclado la opción 0.
El programa principal puede incluir todos los subalgoritmos que el alumno considere convenientes.