salve a tutti...vorrei chiedere un aiuto riguardo un esercizio in c++ che devo fare. si tratta di gestire una rubrica telefonica con una lista. tutto bene, se non fosse che non riesco a capire come poter gestire la modifica di una voce (nome o numero) e successivo riordino (alfabetico) della rubrica.
posto qui sotto l'esercizio.
codice:
#include<iostream.h>
struct nodo{ //creazione della struttura nodo
char numero[11];
std::string nome;
nodo *next;
nodo *prec;
};
nodo *testa=NULL;
nodo *appoggio=NULL;
nodo *appoggio2=NULL;
std::string s;
int cont=0,h=0,f=0;
nodo *q=testa,*p=testa;
void creanodo (nodo *testa);
void instesta ();
void insmezzo();
nodo* ricerca (std::string s) ;
void cancella (std::string s);
void modifica(std::string s);
void ordina();
int main () {
int scelta=0;
char risp;
cout<<"******MENU*****\n\n";
while(scelta!=5){
cout<<"1.inserimento voce in rubrica\n";
cout<<"2.cancellazione voce della rubrica\n";
cout<<"3.ricerca voce nella rubrica\n";
cout<<"4.modifica voce\n";
cout<<"5.esci\n\n";
cin>>scelta;
cout<<"\n\n";
if(scelta==1)
{
system("cls");
cont++;
cout<<"E' il primo inserimento?(s=si n=no) : ";
cin>>risp;
cout<<"\n\n";
if((risp!='s')&&(risp!='n')) exit;
if(risp=='s'){
creanodo(testa);
instesta();
}
if(risp=='n'){
creanodo(testa);
insmezzo();
}
}
if(scelta==2)
{
system("cls");
if(cont==0) cout<<"rubrica vuota\n\n";
else{
cont--;
cout<<"inserisci il nome : ";
cin>>s;
cout<<"\n\n";
cancella(s);}
}
if(scelta==3)
{
system("cls");
if(testa==NULL) cout<<"rubrica vuota\n\n";
else{
cout<<"inserisci il nome : ";
cin>>s;
cout<<"\n\n";
ricerca(s);
cout<<"\n\n";
}
}
if(scelta==4)
{
system("cls");
if(testa==NULL) cout<<"rubrica vuota\n\n";
else{
cout<<"inserisci il nome : ";
cin>>s;
cout<<"\n\n";
//modifica();
cout<<"\n\n";
}
}
}
exit;
return 0;
}
void creanodo (nodo *testa) //creazione nuova voce
{
appoggio=new(nodo);
cout<<"\n\ninserisci nome: ";
cin>>appoggio->nome;
cout<<"\n";
cout<<"inserisci numero : ";
fflush(stdin);
cin.getline(appoggio->numero,11);
cout<<"\n\n";
appoggio->next=NULL;
}
void instesta (){ //inserimento voce in testa
appoggio->next=NULL;
testa=appoggio;
cout<<" **rubrica** \n\n";
cout<<" "<<testa->nome;
cout<<" ";
cout<<testa->numero<<"\n\n\n\n";
}
void insmezzo(){ //inserimento voce ordinato
p=testa;q=testa;
while((q!=NULL)&&(q->nome<appoggio->nome)){
p=q;
q=q->next;}
if(p->nome<appoggio->nome){
appoggio->next=q;
p->next=appoggio; }
else{
if(p==q){
testa=appoggio;
appoggio->next=p;}
if(p!=q){
appoggio->next=q;
p->next=appoggio; }
}
q=testa;
cout<<" **rubrica** \n\n";
while(q!=NULL)
{
cout<<" "<<q->nome;
cout<<" ";
cout<<q->numero<<"\n";
q=q->next;
}
cout<<"\n\n\n\n";
}
nodo *ricerca (std::string s) //ricerca voce in rubrica
{
f=0;
q=testa;p=testa;
while(q!=NULL ){
if(q->nome==s)
{
f=2;
cout<<"al nome '"<<q->nome<<"' corrisponde il numero : ";
cout<<q->numero;
cout<<endl<<endl;
p=q;
}
q=q->next;}
if(f==0) cout<<"voce non trovata\n\n";
return p;
}
void cancella (std::string s){ //cancellazione voce
h=0;
p=testa;
q=testa;
while((q!=NULL)&&(q->nome!=s)){
p=q; q=q->next;h=2;}
if(q==NULL) cout<<"voce inesistente\n\n";
else{
if(p!=q){
appoggio=q;
p->next=q->next;
cout<<"la voce cancellata e' : ";
cout<<appoggio->nome<<" "<<appoggio->numero<<"\n\n";
delete appoggio;
}
else{
appoggio=testa;
testa=q->next;
cout<<"la voce cancellata e' : ";
cout<<appoggio->nome<<" "<<appoggio->numero<<"\n\n";
delete appoggio;}}
if(testa==NULL) cout<<"rubrica vuota";
else{
q=testa;
cout<<" **rubrica** \n\n";
while(q!=NULL)
{
cout<<" "<<q->nome;
cout<<" ";
cout<<q->numero<<"\n";
q=q->next;
}}
cout<<"\n\n\n\n";
}
void modifica(){
// come faccio??
}