PRÁCTICA Nš 5: 2 sesiones

(S5 y S6: de 26, 27, 28 de abril y 6 y 7 de mayo hasta 3, 4, 5, 13 y 14 de mayo 2004)

Gestión de las reservas de un hotel
Listas con punto de interés

0. Objetivo

El objetivo de esta práctica es aprender a implementar y utilizar el TAD Listas. Para ello se propone el desarrollo de un programa de gestión de un hotel.

1 EL hotel de los lÍos

El alumno deberá desarrollar un programa que permita gestionar este lío de hotel. Nuestro hotel cuenta con un número determinado de habitaciones, cada una de las cuales con una serie de datos estáticos o semi-estáticos:

Además de los anteriores, podría ser interesante mantener algún dato que indicase si en esos momentos la habitación está ocupada o no.

Nuestro programa deberá permitir gestionar las habitaciones del hotel pudiendo:

Además, deberá gestionarse una lista de reservas de habitaciones donde deberá poderse:

A partir de estos datos cada nuevo día nuestro programa deberá comprobar qué huéspedes van a dejar el hotel, permitiendo sacar la reserva correspondiente de la lista de reservas e imprimiendo la factura correspondiente.

2. Desarrollo del programa de gestión

El alumno deberá usar 2 listas distintas y relacionadas entre sí. Por una lado la lista de habitaciones (el hotel propiamente dicho, ListaH) y por otro la lista de reservas (ListaR). Para ello, se deberán crear las clases sobre las que se apoyan dichas listas, que se diferenciarán únicamente por los datos que se almacenan en cada nodo.

Para la parte privada de la clase se deja libertad al programador, pero exigiéndose la utilización de listas dinámicas.

Clase ListaH

Clase ListaR

struct Habitacion

{

int NumHabita;

bool fumador; //true es fumador

int tipo; //1.-sencilla 2.-doble 3.-suite

float precio; //de habitacion

bool ocupada; //true es ocupada

};

class ListaH

{

public:

typedef Habitacion Valor;

ListaH (void);

ListaH (const ListaH &);

~ListaH (void);

bool Insertar (Valor x);

bool Eliminar (void);

bool Consulta (Valor & x);

bool ListaVacia (void);

void IrAInicio (void);

bool Avanzar (void);

bool FinalLista (void);

private:

???

};

struct fecha

{

int dia;

int mes;

int anyo;

};

struct Reserva

{

int NumReserva;

int NumHabitaR;

fecha entrada;

fecha salida;

string nombre;

};

class ListaR

{

public:

typedef Reserva ValorR;

ListaR (void);

ListaR (const ListaR &);

~ListaR (void);

bool Insertar (ValorR x);

bool Eliminar (void);

bool Consulta (ValorR & x);

bool ListaVacia (void);

void IrAInicio (void);

bool Avanzar (void);

bool FinalLista (void);

private:

???

};

Una vez creadas las clases, se pasará al programa de gestión de hotel. Para que el programa trabaje con datos introducidos con anterioridad se deberá cargar al principio de la ejecución, desde los ficheros "habita.txt" y "reserva.txt", las habitaciones y reservas existentes. Así mismo, al finalizar se deberá guardar en esos mismos ficheros la situación cuando se acabe de usar el programa, para recuperarla en una próxima ejecución.

Se adjunta un ejemplo de cada uno de estos ficheros para que se siga el mismo formato:

 

 

 

habita.txt

reserva.txt

1 n 1 100

2 n 2 120

3 n 3 150

5 s 1 100

En cada fila está separados por un espacio:

  • numero de habitación
  • n/s (donde "n" es no fumador y "s" fumador
  • un numero desde el 1 hasta el 3 donde 1 es individual, 2 doble y 3 suite
  • precio de la habitación por día

1 1 09/06/04 18/06/04

Juan Martinez

2 1 20/06/04 22/06/04

Jose Garcia

3 2 14/06/04 15/06/04

Maria de la O

5 3 08/06/04 12/06/04

Juan Garcia

6 3 15/06/04 20/06/04

Pepa Rodriguez

En cada fila hay separados por un espacio:

  • número de reserva
  • número de habitación reservada
  • fecha de entrada
  • fecha de salida

y en la siguiente fila el nombre de la persona que ha hecho la reserva.

Para un correcto funcionamiento del programa de gestión será necesario así mismo introducir la fecha del día actual. Tras este paso el programa revisará la lista de reservas y rellenará el campo "ocupado" de la lista de habitaciones. Hecho esto se pasará a un menú o menú con submenús que permita realizar las siguientes tareas:

A partir del número de reserva el programa permitirá modificar la fecha de salida (nunca la de entrada ya que se supone que ya está usando la habitación). Además, la fecha de salida nunca podrá ser igual al día actual (nunca se podrá salir hoy sino mañana como mínimo). Disminuir los días de reserva siempre será posible, pero para extender los días de reserva deberá antes comprobarse que no interfiere sobre otra reserva de esa misma habitación. Si es este el caso, se ampliará la reserva actual hasta el máximo día posible (en que será ocupada la habitación por otra persona) y se abrirá una reserva nueva en otra habitación (si es posible).