Oppure

Loading
22/06/08 6:24
Linkage7th
Salve ragazzi,
devo consegnare un progetto per la gestione di un archivio ad accesso casuale. Ne ho scritto il codice, che ho controllato centinaia e centinaia di volte, ma proprio DevC++ (od anche Visual C++) non ne vuole sapere di eseguirlo, dato che mi dà sempre errori assurdi (tipo "cout undeclared - first use this function"!!)..
Sono davvero disperato, perché non so davvero più cosa fare...Sicuramente continuo a non accorgermi di qualche eventuale errore, ma senza un piccolo aiuto non credo di riuscirci.
Vi riporto integralmente il codice di seguito.

Spero davvero possiate aiutarmi, perché devo consegnare il tutto lunedì e al momento l'unica cosa che riesco a pensare è che ho buttato tanto tempo per niente:d


 //Gestione archivio accesso casuale 
//file main.cpp 

#include "archindex.h" 
#include "Record.h" 
#include >iostream.h> 
using std::cout; 
using std::cin; 

enum {DIM_nomeFile=15}; 

void main(){ 
    char nomeFile[DIM_nomeFile], nomeIndice[DIM_nomeFile]; 
    int scelta, esci=0 
    int rec_tot, rec_validi; 
    Record rec; 
    char chiave_rec[DIM_chiave]; 
    cout<<"Software gestionale centro sportivo"<<endl; 
    cout<<"Inserire il nome dell\'archivio:"; 
    cin.getline(nomeFile,DIM_nomeFile-1); 

    strcpy(nomeIndice, nomeFile); 
    strcat(nomeIndice, ".IND"); 
    Archindex.ai(nomeFile, nomeIndice); 
    while(!uscita) { 
        do { 

            cout<<[1]"INSERIRE NUOVO ISCRITTO\n"; 
            cout<<[2]"ELIMINAZIONE UTENTE\n"; 
            cout<<[3]"RICERCA, SELEZIONA E STAMPA UTENTE\n"; 
            cout<<[4]"MODIFICA UTENTE\n"; 
            cout<<[5]"RIPRISTINA UTENTE\n"; 
            cout<<[6]"STATO ARCHIVIO\n"; 
            cout<<[7]"RIORGANIZZAZIONE ARCHIVIO\n"; 
            cout<<[8]"VISUALIZZA INTERO ARCHIVIO\n"; 
            cout<<[9]"USCITA\n"; 

            COUT<<"Seleziona un\'opzione: "; 
            cin>>scelta; 

            }while((scelta<1)||(scelta>9)); 

            switch(scelta){ 
                case 1: 
                cout<<"Operazione scelta: inserimento"<<endl; 
                rec.leggi_da_tastiera(); 
                ai.aggiunta_record(rec); 
                break; 
                case 2: 
                cout<<"Operazione scelta: eliminazione"<<endl; 
                cout<<"Inserire chioave: ";cin.getline(chiave_rec,DIM_chiave-1); 
                if(ai.cancellazione_logica(chiave_rec)) 
                cout>>"Utente eliminato"<<endl; 
                break; 
                case 3: 
                cout<<"Operazione scelta: ricerca, selezione e stampa"<<endl; 
                cout<<"Inserire chiave: "; cin.getline(chiave_rec, DIM_chiave-1); 
                rec=ai.ricerca_record(chiave_rec); 
                rec.stampa(); 
                break; 
                case 4: 
                cout<<"Operazione scelta: modifica"<<endl; 
                cout<<"Inserire chiave: ";cin.getline(chiave_rec,DIM_chiave-1); 
                ai.modifica_record(chiave_rec); 
                case 5: 
                cout<<"Operazione scelta: ripristina"<<endl; 
                cout<<"Inserire chiave: ";cin.getline(chiave_rec, DIM_chiave-1); 
                ai.ripristina_record(chiave_rec); 
                break; 
                case 6: 
                cout<<"Operazione scelta: stato archivio"<<endl; 
                ai.get_stato(rec_tot,rec_validi); 
                cout<<"\t Numero utenti iscritti: "<<rec_tot; 
                cout<<"\t Numero utenti validi: "<<rec_validi<<endl; 
                cin.get(); 
                break; 
                case 7: 
                cout<<"Operazione scelta: riorganizzazione archivio"<<endl; 
                ai.riorganizzazione(); 
                break; 
                case 8: 
                cout<<"Operazione scelta: visualizzazione"<<endl; 
                ai.visita_ordinata(); 
                cin.get; 
                break; 
                case 9: 
                cout<<"Uscita..."<<endl; 
                esci=true; 
                break; 
                } 
                } 
                } 


