Práctica 5: Composición de objetos en C++.

Objetivos:

Aprender a trabajar la composición de objetos.


Descripción del problema.

Deberemos realizar una aplicación que nos permita gestionar la venta de entradas de un cine. La sala del cine está compuesta por butacas y pueden tener distinta capacidad. Dicha capacidad se define en función del número de filas y de columnas, por ejemplo:

Sala: 4 filas y 10 columnas

 

 

     /===========================================================\

 

 

 

Fila 0:   |00| |01| |02| |03| |04| |05| |06| |07| |08| |09|

 

Fila 1:   |00| |01| |02| |03| |04| |05| |06| |07| |08| |09|

 

Fila 2:   |00| |01| |02| |03| |04| |05| |06| |07| |08| |09|

 

Fila 3:   |00| |01| |02| |03| |04| |05| |06| |07| |08| |09|

 

Desarrollo de la práctica.

Creación y utilización de dos clases sencillas para gestionar la venta de entradas de las salas de un cine.

Parte 1. Creación de las clases Butaca y Sala.

Cread un nuevo proyecto con el Borland C++ Builder del tipo 'console'.

Añadid dentro del proyecto los siguientes ficheros:

main.cpp -> fichero principal, que incluirá la función main.

Butaca.h -> fichero de cabecera que incluirá la definición de la clase Butaca.

Butaca.cpp -> fichero donde se incluirá la implementación de las funciones miembro de la clase.

Sala.h -> fichero de cabecera que incluirá la definición de la clase Sala.

Sala.cpp -> fichero donde se incluirá la implementación de las funciones miembro de la clase.

 

La clase Butaca se definirá con los siguientes atributos y métodos:

class Butaca

{

private:

 

bool ocupada; //vacía -> false, ocupada -> true

int fila;

int columna;

float precio;

 

public:

 

Butaca( );  //Constructor: Inicializa las variables miembro a cero y false

Butaca( int fil, int col);  //Constructor con argumentos.

            //Crea una butaca y la sitúa en fila fil columna col.

 

//Interfaz.

void setOcupada(bool est);

void Situa (int fil, int col); //Sitúa la butaca en fila fil columna col.

 

bool getOcupada();

int getFila();

int getColumna();

float getPrecio ();

 

void Pinta();   //Pinta cada butaca como

                // |cc| si libre (cc es columna con dos dígitos) o

                // |XX| si ocupada

};

 

class Sala
{

private:

 

Butaca **lista_butacas;  // Vector de vectores (matriz) de butacas.

int columnas;  //Número de columnas.

int filas;     //Número de filas.

 

public:

 

Sala( );         //Constructor sin argumentos. Crea la sala vacia.

Sala( int fils, int cols);  //Constructor con argumentos.

                //Crea sala con col columnas y fil filas.

~Sala ( );        //Destructor: debe liberar el vector de butacas

 

//Interfaz.

void Reconstruye(int fils, int cols); //Reconstruye la sala.

                //Elimina las butacas que tenía antes.

    //Crea las butacas nuevas.

 

void Pinta();   //Pinta fila a fila todas las butacas de la sala

 

float Compra(int fil, int col); //Compra una butaca en la fila fil columna col

                //Comprueba que la butaca no esta ocupada,

                //la marca como ocupada y devuelve el precio.

                //Si estaba ocupada o no existía devolverá -1

 

float Recaudacion ();    //Calcula la recaudación.

//Suma de los precios de todas las butacas vendidas.

};

 

Implementad todos sus métodos.

Parte 2. Creación del programa principal.

En la función main se creará un objeto de la clase sala (por ejemplo con 10 columnas y 4 filas) y se gestionará la reserva de entradas. Se deberá permitir también consultar la recaudación de la sala.

Para calcular el precio de una butaca tener en cuenta que el precio base es de 5€ para la fila 0 y que el precio se incrementa en 0,1€ en cada nueva fila

Ejemplo de funcionamiento:

Opcion 1 : Ver ocupacion de la sala

Opcion 2 : Comprar entrada

Opcion 3 : Consultar recaudacion

Opcion 4 : Salir

 

Elige una opcion : 2

 

Ocupación actual de la sala

 

Fila 0:   |00| |01| |02| |03| |04| |05| |06| |XX| |08| |09|

 

Fila 1:   |00| |01| |02| |XX| |04| |05| |06| |07| |08| |09|

 

Fila 2:   |00| |01| |02| |03| |04| |05| |06| |07| |08| |09|

 

Fila 3:   |00| |01| |02| |03| |XX| |XX| |06| |07| |08| |09|

 

Escoge butaca (fila columna): 1 3

Lo siento, esta ocupada, elige otra:

 

Escoge butaca (fila columna): 2 3

Son 5,2, gracias.

 

Ayuda

 

Emplead en la definición del método Pinta de la clase Butaca el siguiente código:

 

void Butaca::Pinta()
{
    if (!ocupada) { //Butaca vacia
        cout << "|"<< setfill('0') << setw(2) << columna << "| ";
    }
    else { //Butaca Llena
        cout<<"|XX| ";
    }
}