Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    536

    [C++] salvare dati in un file

    Ho trovato questo codice:

    codice:
    #include <iostream.h>
    #include <iomanip.h>
    
    const int FALSO = 0;
    const int VERO = 1;
    struct Data 
      { int giorno, // 1-31
    	    mese,   // 1-12
    	    anno;   // 00-99
      };
    const int MAXIDENT =10;
    struct Studente 
      { int matricola;
    	char cognome[MAXIDENT],
    	     nome[MAXIDENT],
    	     sesso;  // M,F
    	Data dataNascita;
      };
    const int DIM = 8;
    struct InsStudenti 
      { int num;                  // numero di righe significative
    	Studente elenco[DIM];
      };
     InsStudenti inizializzaTabella();
    void inserisciSeNonEsiste(Studente, InsStudenti &);
    void eliminaSeEsiste(int,InsStudenti &);
    void cercaSeEsisteEPosizione(int, InsStudenti &,int &, int &);
    void stampaTabella(InsStudenti &);
    
    int main()
    { 
      const char INSERISCI = 'i';
      const char ELIMINA = 'e';
      const char FINE = 'f';
      char operazione ;       // operazione da effettuare sulla tabella
      Studente nuovoStudente; // dati dello studente da inserire
      int matricola;          // matricola dello studente da eliminare
      InsStudenti classe;
      //inizializzazione della tabella
    	classe = inizializzaTabella();
    	stampaTabella(classe);
      //acquisizione e gestione delle operazioni sulla tabella
    	//intestazione in uscita
    	  cout << setw(50) << "acquisizione operazioni" << endl << endl;
    	//acquisizione di operazione per prima rilevazione
    	  cout << "operazione? ( i per inserimento,"
    		  <<              " e per eliminazione,"
    		  <<              " f per fine"        << " ): ";
    	  cin >> operazione;
    	while (operazione != FINE)
          { if (operazione == INSERISCI) 
              { //lettura dei dati del nuovo studente
                  cout << " dati del nuovo studente" << endl;
                  cout << " matricola: "; cin >> nuovoStudente.matricola;
                  cout << " cognome: "; cin >> nuovoStudente.cognome;
                  cout << " nome: "; cin >> nuovoStudente.nome;
                  cout << " sesso( M/F ): "; cin >> nuovoStudente.sesso;
                  cout << " giorno di nascita (1-31): ";
                    cin >> nuovoStudente.dataNascita.giorno;
                  cout << " mese di nascita (1-12): ";
                    cin >> nuovoStudente.dataNascita.mese;
                  cout << " anno di nascita (0-99): ";
                    cin >> nuovoStudente.dataNascita.anno;
                inserisciSeNonEsiste(nuovoStudente,classe);
                stampaTabella(classe);
              }
            else if (operazione == ELIMINA)
              { //lettura matricola studente da eliminare
                  cout << " matricola studente da eliminare: ";
                  cin >> matricola; 
                eliminaSeEsiste(matricola,classe);
                stampaTabella(classe);
              }
            //acquisizione di prossima operazione
              cout << "operazione? ( i per inserimento,"
    				        << " e per eliminazione,"
                                << " f per fine" << " ): ";
              cin >> operazione;
    	   }
    	  system ("PAUSE");
    	  return 0;
     
    }
    InsStudenti inizializzaTabella()
    { 
      InsStudenti tab = 
                   {
    			   4,
    			   {{7, " rossi", " marco",'M',{5,10,76}},
    				{48," verdi", " anna", 'F',{4, 7,75}},
    				{63," neri",  " remo", 'M',{5, 8,76}},
    				{84," gialli"," carla",'F',{5,11,75}}
    			   }
    		      };
      return tab;
    }
    void cercaSeEsisteEPosizione(int dato, InsStudenti &tab,
                                 int &esiste, int &pos)
    
    {
        esiste = FALSO;// fino a prova contraria si suppone che in tab non
    			// esista uno studente con matricola uguale a dato.
       //gestione dei casi speciali
    	 //caso speciale di studente non esistente 
    	 //da inserire in prima posizione
    	   if ((tab.num == 0) ||		               // tabella vuota
    		 (tab.elenco[0].matricola > dato)) 
             pos = -1;
    	 //caso speciale di studente esistente in prima posizione
    	   else if (tab.elenco[0].matricola == dato) 
             { esiste = VERO;
    	       pos = -1;
    	     }
    	 //caso generale: pos individua un elemento della lista 
           else                                        
            { pos = 0; // si parte dal primo elemento
              int finito = FALSO;   // finché non è finita la ricerca
    	      while (finito == FALSO) // si esamina il successore di pos: 
                { if (pos == tab.num -1) // non esiste successore
                    finito = VERO;
    		     else if (tab.elenco[pos+1].matricola == dato) 
                    { finito = VERO;     // l'elemento cercato
                      esiste = VERO;     // è quello successivo a pos
                    }
                  else if (tab.elenco[pos+1].matricola > dato)
                    finito = VERO;       // l'elemento cercato non esiste
                  else
                    pos++; //la decisione se l'elemento cercato esiste
                           //richiede la continuazione del ciclo a partire
                           //dall'elemento successivo a pos
    	        }
    	    }
    
    }
    
    void inserisciSeNonEsiste(Studente nuovoStudente, InsStudenti &tab)
    { 
      int esiste, posizione;
      cercaSeEsisteEPosizione(nuovoStudente.matricola, tab, esiste, 					      posizione);
      if ((esiste == FALSO) && (tab.num <= DIM))
        { cout << "inserimento di studente con matricola"
               << setw(5) << nuovoStudente.matricola << endl;
          int temp = posizione + 1;
          for (int i = tab.num - 1; i >= temp; i--)
            tab.elenco[i + 1] = tab.elenco[i];
          tab.elenco[temp] = nuovoStudente;
          tab.num++;
    	}
    }
    void eliminaSeEsiste(int matricola, InsStudenti &tab)
    { 
     int esiste, posizione;
      cercaSeEsisteEPosizione(matricola, tab, esiste, posizione);
      if (esiste == VERO) 
        { cout << "eliminazione di studente con matricola"
               << setw(5) << matricola << endl;
          int temp = posizione + 1; //posizione dell'elemento da eliminare
          for (int i = temp + 1; i < tab.num; i++)
            tab.elenco[i - 1] = tab.elenco[i];
          tab.num--;
    	}
    }
    void stampaTabella(InsStudenti &tab)
    { 
      int i;
      cout << " tabella con il solo campo chiave " << endl<<endl;
      for(i = 0; i< tab.num; i++){
        cout << setw(5) << tab.elenco[i].matricola;
        cout << setw(5) << tab.elenco[i].cognome;
        cout << setw(5) << tab.elenco[i].nome;
        cout<<endl;
        }
      cout << endl << endl;
    }
    vorrei aggiungere una funzione a questo codice che salva i dati modificati in un file.
    So che bisogna prima di tutto includere:

    #include <fstream>

    ma poi provando a sviluppare la funzione mi sono incartato nei messaggi di errore.
    Potete aiutarmi ad inserire in questo codice la funzione salva dati?
    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    536
    piccolo aiutino?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.