Está en la página 1de 2

Metodologı́a de la Programación (2021/22)

1o GII / GII-M / GII-ADE


Conv. Extraordinaria - 13 de Julio de 2022
Teorı́a

Duración: 2.5 horas


Una cadena de hoteles quiere crear un sistema informático que almacene, para cada uno de sus hoteles, información sobre las
habitaciones y clientes que se han alojado en ellas. Todos los hoteles de la cadena están construidos en edificios con el mismo
número de plantas (num_plantas) y con el mismo número de habitaciones por planta (num_habs_planta): utilizamos una matriz
rectangular dinámica para su representación, donde la fila indica la planta y la columna el número de habitación en esa planta.
Las habitaciones pueden ser de distintos tipos (campo tipo, con valores desde 1 -habitación unipersonal- hasta 5 -suite-). Para
cada habitación se guardan los datos de los clientes que se han alojado en ellas. Para cada cliente, además de sus datos personales
y de la estancia -fechas y precio diario- se guarda la puntuación (campo valoracion, con valores de 0 a 10) que dio a su estancia.
Podemos ver la estructura de clases utilizada a continuación.
class Hotel { class Habitacion { class Cliente {
private: private: private:
int id; static const int TAM_MINIMO = 10; string id;
string direccion; static const int TAM_BLOQUE = 5; string nombre;
int tipo; int valoracion;
Habitacion ** hab; Fecha fecha_entrada;
int num_plantas; Cliente * alojados; int num_dias;
int num_habs_planta; int num_clientes; int importe_diario;
public: int max_clientes; public:
...... public: ......
}; ...... };
};
Observe que los datos de los clientes de una habitación se guardan en un vector dinámico en el que el número de casillas ocupadas
(num_clientes) es menor o igual que el número de casillas reservadas (max_clientes). El número mı́nimo de casillas reservadas
es TAM_MINIMO y en el caso de necesitar más, se reservan TAM_BLOQUE casillas adicionales.
Durante todo el examen, se puede suponer la implementación de los siguientes métodos y operadores:
• Para la clase Fecha dispone del constructor sin argumentos (inicializa el dato Fecha con la fecha actual) y de los constructores
con parámetros:
Fecha (int el_dia, int el_mes, int el_anio);
Fecha (string la_fecha); // "la_fecha" es un string de longitud 10 con el formato dd/mm/aaaa
además de los métodos triviales Set/Get, todos los operadores relacionales entre dos datos Fecha y los operadores de
inserción y extracción de flujos (<< y >>).
• Para la clase Cliente dispone del constructor sin argumentos y del constructor con parámetros:
Cliente (string el_id, string el_nombre, Fecha la_fecha_entrada, int el_num_dias,
int el_importe_diario, int la_valoracion);
además de los métodos triviales Set/Get y los operadores de inserción y extracción de flujos (<< y >>).
• Para la clase Habitacion dispone del constructor sin argumentos (crea una habitación sin clientes con TAM MINIMO casillas
reservadas), del constructor con un argumento (crea una habitación sin clientes con tantas casillas reservadas como indique
el valor del argumento dado), constructor de copia, destructor y operador de asignación. Dispone de los métodos básicos
GetNumClientes, SetTipo y GetTipo y, finalmente, del operador [] para acceder al cliente k-ésimo (k ≥ 1).
• Para la clase Hotel dispone de los métodos básicos GetId, SetId, GetDireccion y SetDireccion. También dispone de
los métodos de consulta de las dimensiones del hotel GetNumPlantas y GetNumHabitacionesPlanta. Finalmente, dispone
del operador de acceso () con dos argumentos (si h es un objeto Hotel, la expresión h(i,j) permite acceder a la habitación
j de la planta i, donde i, j ≥ 1).

NOTA: Cualquier otro método público o privado que necesite deberá ser implementado.

/ Ejercicio 1 . Métodos de la clase Hotel [1.5 puntos]


