Oppure

Loading
23/11/09 17:29
matteog
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
typedef char stringa[40];
struct membro
{
     stringa nome;
     stringa cognome;
     stringa citta;
     stringa numero_casa;
     stringa cellulare;
     stringa email;
     membro * succ;
};
membro * lista=NULL;
membro * first=NULL;
membro * prev;
membro * next;
stringa app;
void cornice(void);
void aggiungi(void);
void modifica(void);
void cancella(void);
void ricerca(void);
void visualizza(void);
int scelta, termina=0, nomu=0;

int main(){
     cornice();
     do{
	 cin>>scelta;
	 switch(scelta){
	     case 1:
		 aggiungi();
		 break;
	     case 2:
		 modifica();
		 break;
	     case 3:
		 cancella();
		 break;
	     case 4:
		 ricerca();
		 break;
	     case 5:
		 visualizza();
		 break;
	     case 6:
		 termina=1;
		 break;
	     default:
		 cout<<"!!! ATTENZIONE !!! Devi inserire uno dei valori indicati";
		 getch();
		 cout<<"                                                        ";
		 cout<<"     ";
	 }
     }while(termina==0);
     getch();
     return 0;
}

void aggiungi(void){
     int i=1, num_membri=0, ins=0;
     stringa nomex, cognomex, cittax, cellx, casax, emailx;
     
     nomu=1;
     cornice();
     cout<<"AGGIUNTA DI UN MEMBRO ALLA RUBRICA";
     cout<<"Inserisci il NOME : ";
     cin>>nomex;
     cout<<"Inserisci il COGNOME : ";
     cin>>cognomex;
     cout<<"Inserisci la CITTA' : ";
     cin>>cittax;
     cout<<"Inserisci il NUMERO DI CELLULARE : ";
     cin>>cellx;
     cout<<"Inserisci il NUMERO DI CASA : ";
     cin>>casax;
     cout<<"Inserisci l'INDIRIZZO DI POSTA ELETTRONICA : ";
     cin>>emailx;
     num_membri++;
     while(i<=num_membri){
	 if(first==NULL){
	      lista=new(membro);
	      strcpy(lista->nome,nomex);
	      strcpy(lista->cognome,cognomex);
	      strcpy(lista->citta,cittax);
	      strcpy(lista->cellulare,cellx);
	      strcpy(lista->numero_casa,casax);
	      strcpy(lista->email,emailx);
	      lista->succ=NULL;
	      first=lista;
	 }
	 else{
	      lista=first;
	      ins=0;
	      while(ins==0){
		   if(lista->succ!=NULL){
			 if(strcmp(cognomex,lista->cognome)>0){
				    prev=lista;
				    lista=lista->succ;
				    next=lista;
			 }
			 else{
				    if(lista!=first){
					     prev->succ=new(membro);
					     lista=prev->succ;
					     strcpy(lista->nome,nomex);
					     strcpy(lista->cognome,cognomex);
					     strcpy(lista->citta,cittax);
						 strcpy(lista->cellulare,cellx);
					     strcpy(lista->numero_casa,casax);
					     strcpy(lista->email,emailx);
					     lista->succ=next;
					     ins=1;
				    }
				    else{
					     next=first;
					     lista=new(membro);
					     strcpy(lista->nome,nomex);
					     strcpy(lista->cognome,cognomex);
					     strcpy(lista->citta,cittax);
					     strcpy(lista->cellulare,cellx);
					     strcpy(lista->numero_casa,casax);
					     strcpy(lista->email,emailx);
					     lista->succ=next;
					     first=lista;
					     ins=1;
				    }
			 }
		   }
		   else{
			 if(strcmp(cognomex,lista->cognome)>0){
				    lista->succ=new(membro);
				    lista=lista->succ;
				    strcpy(lista->nome,nomex);
				    strcpy(lista->cognome,cognomex);
					strcpy(lista->citta,cittax);
				    strcpy(lista->cellulare,cellx);
			        strcpy(lista->numero_casa,casax);
		            strcpy(lista->email,emailx);
				    lista->succ=NULL;
				    ins=1;
			 }
			 else{
				    if(prev!=NULL){
					     prev->succ=new(membro);
					     lista=prev->succ;
					     strcpy(lista->nome,nomex);
					     strcpy(lista->cognome,cognomex);
					     strcpy(lista->citta,cittax);
					     strcpy(lista->cellulare,cellx);
					     strcpy(lista->numero_casa,casax);
					     strcpy(lista->email,emailx);
					     lista->succ=next;
					     ins=1;
				    }
				    else{
					     next=first;
					     lista=new(membro);
					     strcpy(lista->nome,nomex);
					     strcpy(lista->cognome,cognomex);
					     strcpy(lista->citta,cittax);
					     strcpy(lista->cellulare,cellx);
					     strcpy(lista->numero_casa,casax);
					     strcpy(lista->email,emailx);
					     lista->succ=next;
					     first=lista;
					     ins=1;
				    }
			 }
		   }
	      }
	 }
	 i++;
     }
     
     nomu=0;
     cornice();
}

