[C++] Progettino completato, problema riguardante array booleani.

di il
1 risposte

[C++] Progettino completato, problema riguardante array booleani.

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;}

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte