[C++]Problema Classi

TheBestNapoli
salve a tutti... avrei un piccolo problema con questo programma che deve gestire i posti in un teatro... in pratica devo costruire due classi (Posto e Teatro) e allocare dinamicamente un vettore di Posti. Il programma deve prevedere funzioni che permettono di prenotare un biglietto, acquistarlo o eliminarne la prenotazione se non è stato ancora acquistato e infine la stampa a video dei posti disponibili e di quelli prenotati. Il codice è il seguente:
header.h
#ifndef HEADER_H_
#define HEADER_H_
#include <iostream>

using namespace std;

class Posto{
	public:
		Posto();
		int getID(){return ID;}
		bool getPrenotato(){return prenotato;}
		bool getAcquistato(){return acquistato;}
		void setID(int id){ID = id;}
		void setPrenotato(bool p){prenotato = p;}
		void setAcquistato(bool a){acquistato = a;}
	private:
		int ID;
		bool prenotato;
		bool acquistato;
};

class Teatro{
	public:
		Teatro(int n);
		~Teatro(){delete[] P;}
		bool prenota(const int);
		bool acquistaBiglietto(const int, float &);
		bool liberaPrenotato(const int);
		void visualizzaDisponibili();
		void visualizzaPrenotati();
	private:
		int num_posti;
		Posto *P;
};

#endif /* HEADER_H_ */

header.cpp
#include "header.h"

Posto::Posto()
{
	setPrenotato(false);
	setAcquistato(false);
}

Teatro::Teatro(int n)
{
	num_posti = n;
	P = new Posto[n];
	for(int i=0;i<n;i++)
	{
		P[i].setID(i);
	}
}

bool Teatro::prenota(const int Cod)
{
	if(!P[Cod].getPrenotato())
	{
		P[Cod].setPrenotato(true);
		return true;
	}
	else return false;
}

bool Teatro::acquistaBiglietto(const int Cod, float &importo)
{
	if((P[Cod].getPrenotato()) && !P[Cod].getAcquistato())
	{
		P[Cod].setAcquistato(true);
		importo = 15.60;
		return true;
	}
	else return false;
}

bool Teatro::liberaPrenotato(const int Cod)
{
	if((P[Cod].getPrenotato()) && (!P[Cod].getAcquistato()))
	{
		return true;
	}
	else return false;
}

void Teatro::visualizzaDisponibili()
{
	for(int i=0;i<num_posti;i++)
	{
		if(!P[i].getPrenotato())
		{
			cout<<"Il posto numero "<<i<<" e' libero.\n";
		}
	}
}

void Teatro::visualizzaPrenotati()
{
	for(int i=0;i<num_posti;i++)
	{
		if(P[i].getPrenotato())
		{
			cout<<"Il posto numero "<<i<<" e' prenotato.\n";
		}
	}
}

main.cpp
#include "header.h"

int main()
{
	float importo;
	int x;
	int c;
	int p=0;
	char scelta;
	cout<<"Quanti posti ha il teatro?\n";
	cin>>x;
	Teatro t(x);
	do
	{
		cout<<"Scegli un'opzione dal seguente menu':\n"
			<<"1) Prenota biglietto\n"
			<<"2) Acquista biglietto\n"
			<<"3) Elimina prenotazione\n"
			<<"4) Visualizza posti liberi\n"
			<<"5) Visualizza posti prenotati\n";
		cin>>c;
		switch(c)
		{
			case 1:
				while(p<x)
				{
					if(t.prenota(p))
					{
						cout<<"Prenotato posto numero "<<p<<endl;
						break;
					}
					else
					{
						cout<<"Posto "<<p<<" non prenotabile"<<endl;
						p++;
					}
				}
				break;
			case 2:
				while(p<x)
				{
					if(t.acquistaBiglietto(p,importo))
					{
						cout<<"Acquistato posto numero "<<p<<endl;
						cout<<"Costo: €"<<importo<<endl;
						break;
					}
					else
					{
						cout<<"Posto "<<p<<" non acquistabile"<<endl;
						p++;
					}
				}
				break;
			case 3:
				cout<<"Inserisci l'ID del posto\n";
				cin>>p;
				if(t.liberaPrenotato(p))
				{
					cout<<"Prenotazione eliminata per il posto "<<p<<endl;
				}
				else cout<<"Impossibile eliminare la prenotazione per il posto "<<p<<endl;
				break;
			case 4:
				t.visualizzaDisponibili();
				break;
			case 5:
				t.visualizzaPrenotati();
				break;
		}
		cout<<"Vuoi effettuare un'altra operazione? (S/N): ";
		cin>>scelta;
		while(scelta!='s'&&scelta!='S'&&scelta!='n'&&scelta!='N')
		{
			cout<<"ERRORE - Inserire una scelta giusta (S/N): ";
			cin>>scelta;
		}
	}
	while(scelta=='s'||scelta=='S');
	cout<<"Fine Programma.\n";
	return 0;
}

in particolare il mio problema è che quando elimino la prenotazione di un biglietto non mi conserva questa eliminazione e se metto visualizza prenotati c'è ancora il posto... e anche se metto di nuovo prenota biglietto mi prenota quello successivo, quindi vuol dire che non mi ha eliminato la prenotazione precedente...
forse sarà un sciocchezza ma ho un sacco di esercizi da fare e ho pure poco tempo! Grazie mille dell'aiuto :-D

Risposte
Rggb1
Ci sono alcune cose che non mi tornano, in particolare per il problema che segnali noto che
bool Teatro::liberaPrenotato(const int Cod)
{
   if((P[Cod].getPrenotato()) && (!P[Cod].getAcquistato()))
   {
      return true;
   }
   else return false;
} 
non modifica per niente il membro prenotato di P.

Ovvero ti manca il codice che lo fa:
P[Cod].setPrenotato(false);
da mettere da qualche parte... ti torna?

TheBestNapoli
grazie mille era quel pezzo di codice che avevo omesso il problema, ora infatti mi elimina la prenotazione in modo giusto :-D grazie ancora ciaoo :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.