void modifica(void)
{  
   system("cls");
   cout<<"ben venuti!"<<endl;
   int trovato=0;
     stringa nomet;
     nomu=1;
     cornice();
     lista=first;
     cout<<"Inserisci il nome del membro da modificare : ";
     cin>>nomet;
     while((trovato==0)&&(lista!=NULL))
	 {
	   if(strcmp(lista->nome,nomet)==0)
	   {
	      trovato=1;
	   }
	  else
	      lista=lista->succ;
     }
      if(trovato==0)
	 {
	   cout<<"Il membro di nome " <<nomet <<" non e' presente in rubrica.";
     }
     else
	 {
	  cout<<"Ecco i dati del membro di nome " <<nomet <<" :";
	  cout<<"Nome: "<<lista->nome<<endl;
	  cout<<"Cognome: "<<lista->cognome<<endl;
	  cout<<"Citta': "<<lista->citta<<endl;
	  cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
	  cout<<"Numero di casa: "<<lista->numero_casa<<endl;
	  cout<<"Indirizzo email: "<<lista->email<<endl;
	  strcpy(lista->nome,app);
	  strcpy(lista->cognome,app);
	  strcpy(lista->citta,app);
	  strcpy(lista->cellulare,app);
	  strcpy(lista->numero_casa,app);
	  strcpy(lista->email,app);
	  

	int i=1, num_membri=0, ins=0;
     stringa nomex, cognomex, cittax, cellx, casax, emailx;
     
     nomu=1;
     cornice();
     cout<<"AGGIUNTA DI UN MEMBRO ALLA RUBRICA";
     cout<<"Inserisci il NOME : ";
     cin>>nomex;
     cout<<"Inserisci il COGNOME : ";
     cin>>cognomex;
     cout<<"Inserisci la CITTA' : ";
     cin>>cittax;
     cout<<"Inserisci il NUMERO DI CELLULARE : ";
     cin>>cellx;
     cout<<"Inserisci il NUMERO DI CASA : ";
     cin>>casax;
     cout<<"Inserisci l'INDIRIZZO DI POSTA ELETTRONICA : ";
     cin>>emailx;
     strcpy(lista->nome,nomex);
	 strcpy(lista->cognome,cognomex);
	 strcpy(lista->citta,cittax);
	 strcpy(lista->cellulare,cellx);
	 strcpy(lista->numero_casa,casax);
	 strcpy(lista->email,emailx);
	 lista=lista->succ;
	 }
     getch();
     
     nomu=0;
     cornice();
     




}

void cancella(void)
{
	 system("cls");
	 int trovato=0;
     stringa nomet;
     nomu=1;
     cornice();
     lista=first;
     cout<<"Inserisci il nome del membro da trovare : ";
     cin>>nomet;
	 
     while((trovato==0)&&(lista!=NULL))
	 {
		
	  if(strcmp(lista->nome,nomet)==0){
	      trovato=1;
		  
		 	 
	  }
	  else
	      lista=lista->succ;
     }
     if(trovato==0){
	   cout<<"Il membro di nome " <<nomet <<" non e' presente in rubrica.";
     }
     else
	 {
	  cout<<"Ecco i dati del membro di nome " <<nomet <<" :";
	  cout<<"Nome: "<<lista->nome<<endl;
	  cout<<"Cognome: "<<lista->cognome<<endl;
	  cout<<"Citta': "<<lista->citta<<endl;
	  cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
	  cout<<"Numero di casa: "<<lista->numero_casa<<endl;
	  cout<<"Indirizzo email: "<<lista->email<<endl;
	 

//qui come faccio a eliminare il contatti e riagganciare alla successiva?? 
    lista=lista->succ;
 }
     getch();
     
     nomu=0;
     cornice();
     


}