Defina los siguientes constructores y destructores para la clase Hotel:
1. Constructor sin argumentos y Constructor(es) con argumento(s). Decida su(s) formato(s) y justifı́quelo.
2. Destructor.
3. Constructor de copia y operador de asignación.

Pág. 1/ 2
Metodologı́a de la Programación (2021/22)
1o GII / GII-M / GII-ADE
Conv. Extraordinaria - 13 de Julio de 2022
Teorı́a

/ Ejercicio 2 . Sobrecarga de operadores [2 puntos]


1. (1 punto) Sobrecargue el operador += para la clase Habitación. Dicha sobrecarga debe de añadir un nuevo cliente a la
habitación. El nuevo cliente se coloca al final.
2. (1 punto) Sobrecarga de los operadores relacionales para la clase Habitación. Emplee como criterio la cantidad total de
ingresos generados por la habitación.

/ Ejercicio 3 . Operadores de E/S [2.5 puntos]


1. (2 puntos) Sobrecargue los operadores << y >> para las clases Hotel y Habitacion.
El formato de los datos que gestionan los operadores << y >> para Hotel se muestra en la siguiente tabla:
12434
Camino de Ronda 19
5 10
1 1
• Las dos primeras lı́neas serán el id y la dirección del hotel. 1
• Después, en la misma lı́nea, el número de plantas y el número de habita- 2
ciones por planta. 78453234A
• A continuación aparecen los datos de las habitaciones (por planta): López Gutiérrez, Pedro
13/12/2021
– En la misma lı́nea, planta y número de habitación en la planta.
4
– Tipo de la habitación.
50
– Número de clientes que se han alojado en la habitación.
9
– Los datos de los clientes que se han alojado:
3452768V
∗ Identificación del cliente.
Martı́nez Escudero, Lucas
∗ Nombre del cliente.
02/02/2022
∗ Dı́a en que ingresó en el hotel.
5
∗ Dı́as alojado.
60
∗ Precio por noche.
8
∗ Valoración otorgada
1 2
1
3
89765434N
....

2. (0.5 puntos) Constructor de la clase Hotel a partir de los datos de un fichero de descripción de hotel.
El fichero debe contener la palabra HOTEL en la primera lı́nea. A continuación, un número indeterminado de lı́neas de
comentarios (todas empiezan por el carácter #). Después, los datos del hotel en el formato descrito en el apartado 1.

/ Ejercicio 4 . Métodos de cálculo [2 puntos]


Implemente el método ValoracionMedia para calcular y devolver la valoración media que ha tenido el hotel entre dos fechas dadas.
Este método recibirá como argumento dos datos de tipo Fecha que determinan el periodo en el que se va realizar el cálculo. Si no
se proporciona la segunda fecha, se entiende que será la fecha actual. Si no se proporciona ninguna, la primera será 01/01/2000
y la segunda, la fecha actual.
Debe tener en cuenta la posibilidad de que no se encuentre ninguna valoración entre las fechas indicadas. Decida qué devolverá el
método en ese caso y justifique su respuesta.
/ Ejercicio 5 . Aplicación: Valoraciones de los clientes [2 puntos]
La empresa hotelera quiere conocer el mejor hotel en un periodo dado. Se entiende que el mejor hotel es el que ha obtenido la
valoración media más alta. Para averiguarlo, se pide la implementación de un programa completo que reciba como argumentos dos
fechas (dos cadenas en el formato dd/mm/aaaa) que determinan un periodo de tiempo y un número indeterminado de nombres de
ficheros de descripción de hotel (formato indicado en la pregunta 3.2). Por ejemplo:

MejorHotel 10/01/2020 13/07/2022 hotel1.txt hotel2.txt hotel3.txt hotel4.txt

El programa mostrará el id y la valoración media de cada hotel en el periodo indicado. Después mostrará el id, la dirección y la
valoración media del mejor hotel. Finalmente, mostrará el contenido completo del mejor hotel.
Se valorará especialmente que el programa tenga un exhaustivo control de errores.

Pág. 2/ 2

También podría gustarte