/ 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