Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C++] classe libro memorizzata in un file binario

    Salve a tutti vi spiego in poche parole il succo di questo software: voglio realizzare una classe libro che implementa delle funzionalità(non le dico tanto penso che sono palesi leggendo il codice che posterò alla fine);tra le varie funzionalità si vogliono memorizzare i dati di un certo numero di libri in un file binario;inoltre si vuole implementare una classe pila dinamica che legge i libri dal file binario precedentemente memorizzato. Funzionerebbe tutto bene ma c'è un piccolo problema: nella funzione push della classe pila in input voglio fornire il nome del file da leggere ma per qualche bizzarria(o mio errore ma credo più questo )a tempo di esecuzione non mi da la possibilità di inserire il nome del file e quindi in output dovrei avere "File inesistente!" ma per qualche coincidenza il file viene letto e memorizzato nella pila...qualcuno può aiutarmi? grazie mille a tutti per la vostra disponibilità

    codice:
    #ifndef PACCOP_H_
    #define PACCOP_H_
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    class paccop{
          
          
          private:
                  char *indirizzo;
                  int codice;
                  float peso;
                  
          public:
                 paccop(const char* i="",const int c=0,const float p=0.0)
                 {indirizzo=new char[strlen(i)+1];strcpy(indirizzo,i);codice=c;peso=p;}
                 paccop(const paccop &);
                 const paccop & operator=(const paccop &);
                 const char* get_indirizzo()const {return indirizzo;}
                 int get_codice()const {return codice;}
                 float get_peso()const {return peso;}
                 void set_indirizzo(const char* I) {if(indirizzo) delete[] indirizzo; indirizzo=new char[strlen(I)+1];strcpy(indirizzo,I);}
                 void set_codice(const int C) {codice=C;}
                 void set_peso(const float P) {peso=P;}
                 int scrivifile();
                 friend istream& operator>>(istream&,paccop &);
                 friend ostream& operator<<(ostream&,const paccop &);
          
          };
    
    #endif
    #include "paccop.h"
    
    paccop::paccop(const paccop & P)
    {
     indirizzo=new char[strlen(P.indirizzo)+1];
     strcpy(indirizzo,P.indirizzo);
     codice=P.codice;
     peso=P.peso;
    }
    
    const paccop & paccop::operator=(const paccop & P)
    {
     if(this!=&P)
     {
      if(indirizzo) delete[] indirizzo;
      indirizzo=new char[strlen(P.indirizzo)+1];
      strcpy(indirizzo,P.indirizzo);
      codice=P.codice;
      peso=P.peso;
     }
    }
    
    ostream& operator<<(ostream& os,const paccop & P)
    {
     os<<"*****Dati pacco postale*****\n";
     os<<"Indirizzo: "<<P.indirizzo<<"\n";
     os<<"Codice: "<<P.codice<<"\n";
     os<<"Peso: "<<P.peso<<"\n";
     return os;
    }
    
    istream& operator>>(istream& is,paccop & P)
    {
     cout<<"******Inserimento dati pacco*****\n";
     char buffer[50];
     cout<<"Indirizzo: ";
     is.getline(buffer,49);
     if(P.indirizzo) delete[] P.indirizzo;
     P.indirizzo=new char[strlen(buffer)+1];
     strcpy(P.indirizzo,buffer);
     cout<<"Codice: ";
     is>>P.codice;
     cout<<"Peso: ";
     is>>P.peso;
     return is;
    }
    int paccop::scrivifile()
    {
     char namefile[30];
     cout<<"Inserisci nome del file su cui vuoi scrivere: ";
     cin>>namefile;
     ofstream ofs(namefile,ios::binary);
     char buffer[30];
     int cod;
     float p;
     int nelem=0;
     cout<<"Inserisci indirizzo,codice e peso del pacco postale\n";
     while(cin>>buffer>>cod>>p)
     {
      int size=strlen(buffer);
      strcpy(indirizzo,buffer);
      ofs.write((const char*)(&size),sizeof(int));
      ofs.write(indirizzo,size*sizeof(char));
      codice=cod;
      ofs.write((const char*)(&codice),sizeof(int));
      peso=p;
      ofs.write((const char*)(&peso),sizeof(float));
      nelem++;
     }
     ofs.close();
     return nelem;
     
    }
    
    #ifndef PILAD_H_
    #define PILAD_H_
    #include "paccop.h"
    
    
    typedef paccop E;
    struct nodo;
    typedef nodo* L;
    struct nodo{
           E elem;
           L punt;
           };
           
    class pilad{
          
          private:
                  L l;
                  
          public:
                 pilad(){l=0;}
                 ~pilad();
                 void push(const int);
                 void lastpop();
                 void top();
                 bool empty()const{return l==0;}
                 bool full()const {return false;}
                 void scrividati();
                 void stampadati();
          
          };
    #endif
    #include "pilad.h"
    
    pilad::~pilad()
    {
     L p,q;
     for(p=l;p!=0;p=q)
     {
       q=p->punt;
       delete p;
     }
    }
    
    void pilad::push(const int n)
    {
     char name[30];
     int size=0;
     char buffer[50];
     int code;
     float weight;
     cout<<"Inserisci nome del file da leggere: ";
     cin>>name;
     E p;
     ifstream ifs(name,ios::binary);
     if(!ifs) cerr<<"File inesistente!\n";
     else{
           for(int i=0;i<n;i++)
            {
             ifs.read((char*)(&size),sizeof(int));
             ifs.read(buffer,size*sizeof(char));
             p.set_indirizzo(buffer);
             ifs.read((char*)(&code),sizeof(int));
             p.set_codice(code);
             ifs.read((char*)(&weight),sizeof(float));
             p.set_peso(weight);
             L q=new nodo;
             q->elem=p;
             q->punt=l;
             l=q;
            } 
         }
    }
    
    void pilad::stampadati()
    {
     L temp=l;
     while(temp)
     {
      cout<<temp->elem;
      temp=temp->punt;
     }
    }
    
    #include <cstdlib>
    #include <iostream>
    #include "paccop.h"
    #include "pilad.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    { 
        paccop p;
        int n=p.scrivifile();
        pilad P;
        P.push(n);
        P.stampadati();
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  2. #2
    Scusatemi l'esercizio riguarda la classe pacco postale però il resto va bene...avevo ancora in mente il programma svolto in precedenza

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.