Ag Viajes CPP
Ag Viajes CPP
Ag Viajes CPP
hpp"
namespace bblProgII{
AgViajes::~AgViajes(){
destruir_paquetes();
destruir_clientes();
//estarán vacías.
AgViajes::AgViajes():paquetes(nullptr), clientes(nullptr){}
//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.
//Nótese que en la nueva información del objeto, los enlaces a los paquetes reservados por
los clientes deberán
if(this!=&o){
destruir_clientes();
destruir_paquetes();
duplicar_paquetes(paquetes);
duplicar_clientes(clientes);
return *this;
//cuyo nombre recibe como parámetro y la almacenará en la estructura interna del objeto.
El formato del fichero
//de datos, entonces ok tomará el valor false, en otro caso tomará el valor true. Si el número
de plazas o el precio
destruir_paquetes();
ok=false;
ifstream fent;
fent.open(fich_paquetes.c_str());
if(!fent.fail()){
while(!fent.eof()){
fent>>n_p;
fent>>price;
fent>>n_opiniones;
int i=0;
while(i<n_opiniones){
i++;
}else{
fent.ignore();
while(i<n_opiniones){
i++;
ok=true;
fent.close();
//datos, entonces ok tomará el valor false, en otro caso tomará el valor true. Si el dinero de
un determinado
destruir_clientes();
ok=false;
ifstream fent;
fent.open(fich_clientes.c_str());
if(!fent.fail()){
while(!fent.eof()){
fent>>money;
fent>>n_reservas;
if(money>=0){
int i=0;
fent.ignore();
while(i<n_reservas){
if(i==n_reservas-1){
i++;
}else{
i++;
ok=true;
fent.close();
}
ofstream fsal;
ok=false;
fsal.open(fich_paquetes);
if(!fsal.fail()){
ok=true;
PNodo1 p=paquetes;
while(p!=NULL){
fsal<<p->opiniones.size()<<endl;
for(unsigned i=1;i<=p->opiniones.size();i++){
fsal<<p->opiniones[i-1]<<endl;
p=p->sig;
fsal.close();
ofstream fsal;
ok=false;
fsal.open(fich_clientes);
if(!fsal.fail()){
ok=true;
PNodo2 c=clientes;
while(c!=NULL){
if(i==c->reservas.size()-1){
fsal<<c->reservas[i]->paquete.obtener_codigo()<<"\n";
}else{
fsal<<c->reservas[i]->paquete.obtener_codigo()<<" ";
c=c->sig;
fsal.close();
//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.
ok=false;
PNodo1 p=paquetes;
PNodo2 c=clientes;
c->reservas.push_back(p);
c->num_reservas++;
ok=true;
//Recibe un nombre de
//(cod), y en ese caso, eliminará dicha reserva y ok tomará el valor true. Si no existe un
cliente con dicho nombre,
ok=false;
unsigned cont=0;
if(existe_c){
while(cont<c->reservas.size()){
if(c->reservas[cont]->paquete.obtener_codigo()==cod){
while(cont<c->reservas.size()){
c->reservas[cont]=c->reservas[cont+1];
cont++;
}
ok=true;
c->reservas.pop_back();
c->num_reservas--;
cont=clientes->reservas.size();
cont++;
//parámetro (dinero >= 0), entonces lo añadirá (con reservas nulas) al final de la lista de
clientes y ok tomará el
ok=false;
PNodo2 c1=clientes;
c1=new Nodo2;
c1->cliente=anyadir;
c1->sig=nullptr;
if(clientes==nullptr){
clientes=c1;
}else{
PNodo2 c2=clientes;
while(c2->sig!=nullptr){
c2=c2->sig;
c2->sig=c1;
c1->num_reservas=0;
ok=true;
//el código no es vacío y los valores recibidos como parámetros (plazas >= 0 && precio >= 0),
entonces lo
void AgViajes::nuevo_paquete(const string& cod, int plazas, int precio, bool& ok){
ok=false;
PNodo1 p=paquetes;
p=new Nodo1;
p->paquete=anyadir;
p->sig=NULL;
if(paquetes==NULL || paquetes->paquete.obtener_codigo()>cod){
p->sig=paquetes;
paquetes=p;
}else{
PNodo1 anterior=paquetes, act=anterior->sig;
anterior=act;
act=act->sig;
p->sig=act;
anterior->sig=p;
ok=true;
ok=false;
if(existe_c){
PNodo2 c2=clientes;
if(clientes->cliente.obtener_nombre()==nombre){
clientes=clientes->sig;
delete c2;
ok=true;
}else{
c2=c2->sig;
if(c2!=NULL){
c1->sig=c2->sig;
delete c2;
ok=true;
//Recibe en el parámetro
//cola de comentarios y ok tomará el valor true. En otro caso, entonces ok tomará el valor
false.
ok=false;
PNodo1 p=paquetes;
if(existe_p){
p->opiniones.push_back(comentario);
ok=true;
void AgViajes::destruir_paquetes(){
while(paquetes!=nullptr){
PNodo1 p=paquetes;
paquetes=paquetes->sig;
delete p;
void AgViajes::destruir_clientes(){
while(clientes!=nullptr){
PNodo2 p=clientes;
clientes=clientes->sig;
delete p;
PNodo1 copia=nullptr;
if(lista!=nullptr){
copia=new Nodo1;
copia->paquete=lista->paquete;
copia->opiniones=lista->opiniones;
PNodo1 p=lista->sig;
PNodo1 u=copia;
while(p!=nullptr){
u->sig=new Nodo1;
u->sig->paquete=p->paquete;
u->sig->opiniones=p->opiniones;
u=u->sig;
p=p->sig;
u->sig=nullptr;
return copia;
}
AgViajes::PNodo2 AgViajes::duplicar_clientes(PNodo2 lista){
PNodo2 copia=nullptr;
if(lista!=nullptr){
copia=new Nodo2;
copia->cliente=lista->cliente;
copia->num_reservas=lista->num_reservas;
copia->reservas=lista->reservas;
PNodo2 p=lista->sig;
PNodo2 u=copia;
while(p!=nullptr){
u->sig=new Nodo2;
u->sig->cliente=p->cliente;
u->sig->num_reservas=p->num_reservas;
u->sig->reservas=p->reservas;
u=u->sig;
p=p->sig;
u->sig=nullptr;
return copia;
p=p->sig;
if(p==nullptr){
return false;
}else{
return true;
c=clientes;
c=c->sig;
if(c==nullptr){
return false;
}else{
return true;