Rubrica telefonica con liste: problema ordinamento

di il
1 risposte

Rubrica telefonica con liste: problema ordinamento

/ Rubrica telefonica
#include <cstdlib>
#include <iostream>
#include <string>
#include "fstream"
#include "windows.h"
#include "conio.h"


using namespace std;
void SetColor(short Color) 
{ 
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); // oppure system("COLOR E9"); 
SetConsoleTextAttribute(hCon,Color); 
}
struct nodo
{
      
      string nome, cognome, email, residenza,telefono;
      nodo*succ;
      };
      
      
      typedef struct rubrica{
              
              string nome,cognome,telefono,email,residenza;
              };
              
              
      

int main(int argc, char *argv[])
{  
    //Programma principale
    int scelta,numero,i,j,k;
    string nominativo,codice,pasword,nuovocodice;
    bool errato=false;
    nodo *testa;
    nodo *inpiu;
    nodo *punt;
    testa=NULL;
    pasword="info";
    rubrica pippo[1000];
    
    char mail[100];
    
    rubrica app;
    
    do{ 
        SetColor(2);
               cout<<"Digitare 0 per uscire dal programma "<<endl;
               cout<<"Digitare 1 per inserire un nuovo utente "<<endl;
               cout<<"Digitare 2 per stampare l'intera rubrica telefonica "<<endl;
               cout<<"Digitare 3 per ordinare la rubrica telefonica "<<endl;
               cout<<"Digitare 4 per inserire un nome e per verificare se e' presente all'interno della lista e se lo e' c'e' la stampa della lista "<<endl;
               cout<<"Digitare 5 per cancellare l'intera rubrica telefonica dopo la richiesta di password "<<endl;
               cout<<"Digitare 6 per fare il controllo dell'email "<<endl;
               cout<<"Digitare 7 per far salvare la rubrica in un file "<<endl;
               cin>>scelta;
               cout<<endl;
               switch(scelta){
        case 1://Inserimento di un nuovo utente.
          SetColor(3);
              if(testa==NULL){
                                               cout<<"La lista vouta "<<endl;
                                               testa=new nodo;//Creazione di un nuovo nodo.
                                               testa->succ=NULL;
                                               cout<<"Inserire il cognome --> "<<endl;
                                               cin>>testa->cognome;
                                               cout<<"Inserire il nome --> "<<endl;
                                               cin>>testa->nome;
                                               cout<<"Inserire la  residenza "<<endl;
                                               cin>>testa->residenza;
				                               cout<<"Inserire l'email "<<endl;
				                               cin>>testa->email;
				                               cout<<"Inserire il numero telefonico "<<endl;
		                                	   cin>>testa->telefono;
				                                            }
                else 
                     if(testa->succ==NULL){//Con un solo elemento.
                                               inpiu=new nodo;
                                               inpiu->succ=NULL;
                                               cout<<"Inserire il cognome --> "<<endl;
                                               cin>>inpiu->cognome;
                                               cout<<"Inserire il nome --> "<<endl;
                                               cin>>inpiu->nome;
                                               cout<<"Inserire la residenza --> "<<endl;
				                               cin>>inpiu->residenza;
				                               cout<<"Inserire  l'email --> "<<endl;
				                               cin>>inpiu->email;
				                               cout<<"Inserire il numero telefonico --> "<<endl;
				                               cin>>inpiu->telefono;
		                                 	   cout<<endl;
                                               testa->succ=inpiu;                                 }
                                     else{
                                          inpiu=testa;
                                          while(inpiu->succ!=NULL){
                                               inpiu=inpiu->succ;
                                          }
                                               punt=new nodo;
                                               punt->succ=NULL;
                                               cout<<"Inserire il cognome --> "<<endl;
                                               cin>>punt->cognome;
                                               cout<<endl<<"inserisci nome --> "<<endl;
                                               cin>>punt->nome;
                               			       cout<<"Inserire la residenza --> "<<endl;
				                               cin>>punt->residenza;
                                               cout<<endl<<"Inserire l'email --> "<<endl;
				                               cin>>punt->email;
                              			       cout<<endl<<"Inserire il numero di telefono--> "<<endl;
      			                               cin>>punt->telefono;
     			                               cout<<endl;
	                                           inpiu->succ=punt;
                                          }
                                
              break;
         case 2://Stampa dell'intera rubrica telefonica.
           SetColor(6);
                         if(testa==NULL)//Lista è vuota.
                                              cout<<"La lista e' vuota "<<endl;
                                else
                                    if(testa->succ==NULL)                                                          
                                         cout<<" La lista ha uno solo elemento che e': Cognome: --> "<<testa->cognome<<endl<<"Nome: "<<testa->nome<<endl<<"Telefono: "<<testa->telefono<<endl<<"Residenza: "<<testa->residenza<<endl<<"Email: "<<testa->email<<endl;
                                   else{
                                        inpiu=testa;
                                         do{                                                        
                                             cout<<"La lista ha piu' di un elemento: Cognome: "<<inpiu->cognome<<endl<<"Nome: "<<inpiu->nome<<endl<<"Telefono "<<inpiu->telefono<<endl<<"Residenza "<<inpiu->residenza<<endl<<"Email "<<inpiu->email<<endl;
                                             inpiu=inpiu->succ;
                                             }while(inpiu!=NULL);
                                           }
               break;
         case 3://Ordinamento della rubrica telefonica.
              
                 SetColor(3);
                 //Scorrere tutta la lista e salvarla nel vettore.
                                    if(testa==NULL)//Lista è vuota.
                                    cout<<"La lista e' vuota non posso ordinare"<<endl;
                                else
                                    if(testa->succ==NULL)                                                          
                                         cout<<" La lista ha un solo lemento che e': Cognome: --> "<<testa->cognome<<endl<<"Nome: "<<testa->nome<<endl<<"Telefono: "<<testa->telefono<<endl<<"Residenza: "<<testa->residenza<<endl<<"Email: "<<testa->email<<endl;
                                   else{
                                        inpiu=testa;
                                        k=-1;
                                         do{    
                                            k++;                                                        
                                             pippo[k].cognome=inpiu->cognome;
                                             pippo[k].nome=inpiu->nome;
                                             pippo[k].telefono=inpiu->telefono;
                                             pippo[k].residenza=inpiu->residenza;
                                             pippo[k].email=inpiu->email;
                                             inpiu=inpiu->succ;
                                             }while(inpiu!=NULL);
                                             }
                                          
              for(i=0;i<k-1;i++)
                   for(j=i+1;j<k;j++)
                        if(pippo[i].cognome>pippo[j].cognome){
                             app=pippo[i];
                             pippo[i]=pippo[j];
                             pippo[j]=app;
                             }   
                             //Stampa vettore
                             for(i=0;i<k;i++){                             
                             cout<<"Cognome :"<<pippo[i].cognome<<endl;
                             cout<<"Nome: "<<pippo[i].nome<<endl;
                             cout<<"Residenza: "<<pippo[i].residenza<<endl;
                             cout<<"Email: "<<pippo[i].email<<endl;
                             cout<<"Telefono: "<<pippo[i].telefono<<endl;
                             
                              }                                              
                                           
                                                       
                                                       
                                                                                               
              break;
              
              case 4:
                 SetColor(7);
//Inserimento di un numero e verifica della presenza(se è presente la rubrica viene stamapata).
              cout<<"inserisci nomintativo da tastiera"<<endl;
              cin>>nominativo;
              if(testa==NULL)
                             cout<<"la lista è vuota"<<endl;
              
                  if(testa->succ==NULL){
                                        
                                         if(testa->nome==nominativo){
					                                                 cout<<"trovato e il suo cognnome è "<<testa->cognome<<endl<<"Nome: "<<testa->nome<<endl<<"Telefono: "<<testa->telefono<<endl<<"Residenza: "<<testa->residenza<<endl<<"Email: "<<testa->email<<endl;
                                         }else{
						                      cout<<"non presente "<<endl;
                                              }
                                              
                  }
                  
                  else{
                       
                      inpiu=testa;
                      do{
                          if(nominativo==inpiu->nome){
                                                      cout<<"trovato e il suo cognome e'"<<inpiu->cognome<<endl<<"Nome: "<<inpiu->nome<<endl<<"Telefono"<<inpiu->telefono<<endl<<"Residenza "<<inpiu->residenza<<endl<<"Email "<<inpiu->email<<endl;
                                                      
                          
                          }
                          else{
                               
                               cout<<"nome non presente"<<endl;
                               
                          }
                          
                           inpiu=inpiu->succ;
                                
                               
                       
                       
                     }while(inpiu!=NULL);
                       
                                       
                       
                  }
                  
                               
                          
              break;
         case 5:
              //Cancellazione dell'intera rubrica dopo la richiesa di password.
                 SetColor(8);
              do{
              cout<<"inserire pasword da tastiera"<<endl;
              cin>>codice;
              if(codice==pasword)
                                 testa=NULL;
              else
                  cout<<"pasword errata!"<<endl;
                  }while(codice!=pasword);
              break;
              /*
         case 6://Controllo dell'email.
              i=0;
              
              while(mail[i]!='\0'){
                                   if((mail[i]>='a')&&(mail[i]<='z')){
                                                                      if(mail[i]=='@')
                                                                                      contatore++;
                                                                                      }
                                                                                      else
                                                                                          errato=true;
                                                                                          i++;
                                                                                          }
              
              break;*/
        // case 7:/*//Salvataggio della rubrica in un file.
               /*  SetColor(3);
              ofstream n("es.txt",ios::app);
              n<<inpiu->cognome;
              n<<inpiu->nome;
              
              
              n.close();
              
              
              
         
              break;  
              
      */
              }    
}while(scelta!=0);
    cout<<"Fine del programma "<<endl;                
    system("PAUSE");
    return EXIT_SUCCESS;
}


il mio problema è l'ordinamento, caso3. come vedete ho creato una typedef per sfruttare i vettori di strutture chiamato pippo ed ho utilizzato un contatore k che si incrementa ogni qualvolta che scorre la lista. a me sembrava corretto, se mi aiutate a correggere questo codice...!grazie mille

1 Risposte

  • Re: Rubrica telefonica con liste: problema ordinamento

    Parli di C++ e mi fai questi include quà?
    
    #include "fstream"
    
    per lo stesso raggionamento un std::list avrebbe risolto i tuoi problemi con un semplice iteratore che lo attraversa.
Devi accedere o registrarti per scrivere nel forum
1 risposte