// Classe Record:specifica e implementazione 
 // Nome del file Record.h 
#ifndef Record_H 
#define Record_H 
 #include <string.h> 
 #include <iostream.h> 
 enum {DIM_chiave=20}; 
 enum {DIM_nome=20}; 
 enum {DIM_cognome=20}; 
 enum {DIM_sesso=1}; 
 enum {DIM_datanascita=11}; 
 enum {DIM_codfiscale=16}; 
 enum {DIM_certificato=2}; 
 enum {DIM_indirizzo=40}; 
 enum {DIM_professione=15}; 
 enum {DIM_attivita=12}; 
 enum {DIM_telefono=20}; 
 enum {DIM_abbonamento=10}; 
 enum {DIM_pagamento=2}; 
 class Record { 
 public: 
    char chiave[DIM_chiave] ; 
    char nome[DIM_nome]; 
    char cognome[DIM_cognome]; 
    char sesso[DIM_sesso]; 
    char datanascita[DIM_datanascita]; 
    char codfiscale[DIM_codfiscale]; 
    char certificato[DIM_certificato]; 
    char indirizzo[DIM_indirizzo]; 
    char professione[DIM_professione]; 
    char attivita[DIM_attivita]; 
    char telefono[DIM_telefono]; 
    char abbonamento[DIM_abbonamento]; 
    char pagamento[DIM_pagamento]; 

    Record(){} 
    Record( const char*CHIAVE, const char*NOME, const char*COGNOME, 
           const char*SESSO,  const char*DATANASCITA, const char*CODFISCALE, 
           const char*CERTIFICATO, const char*INDIRIZZO, const char*PROFESSIONE, 
           const char*ATTIVITA, const char*TELEFONO, const char*ABBONAMENTO, 
           const char*PAGAMENTO){ 

           strcpy(chiave,CHIAVE); 
           strcpy(nome,NOME); 
           strcpy(cognome,COGNOME); 
           strcpy(sesso,SESSO); 
           strcpy(datanascita,DATANASCITA); 
           strcpy(codfiscale,CODFISCALE); 
           strcpy(certificato,CERTIFICATO); 
           strcpy(indirizzo,INDIRIZZO); 
           strcpy(professione,PROFESSIONE); 
           strcpy(attività,ATTIVITA); 
           strcpy(telefono,TELEFONO); 
           strcpy(abbonamento,ABBONAMENTO); 
           strcpy(pagamento,PAGAMENTO); 
         } 
         void stampa() const{ 
           cout<<"\n----------Iscritto--------"; 
           cout<<"\n CODICE ISCRITTO: " <<chiave; 
           cout<<"\n NOME: " <<nome; 
           cout<<"\n COGNOME: " <<cognome; 
           cout<<"\n SESSO: " <<sesso; 
           cout<<"\n DATA DI NASCITA: " <<datanascita; 
           cout<<"\n CERTIFICATO: " <<certificato; 
           cout<<"\n CODICE FISCALE: " <<codfiscale; 
           cout<<"\n INDIRIZZO: " <<indirizzo; 
           cout<<"\n PROFESSIONE: " <<professione; 
           cout<<"\n ATTIVITÀ: " <<attivita; 
           cout<<"\n TELEFONO: " <<telefono; 
           cout<<"\n ABBONAMENTO: " <<abbonamento; 
           cout<<"\n PAGAMENTO: " <<pagamento; 
           cout<<"\n----------------------"<<endl;} 
         void leggi_da_tastiera(){ 

           cout<<flush; 
           cout<<"\n----------Lettura_Iscritto--------"; 
           cout<<"\n CODICE ISCRITTO: ";cin.getline(chiave,DIM_chiave-1); 
           cout<<"\n NOME: ";cin.getline(nome,DIM_nome-1); 
           cout<<"\n COGNOME: ";cin.getline(cognome,DIM_cognome-1); 
           cout<<"\n SESSO: ";cin.getline(sesso,DIM_sesso-1); 
           cout<<"\n DATA DI NASCITA: ";cin.getline(datanascita,DIM_datanascita-1); 
           cout<<"\n CERTIFICATO: ";cin.getline(certificato,DIM_certificato-1); 
           cout<<"\n CODICE FISCALE: ";cin.getline(codfiscale,DIM_codfiscale-1); 
           cout<<"\n INDIRIZZO: ";cin.getline(indirizzo,DIM_indirizzo-1); 
           cout<<"\n PROFESSIONE: ";cin.getline(professione,DIM_professione-1); 
           cout<<"\n ATTIVITÀ: ";cin.getline(attivita,DIM_attivita-1); 
           cout<<"\n TELEFONO: ";cin.getline(telefono,DIM_telefono-1); 
           cout<<"\n ABBONAMENTO: ";cin.getline(abbonamento,DIM_abbonamento-1); 
           cout<<"\n PAGAMENTO: ";cin.getline(pagamento,DIM_pagamento-1); 
           cout<<"\n----------------------"<<endl;} 
         void modifica(){ 

           int scelta; 
           cout<<"\n----------Modifica_ Iscritto--------"; 
           cout<<"\n (1) CODICE ISCRITTO: " <<chiave; 
           cout<<"\n (2) NOME: " <<nome; 
           cout<<"\n (3) COGNOME: " <<cognome; 
           cout<<"\n (4) SESSO: " <<sesso; 
           cout<<"\n (5) DATA DI NASCITA: " <<datanascita; 
           cout<<"\n (6) CERTIFICATO: " <<certificato; 
           cout<<"\n (7) CODICE FISCALE: " <<codfiscale; 
           cout<<"\n (8) INDIRIZZO: " <<indirizzo; 
           cout<<"\n (9) PROFESSIONE: " <<professione; 
           cout<<"\n (10) ATTIVITÀ: " <<attivita; 
           cout<<"\n (11) TELEFONO: " <<telefono; 
           cout<<"\n (12) ABBONAMENTO: " <<abbonamento; 
           cout<<"\n (13) PAGAMENTO: " <<pagamento; 
           cout<<"\n----------------------"<<endl; 

           cout<<"\n Cosa desideri modificare? "; 
           cout<<flush; 
           do { cout<<" (1-13):";cin>>scelta;} 
           while((scelta<1)&&(scelta>13)); 
           switch (scelta){ 
            case 1:cout<<"\n CODICE ISCRITTO: ";cin.getline(chiave,DIM_chiave-1); 
                   break; 
            case 2:cout<<"\n NOME: ";cin.getline(nome,DIM_nome-1); 
                   break; 
            case 3:cout<<"\n COGNOME: ";cin.getline(cognome,DIM_cognome-1); 
                   break; 
            case 4:cout<<"\n SESSO: ";cin.getline(sesso,DIM_sesso-1); 
                   break; 
            case 5:cout<<"\n DATA DI NASCITA: ";cin.getline(datanascita,DIM_datanascita-1); 
                   break; 
            case 6:cout<<"\n CERTIFICATO: ";cin.getline(certificato,DIM_certificato-1); 
                   break; 
            case 7:cout<<"\n CODICE FISCALE: ";cin.getline(codfiscale,DIM_codfiscale-1); 
                   break; 
            case 8:cout<<"\n INDIRIZZO: ";cin.getline(indirizzo,DIM_indirizzo-1); 
                   break; 
            case 9:cout<<"\n PROFESSIONE: ";cin.getline(professione,DIM_professione-1); 
                   break; 
            case 10:cout<<"\n ATTIVITÀ: ";cin.getline(attivita,DIM_attivita-1); 
                   break; 
            case 11:cout<<"\n TELEFONO: ";cin.getline(telefono,DIM_telefono-1); 
                   break; 
            case 12:cout<<"\n ABBONAMENTO: ";cin.getline(abbonamento,DIM_abbonamento-1); 
                   break; 
            case 13:cout<<"\n PAGAMENTO: ";cin.getline(pagamento,DIM_pagamento-1); 
                   break; 
                   } 
                   } 
                   }; 

            #endif 