void ricerca(void){
     system("cls");
	 int trovato=0;
     stringa nomet;
     nomu=1;
     cornice();
     lista=first;
     cout<<"Inserisci il nome del membro da trovare : ";
     cin>>nomet;
     while((trovato==0)&&(lista!=NULL)){

	if(strcmp(lista->nome,nomet)==0){
	      trovato=1;
	  }
	  else
	      lista=lista->succ;
     }
     if(trovato==0)
	 {
	   cout<<"Il membro di nome " <<nomet <<" non e' presente in rubrica.";
     }
     else{
	  cout<<"Ecco i dati del membro di nome " <<nomet <<" :";
	  cout<<"Nome: "<<lista->nome<<endl;
	  cout<<"Cognome: "<<lista->cognome<<endl;
	  cout<<"Citta': "<<lista->citta<<endl;
	  cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
	  cout<<"Numero di casa: "<<lista->numero_casa<<endl;
	  cout<<"Indirizzo email: "<<lista->email<<endl;
     }
     getch();
     
     nomu=0;
     cornice();
}

void cornice(void)
{
     system("cls");
     if(nomu==0){
       cout<<"RUBRICA DEL GRUPPO 5 2004/2005";
       cout<<"1. Aggiungi numero"<<endl;
       cout<<"2. Modifica numero"<<endl;
       cout<<"3. Cancella numero"<<endl;
       cout<<"4. Ricerca  numero"<<endl;
       cout<<"5. Visualizza cognomi della rubrica"<<endl;
       cout<<"6. Esci dalla rubrica"<<endl;
       cout<<"FAI LA TUA SCELTA >>> Inserisci un valore : "<<endl;
     }
}
void visualizza()
{    
	 system("cls");
	 lista=first;
	 while(lista!=NULL)
	 {
		  
		  cout<<"Ecco i dati del membro : "<<endl; 
	      cout<<"Nome: "<<lista->nome<<endl;
	      cout<<"Cognome: "<<lista->cognome<<endl;
		  cout<<"Citta': "<<lista->citta<<endl;
		  cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
	      cout<<"Numero di casa: "<<lista->numero_casa<<endl;
	      cout<<"Indirizzo email: "<<lista->email<<"\n\n\n\n\n"<<endl;
	      lista=lista->succ;
     }
	 cornice();
}



non sò come fare la funzione cancella???mi sapete aiutare??:k:
aaa
23/11/09 17:43
HeDo

tra "non sapere" e "non pensarci neanche" c'è ben poca strada.

cmq questa è una double linked list, per cancellare un elemento devi impostare il next dell'elemento precedente al next dell'elemento cancellato e il prev dell'elemento successivo al prev dell'elemento cancellato e infine deallocare l'elemento che vuoi cancellare.

in soldoni:

Node : nodo che elimini
NextNode : nodo successivo (a quello che elimini)
PrevNode : nodo precedente (a quello che elimini)

NextNode.prev = Node.prev
PrevNode.next = Node.next

basta pensarci 30 secondi per accorgersi di quanto è lampante e chiara questa cosa.


aaa
23/11/09 17:45
matteog
grazie mille ma se fosse stato lampante non avrei chiesto comuque grazie sei stato molto chiaro:k:
aaa
23/11/09 17:52
HeDo
Postato originariamente da matteog:

grazie mille ma se fosse stato lampante non avrei chiesto comuque grazie sei stato molto chiaro:k:


di niente, ma secondo me avresti risparmiato tempo se al posto di postare ci avessi pensato quei 2 minuti in più :k:
aaa