Salve, ho scritto un'applicazione per console che mi da da giorni un problema che non riesco a risolvere.
Nel programma (gestionale per hotel), sono presenti 3 array per tipo di stanza (singola, doppia, suite), nel caso in cui si vada ad eseguire il check-in o il check-out nel dato tipo di stanza, lo si esegue anche negli altri 2 tipi, ovvero viene cambiata la variabile (da true a false, o viceversa), anche nella stanza del numero dato in tutti e 3 gli array. Ho temporaneamente aggiunto dei cout per visualizzare i 3 array dopo l'inizializzazione (in cui si vede che gli array vengono per intero inizializzati a false senza problemi), dopo il check-in, e dopo il check-out, per agevolare la risoluzione del problema.
Mi sono reso conto solo molto dopo averlo iniziato che se lo avessi scritto con array di struct non avrei avuto bisogno di dividere i tipi di stanza in 3 array diversi, ma ormai non ho il tempo di rifarlo e vorrei solamente risolvere il problem. Ecco il codice:
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
void selezioneinvalida();
void wrongpassword();
string passwordsetup();
string hotelnamesetup();
struct clienti{
string nome;
string cognome;
int eta;
int stanzone;
string tipostanzone;};
int main()
{
int menuprincipale,menuadmin,camstanza,dispstanza,tstanzain,tstanzaout,risol,giornit,segnalaovisualizza,csing,cdopp,csuite,nstanza1a,nstanza2a,nstanza3a,nstanza1b,nstanza2b,nstanza3b,tornare,icliente=0,nmaxlog,a=0,b=0,c=0;
bool singole[a],doppie[b],suite[c],clcheck=false;
string allah="grande",password,passins,hotelname,endcheckout,pro[5]={"","","","",""};
//SETUP INIZIALE
system("color F0");
system("title Terminale Gestione Hotel");
cout<<"Benvenuto nel programma gestionale per hotel."<<endl<<endl;
system("PAUSE");
system("cls");
hotelname=hotelnamesetup();
password=passwordsetup();
cout<<"Inserisci numero massimo di clienti per stagione:"<<endl; //numero massimo di clienti che verranno registrati nel log clienti,
cin>>nmaxlog; //non numero massimo di clienti
clienti cliente[nmaxlog];
for(int i=0;i<nmaxlog;i++){
cliente[i].nome="";
cliente[i].cognome="";
cliente[i].eta=NULL;}
cout<<"Inserire numero di stanze singole presenti nell'hotel:"<<endl;
cin>>a;
for(int j=0;j<a;j++){
singole[j]=false;}
cout<<"Inserire costo giornaliero delle stanze singole:"<<endl;
cin>>csing;
cout<<"Inserire numero di stanze doppie presenti nell'hotel:"<<endl;
cin>>b;
for(int k=0;k<b;k++){
doppie[k]=false;}
cout<<"Inserire costo giornaliero delle stanze doppie:"<<endl;
cin>>cdopp;
cout<<"Inserire numero di suite presenti nell'hotel:"<<endl;
cin>>c;
for(int l=0;l<c;l++){
suite[l]=false;}
cout<<"Inserire costo giornaliero delle suite:"<<endl;
cin>>csuite;
system("cls");
//USER INTERFACE
//C-OUT PER VEDERE E RISOLVERE1
for(int q=0;q<a;q++){
cout<<singole[q];};
cout<<endl;
for(int w=0;w<b;w++){
cout<<doppie[w];};
cout<<endl;
for(int e=0;e<c;e++){
cout<<suite[e];};
cout<<endl;
do{
cout<<"Benvenuto nel terminale dell'hotel "<<hotelname<<"."<<endl<<endl;
cout<<"Scegliere tra le opzioni:"<<endl<<"1) Check-in."<<endl<<"2) Check-out."<<endl<<"3) Segnalazioni e lamentele."<<endl<<"4) Strumenti di amministrazione."<<endl;
cin>>menuprincipale;
system("cls");
switch(menuprincipale){
//CHECK-IN
case 1:
do{
do{
if(cliente[icliente].nome==""){
cout<<"Inserisci il nome:"<<endl;
cin.ignore();
getline(cin,cliente[icliente].nome);
cout<<"Inserisci il cognome:"<<endl;
getline(cin,cliente[icliente].cognome);
cout<<"Inserisci l'eta':"<<endl;
cin>>cliente[icliente].eta;
system("cls");
clcheck=true;}
else{
icliente++;}}
while(clcheck==false);
clcheck=false;
if(cliente[icliente].eta<18){
cout<<"Non e' possibile affittare stanze a persone che non abbiano raggiunto la maggiore eta'."<<endl;
cliente[icliente].nome="";
cliente[icliente].cognome="";
cliente[icliente].eta=NULL;
system("PAUSE");
system("cls");
break;}
cout<<"Inserire il tipo di stanza:"<<endl<<"1) Singola (tariffa: "<<csing<<" euro al giorno)."<<endl<<"2) Doppia (tariffa: "<<cdopp<<" euro al giorno)."<<endl<<"3) Suite (tariffa: "<<csuite<<" euro al giorno)."<<endl<<"4) Tornare al menu principale."<<endl;
cin>>tstanzain;
system("cls");
switch(tstanzain){
//CHECK-IN SINGOLE
case 1:
cout<<"Scegliere la stanza:"<<endl;
for(int m=0;m<a;m++){
if(singole[m]==false){
cout<<m+1<<"\t";}}
cout<<endl;
cin>>nstanza1a;
system("cls");
if(singole[nstanza1a-1]==false){
singole[nstanza1a-1]=true;
cliente[icliente].stanzone=nstanza1a;
cliente[icliente].tipostanzone="singola";
cout<<"Stanza numero "<<nstanza1a<<" assegnata con successo."<<endl;
system("PAUSE");
system("cls");}
else{
cliente[icliente].nome="";
cliente[icliente].cognome="";
cliente[icliente].eta=NULL;
selezioneinvalida();}
break;
//CHECK-IN DOPPIE
case 2:
cout<<"Scegliere la stanza:"<<endl;
for(int n=0;n<b;n++){
if(doppie[n]==false){
cout<<n+1<<"\t";}}
cout<<endl;
cin>>nstanza2a;
system("cls");
if(doppie[nstanza2a-1]==false){
doppie[nstanza2a-1]=true;
cliente[icliente].stanzone=nstanza2a;
cliente[icliente].tipostanzone="doppia";
cout<<"Stanza numero "<<nstanza2a<<" assegnata con successo."<<endl;
system("PAUSE");
system("cls");}
else{
cliente[icliente].nome="";
cliente[icliente].cognome="";
cliente[icliente].eta=NULL;
selezioneinvalida();}
break;
//CHECK-IN SUITE
case 3:
cout<<"Scegliere la stanza:"<<endl;
for(int o=0;o<c;o++){
if(suite[o]==false){
cout<<o+1<<"\t";}}
cout<<endl;
cin>>nstanza3a;
system("cls");
if(suite[nstanza3a-1]==false){
suite[nstanza3a-1]=true;
cliente[icliente].stanzone=nstanza3a;
cliente[icliente].tipostanzone="suite";
cout<<"Stanza numero "<<nstanza3a<<" assegnata con successo."<<endl;
system("PAUSE");
system("cls");}
else{
cliente[icliente].nome="";
cliente[icliente].cognome="";
cliente[icliente].eta=NULL;
selezioneinvalida();}
break;
case 4:
system("cls");
break;
default:
cliente[icliente].nome="";
cliente[icliente].cognome="";
cliente[icliente].eta=NULL;
selezioneinvalida();
break;}}
while(tstanzain<1||tstanzain>4);
//C-OUT PER VEDERE E RISOLVERE2
for(int q=0;q<a;q++){
cout<<singole[q];};
cout<<endl;
for(int w=0;w<b;w++){
cout<<doppie[w];};
cout<<endl;
for(int e=0;e<c;e++){
cout<<suite[e];};
cout<<endl;
break;
//CHECK-OUT
case 2:
do{
cout<<"Inserire il tipo di stanza:"<<endl<<"1) Singola."<<endl<<"2) Doppia."<<endl<<"3) Suite."<<endl<<"4) Tornare al menu principale."<<endl;
cin>>tstanzaout;
system("cls");
switch(tstanzaout){
//CHECK-OUT SINGOLE
case 1:
cout<<"Inserire numero della stanza:"<<endl;
cin>>nstanza1b;
if(singole[nstanza1b-1]==true){
cout<<"Inserire numero di giorni trascorsi:"<<endl;
cin>>giornit;
system("cls");
cout<<"L'importo da pagare ammonta a "<<giornit*csing<<" euro."<<endl;
cout<<"Pagare e terminare la procedura di check-out?"<<endl;
cin.ignore();
getline(cin,endcheckout);
if(endcheckout=="si"||endcheckout=="SI"||endcheckout=="Si"){
singole[nstanza1b-1]=false;
system("cls");}
else
if(endcheckout=="no"||endcheckout=="NO"||endcheckout=="No"){
system("cls");
cout<<"Check-out non eseguito."<<endl;
system("PAUSE");
system("cls");}
else
selezioneinvalida();}
else
selezioneinvalida();
break;
//CHECK-OUT DOPPIE
case 2:
cout<<"Inserire numero della stanza:"<<endl;
cin>>nstanza2b;
if(doppie[nstanza2b-1]==true){
cout<<"Inserire numero di giorni trascorsi:"<<endl;
cin>>giornit;
system("cls");
cout<<"L'importo da pagare ammonta a "<<giornit*cdopp<<" euro."<<endl;
cout<<"Pagare e terminare la procedura di check-out?"<<endl;
cin.ignore();
getline(cin,endcheckout);
if(endcheckout=="si"||endcheckout=="SI"||endcheckout=="Si"){
doppie[nstanza2b-1]=false;
system("cls");}
else
if(endcheckout=="no"||endcheckout=="NO"||endcheckout=="No"){
system("cls");
cout<<"Check-out non eseguito."<<endl;
system("PAUSE");
system("cls");}
else
selezioneinvalida();}
else
selezioneinvalida();
break;
//CHECK-OUT SUITE
case 3:
cout<<"Inserire numero della stanza:"<<endl;
cin>>nstanza3b;
if(suite[nstanza3b-1]==true){
cout<<"Inserire numero di giorni trascorsi:"<<endl;
cin>>giornit;
system("cls");
cout<<"L'importo da pagare ammonta a "<<giornit*csuite<<" euro."<<endl;
cout<<"Pagare e terminare la procedura di check-out?"<<endl;
cin.ignore();
getline(cin,endcheckout);
if(endcheckout=="si"||endcheckout=="SI"||endcheckout=="Si"){
suite[nstanza3b-1]=false;
system("cls");}
else
if(endcheckout=="no"||endcheckout=="NO"||endcheckout=="No"){
system("cls");
cout<<"Check-out non eseguito."<<endl;
system("PAUSE");
system("cls");}
else
selezioneinvalida();}
else
selezioneinvalida();
break;
case 4:
system("cls");
break;
default:
selezioneinvalida();
break;}}
while(tstanzaout<1||tstanzaout>4);
//C-OUT PER VEDERE E RISOLVERE3
for(int q=0;q<a;q++){
cout<<singole[q];};
cout<<endl;
for(int w=0;w<b;w++){
cout<<doppie[w];};
cout<<endl;
for(int e=0;e<c;e++){
cout<<suite[e];};
cout<<endl;
break;
//SEGNALAZIONI
case 3:
do{
cout<<"Scegliere tra le opzioni:"<<endl<<"1) Segnalare un problema."<<endl<<"2) Visualizzare le segnalazioni precedenti."<<endl<<"3) Tornare al menu principale."<<endl;
cin>>segnalaovisualizza;
system("cls");
switch(segnalaovisualizza){
//SEGNALAZIONE PROBLEMA
case 1:
if(pro[0]==""){
cout<<"Descrivi il problema:"<<endl;
cin.ignore();
getline(cin,pro[0]);}
else
if(pro[1]==""){
cout<<"Descrivi il problema:"<<endl;
cin.ignore();
getline(cin,pro[1]);}
else
if(pro[2]==""){
cout<<"Descrivi il problema:"<<endl;
cin.ignore();
getline(cin,pro[2]);}
else
if(pro[3]==""){
cout<<"Descrivi il problema:"<<endl;
cin.ignore();
getline(cin,pro[3]);}
else
if(pro[4]==""){
cout<<"Descrivi il problema:"<<endl;
cin.ignore();
getline(cin,pro[4]);}
else
cout<<"Impossibile segnalare ulteriori problemi al momento."<<endl;
system("PAUSE");
system("cls");
break;
//VISUALIZZAZIONE SEGNALAZIONI
case 2:
cout<<"1) "<<pro[0]<<endl<<"2) "<<pro[1]<<endl<<"3) "<<pro[2]<<endl<<"4) "<<pro[3]<<endl<<"5) "<<pro[4]<<endl;
system("PAUSE");
system("cls");
break;
case 3:
system("cls");
break;
default:
selezioneinvalida();
break;}}
while(segnalaovisualizza<1||segnalaovisualizza>3);
break;
//STRUMENTI DI AMMINISTRAZIONE
case 4:
cout<<"Inserire password di amministrazione per accedere:"<<endl;
cin.ignore();
getline(cin,passins);
system("cls");
if(passins==password){
do{
cout<<"Scegliere tra le opzioni:"<<endl<<"1) Visualizzare segnalazioni."<<endl<<"2) Modificare costo giornaliero di ogni tipo di stanza."<<endl<<"3) Modificare disponibilita' stanze."<<endl<<"4) Modificare nome hotel."<<endl<<"5) Modificare password."<<endl<<"6) Visualizzare lista clienti."<<endl<<"7) Tornare al menu principale."<<endl;
cin>>menuadmin;
system("cls");
switch(menuadmin){
//RISOLUZIONE SEGNALAZIONI
case 1:
cout<<"Premere il tasto corrispondente per segnare una segnalazione come risolta."<<endl;
cout<<"1) "<<pro[0]<<endl<<"2) "<<pro[1]<<endl<<"3) "<<pro[2]<<endl<<"4) "<<pro[3]<<endl<<"5) "<<pro[4]<<endl;
cout<<"6) Tornare al menu principale."<<endl;
cin>>risol;
system("cls");
switch(risol){
case 1:
pro[0]="";
break;
case 2:
pro[1]="";
break;
case 3:
pro[2]="";
break;
case 4:
pro[3]="";
break;
case 5:
pro[4]="";
break;
case 6:
system("cls");
break;
default:
void selezioneinvalida();
break;}
break;
//MODIFICA COSTO
case 2:
cout<<"Inserire costo giornaliero delle stanze singole:"<<endl;
cin>>csing;
cout<<"Inserire costo giornaliero delle stanze doppie:"<<endl;
cin>>cdopp;
cout<<"Inserire costo giornaliero delle suite:"<<endl;
cin>>csuite;
system("cls");
break;
//MODIFICA DISPONIBILITA'
case 3:
do{
cout<<"Selezionare il tipo di stanza di cui modificare la disponibilita':"<<endl<<"1) Singola."<<endl<<"2) Doppia."<<endl<<"3) Suite."<<endl<<"4) Tornare al menu principale."<<endl;
cin>>tornare;
system("cls");
switch(tornare){
//DISPONIBILITA' SINGOLE
case 1:
cout<<"Inserire il numero della stanza:"<<endl;
cin>>camstanza;
cout<<"Rendere la stanza:"<<endl<<"1) Disponibile."<<endl<<"2) Non disponibile."<<endl;
cin>>dispstanza;
system("cls");
switch(dispstanza){
case 1:
singole[camstanza-1]=false;
break;
case 2:
singole[camstanza-1]=true;
break;
default:
selezioneinvalida();
break;}
break;
//DISPONIBILITA' DOPPIE
case 2:
cout<<"Inserire il numero della stanza:"<<endl;
cin>>camstanza;
cout<<"Rendere la stanza:"<<endl<<"1) Disponibile."<<endl<<"2) Non disponibile."<<endl;
cin>>dispstanza;
system("cls");
switch(dispstanza){
case 1:
doppie[camstanza-1]=false;
break;
case 2:
doppie[camstanza-1]=true;
break;
default:
selezioneinvalida();
break;}
break;
//DISPONIBILITA' SUITE
case 3:
cout<<"Inserire il numero della stanza:"<<endl;
cin>>camstanza;
cout<<"Rendere la stanza:"<<endl<<"1) Disponibile."<<endl<<"2) Non disponibile."<<endl;
cin>>dispstanza;
system("cls");
switch(dispstanza){
case 1:
suite[camstanza-1]=false;
break;
case 2:
suite[camstanza-1]=true;
break;
default:
selezioneinvalida();
break;}
break;
case 4:
system("cls");
break;
default:
selezioneinvalida();
break;}}
while(tornare<1||tornare>4);
break;
//MODIFICA NOME HOTEL
case 4:
cin.ignore();
hotelname=hotelnamesetup();
break;
//MODIFICA PASSWORD
case 5:
cout<<"Inserire password di amministrazione per accedere:"<<endl;
cin.ignore();
getline(cin,passins);
system("cls");
if(passins==password){
password=passwordsetup();
system("PAUSE");
system("cls");}
else{
wrongpassword();}
break;
//LOG CLIENTI
case 6:
for(int p=0;p<nmaxlog;p++){
if(cliente[p].nome!=""){
cout<<cliente[p].nome<<" ";
cout<<cliente[p].cognome<<", ";
cout<<cliente[p].eta<<" anni. ";
cout<<"Stanza "<<cliente[p].tipostanzone<<" numero "<<cliente[p].stanzone<<"."<<endl;}}
system("PAUSE");
system("cls");
break;
case 7:
system("cls");
break;
default:
selezioneinvalida();
break;}}
while(menuadmin<1||menuadmin>7);
break;
default:
selezioneinvalida();
break;}}}
while(allah=="grande");
return 0;
}
//FUNZIONE INPUT INVALIDO
void selezioneinvalida(){
cout<<"Selezione invalida."<<endl;
system("PAUSE");
system("cls");}
//FUNZIONE PASSWORD INVALIDA
void wrongpassword(){
cout<<"Password invalida."<<endl;
system("PAUSE");
system("cls");}
//FUNZIONE SETUP PASSWORD
string passwordsetup(){
string fpassword;
cout<<"Inserire password di amministrazione:"<<endl;
getline(cin,fpassword);
system("cls");
return fpassword;}
//FUNZIONE SETUP NOME
string hotelnamesetup(){
string fhotelname;
cout<<"Inserire nome dell'hotel:"<<endl;
getline(cin,fhotelname);
system("cls");
return fhotelname;}