// Classe nt: specifica (non è prevista implementazione) 
file: nT.h 

#include "Record.h" 
 struct nT; 
 typedef nT* puntnT; 
 struct nT { 
 char chiave[DIM_chiave]; 
 long int indirizzo; 
 bool valido; 
 puntnT puntatore; }; 

#include "nT.h" 
  class Tabella{ 
  private: 
   enum{AGGIORNATO=0, NON_AGGIORNATO=1} update; 
   char*nome_file_indice; 
   int num_elem_totali; 
   int num_elem_validi; 
   puntnT primo; 
   puntnT ultimo; 
   puntnT punt_corrente; 

//Classe Tabella 
//nome file: Tabella.h 

#include "nT.h" 
  class Tabella{ 
  private: 
   enum{AGGIORNATO=0, NON_AGGIORNATO=1} update; 
   char*nome_file_indice; 
   int num_elem_totali; 
   int num_elem_validi; 
   puntnT primo; 
   puntnT ultimo; 
   puntnT punt_corrente; 


   public: 
    Tabella(const char*); 
    ~Tabella(); 

    bool cerca_chiave (const char*chiave, long int & indirizzo); 
    void inserisce  (const char*chiave, const long & indirizzo); 
    bool elimina_chiave (const char*chiave); 
    bool cerca_rec_cancellato (const char*chiave, long int & indirizzo); 
    puntnT cerca_primo(); 
    puntnT cerca_successivo(); 
    int record_complessivi()const; 
    int record_validi()const; 
    bool inserisce_r_cancellato(const char*chiave); 
    void stampa_indice()const; 
    void elimina_nodoTabella (puntnT &prec, puntnT &punt); 
    }; 

//classe Archivio 
//nome file: Archivio.h 

#ifndef Archivio_H 
   #define Archivio_H 
   #include <fstream.h> 

   class Archivio { 
   private: 
     int dimrec; 
     fstream file; 
     char*nomefile; 
   public: 
    Archivio(const char* NOMEFILE="",int LUNG_DATI=0); 
    void modifica_record(const long int pos,const char* record); 
    void inserisce(const char*record,long int &pos); 
    void get_record(const long int pos, char*record); 
    void rinomina_file_temp (const char*nome_file_temp); 
    ~Archivio(); 
    }; 
    #endif 

//classe Archindex 
//nome file: archindex.h 

#ifndef ARCHINDEX_H 
#define ARCHINDEX_H 

    #include "Tabella.h" 
    #include "Archivio.h" 

    class Archindex{ 
    private: 
      Archivio archivio; 
        Tabella indice; 
      public: 
      Archindex(const char* NOMEARCHIVIO, const char* NOMEINDICE): 
        archivio(NOMEARCHIVIO, LUNG_REC), 
        indice (NOMEINDICE){} 

    void aggiunta_record(const Record nom); 
    Record ricerca_record (const char*chiave); 
    bool modifica_record (const char*chiave); 
    bool cancellazione_logica (const char*chiave); 
    bool ripristina_record (const char*chiave); 
    void visita_ordinata(); 
    void riorganizazione(); 
    void get_stato(int & num_rec_totali, int & num_rec_validi)const;}; 
    #endif 

#endif 

//classe Tabella: implementazione 
//nome file: Tabella.cpp 

#include<string.h> 
    #include<iostream.h> 
    #include<fstream.h> 
    #include "Tabella.h" 

    Tabella::Tabella(const char*INDICE){ 
      fstream file; 
      int dimrec=sizeof(nT); 
      int cont=0; 
      int non_validi=0; 
      nT *ptrhis,*ptrnew,*punt; 

      nome_file_indice=new char[strlen(INDICE)+1]; 
      strcpy(nome_file_indice, INDICE); 
      update=AGGIORNATO; 
      primo=ultimo=0; 
      file.open(nome_file_indice, ios::binary|ios::in|ios::nocreate); 
      if(!file) 
          cout<<"\n creazione nuovo indice \n"; 
      else{ 
          primo= new nT; 
          ptrthis=primo; 
          punt=primo; 
          cont=0; 
          while(!file.eof()&&(punt!=0)){ 
             file.read(reinterpret_cast<char*>(ptrthis),dimrec; 
             if(!ptrthis->valido) 
                non_validi++; 
             punt=ptrthis->puntatore; 
             if(ptrthis->puntatore!=0){ 
                ptrnew=new nT; 
                ptrthis->puntatore=ptrnew; 
                ptrthis=ptrnew; 

              } 
              cont++; 
            } 
            ultimo=ptrthis; 
           } 
           punt_corrente=primo; 
            num_elem_totali=cont; 
            num_elem_validi=num_elem_totali-non_validi; 
            file.close(); 
         } 

         void Tabella::stampa_indice() const{ 
            puntnT q; 
            q=primo; 
            while(q!=0){ 

               cout<<"\n-----------------------"; 
               cout<<"\n CODICE ISCRIZIONE: "<<q->chiave; 
               cout<<"\n Posizione del Recordnel file: "<<q->indirizzo; 
               cout<<"\n Puntatore "<<q->puntatore; 
               cout<<"\t valido: "<<q->valido; 
               cout<<"\n ----------------------"; 
               q=q->puntatore; 
               } 
              } 

         //Distruttore 

         Tabella::~Tabella(){ 
          fstream file; 
          int dimrec=sizeof(nT); 
          puntnT ptrthis; 

       if(update==NON_AGGIORNATO) { 
file.open(nome_file_indice,ios::binary|ios::out); 
       if(!file) 
          cout<<"\n impossibile salvare il file a indice\n"; 
          else { 

            ptrthis=primo; 
            while(ptrthis!=0){ 

            file.write( reinterpret_cast<char*>(ptrthis),dimrec); 

             } 
            } 

             file.close(); 

             } 
            } 

bool Tabella::cerca_chiave (const char*chiave,long int & indirizzo) { 

       bool trovato=false; 
       puntnT q; 

       q=primo; 
       while (!trovato && q!=0) { 
       if(strcmp(chiave,q->chiave)) 
       q=q->puntatore; 
       else { 
         if(q->valido==true) { 
         trovato=true; 
         indirizzo=q->indirizzo; 
         punt_corrente=q; 
            } 
          } 
       } 
       return trovato; 
     } 

     void Tabella::inserisce (const char*chiave, const long int indirizzo) { 

     puntnT prec,curr,pnew; 

     pnew=new nT; 
     strcpy (pnew->chiave,chiave); 
     pnew->indirizzo=indirizzo; 
     pnew->valido=true; 
     pnew->puntatore=0; 
     punt_corrente=pnew; 
     update=NON_AGGIORNATO; 
     prec=primo; 
     curr=primo; 

     if(num_elem_totali>0){ 
     if(strcmp(primo->chiave,chiave)>=0){ 

     pnew->puntatore=primo; 
     primo=pnew; 
     }else{ 
     curr=curr->puntatore; 
     while((curr!=0)&& 
           (strcmp(curr->chiave,chiave)<0)){ 
           prec=curr; 
           curr=curr->puntatore; 
     } 
     if(curr!=0){ 
     pnew->puntatore=curr; 
     prec->puntatore=pnew; 
     }else{ 
     ultimo->puntatore=pnew; 
     ultimo=pnew; 
        } 
     } 

     }else{ 

     cout<<"Lista vuota"<<endl; 
     primo=pnew; 
     ultimo=primo; 
       cout<<"primo->puntatore"<<primo->puntatore; 
     } 

     num_elem_totali++; 
     num_elem_validi++; 
     } 

     bool Tabella::elimina_chiave(const char*chiave){ 

     bool trovato=false; 
     puntnT=q; 
     q=primo; 
     while (!trovato && q!=0){ 
          if (strcmp(chiave,q->chiave)!=0) 
              q=q->puntatore; 
          else{ 
              punt_corrente=q; 
              q->valido=false; 
              num_elem_validi--; 
              update=NON_AGGIORNATO; 
              trovato=true; 

             } 
            } 

            return trovato; 
           } 

           puntnT Tabella::cerca_primo(){ 
           punt_corrente=primo; 
           return punt_corrente; 
           } 
           puntnT Tabella::cerca_successivo(){ 
           punt_corrente=punt_corrente->puntatore; 
           return punt_corrente; 
           } 
           int Tabella::record_complessivi()const{ 
           return num_elem_totali; 
           } 
           int Tabella::record_validi()const{ 
                 return num_elem_validi; 
           } 

           bool Tabella::cerca_rec_cancellato(const char*chiave, long int&indirizzo){ 
           bool trovato=false; 
           puntnT q; 
           q=primo; 
           while (!trovato&&q!=0){ 
           if(strcmp(chiave,q->chiave)) 
           q=q->puntatore; 

           else { 
               if (q->valido==false){ 
                   trovato=true; 
                   indirizzo=q->indirizzo; 
                   punt_corrente=q; 
                 } 

               } 
           } 
           return trovato 
         } 
         bool Tabella::inserisce_r_cancellato(const char* chiave){ 
         bool risultato=false; 
         bool trovato=false; 
         puntnT q; 


         q=primo; 
         while (!trovato && q!=0) { 
         if (strcmp(chiave, q->chiave)!=0) 
         q=q->puntatore; 
         else { 
         punt_corrente=q; 
         q->valido=true; 
         num_elem_validi++; 
         update=NON_AGGIORNATO; 
         trovato=true; 
         } 
          } 
          return trovato; 
          } 
          void Tabella::elimina_nodoTabella (puntnT &prec, puntnT &punt) { 
          puntnT temp; 
          if num_elem_totali!=0){ 
          temp=punt; 
          punt=punt->puntatore; 
          if (primo==temp) 
          primo=temp->puntatore; 
          else 
          prec->puntatore=temp->puntatore; 
          num_elem_totali--; 
          if (temp->valido) 
          num_elem_validi--; 
          update=NON_AGGIORNATO; 
          delete temp; 
          } 
          } 
//classe Archivio implementazione 
//file: Archivio.cpp 

#include "Archivio.h" 
          #include <stdio.h> 
          #include <string.h> 

          Archivio::Archivio(const char* NOMEFILE,int LUNG_DATI) { 
          dimrec=LUNG_DATI; 
          nomefile=new char[strlen(NOMEFILE)+1]; 
          strcpy(nomefile, NOMEFILE); 
          file.open(nomefile,ios::binary|ios::in|ios::out|ios::nocreate); 
          if(!file){ 
             file.open(nomefile, ios::binary|ios::in|ios::out); 
             cout<<"\n Gestione nuovo file "; 
             } 
          else { 
             cout<<"\n Gestione di un file già esistente "; 
             } 
          } 

          void Archivio::inserisce(const char*record,long int &pos){ 
             file.seekp(0, ios::end); 
             pos=static_cast<long int> (file.tellp()); 
             cout<<" pos = "<<pos<<" \tdimrec "<<dimrec<<endl; 
             cin.get(); 
             if(file.is_open()){ 
                file.write(reinterpret_cast<const char*> (record), dimrec); 
                cout<<" Inserimento effettuato con successo "<<endl;} 
             else 
                cout<<" Inserimento non effetuato "<<endl; 
             } 


          void Archivio::get_record(const long int pos, char*dati){ 
             file.seekg(pos,ios::beg); 
             file.read(reinterpret_cast<char*> (dati), dimrec); 
             } 

          void Archivio::modifica_record (const long int pos, char* record){ 
             file.seekp(pos,ios::beg); 
             file.write(record, dimrec);} 

          void Archivio::rinomina_file_temp(const char*file_temp){ 
             file.close(); 
             remove(nomefile); 
             rename(file_temp, nomefile); 
             file.open(nomefile,ios::binary|ios::in|ios::out|ios::nocreate); 
             } 

          Archivio::~Archivio(){ 
             file.close(); 
             delete nomefile; 
             } 
//Classe Archindex: implementazione 
//file: Archindex.cpp 

#include "archindex.h" 

          bool Archindex::cancellazione_logica(const char*chiave){ 
          bool risultato=false; 
          if(indice.elimina_chiave(chiave)) 
             risultato=true; 
          return risultato;} 

          bool Archindex::ripristina_record (const char*chiave){ 
             bool risultato; 

             if(risultato=indice.inserisce_r_cancellato(chiave)) 
                cout<<" Utente Ripristinato "<<endl; 
             else cout<<" Utente non presente "<<endl; 
              return risultato; 
           } 

           void Archindex::get_stato(int& num_rec_totali, int& num_rec_validi) const { 
           indice.stampa_indice(); 
           num_rec_totali=indice.record_complessivi(); 
           num_rec_validi=indice.record_validi(); 
           } 

           void Achindex::aggiunta_record( const Record nom) { 
           long int indirizzo; 
           cout<<" Inserisce Archivio "<<endl; 
           archivio.inserisce (reinterpret_cast<const char*>(& nom)indirizzo); 
           cout<<" Inserisce in tabella "<<endl; 
           indice.inserisce (nom.chiave,indirizzo++); 
           } 
           bool Archindex::modica_record(const char*chiave){ 
           long int pos; 
           bool risultato=false; 
           char rec[LUNG_REC]; 
           if (indice.cerca_chiave(chiave,pos)){ 
           archivio.get_record(pos,rec); 
           Record nom= *(reinterpret_cast<Record*>(rec)); 
           nom.modifica(); 
           archivio.modifica_record(pos, reinterpret_cast<const char*>(&nom)); 
           cout<<" Modifica Terminata "<<endl; 
           risultato=true; 
           } 
           return risultato; 
           } 

           void Archindex::riorganizzazione(){ 
           int validi, totali; 
           long int new_ind; 
           fstream temp; 
           nT *punt, *prec; 
           char rec[LUNG_REC]; 

           totali=indice.record_complessivi(); 
           validi=indice.record_validi(); 
           if (totali>validi){ 
           temp.open("rubrica.bak",ios::binary|ios::out); 
           if (!temp){ 
           cout<<" Errore nell\'apertura file "<<endl; 
           return; 
           } 
           punt=indice.cerca_primo(); 
           prec=punt; 
           while (punt!=0){ 
           if (punt->valido==true){ 
           archivio.get_record(punt->indiizzo,rec); 
           new_ind= static_cast<long int>(temp.tellp()); 
           temp.write(reinterpret_cast<const char*> (rec),LUNG_REC); 
           punt->indirizzo=new_ind; 
           prec=punt; 
           punt=punt->puntatore; 
          } 
          else{ 
          indice.elimina_nodoTabella(prec,punt); 
          indice.stampa_indice(); 
          } 
          } 
          temp.close(); 
          archivio.rinomina_file_temp("rubrica.bak"); 
         } else { 
         cout<<" Compattazione non necessaria "<<endl; 
         } 
         } 

         void Archindex::visita_ordinata(){ 
         nT *punt; 
         Record nom; 
         punt=indice.cerca_primo(); 
         cout<<" Visualizza intero archivio "<<endl; 
         while (punt!=0){ 
         if (punt->valido){ 
         archivio.get_record(punt->indirizzo, reinterpret_cast<char*>(&nom)); 
         nom.stampa(); 
         } 
         punt=indice.cerca_successivo(); 
         } 
         } 
         Record Archindex::ricerca_record(const char* chiave){ 
         long int pos; 
         Record nom; 
         if (indice.cerca_chiave(chiave, pos)) 
         archivio.get_record(pos, reinterpret_cast<char*>(&nom)); 
         cout<<" Posizione elemento da ricercare = "<<pos<<endl; 
         return nom; 
}


Ho riportato qualche commento, così da semplificarvi la lettura!
Vi ringrazio infinitamente in anticipo!!
aaa
22/06/08 7:14
WARRIOR
Guarda non ho controllato tutto il codice, comunque i primi errori di sintassi li trovi nelle prime righe.
#include <iostream>

//NON!
#include >iostream>


poi, includi tutto il namespace std.

using namespace std;


In una riga esegui una istruzione tipo questa:

cout << [1]"inserisci record";

quel [1] cosè? è solo una scritta o rappresenta qualcos'altro (non posso essere più preciso dato che non ho visto tutto il codice)? se è solo una scritta deve andare dentro le virgolette.

prova a compilare con queste modifiche e poi facci sapere.

:k:
aaa
22/06/08 7:57
Linkage7th
Ti ringrazio infinitamente per avermi fatto notare quegli errori!
Ho controllato tutto il codice, ora per tutti i file la compilazione è completa, mi dà 0 errori, eppure non mi crea il file eseguibile! Come mai?
Allego il progetto completissimo.
A compilazione completa, comunque, mi dà, per ogni funzione, "undefined reference". In particolare, questo errore: C:\DEV-C_~1\Lib\libmingw32.a(main.o)(.text+0x8e): undefined reference to `WinMain@16'

Utilizzando DevC++.

EDIT: il programma si avvia!!! Però, non appena scelgo l'operazione "inserimento" e tento di inserire nome e cognome, dopo questi due il programma impazzisce! Qual è la causa?

EDIT: risolto anche questo, un piccolo errore di riferimento puntatore!
Grazie mille per l'aiuto!:)
Ultima modifica effettuata da Linkage7th 22/06/08 9:10
aaa
22/06/08 10:36
Linkage7th
Nuovo problema: se tento di modificare qualche campo, quando premo "invio" mi dice semplicemente "modifica terminata", quando non ho proprio modificato niente! Come mai? Ho sbagliato qualcosa nella funzione "modifica"?
aaa
25/06/08 17:59
WARRIOR
Leggere il codice sul sito è difficile, soprattuto se lo guardi per la prima volta e non conosci la logica. Scusami!
Una volta entrato nella funzione modifica, che passi esegui per inserire i nuovi valori nei campi? Se riesci a darmi un tabulato dettagliato è meglio. :k:
aaa
27/06/08 17:55
Linkage7th
Figurati, anzi, ti sei già disturbato troppo!:)
Ora tutto funziona alla grande. Un'ultima cosa: quando creo un nuovo utente, attraverso la funzione inserimento, e immetto uno dopo l'altro i vari dati, nel momento in cui il sistema mi stampa a video tutto il riepilogo, i dati immessi in "pagamento", "attività" e "professione" mi si visualizzano con caratteri strani! Praticamente, in "pagamento" mi escono tanti "6", invece di ciò che ho inserito, e in "attività", al posto di, ad esempio, "karate", mi escono punti interrogativi, cancelletti e altre cose assurde! Come mai? Tutti gli altri campi non mi danno problemi! :d
aaa
28/06/08 7:26
WARRIOR
Guarda così di primo occhio mi verrebbe da dire che stampi dei dati non inizializzati.
Ricontrolla l'inserimento dei dati nei buffers che contengono professione, nome etc. :k:
aaa