Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [Help]Gestione archivio - non viene compilato!
Forum - C/C++ - [Help]Gestione archivio - non viene compilato!

Avatar
Linkage7th (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/06/2008

Segnala al moderatore
Postato alle 8:24
Domenica, 22/06/2008
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  


Codice sorgente - presumibilmente C++

  1. //Gestione archivio accesso casuale
  2. //file main.cpp
  3.  
  4. #include "archindex.h"
  5. #include "Record.h"
  6. #include >iostream.h>
  7. using std::cout;
  8. using std::cin;
  9.  
  10. enum {DIM_nomeFile=15};
  11.  
  12. void main(){
  13.     char nomeFile[DIM_nomeFile], nomeIndice[DIM_nomeFile];
  14.     int scelta, esci=0
  15.     int rec_tot, rec_validi;
  16.     Record rec;
  17.     char chiave_rec[DIM_chiave];
  18.     cout<<"Software gestionale centro sportivo"<<endl;
  19.     cout<<"Inserire il nome dell\'archivio:";
  20.     cin.getline(nomeFile,DIM_nomeFile-1);
  21.  
  22.     strcpy(nomeIndice, nomeFile);
  23.     strcat(nomeIndice, ".IND");
  24.     Archindex.ai(nomeFile, nomeIndice);
  25.     while(!uscita) {
  26.         do {
  27.  
  28.             cout<<[1]"INSERIRE NUOVO ISCRITTO\n";
  29.             cout<<[2]"ELIMINAZIONE UTENTE\n";
  30.             cout<<[3]"RICERCA, SELEZIONA E STAMPA UTENTE\n";
  31.             cout<<[4]"MODIFICA UTENTE\n";
  32.             cout<<[5]"RIPRISTINA UTENTE\n";
  33.             cout<<[6]"STATO ARCHIVIO\n";
  34.             cout<<[7]"RIORGANIZZAZIONE ARCHIVIO\n";
  35.             cout<<[8]"VISUALIZZA INTERO ARCHIVIO\n";
  36.             cout<<[9]"USCITA\n";
  37.  
  38.             COUT<<"Seleziona un\'opzione: ";
  39.             cin>>scelta;
  40.  
  41.             }while((scelta<1)||(scelta>9));
  42.  
  43.             switch(scelta){
  44.                 case 1:
  45.                 cout<<"Operazione scelta: inserimento"<<endl;
  46.                 rec.leggi_da_tastiera();
  47.                 ai.aggiunta_record(rec);
  48.                 break;
  49.                 case 2:
  50.                 cout<<"Operazione scelta: eliminazione"<<endl;
  51.                 cout<<"Inserire chioave: ";cin.getline(chiave_rec,DIM_chiave-1);
  52.                 if(ai.cancellazione_logica(chiave_rec))
  53.                 cout>>"Utente eliminato"<<endl;
  54.                 break;
  55.                 case 3:
  56.                 cout<<"Operazione scelta: ricerca, selezione e stampa"<<endl;
  57.                 cout<<"Inserire chiave: "; cin.getline(chiave_rec, DIM_chiave-1);
  58.                 rec=ai.ricerca_record(chiave_rec);
  59.                 rec.stampa();
  60.                 break;
  61.                 case 4:
  62.                 cout<<"Operazione scelta: modifica"<<endl;
  63.                 cout<<"Inserire chiave: ";cin.getline(chiave_rec,DIM_chiave-1);
  64.                 ai.modifica_record(chiave_rec);
  65.                 case 5:
  66.                 cout<<"Operazione scelta: ripristina"<<endl;
  67.                 cout<<"Inserire chiave: ";cin.getline(chiave_rec, DIM_chiave-1);
  68.                 ai.ripristina_record(chiave_rec);
  69.                 break;
  70.                 case 6:
  71.                 cout<<"Operazione scelta: stato archivio"<<endl;
  72.                 ai.get_stato(rec_tot,rec_validi);
  73.                 cout<<"\t Numero utenti iscritti: "<<rec_tot;
  74.                 cout<<"\t Numero utenti validi: "<<rec_validi<<endl;
  75.                 cin.get();
  76.                 break;
  77.                 case 7:
  78.                 cout<<"Operazione scelta: riorganizzazione archivio"<<endl;
  79.                 ai.riorganizzazione();
  80.                 break;
  81.                 case 8:
  82.                 cout<<"Operazione scelta: visualizzazione"<<endl;
  83.                 ai.visita_ordinata();
  84.                 cin.get;
  85.                 break;
  86.                 case 9:
  87.                 cout<<"Uscita..."<<endl;
  88.                 esci=true;
  89.                 break;
  90.                 }
  91.                 }
  92.                 }
  93.  
  94.  
  95. // Classe Record:specifica e implementazione
  96.  // Nome del file Record.h
  97. #ifndef Record_H
  98. #define Record_H
  99.  #include <string.h>
  100.  #include <iostream.h>
  101.  enum {DIM_chiave=20};
  102.  enum {DIM_nome=20};
  103.  enum {DIM_cognome=20};
  104.  enum {DIM_sesso=1};
  105.  enum {DIM_datanascita=11};
  106.  enum {DIM_codfiscale=16};
  107.  enum {DIM_certificato=2};
  108.  enum {DIM_indirizzo=40};
  109.  enum {DIM_professione=15};
  110.  enum {DIM_attivita=12};
  111.  enum {DIM_telefono=20};
  112.  enum {DIM_abbonamento=10};
  113.  enum {DIM_pagamento=2};
  114.  class Record {
  115.  public:
  116.     char chiave[DIM_chiave] ;
  117.     char nome[DIM_nome];
  118.     char cognome[DIM_cognome];
  119.     char sesso[DIM_sesso];
  120.     char datanascita[DIM_datanascita];
  121.     char codfiscale[DIM_codfiscale];
  122.     char certificato[DIM_certificato];
  123.     char indirizzo[DIM_indirizzo];
  124.     char professione[DIM_professione];
  125.     char attivita[DIM_attivita];
  126.     char telefono[DIM_telefono];
  127.     char abbonamento[DIM_abbonamento];
  128.     char pagamento[DIM_pagamento];
  129.  
  130.     Record(){}
  131.     Record( const char*CHIAVE, const char*NOME, const char*COGNOME,
  132.            const char*SESSO,  const char*DATANASCITA, const char*CODFISCALE,
  133.            const char*CERTIFICATO, const char*INDIRIZZO, const char*PROFESSIONE,
  134.            const char*ATTIVITA, const char*TELEFONO, const char*ABBONAMENTO,
  135.            const char*PAGAMENTO){
  136.  
  137.            strcpy(chiave,CHIAVE);
  138.            strcpy(nome,NOME);
  139.            strcpy(cognome,COGNOME);
  140.            strcpy(sesso,SESSO);
  141.            strcpy(datanascita,DATANASCITA);
  142.            strcpy(codfiscale,CODFISCALE);
  143.            strcpy(certificato,CERTIFICATO);
  144.            strcpy(indirizzo,INDIRIZZO);
  145.            strcpy(professione,PROFESSIONE);
  146.            strcpy(attività,ATTIVITA);
  147.            strcpy(telefono,TELEFONO);
  148.            strcpy(abbonamento,ABBONAMENTO);
  149.            strcpy(pagamento,PAGAMENTO);
  150.          }
  151.          void stampa() const{
  152.            cout<<"\n----------Iscritto--------";
  153.            cout<<"\n CODICE ISCRITTO: " <<chiave;
  154.            cout<<"\n NOME: " <<nome;
  155.            cout<<"\n COGNOME: " <<cognome;
  156.            cout<<"\n SESSO: " <<sesso;
  157.            cout<<"\n DATA DI NASCITA: " <<datanascita;
  158.            cout<<"\n CERTIFICATO: " <<certificato;
  159.            cout<<"\n CODICE FISCALE: " <<codfiscale;
  160.            cout<<"\n INDIRIZZO: " <<indirizzo;
  161.            cout<<"\n PROFESSIONE: " <<professione;
  162.            cout<<"\n ATTIVITÀ: " <<attivita;
  163.            cout<<"\n TELEFONO: " <<telefono;
  164.            cout<<"\n ABBONAMENTO: " <<abbonamento;
  165.            cout<<"\n PAGAMENTO: " <<pagamento;
  166.            cout<<"\n----------------------"<<endl;}
  167.          void leggi_da_tastiera(){
  168.  
  169.            cout<<flush;
  170.            cout<<"\n----------Lettura_Iscritto--------";
  171.            cout<<"\n CODICE ISCRITTO: ";cin.getline(chiave,DIM_chiave-1);
  172.            cout<<"\n NOME: ";cin.getline(nome,DIM_nome-1);
  173.            cout<<"\n COGNOME: ";cin.getline(cognome,DIM_cognome-1);
  174.            cout<<"\n SESSO: ";cin.getline(sesso,DIM_sesso-1);
  175.            cout<<"\n DATA DI NASCITA: ";cin.getline(datanascita,DIM_datanascita-1);
  176.            cout<<"\n CERTIFICATO: ";cin.getline(certificato,DIM_certificato-1);
  177.            cout<<"\n CODICE FISCALE: ";cin.getline(codfiscale,DIM_codfiscale-1);
  178.            cout<<"\n INDIRIZZO: ";cin.getline(indirizzo,DIM_indirizzo-1);
  179.            cout<<"\n PROFESSIONE: ";cin.getline(professione,DIM_professione-1);
  180.            cout<<"\n ATTIVITÀ: ";cin.getline(attivita,DIM_attivita-1);
  181.            cout<<"\n TELEFONO: ";cin.getline(telefono,DIM_telefono-1);
  182.            cout<<"\n ABBONAMENTO: ";cin.getline(abbonamento,DIM_abbonamento-1);
  183.            cout<<"\n PAGAMENTO: ";cin.getline(pagamento,DIM_pagamento-1);
  184.            cout<<"\n----------------------"<<endl;}
  185.          void modifica(){
  186.  
  187.            int scelta;
  188.            cout<<"\n----------Modifica_ Iscritto--------";
  189.            cout<<"\n (1) CODICE ISCRITTO: " <<chiave;
  190.            cout<<"\n (2) NOME: " <<nome;
  191.            cout<<"\n (3) COGNOME: " <<cognome;
  192.            cout<<"\n (4) SESSO: " <<sesso;
  193.            cout<<"\n (5) DATA DI NASCITA: " <<datanascita;
  194.            cout<<"\n (6) CERTIFICATO: " <<certificato;
  195.            cout<<"\n (7) CODICE FISCALE: " <<codfiscale;
  196.            cout<<"\n (8) INDIRIZZO: " <<indirizzo;
  197.            cout<<"\n (9) PROFESSIONE: " <<professione;
  198.            cout<<"\n (10) ATTIVITÀ: " <<attivita;
  199.            cout<<"\n (11) TELEFONO: " <<telefono;
  200.            cout<<"\n (12) ABBONAMENTO: " <<abbonamento;
  201.            cout<<"\n (13) PAGAMENTO: " <<pagamento;
  202.            cout<<"\n----------------------"<<endl;
  203.  
  204.            cout<<"\n Cosa desideri modificare? ";
  205.            cout<<flush;
  206.            do { cout<<" (1-13):";cin>>scelta;}
  207.            while((scelta<1)&&(scelta>13));
  208.            switch (scelta){
  209.             case 1:cout<<"\n CODICE ISCRITTO: ";cin.getline(chiave,DIM_chiave-1);
  210.                    break;
  211.             case 2:cout<<"\n NOME: ";cin.getline(nome,DIM_nome-1);
  212.                    break;
  213.             case 3:cout<<"\n COGNOME: ";cin.getline(cognome,DIM_cognome-1);
  214.                    break;
  215.             case 4:cout<<"\n SESSO: ";cin.getline(sesso,DIM_sesso-1);
  216.                    break;
  217.             case 5:cout<<"\n DATA DI NASCITA: ";cin.getline(datanascita,DIM_datanascita-1);
  218.                    break;
  219.             case 6:cout<<"\n CERTIFICATO: ";cin.getline(certificato,DIM_certificato-1);
  220.                    break;
  221.             case 7:cout<<"\n CODICE FISCALE: ";cin.getline(codfiscale,DIM_codfiscale-1);
  222.                    break;
  223.             case 8:cout<<"\n INDIRIZZO: ";cin.getline(indirizzo,DIM_indirizzo-1);
  224.                    break;
  225.             case 9:cout<<"\n PROFESSIONE: ";cin.getline(professione,DIM_professione-1);
  226.                    break;
  227.             case 10:cout<<"\n ATTIVITÀ: ";cin.getline(attivita,DIM_attivita-1);
  228.                    break;
  229.             case 11:cout<<"\n TELEFONO: ";cin.getline(telefono,DIM_telefono-1);
  230.                    break;
  231.             case 12:cout<<"\n ABBONAMENTO: ";cin.getline(abbonamento,DIM_abbonamento-1);
  232.                    break;
  233.             case 13:cout<<"\n PAGAMENTO: ";cin.getline(pagamento,DIM_pagamento-1);
  234.                    break;
  235.                    }
  236.                    }
  237.                    };
  238.  
  239.             #endif
  240.  
  241. // Classe nt: specifica (non è prevista implementazione)
  242. file: nT.h
  243.  
  244. #include "Record.h"
  245.  struct nT;
  246.  typedef nT* puntnT;
  247.  struct nT {
  248.  char chiave[DIM_chiave];
  249.  long int indirizzo;
  250.  bool valido;
  251.  puntnT puntatore; };
  252.  
  253. #include "nT.h"
  254.   class Tabella{
  255.   private:
  256.    enum{AGGIORNATO=0, NON_AGGIORNATO=1} update;
  257.    char*nome_file_indice;
  258.    int num_elem_totali;
  259.    int num_elem_validi;
  260.    puntnT primo;
  261.    puntnT ultimo;
  262.    puntnT punt_corrente;
  263.  
  264. //Classe Tabella
  265. //nome file: Tabella.h
  266.  
  267. #include "nT.h"
  268.   class Tabella{
  269.   private:
  270.    enum{AGGIORNATO=0, NON_AGGIORNATO=1} update;
  271.    char*nome_file_indice;
  272.    int num_elem_totali;
  273.    int num_elem_validi;
  274.    puntnT primo;
  275.    puntnT ultimo;
  276.    puntnT punt_corrente;
  277.  
  278.  
  279.    public:
  280.     Tabella(const char*);
  281.     ~Tabella();
  282.  
  283.     bool cerca_chiave (const char*chiave, long int & indirizzo);
  284.     void inserisce  (const char*chiave, const long & indirizzo);
  285.     bool elimina_chiave (const char*chiave);
  286.     bool cerca_rec_cancellato (const char*chiave, long int & indirizzo);
  287.     puntnT cerca_primo();
  288.     puntnT cerca_successivo();
  289.     int record_complessivi()const;
  290.     int record_validi()const;
  291.     bool inserisce_r_cancellato(const char*chiave);
  292.     void stampa_indice()const;
  293.     void elimina_nodoTabella (puntnT &prec, puntnT &punt);
  294.     };
  295.  
  296. //classe Archivio
  297. //nome file: Archivio.h
  298.  
  299. #ifndef Archivio_H
  300.    #define Archivio_H
  301.    #include <fstream.h>
  302.  
  303.    class Archivio {
  304.    private:
  305.      int dimrec;
  306.      fstream file;
  307.      char*nomefile;
  308.    public:
  309.     Archivio(const char* NOMEFILE="",int LUNG_DATI=0);
  310.     void modifica_record(const long int pos,const char* record);
  311.     void inserisce(const char*record,long int &pos);
  312.     void get_record(const long int pos, char*record);
  313.     void rinomina_file_temp (const char*nome_file_temp);
  314.     ~Archivio();
  315.     };
  316.     #endif
  317.  
  318. //classe Archindex
  319. //nome file: archindex.h
  320.  
  321. #ifndef ARCHINDEX_H
  322. #define ARCHINDEX_H
  323.  
  324.     #include "Tabella.h"
  325.     #include "Archivio.h"
  326.  
  327.     class Archindex{
  328.     private:
  329.       Archivio archivio;
  330.         Tabella indice;
  331.       public:
  332.       Archindex(const char* NOMEARCHIVIO, const char* NOMEINDICE):
  333.         archivio(NOMEARCHIVIO, LUNG_REC),
  334.         indice (NOMEINDICE){}
  335.  
  336.     void aggiunta_record(const Record nom);
  337.     Record ricerca_record (const char*chiave);
  338.     bool modifica_record (const char*chiave);
  339.     bool cancellazione_logica (const char*chiave);
  340.     bool ripristina_record (const char*chiave);
  341.     void visita_ordinata();
  342.     void riorganizazione();
  343.     void get_stato(int & num_rec_totali, int & num_rec_validi)const;};
  344.     #endif
  345.  
  346. #endif
  347.  
  348. //classe Tabella: implementazione
  349. //nome file: Tabella.cpp
  350.  
  351. #include<string.h>
  352.     #include<iostream.h>
  353.     #include<fstream.h>
  354.     #include "Tabella.h"
  355.  
  356.     Tabella::Tabella(const char*INDICE){
  357.       fstream file;
  358.       int dimrec=sizeof(nT);
  359.       int cont=0;
  360.       int non_validi=0;
  361.       nT *ptrhis,*ptrnew,*punt;
  362.  
  363.       nome_file_indice=new char[strlen(INDICE)+1];
  364.       strcpy(nome_file_indice, INDICE);
  365.       update=AGGIORNATO;
  366.       primo=ultimo=0;
  367.       file.open(nome_file_indice, ios::binary|ios::in|ios::nocreate);
  368.       if(!file)
  369.           cout<<"\n creazione nuovo indice \n";
  370.       else{
  371.           primo= new nT;
  372.           ptrthis=primo;
  373.           punt=primo;
  374.           cont=0;
  375.           while(!file.eof()&&(punt!=0)){
  376.              file.read(reinterpret_cast<char*>(ptrthis),dimrec;
  377.              if(!ptrthis->valido)
  378.                 non_validi++;
  379.              punt=ptrthis->puntatore;
  380.              if(ptrthis->puntatore!=0){
  381.                 ptrnew=new nT;
  382.                 ptrthis->puntatore=ptrnew;
  383.                 ptrthis=ptrnew;
  384.  
  385.               }
  386.               cont++;
  387.             }
  388.             ultimo=ptrthis;
  389.            }
  390.            punt_corrente=primo;
  391.             num_elem_totali=cont;
  392.             num_elem_validi=num_elem_totali-non_validi;
  393.             file.close();
  394.          }
  395.  
  396.          void Tabella::stampa_indice() const{
  397.             puntnT q;
  398.             q=primo;
  399.             while(q!=0){
  400.  
  401.                cout<<"\n-----------------------";
  402.                cout<<"\n CODICE ISCRIZIONE: "<<q->chiave;
  403.                cout<<"\n Posizione del Recordnel file: "<<q->indirizzo;
  404.                cout<<"\n Puntatore "<<q->puntatore;
  405.                cout<<"\t valido: "<<q->valido;
  406.                cout<<"\n ----------------------";
  407.                q=q->puntatore;
  408.                }
  409.               }
  410.  
  411.          //Distruttore
  412.  
  413.          Tabella::~Tabella(){
  414.           fstream file;
  415.           int dimrec=sizeof(nT);
  416.           puntnT ptrthis;
  417.  
  418.        if(update==NON_AGGIORNATO) {
  419. file.open(nome_file_indice,ios::binary|ios::out);
  420.        if(!file)
  421.           cout<<"\n impossibile salvare il file a indice\n";
  422.           else {
  423.  
  424.             ptrthis=primo;
  425.             while(ptrthis!=0){
  426.  
  427.             file.write( reinterpret_cast<char*>(ptrthis),dimrec);
  428.  
  429.              }
  430.             }
  431.  
  432.              file.close();
  433.  
  434.              }
  435.             }
  436.  
  437. bool Tabella::cerca_chiave (const char*chiave,long int & indirizzo) {
  438.  
  439.        bool trovato=false;
  440.        puntnT q;
  441.  
  442.        q=primo;
  443.        while (!trovato && q!=0) {
  444.        if(strcmp(chiave,q->chiave))
  445.        q=q->puntatore;
  446.        else {
  447.          if(q->valido==true) {
  448.          trovato=true;
  449.          indirizzo=q->indirizzo;
  450.          punt_corrente=q;
  451.             }
  452.           }
  453.        }
  454.        return trovato;
  455.      }
  456.  
  457.      void Tabella::inserisce (const char*chiave, const long int indirizzo) {
  458.  
  459.      puntnT prec,curr,pnew;
  460.  
  461.      pnew=new nT;
  462.      strcpy (pnew->chiave,chiave);
  463.      pnew->indirizzo=indirizzo;
  464.      pnew->valido=true;
  465.      pnew->puntatore=0;
  466.      punt_corrente=pnew;
  467.      update=NON_AGGIORNATO;
  468.      prec=primo;
  469.      curr=primo;
  470.  
  471.      if(num_elem_totali>0){
  472.      if(strcmp(primo->chiave,chiave)>=0){
  473.  
  474.      pnew->puntatore=primo;
  475.      primo=pnew;
  476.      }else{
  477.      curr=curr->puntatore;
  478.      while((curr!=0)&&
  479.            (strcmp(curr->chiave,chiave)<0)){
  480.            prec=curr;
  481.            curr=curr->puntatore;
  482.      }
  483.      if(curr!=0){
  484.      pnew->puntatore=curr;
  485.      prec->puntatore=pnew;
  486.      }else{
  487.      ultimo->puntatore=pnew;
  488.      ultimo=pnew;
  489.         }
  490.      }
  491.  
  492.      }else{
  493.  
  494.      cout<<"Lista vuota"<<endl;
  495.      primo=pnew;
  496.      ultimo=primo;
  497.        cout<<"primo->puntatore"<<primo->puntatore;
  498.      }
  499.  
  500.      num_elem_totali++;
  501.      num_elem_validi++;
  502.      }
  503.  
  504.      bool Tabella::elimina_chiave(const char*chiave){
  505.  
  506.      bool trovato=false;
  507.      puntnT=q;
  508.      q=primo;
  509.      while (!trovato && q!=0){
  510.           if (strcmp(chiave,q->chiave)!=0)
  511.               q=q->puntatore;
  512.           else{
  513.               punt_corrente=q;
  514.               q->valido=false;
  515.               num_elem_validi--;
  516.               update=NON_AGGIORNATO;
  517.               trovato=true;
  518.  
  519.              }
  520.             }
  521.  
  522.             return trovato;
  523.            }
  524.  
  525.            puntnT Tabella::cerca_primo(){
  526.            punt_corrente=primo;
  527.            return punt_corrente;
  528.            }
  529.            puntnT Tabella::cerca_successivo(){
  530.            punt_corrente=punt_corrente->puntatore;
  531.            return punt_corrente;
  532.            }
  533.            int Tabella::record_complessivi()const{
  534.            return num_elem_totali;
  535.            }
  536.            int Tabella::record_validi()const{
  537.                  return num_elem_validi;
  538.            }
  539.  
  540.            bool Tabella::cerca_rec_cancellato(const char*chiave, long int&indirizzo){
  541.            bool trovato=false;
  542.            puntnT q;
  543.            q=primo;
  544.            while (!trovato&&q!=0){
  545.            if(strcmp(chiave,q->chiave))
  546.            q=q->puntatore;
  547.  
  548.            else {
  549.                if (q->valido==false){
  550.                    trovato=true;
  551.                    indirizzo=q->indirizzo;
  552.                    punt_corrente=q;
  553.                  }
  554.  
  555.                }
  556.            }
  557.            return trovato
  558.          }
  559.          bool Tabella::inserisce_r_cancellato(const char* chiave){
  560.          bool risultato=false;
  561.          bool trovato=false;
  562.          puntnT q;
  563.  
  564.  
  565.          q=primo;
  566.          while (!trovato && q!=0) {
  567.          if (strcmp(chiave, q->chiave)!=0)
  568.          q=q->puntatore;
  569.          else {
  570.          punt_corrente=q;
  571.          q->valido=true;
  572.          num_elem_validi++;
  573.          update=NON_AGGIORNATO;
  574.          trovato=true;
  575.          }
  576.           }
  577.           return trovato;
  578.           }
  579.           void Tabella::elimina_nodoTabella (puntnT &prec, puntnT &punt) {
  580.           puntnT temp;
  581.           if num_elem_totali!=0){
  582.           temp=punt;
  583.           punt=punt->puntatore;
  584.           if (primo==temp)
  585.           primo=temp->puntatore;
  586.           else
  587.           prec->puntatore=temp->puntatore;
  588.           num_elem_totali--;
  589.           if (temp->valido)
  590.           num_elem_validi--;
  591.           update=NON_AGGIORNATO;
  592.           delete temp;
  593.           }
  594.           }
  595. //classe Archivio implementazione
  596. //file: Archivio.cpp
  597.  
  598. #include "Archivio.h"
  599.           #include <stdio.h>
  600.           #include <string.h>
  601.  
  602.           Archivio::Archivio(const char* NOMEFILE,int LUNG_DATI) {
  603.           dimrec=LUNG_DATI;
  604.           nomefile=new char[strlen(NOMEFILE)+1];
  605.           strcpy(nomefile, NOMEFILE);
  606.           file.open(nomefile,ios::binary|ios::in|ios::out|ios::nocreate);
  607.           if(!file){
  608.              file.open(nomefile, ios::binary|ios::in|ios::out);
  609.              cout<<"\n Gestione nuovo file ";
  610.              }
  611.           else {
  612.              cout<<"\n Gestione di un file già esistente ";
  613.              }
  614.           }
  615.  
  616.           void Archivio::inserisce(const char*record,long int &pos){
  617.              file.seekp(0, ios::end);
  618.              pos=static_cast<long int> (file.tellp());
  619.              cout<<" pos = "<<pos<<" \tdimrec "<<dimrec<<endl;
  620.              cin.get();
  621.              if(file.is_open()){
  622.                 file.write(reinterpret_cast<const char*> (record), dimrec);
  623.                 cout<<" Inserimento effettuato con successo "<<endl;}
  624.              else
  625.                 cout<<" Inserimento non effetuato "<<endl;
  626.              }
  627.  
  628.  
  629.           void Archivio::get_record(const long int pos, char*dati){
  630.              file.seekg(pos,ios::beg);
  631.              file.read(reinterpret_cast<char*> (dati), dimrec);
  632.              }
  633.  
  634.           void Archivio::modifica_record (const long int pos, char* record){
  635.              file.seekp(pos,ios::beg);
  636.              file.write(record, dimrec);}
  637.  
  638.           void Archivio::rinomina_file_temp(const char*file_temp){
  639.              file.close();
  640.              remove(nomefile);
  641.              rename(file_temp, nomefile);
  642.              file.open(nomefile,ios::binary|ios::in|ios::out|ios::nocreate);
  643.              }
  644.  
  645.           Archivio::~Archivio(){
  646.              file.close();
  647.              delete nomefile;
  648.              }
  649. //Classe Archindex: implementazione
  650. //file: Archindex.cpp
  651.  
  652. #include "archindex.h"
  653.  
  654.           bool Archindex::cancellazione_logica(const char*chiave){
  655.           bool risultato=false;
  656.           if(indice.elimina_chiave(chiave))
  657.              risultato=true;
  658.           return risultato;}
  659.  
  660.           bool Archindex::ripristina_record (const char*chiave){
  661.              bool risultato;
  662.  
  663.              if(risultato=indice.inserisce_r_cancellato(chiave))
  664.                 cout<<" Utente Ripristinato "<<endl;
  665.              else cout<<" Utente non presente "<<endl;
  666.               return risultato;
  667.            }
  668.  
  669.            void Archindex::get_stato(int& num_rec_totali, int& num_rec_validi) const {
  670.            indice.stampa_indice();
  671.            num_rec_totali=indice.record_complessivi();
  672.            num_rec_validi=indice.record_validi();
  673.            }
  674.  
  675.            void Achindex::aggiunta_record( const Record nom) {
  676.            long int indirizzo;
  677.            cout<<" Inserisce Archivio "<<endl;
  678.            archivio.inserisce (reinterpret_cast<const char*>(& nom)indirizzo);
  679.            cout<<" Inserisce in tabella "<<endl;
  680.            indice.inserisce (nom.chiave,indirizzo++);
  681.            }
  682.            bool Archindex::modica_record(const char*chiave){
  683.            long int pos;
  684.            bool risultato=false;
  685.            char rec[LUNG_REC];
  686.            if (indice.cerca_chiave(chiave,pos)){
  687.            archivio.get_record(pos,rec);
  688.            Record nom= *(reinterpret_cast<Record*>(rec));
  689.            nom.modifica();
  690.            archivio.modifica_record(pos, reinterpret_cast<const char*>(&nom));
  691.            cout<<" Modifica Terminata "<<endl;
  692.            risultato=true;
  693.            }
  694.            return risultato;
  695.            }
  696.  
  697.            void Archindex::riorganizzazione(){
  698.            int validi, totali;
  699.            long int new_ind;
  700.            fstream temp;
  701.            nT *punt, *prec;
  702.            char rec[LUNG_REC];
  703.  
  704.            totali=indice.record_complessivi();
  705.            validi=indice.record_validi();
  706.            if (totali>validi){
  707.            temp.open("rubrica.bak",ios::binary|ios::out);
  708.            if (!temp){
  709.            cout<<" Errore nell\'apertura file "<<endl;
  710.            return;
  711.            }
  712.            punt=indice.cerca_primo();
  713.            prec=punt;
  714.            while (punt!=0){
  715.            if (punt->valido==true){
  716.            archivio.get_record(punt->indiizzo,rec);
  717.            new_ind= static_cast<long int>(temp.tellp());
  718.            temp.write(reinterpret_cast<const char*> (rec),LUNG_REC);
  719.            punt->indirizzo=new_ind;
  720.            prec=punt;
  721.            punt=punt->puntatore;
  722.           }
  723.           else{
  724.           indice.elimina_nodoTabella(prec,punt);
  725.           indice.stampa_indice();
  726.           }
  727.           }
  728.           temp.close();
  729.           archivio.rinomina_file_temp("rubrica.bak");
  730.          } else {
  731.          cout<<" Compattazione non necessaria "<<endl;
  732.          }
  733.          }
  734.  
  735.          void Archindex::visita_ordinata(){
  736.          nT *punt;
  737.          Record nom;
  738.          punt=indice.cerca_primo();
  739.          cout<<" Visualizza intero archivio "<<endl;
  740.          while (punt!=0){
  741.          if (punt->valido){
  742.          archivio.get_record(punt->indirizzo, reinterpret_cast<char*>(&nom));
  743.          nom.stampa();
  744.          }
  745.          punt=indice.cerca_successivo();
  746.          }
  747.          }
  748.          Record Archindex::ricerca_record(const char* chiave){
  749.          long int pos;
  750.          Record nom;
  751.          if (indice.cerca_chiave(chiave, pos))
  752.          archivio.get_record(pos, reinterpret_cast<char*>(&nom));
  753.          cout<<" Posizione elemento da ricercare = "<<pos<<endl;
  754.          return nom;
  755. }



Ho riportato qualche commento, così da semplificarvi la lettura!
Vi ringrazio infinitamente in anticipo!!

PM Quote
Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 9:14
Domenica, 22/06/2008
Guarda non ho controllato tutto il codice, comunque i primi errori di sintassi li trovi nelle prime righe.
Codice sorgente - presumibilmente C/C++

  1. #include <iostream>
  2.  
  3. //NON!
  4. #include >iostream>



poi, includi tutto il namespace std.

Codice sorgente - presumibilmente C/C++

  1. 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:


Continuerò a correre, perchè ci sarà sempre qualcuno migliore di me.

Evvia i libri, evitate gli stolti che non li integrano nella loro vita.

http://www.mentisferiche.it

Luca Tedesco
PM Quote
Avatar
Linkage7th (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/06/2008

Segnala al moderatore
Postato alle 9:57
Domenica, 22/06/2008
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!:)


Linkage7th ha allegato un file: archivio.zip (7384 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Linkage7th il 22/06/2008 alle 11:10
PM Quote
Avatar
Linkage7th (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/06/2008

Segnala al moderatore
Postato alle 12:36
Domenica, 22/06/2008
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"?

PM Quote
Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 19:59
Mercoledì, 25/06/2008
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:


Continuerò a correre, perchè ci sarà sempre qualcuno migliore di me.

Evvia i libri, evitate gli stolti che non li integrano nella loro vita.

http://www.mentisferiche.it

Luca Tedesco
PM Quote
Avatar
Linkage7th (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/06/2008

Segnala al moderatore
Postato alle 19:55
Venerdì, 27/06/2008
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

PM Quote
Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 9:26
Sabato, 28/06/2008
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:


Continuerò a correre, perchè ci sarà sempre qualcuno migliore di me.

Evvia i libri, evitate gli stolti che non li integrano nella loro vita.

http://www.mentisferiche.it

Luca Tedesco
PM Quote