Está en la página 1de 5

#ifndef _AGVIAJES_HPP_

#define _AGVIAJES_HPP_

#include "cliente.hpp"

#include "paquete.hpp"

#include <deque>

#include <vector>

#include <fstream>

namespace bblProgII{

class AgViajes{

private:

struct Nodo1;

typedef Nodo1* PNodo1;

struct Nodo1{

PNodo1 sig;

Paquete paquete;

deque <string> opiniones;

};

struct Nodo2;

typedef Nodo2* PNodo2;

struct Nodo2{

PNodo2 sig;

Cliente cliente;

int num_reservas;

vector <PNodo1> reservas;

};
PNodo1 paquetes;

PNodo2 clientes;

void destruir_paquetes();

void destruir_clientes();

PNodo1 duplicar_paquetes(PNodo1 lista);

PNodo2 duplicar_clientes(PNodo2 lista);

bool existe_paquete(string codigo, PNodo1 &p);

bool existe_cliente(string nombre, PNodo2 &c);

public:

//Destruye el objeto, liberando todos los recursos asociados.

~AgViajes();

//Construye un objeto por defecto, donde tanto la información de paquetes como la de


clientes

//estarán vacías.

AgViajes();

//Construye un objeto copiando (duplicando) la información contenida en el objeto

//recibido como parámetro. Nótese que en el nuevo objeto construido, los enlaces a los
paquetes reservados por

//los clientes deberán ser reajustados a la nueva lista de paquetes duplicada en el nuevo
objeto.

AgViajes(const AgViajes& o);

//Inicialmente libera los recursos asociados al objeto actual, y asigna


//nueva información copiando (duplicando) la información contenida en el objeto recibido
como parámetro.

//Nótese que en la nueva información del objeto, los enlaces a los paquetes reservados
por los clientes deberán

//ser reajustados a la nueva lista de paquetes duplicada.

AgViajes& operator=(const AgViajes& o);

//Lee la información del fichero de paquetes

//cuyo nombre recibe como parámetro y la almacenará en la estructura interna del


objeto. El formato del fichero

//es como se indicó anteriormente. Si el fichero no pudo abrirse o se produjeron errores


de formato en la lectura

//de datos, entonces ok tomará el valor false, en otro caso tomará el valor true. Si el
número de plazas o el precio

//de un determinado paquete es negativo, entonces dicho paquete no será almacenado


en la estructura de datos,

//pero se continuará con el procesamiento del fichero y no afectará al valor de ok.

void leer_paquetes(const std::string& fich_paquetes, bool& ok);

//Lee la información del fichero de clientes cuyo

//nombre recibe como parámetro y la almacenará en la estructura interna del objeto. El


formato del fichero es

//como se indicó anteriormente. Si el fichero no pudo abrirse o se produjeron errores de


formato en la lectura de

//datos, entonces ok tomará el valor false, en otro caso tomará el valor true. Si el dinero
de un determinado

//cliente es negativo, entonces dicho cliente no será almacenado en la estructura de


datos, pero se continuará con

//el procesamiento del fichero y no afectará al valor de ok.

void leer_clientes(const string& fich_clientes, bool& ok);

//Guarda la información de paquetes

//alamcenada en el fichero de paquetes cuyo nombre recibe como parámetro. El formato


del fichero es como se
//indicó anteriormente. Si el fichero no pudo abrirse o se produjeron errores en la
escritura de datos, entonces ok

//tomará el valor false, en otro caso tomará el valor true.

void guardar_paquetes(const string& fich_paquetes, bool& ok);

//Guarda la información de clientes almacenada

//en el fichero de clientes cuyo nombre recibe como parámetro. El formato del fichero es
como se indicó

//anteriormente. Si el fichero no pudo abrirse o se produjeron errores en la escritura de


datos, entonces ok tomará

//el valor false, en otro caso tomará el valor true.

void guardar_clientes(const string& fich_clientes, bool& ok);

//Recibe un nombre de cliente

//y un código de paquete (cod) como parámetros, y si ambos existen, entonces añadirá (a
continuación de las ya

//existentes) al cliente una nueva reserva para dicho paquete y ok tomará el valor true. Si
no existe un cliente

//con dicho nombre, o no existe dicho paquete turístico, entonces ok tomará el valor
false.

void nueva_reserva(const string& nombre, const string& cod, bool& ok);

//Recibe un nombre de

//cliente como parámetro, y si existe, comprueba si tiene reservado el paquete turístico


recibido como parámetro

//(cod), y en ese caso, eliminará dicha reserva y ok tomará el valor true. Si no existe un
cliente con dicho nombre,

//o no tiene dicho paquete reservado, entonces ok tomará el valor false.

void eliminar_reserva(const string& nombre, const string& cod, bool& ok);

//Recibe un nombre de cliente y el dinero

//destinado a viajes como parámetros, y si el cliente no existe, el nombre no es vacío y el


valor recibido como

//parámetro (dinero >= 0), entonces lo añadirá (con reservas nulas) al final de la lista de
clientes y ok tomará el
//valor true. En otro caso, entonces ok tomará el valor false.

void nuevo_cliente(const string& nombre, int dinero, bool& ok);

//Recibe en el parámetro cod el

//código de identificación de un paquete, así como el número de plazas y su precio, y si


dicho paquete no existe,

//el código no es vacío y los valores recibidos como parámetros (plazas >= 0 && precio >=
0), entonces lo

//añadirá, manteniendo la ordenación, a la lista de paquetes turísticos y ok tomará el valor


true. En otro caso,

//entonces ok tomará el valor false.

void nuevo_paquete(const string& cod, int plazas, int precio, bool& ok);

//Recibe un nombre de cliente como parámetro, y si

//existe, lo eliminará de la lista de clientes y ok tomará el valor true. Si no existe un cliente


con dicho nombre,

//entonces ok tomará el valor false.

void eliminar_cliente(const string& nombre, bool& ok);

//Recibe en el parámetro

//cod el código de identificación de un paquete, y si dicho paquete existe, entonces se


añade el comentario a la

//cola de comentarios y ok tomará el valor true. En otro caso, entonces ok tomará el valor
false.

void nuevo_comentario(const string& cod, const string& comentario, bool& ok);

};

#endif

También podría gustarte