Salve, posto questo esercizio sui file binari...
Spiegazione :
partendo da due file binari, articoli.dat e acquisti.dat,
dovrei crearne un altro contenente gli articoli in comune(verificabili tramite codice)
ora ho svolto le procedure di inserimento e stampa.... la parte dove c'è
//presunto errore
penso sia la parte non funzionante che dovrebbe appunto scrivere sul terzo file
gli elementi in comune
ho svolto due for, e ho effettuato il controllo sui codici, se comuni, metti in aggiorna.dat.
graziecodice:/* Due file binari di nome “articoli.dat” e “acquisti.dat” rappresentano rispettivamente gli articoli e gli acquisti di una certa azienda. Effettuare una ricerca, se un articoli è presente in entrambi i file, salvarlo uin un file "aggiorna.dat" */ #include<iostream> #include<fstream> #include<string> //clearscreen #ifdef _WIN32 const char* pulisci = "cls"; #else #ifdef linux const char* pulisci = "clear"; #else #error OS non supportato #endif #endif using namespace std; struct TpArticolo { int codice; char descrizione[20]; int iva; float costo, costoM; // costoM è il costo medio int giacenza; }; struct TpAcquisto { int codart; // è il codice articolo int quanto; float costo; }; struct TpAggiorna { TpAcquisto acquisto; float costoM; }; const char articolo[]="articoli.dat"; const char acquisti[]="acquisti.dat"; const char aggiorna[]="aggiorna.dat"; // prototipi int MenuScelta(); void Inserimento(TpArticolo&, char&); void Inserimento2(TpAcquisto& , char& ); void Stampa(const TpArticolo&); void Stampa2(const TpAcquisto&); int main () { TpArticolo articolo1; TpAcquisto acquisto1; TpAggiorna aggiornato1; const int LTpArt=sizeof(TpArticolo); // lunghezza della struttura TpArticolo const int LTpAcq=sizeof(TpAcquisto); // lunghezza della struttura TpAcquisto fstream filearticolo; // definizione ed apertura alla fine del file filearticolo.open(articolo, ios::in|ios::out|ios::binary|ios::ate); if (!filearticolo) { //se il file non esiste lo crea con l'istruzione seguente filearticolo.open("articoli.dat", ios::in|ios::out|ios::binary|ios::ate); return 1; } fstream fileacquisti; // definizione ed apertura alla fine del file fileacquisti.open(acquisti, ios::in|ios::out|ios::binary|ios::ate); if (!fileacquisti) { //se il file non esiste lo crea con l'istruzione seguente fileacquisti.open("acquisti.dat", ios::in|ios::out|ios::binary|ios::ate); return 1; } fstream fileaggiorna; // definizione ed apertura alla fine del file fileaggiorna.open(aggiorna,ios::in|ios::out|ios::binary|ios::ate); if (!fileaggiorna) { //se il file non esiste lo crea con l'istruzione seguente fileaggiorna.open("aggiorna.dat",ios::out|ios::binary|ios::trunc|ios::ate); return 1; } int NumTpArticoli, NumTpAcquisti, NumAggiorna; NumTpArticoli=filearticolo.tellg()/LTpArt; //calcola il numero di articoli nel file Articoli NumTpAcquisti=fileacquisti.tellg()/LTpAcq; //calcola il numero di articoli nel file Acquisti NumAggiorna=fileaggiorna.tellg()/LTpArt; //calcola il numero di articoli nel file Articoli int i; int scelta; char ch; //scelta menu do{ system(pulisci); scelta=MenuScelta(); cout<<"Numero articoli : "<<NumTpArticoli<<endl; cout<<"Numero acquisti : "<<NumTpAcquisti<<endl; switch(scelta){ case 1: //inserimento cout<<" INSERIMENTO ARTICOLI IN S-ARTICOLI "<<endl; Inserimento(articolo1,ch); if(ch=='s') filearticolo.seekp(0,ios::end); filearticolo.write((char*)&articolo1, LTpArt); NumTpArticoli++; break; case 2: //inserimento cout<<" INSERIMENTO ACQUISTI IN S-ACQUISTI "<<endl; Inserimento2(acquisto1,ch); if(ch=='s') fileacquisti.seekp(0,ios::end); fileacquisti.write((char*)&acquisto1, LTpAcq); NumTpAcquisti++; break; case 3: //Stampa dati cout<<" STAMPA ARTICOLi "<<endl; filearticolo.seekg(0, ios::beg); for(int i=0;i<NumTpArticoli;i++){ filearticolo.read((char*)&articolo1,LTpArt); Stampa(articolo1); } system("pause"); break; case 4: //Stampa dati cout<<" STAMPA ACQUISTI "<<endl; fileacquisti.seekg(0, ios::beg); for(int i=0;i<NumTpAcquisti;i++){ fileacquisti.read((char*)&acquisto1,LTpAcq); Stampa2(acquisto1); } system("pause"); break; case 5: //AGGIORNAMENTO dati //PRESUNTO ERRORE cout<<" AGGIORNA ACQUISTI "<<endl; fileacquisti.seekg(0, ios::beg); filearticolo.seekg(0, ios::beg); for(int i=0;i<NumTpAcquisti;i++){ fileacquisti.read((char*)&acquisto1,LTpAcq); for(int i=0;i<NumTpArticoli;i++){ filearticolo.read((char*)&articolo1,LTpArt); if(acquisto1.codart==articolo1.codice){ fileaggiorna.write((char*)&articolo1, LTpAcq); } } } system("pause"); break; case 6: //Stampa dati cout<<" STAMPA AGGIORNA "<<endl; fileaggiorna.seekg(0, ios::beg); for(int i=0;i<NumAggiorna;i++){ filearticolo.read((char*)&articolo1,LTpArt); Stampa(articolo1); } system("pause"); break; } fileaggiorna.close(); filearticolo.close(); fileacquisti.close(); }while(scelta>0&&scelta<7); } int MenuScelta(){ int sc; do{ cout<<"GESTIONE MAGAZZINO"<<endl; cout<<"\n"; cout<<"1 - INSERIMENTO ARTICOLO"<<endl; cout<<"2 - INSERIMENTO ACQUISTI"<<endl; cout <<"3 - STAMPA ARTICOLi"<<endl; cout <<"4 - STAMPA ACQUISTI"<<endl; cout <<"5 - AGGIORNA ACQUISTI"<<endl; cout <<"6 - STAMPA AGGIORNA"<<endl; cout <<"7 - FINE"<<endl; cin>>sc; } while(sc<1||sc>7); return sc; } void Inserimento(TpArticolo& articolo1, char& ch){ cout<<"INSERIMENTO ARTICOLO"<<endl; cout<<"Codice : "; cin>>articolo1.codice; cout<<"Descrizione : "; cin>>articolo1.descrizione; cout<<"Iva : "; cin>>articolo1.iva; cout<<"Costo : "; cin>>articolo1.costo; cout<<"Costo : "; cin>>articolo1.costoM; cout<<"Giacenza : "; cin>>articolo1.giacenza; cout<<"Salva(s/n) : "; cin>>ch; } void Inserimento2(TpAcquisto& acquisto1, char& ch){ cout<<"INSERIMENTO ARTICOLO"<<endl; cout<<"Codice : "; cin>>acquisto1.codart; cout<<"Quantita' : "; cin>>acquisto1.quanto; cout<<"Costo : "; cin>>acquisto1.costo; cout<<"Salva(s/n) : "; cin>>ch; } void Stampa(const TpArticolo& articolo1){ cout<<"Codice : "<<articolo1.codice<<" "; cout<<"Descrizione : "<<articolo1.descrizione<<" "; cout<<"IVA : "<<articolo1.iva<<" "; cout<<"Costo : "<<articolo1.costo<<" "; cout<<"Costo Medio : "<<articolo1.costoM<<" "; cout<<"Giaenza : "<<articolo1.giacenza<<" "; cout<<endl; } void Stampa2(const TpAcquisto& acquisto1){ cout<<"Codice : "<<acquisto1.codart<<" "; cout<<"Quantita' : "<<acquisto1.quanto<<" "; cout<<"Costo : "<<acquisto1.costo<<" "; cout<<endl; }

Rispondi quotando