Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "../../std_lib_facilities.h"
- using namespace std;
- #define N 50
- struct gioco{
- char nome[N];
- char casa[N];
- int anno;
- float prezzo;
- };
- int main()
- {
- fstream lista; // dichiarazione dello stream generico
- gioco g; // variabile RAM di tipo struct gioco
- char scelta;
- char nomegioco[N];
- char continua;
- do{
- cout<<"1) Riempimento lista"<<endl; // creazione del file
- cout<<"2) Visualizza lista"<<endl;
- cout<<"3) Aggiungi gioco alla lista"<<endl;
- cout<<"4) Modifica gioco"<<endl;
- cout<<"5) Elimina gioco dalla lista"<<endl;
- cin>>scelta;
- cin.ignore();
- switch(scelta){
- case '1': // creazione del file
- {
- lista.open("Giochi.txt",ios::out|ios::binary);
- do
- {
- cout<<"--- Inserisci dati gioco ---"<<endl;
- // I valori acquisiti da tastiera sono scritti nella variabile di RAM chiamata g
- cout<<"\n Inserisci nome gioco..."; cin.getline(g.nome,N); cin.ignore(80,'\n');
- cout<<"\n Inserisci casa prodruttrice..."; cin.getline(g.casa,N); cin.ignore(80,'\n');
- cout<<"\n Inserisci anno di rilascio..."; cin>>g.anno; cin.ignore(80,'\n');
- cout<<"\n Inserisci prezzo..."; cin>>g.prezzo; cin.ignore(80,'\n');
- // lista.write((char*)&g,sizeof(g)); // operazione di scrittura nel file
- cout<<"Continuare l'inserimento di un'altro gioco? (s/n)";
- cin>>scelta;
- cin.ignore(80,'\n');
- }while(scelta=='s');
- lista.write((char*)&g,sizeof(g)); // operazione di scrittura nel file
- lista.close(); //chiusura del file
- lista.clear();
- };
- break;
- case '2': // visualizzazione del file
- {
- lista.open("Giochi.txt",ios::in|ios::binary); // apertura in lettura in modalità binario
- lista.read((char*)&g,sizeof(g));// 1° lettura prima del ciclo di lettura;si copia da memoria di massa nella variabile di RAM g
- while(!lista.eof())
- {
- cout<<"\n--- Dati gioco ---"<<endl; // visualizzazione dei campi del record appena letto
- cout<<"Nome: "<<g.nome<<endl;
- cout<<"Casa Prodruttrice: "<<g.casa<<endl;
- cout<<"Anno: "<<g.anno<<endl;
- cout<<"Prezzo: "<<g.prezzo<<endl;
- lista.read((char*)&g,sizeof(g)); //si esegue la lettura da file del record successivo
- }
- lista.close(); //chiusura del file
- lista.clear();
- };
- break;
- case '3': // Aggiungere un solo gioco alla fine del file
- {
- lista.open("Giochi.txt",ios::out|ios::app|ios::binary);// aprire il file in append
- lista.seekp(0,ios::end); // posizionamento relativo alla fine del file
- cout<<"Inserisci nome gioco...";
- cin.getline(g.nome,N);
- cin.ignore(80,'\n');
- cout<<"Inserisci casa prodruttrice...";
- cin.getline(g.casa,N);
- cin.ignore(80,'\n');
- cout<<"Inserisci anno di rilascio...";
- cin>>g.anno;
- cin.ignore(80,'\n');
- cout<<"Inserisci prezzo...";
- cin>>g.prezzo;
- cin.ignore(80,'\n');
- lista.write((char*)&g,sizeof(g)); // scrittura sul file del record appena riempito in RAM
- lista.close();
- lista.clear();
- };
- break;
- case '4': // Modifica dei dati di un gioco
- {
- bool trovato = 0; // flag che segnala se trova l'elemento che deve essere modificato
- lista.open("Giochi.txt",ios::in|ios::out|ios::binary);
- cout <<"\n Inserire il nome del gioco che si vuole modificare...";
- cin >> nomegioco;
- cin.ignore(80,'\n');
- lista.read((char*)&g,sizeof(g));
- while (!lista.eof()) {
- if (strcmp(g.nome ,nomegioco) == 0) {
- trovato = 1;
- cout<<"\n MODIFICA DEL GIOCO...";
- cout<<"\n Inserisci nome gioco..."; cin.getline(g.nome,N); cin.ignore(80,'\n');
- cout<<"\n Inserisci casa prodruttrice..."; cin.getline(g.casa,N); cin.ignore(80,'\n');
- cout<<"\n Inserisci anno di rilascio..."; cin>>g.anno; cin.ignore(80,'\n');
- cout<<"\n Inserisci prezzo..."; cin>>g.prezzo; cin.ignore(80,'\n');
- lista.seekg(-sizeof(g),ios::cur);
- lista.write((char*)&g,sizeof(g));
- break;}
- lista.read((char*)&g,sizeof(g)); }
- if (trovato == 0) {
- cout << "\n Gioco non trovato"; }
- lista.close();
- lista.clear();
- /* AGGIUNGERE IL CODICE SORGENTE CHE PERMETTE DI MODIFICARE I DATI PRESENTI IN UN RECORD.
- IL RECORD DA MODIFICARE DEVE ESSERE SELEZIONATO IN BASE AL NOME DEL GIOCO (OSSIA IL
- NOME DEL GIOCO DEVE ESSERE ACQUISITO DA TASTIERA)
- DOVRA' ESSERE IMPLEMENTATO UN CICLO IN CUI SI LEGGONO I RECORD FINO A QUANDO SI INCONTRA
- IL RECORD CHE CONTIENE IL NOME CERCATO; A QUEL PUNTO SI VISUALIZZA TUTTO IL RECORD E
- SI CHIEDE ALL'UTENTE DI INSERIRE I NUOVI VALORI DA SOVRASCRIVERE A QUELLI ESISTENTI.
- PREVEDERE OVVIAMENTE IL CASO IN CUI IL NOME DEL GIOCO NON ESISTE NEL FILE !
- */
- };
- break;
- case'5': // Eliminazione di un gioco dal file
- { bool trovato_ = 0;
- ifstream lista;
- ofstream temporanera;
- lista.open("Giochi.txt", ios::binary);
- temporanera.open("filetemporanero",ios::binary);
- for (;;){ // endless loop
- //Il file originale viene letto, vengono copiati solo i record non eliminati
- lista.read((char*)&g, sizeof(g));
- if ( lista.eof()){
- lista.close();
- temporanera.close();
- break;}
- else {
- if (strcmp(g.nome,"*******************\0") != 0)
- temporanera.write((char*)&g, sizeof(g)); }
- }
- lista.close();
- temporanera.close();
- // Il file originale viene letto, vengono copiati solo i record non eliminati
- ifstream temporaneraa;
- ofstream listatemp;
- listatemp.open("Giochi.txt",ios::binary);
- temporaneraa.open("filetemporanero",ios::binary);
- cout<<"\n Inserire il gioco da eliminare...";
- cin>>nomegioco;
- for (;;) {
- temporaneraa.read((char*)&g, sizeof(g));
- if (temporaneraa.eof()) {
- listatemp.close();
- temporaneraa.close();
- break; }
- else
- if (strcmp(g.nome ,nomegioco) != 0){
- listatemp.write((char*)&g, sizeof(g));}// copia file originale
- }
- if (strcmp(nomegioco, g.nome) == 0){
- trovato_ = 1;
- cout<<"\n Gioco da eliminare è esistente,è stato eliminato con successo!";}
- if(trovato_==0){
- cout<<"\n Gioco da eliminare non esiste ";
- break;}
- listatemp.close();
- temporaneraa.close();
- /* AGGIUNGERE IL CODICE SORGENTE CHE PERMETTE DI ELIMINARE I DATI PRESENTI IN UN RECORD.
- IL RECORD DA CANCELLARE DEVE ESSERE SELEZIONATO IN BASE AL NOME DEL GIOCO (OSSIA IL
- NOME DEL GIOCO DEVE ESSERE ACQUISITO DA TASTIERA).
- DEVONO ESSERE USATI DUE STREAM:
- - UNO DI LETTURA (INPUT) PER LEGGERE TUTTI I RECORD ESISTENTI NEL FILE
- - UNO DI SCRITTURA (OUTPUT) PER SCRIVERE IN UN FILE DI APPOGGIO (COPIANDOLI) TUTTI I RECORD TRANNE
- QUELLO CHE SI VUOLE CANCELLARE (CHE NON VERRA' COPIATO)
- DOPO QUESTA OPERAZIONE BISOGNERA' COPIARE TUTTI I RECORD DAL FILE DI APPOGGIO CREATO AL FILE ORIGINALE
- */
- };
- break;
- } // END SWITCH
- cout<<"\n\n Tornare di nuovo al menu? (s/n)";
- cin>>continua;
- cout<<endl<<endl;
- } while(continua=='s');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement