Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - programma gestione studenti con  le liste creare la funzione cancella
Forum - C/C++ - programma gestione studenti con le liste creare la funzione cancella

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 18:29
Lunedì, 23/11/2009
Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. using namespace std;
  8. typedef char stringa[40];
  9. struct membro
  10. {
  11.      stringa nome;
  12.      stringa cognome;
  13.      stringa citta;
  14.      stringa numero_casa;
  15.      stringa cellulare;
  16.      stringa email;
  17.      membro * succ;
  18. };
  19. membro * lista=NULL;
  20. membro * first=NULL;
  21. membro * prev;
  22. membro * next;
  23. stringa app;
  24. void cornice(void);
  25. void aggiungi(void);
  26. void modifica(void);
  27. void cancella(void);
  28. void ricerca(void);
  29. void visualizza(void);
  30. int scelta, termina=0, nomu=0;
  31.  
  32. int main(){
  33.      cornice();
  34.      do{
  35.          cin>>scelta;
  36.          switch(scelta){
  37.              case 1:
  38.                  aggiungi();
  39.                  break;
  40.              case 2:
  41.                  modifica();
  42.                  break;
  43.              case 3:
  44.                  cancella();
  45.                  break;
  46.              case 4:
  47.                  ricerca();
  48.                  break;
  49.              case 5:
  50.                  visualizza();
  51.                  break;
  52.              case 6:
  53.                  termina=1;
  54.                  break;
  55.              default:
  56.                  cout<<"!!! ATTENZIONE !!! Devi inserire uno dei valori indicati";
  57.                  getch();
  58.                  cout<<"                                                        ";
  59.                  cout<<"     ";
  60.          }
  61.      }while(termina==0);
  62.      getch();
  63.      return 0;
  64. }
  65.  
  66. void aggiungi(void){
  67.      int i=1, num_membri=0, ins=0;
  68.      stringa nomex, cognomex, cittax, cellx, casax, emailx;
  69.      
  70.      nomu=1;
  71.      cornice();
  72.      cout<<"AGGIUNTA DI UN MEMBRO ALLA RUBRICA";
  73.      cout<<"Inserisci il NOME : ";
  74.      cin>>nomex;
  75.      cout<<"Inserisci il COGNOME : ";
  76.      cin>>cognomex;
  77.      cout<<"Inserisci la CITTA' : ";
  78.      cin>>cittax;
  79.      cout<<"Inserisci il NUMERO DI CELLULARE : ";
  80.      cin>>cellx;
  81.      cout<<"Inserisci il NUMERO DI CASA : ";
  82.      cin>>casax;
  83.      cout<<"Inserisci l'INDIRIZZO DI POSTA ELETTRONICA : ";
  84.      cin>>emailx;
  85.      num_membri++;
  86.      while(i<=num_membri){
  87.          if(first==NULL){
  88.               lista=new(membro);
  89.               strcpy(lista->nome,nomex);
  90.               strcpy(lista->cognome,cognomex);
  91.               strcpy(lista->citta,cittax);
  92.               strcpy(lista->cellulare,cellx);
  93.               strcpy(lista->numero_casa,casax);
  94.               strcpy(lista->email,emailx);
  95.               lista->succ=NULL;
  96.               first=lista;
  97.          }
  98.          else{
  99.               lista=first;
  100.               ins=0;
  101.               while(ins==0){
  102.                    if(lista->succ!=NULL){
  103.                          if(strcmp(cognomex,lista->cognome)>0){
  104.                                     prev=lista;
  105.                                     lista=lista->succ;
  106.                                     next=lista;
  107.                          }
  108.                          else{
  109.                                     if(lista!=first){
  110.                                              prev->succ=new(membro);
  111.                                              lista=prev->succ;
  112.                                              strcpy(lista->nome,nomex);
  113.                                              strcpy(lista->cognome,cognomex);
  114.                                              strcpy(lista->citta,cittax);
  115.                                                  strcpy(lista->cellulare,cellx);
  116.                                              strcpy(lista->numero_casa,casax);
  117.                                              strcpy(lista->email,emailx);
  118.                                              lista->succ=next;
  119.                                              ins=1;
  120.                                     }
  121.                                     else{
  122.                                              next=first;
  123.                                              lista=new(membro);
  124.                                              strcpy(lista->nome,nomex);
  125.                                              strcpy(lista->cognome,cognomex);
  126.                                              strcpy(lista->citta,cittax);
  127.                                              strcpy(lista->cellulare,cellx);
  128.                                              strcpy(lista->numero_casa,casax);
  129.                                              strcpy(lista->email,emailx);
  130.                                              lista->succ=next;
  131.                                              first=lista;
  132.                                              ins=1;
  133.                                     }
  134.                          }
  135.                    }
  136.                    else{
  137.                          if(strcmp(cognomex,lista->cognome)>0){
  138.                                     lista->succ=new(membro);
  139.                                     lista=lista->succ;
  140.                                     strcpy(lista->nome,nomex);
  141.                                     strcpy(lista->cognome,cognomex);
  142.                                         strcpy(lista->citta,cittax);
  143.                                     strcpy(lista->cellulare,cellx);
  144.                                 strcpy(lista->numero_casa,casax);
  145.                             strcpy(lista->email,emailx);
  146.                                     lista->succ=NULL;
  147.                                     ins=1;
  148.                          }
  149.                          else{
  150.                                     if(prev!=NULL){
  151.                                              prev->succ=new(membro);
  152.                                              lista=prev->succ;
  153.                                              strcpy(lista->nome,nomex);
  154.                                              strcpy(lista->cognome,cognomex);
  155.                                              strcpy(lista->citta,cittax);
  156.                                              strcpy(lista->cellulare,cellx);
  157.                                              strcpy(lista->numero_casa,casax);
  158.                                              strcpy(lista->email,emailx);
  159.                                              lista->succ=next;
  160.                                              ins=1;
  161.                                     }
  162.                                     else{
  163.                                              next=first;
  164.                                              lista=new(membro);
  165.                                              strcpy(lista->nome,nomex);
  166.                                              strcpy(lista->cognome,cognomex);
  167.                                              strcpy(lista->citta,cittax);
  168.                                              strcpy(lista->cellulare,cellx);
  169.                                              strcpy(lista->numero_casa,casax);
  170.                                              strcpy(lista->email,emailx);
  171.                                              lista->succ=next;
  172.                                              first=lista;
  173.                                              ins=1;
  174.                                     }
  175.                          }
  176.                    }
  177.               }
  178.          }
  179.          i++;
  180.      }
  181.      
  182.      nomu=0;
  183.      cornice();
  184. }
  185.  
  186. void modifica(void)
  187. {  
  188.    system("cls");
  189.    cout<<"ben venuti!"<<endl;
  190.    int trovato=0;
  191.      stringa nomet;
  192.      nomu=1;
  193.      cornice();
  194.      lista=first;
  195.      cout<<"Inserisci il nome del membro da modificare : ";
  196.      cin>>nomet;
  197.      while((trovato==0)&&(lista!=NULL))
  198.          {
  199.            if(strcmp(lista->nome,nomet)==0)
  200.            {
  201.               trovato=1;
  202.            }
  203.           else
  204.               lista=lista->succ;
  205.      }
  206.       if(trovato==0)
  207.          {
  208.            cout<<"Il membro di nome " <<nomet <<" non e' presente in rubrica.";
  209.      }
  210.      else
  211.          {
  212.           cout<<"Ecco i dati del membro di nome " <<nomet <<" :";
  213.           cout<<"Nome: "<<lista->nome<<endl;
  214.           cout<<"Cognome: "<<lista->cognome<<endl;
  215.           cout<<"Citta': "<<lista->citta<<endl;
  216.           cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
  217.           cout<<"Numero di casa: "<<lista->numero_casa<<endl;
  218.           cout<<"Indirizzo email: "<<lista->email<<endl;
  219.           strcpy(lista->nome,app);
  220.           strcpy(lista->cognome,app);
  221.           strcpy(lista->citta,app);
  222.           strcpy(lista->cellulare,app);
  223.           strcpy(lista->numero_casa,app);
  224.           strcpy(lista->email,app);
  225.          
  226.  
  227.         int i=1, num_membri=0, ins=0;
  228.      stringa nomex, cognomex, cittax, cellx, casax, emailx;
  229.      
  230.      nomu=1;
  231.      cornice();
  232.      cout<<"AGGIUNTA DI UN MEMBRO ALLA RUBRICA";
  233.      cout<<"Inserisci il NOME : ";
  234.      cin>>nomex;
  235.      cout<<"Inserisci il COGNOME : ";
  236.      cin>>cognomex;
  237.      cout<<"Inserisci la CITTA' : ";
  238.      cin>>cittax;
  239.      cout<<"Inserisci il NUMERO DI CELLULARE : ";
  240.      cin>>cellx;
  241.      cout<<"Inserisci il NUMERO DI CASA : ";
  242.      cin>>casax;
  243.      cout<<"Inserisci l'INDIRIZZO DI POSTA ELETTRONICA : ";
  244.      cin>>emailx;
  245.      strcpy(lista->nome,nomex);
  246.          strcpy(lista->cognome,cognomex);
  247.          strcpy(lista->citta,cittax);
  248.          strcpy(lista->cellulare,cellx);
  249.          strcpy(lista->numero_casa,casax);
  250.          strcpy(lista->email,emailx);
  251.          lista=lista->succ;
  252.          }
  253.      getch();
  254.      
  255.      nomu=0;
  256.      cornice();
  257.      
  258.  
  259.  
  260.  
  261.  
  262. }
  263.  
  264. void cancella(void)
  265. {
  266.          system("cls");
  267.          int trovato=0;
  268.      stringa nomet;
  269.      nomu=1;
  270.      cornice();
  271.      lista=first;
  272.      cout<<"Inserisci il nome del membro da trovare : ";
  273.      cin>>nomet;
  274.          
  275.      while((trovato==0)&&(lista!=NULL))
  276.          {
  277.                
  278.           if(strcmp(lista->nome,nomet)==0){
  279.               trovato=1;
  280.                  
  281.                          
  282.           }
  283.           else
  284.               lista=lista->succ;
  285.      }
  286.      if(trovato==0){
  287.            cout<<"Il membro di nome " <<nomet <<" non e' presente in rubrica.";
  288.      }
  289.      else
  290.          {
  291.           cout<<"Ecco i dati del membro di nome " <<nomet <<" :";
  292.           cout<<"Nome: "<<lista->nome<<endl;
  293.           cout<<"Cognome: "<<lista->cognome<<endl;
  294.           cout<<"Citta': "<<lista->citta<<endl;
  295.           cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
  296.           cout<<"Numero di casa: "<<lista->numero_casa<<endl;
  297.           cout<<"Indirizzo email: "<<lista->email<<endl;
  298.          
  299.  
  300. //qui come faccio a eliminare il contatti e riagganciare alla successiva??
  301.     lista=lista->succ;
  302.  }
  303.      getch();
  304.      
  305.      nomu=0;
  306.      cornice();
  307.      
  308.  
  309.  
  310. }
  311.  
  312.  
  313. void ricerca(void){
  314.      system("cls");
  315.          int trovato=0;
  316.      stringa nomet;
  317.      nomu=1;
  318.      cornice();
  319.      lista=first;
  320.      cout<<"Inserisci il nome del membro da trovare : ";
  321.      cin>>nomet;
  322.      while((trovato==0)&&(lista!=NULL)){
  323.  
  324.         if(strcmp(lista->nome,nomet)==0){
  325.               trovato=1;
  326.           }
  327.           else
  328.               lista=lista->succ;
  329.      }
  330.      if(trovato==0)
  331.          {
  332.            cout<<"Il membro di nome " <<nomet <<" non e' presente in rubrica.";
  333.      }
  334.      else{
  335.           cout<<"Ecco i dati del membro di nome " <<nomet <<" :";
  336.           cout<<"Nome: "<<lista->nome<<endl;
  337.           cout<<"Cognome: "<<lista->cognome<<endl;
  338.           cout<<"Citta': "<<lista->citta<<endl;
  339.           cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
  340.           cout<<"Numero di casa: "<<lista->numero_casa<<endl;
  341.           cout<<"Indirizzo email: "<<lista->email<<endl;
  342.      }
  343.      getch();
  344.      
  345.      nomu=0;
  346.      cornice();
  347. }
  348.  
  349. void cornice(void)
  350. {
  351.      system("cls");
  352.      if(nomu==0){
  353.        cout<<"RUBRICA DEL GRUPPO 5 2004/2005";
  354.        cout<<"1. Aggiungi numero"<<endl;
  355.        cout<<"2. Modifica numero"<<endl;
  356.        cout<<"3. Cancella numero"<<endl;
  357.        cout<<"4. Ricerca  numero"<<endl;
  358.        cout<<"5. Visualizza cognomi della rubrica"<<endl;
  359.        cout<<"6. Esci dalla rubrica"<<endl;
  360.        cout<<"FAI LA TUA SCELTA >>> Inserisci un valore : "<<endl;
  361.      }
  362. }
  363. void visualizza()
  364. {    
  365.          system("cls");
  366.          lista=first;
  367.          while(lista!=NULL)
  368.          {
  369.                  
  370.                   cout<<"Ecco i dati del membro : "<<endl;
  371.               cout<<"Nome: "<<lista->nome<<endl;
  372.               cout<<"Cognome: "<<lista->cognome<<endl;
  373.                   cout<<"Citta': "<<lista->citta<<endl;
  374.                   cout<<"Numero del cellulare: "<<lista->cellulare<<endl;
  375.               cout<<"Numero di casa: "<<lista->numero_casa<<endl;
  376.               cout<<"Indirizzo email: "<<lista->email<<"\n\n\n\n\n"<<endl;
  377.               lista=lista->succ;
  378.      }
  379.          cornice();
  380. }




non sò come fare la funzione cancella???mi sapete aiutare??:k:

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 18:43
Lunedì, 23/11/2009

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.



PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 18:45
Lunedì, 23/11/2009
grazie mille ma se fosse stato lampante non avrei chiesto comuque grazie sei stato molto chiaro:k:

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 18:52
Lunedì, 23/11/2009
Testo quotato

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:

PM Quote