PDA

Visualizza la versione completa : c++ file binari


wgd-developer
10-05-2008, 17:15
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.



/*
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::b inary|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;

}



grazie

Loading