Classi C++.

di il
4 risposte

Classi C++.

Salve a tutti!
Ho un piccolo problema con questo esercizio di compito sulle classi.

Si progetti e si implementi una classe user che definisca cognome, login(penso sia il nickname) e password di un utente di un sistema.
Si richiede: un costruttore, un metodo che visualizzi le informazioni di un utente e un metodo che permetta il cambio di password di un utente.


Il problema è questo: quando inserisco un nuovo utente e poi lo vado a cercare, il programma va in loop e non riesco a capire dove sia l'errore.
Ringrazio in anticipo.
#include <cstdlib>
#include <iostream>
#include <string.h>

using namespace std;

struct dati //lista
{
   string cognome;
   string nickname;
   string password;
   dati *next;
};

class user
{
   public:
      user();//costruttore
      ~user(); //distruttore
      void aggiungi(string, string, string); //aggiunta utenti
      void view(string);//visualizzazione
      void password(string, string, string);//cambio password
   protected:
      dati *testa;
   //private:
      /*string cognome; //cognome
      string nickname;  //nome al login
      string password;  //password
      */
};

//
//costruttore di user
user::user()
{
   testa=NULL;
}

//
//distruttore di user
user::~user()
{
   dati *c;
   while(testa!=NULL)
   {
      c=testa;
      testa=testa->next;
      delete c;
   }
   testa=NULL;
}

//
//metodo aggiungi
void user::aggiungi(string cogno,string nick,string pass)
{
   dati* app = new dati;
   app->cognome=cogno;
   app->nickname=nick;
   app->password=pass;
   app->next=NULL;
   
   if(testa==NULL)
      testa=app;
   
   else
   {
      dati* tmp=testa;
      while(testa->next!=NULL)
         testa=testa->next;
      
      testa->next=app;
      testa=tmp;
   }
}  

//
//visualizzazione
void user::view(string utente)
{
   dati* temp=testa;
   while(temp)
   {
     if(utente==temp->cognome)
     {
        cout<<"Utene trovato!"<<endl;
        cout<<"Cognome: "<<temp->cognome<<endl;
        cout<<"Nickname: "<<temp->nickname<<endl;
        cout<<"Password: "<<temp->password<<endl;   
     }
     else
        temp=temp->next;
   }               
}            

//
//Cambio password
void user::password(string utente,string oldpass,string newpass)
{
   dati* temp=testa;
   while(testa!=NULL)
   {
      if(testa->cognome==utente && testa->password==oldpass)
         testa->password=newpass;
      else
         testa=testa->next;
   }
   testa=temp;
}



int main()
{
    //const int DIM=10; //dimensione massima dell array di utenti
    user User;
    string scelta, cognome, nickname, oldpassword, newpassword;
    int opzione;
    
    while(1)
    {
      system("CLS");
      cout<<"1 - inserimento utente"<<endl;
      cout<<"2 - cerca utente"<<endl;
      cout<<"3 - cambia password"<<endl;
      cout<<"4 - esci"<<endl;
      cout<<"-> ";
      cin>>opzione;
      if(opzione=='4')
         break;
      switch(opzione)
      {
         case 1:
         {
            while(1)
            {
               cout<<"Inserire dati - (q per terminare)"<<endl;
               cout<<"Cognome: ";
               cin>>cognome;
               if(cognome=="q")
                 break;
               cout<<"nickname: ";
               cin>>nickname;
               cout<<"password: ";
               cin>>newpassword;
               User.aggiungi(cognome, nickname, newpassword);
            }
            break;
         }
         case 2:
         {
            cout<<"Inserire il cognome dell'utente da cercare"<<endl;
            cin>>cognome;
            User.view(cognome);
            system("PAUSE");
            break;
         }
         case 3:
         {
            cout<<"Cambio password"<<endl;
            cout<<"Inserire il cognome dell'utente: ";
            cin>>cognome;
            cout<<"Inserire la vecchia password: ";
            cin>>oldpassword;
            cout<<"Inserire la nuova password: ";
            cin>>newpassword;
            cout<<endl;
            User.password(cognome,oldpassword,newpassword);
         }
      }//FINE DELLO SWITCH
    }//FINE DEL MENU WHILE
    return EXIT_SUCCESS;
}

4 Risposte

  • Re: Classi C++.

    Quando esegui la ricerca, hai fatto un po' di debugging per capire cosa viene eseguito in loop?
  • Re: Classi C++.

    Sì, ma quello che penso io è che non salva il puntatore a next come NULL. Il loop di stampa sono i dati dell utente che cerco.
    Ora riprovo da capo!.
  • Re: Classi C++.

    E' possibile, non ho visto il codice ma hai controllato dove inserisci il null?
  • Re: Classi C++.

    Errore trovato! Una svista
    Quando trovato l'utente non aggiornavo il valore di next, quindi andava in loop....

    Grazie di tutto! ^^
Devi accedere o registrarti per scrivere nel forum
4 risposte