Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /
- #include "../../std_lib_facilities.h"
- #define N 50
- struct gioco{
- char nome[N];
- char casa[N];
- int anno;
- float prezzo;
- };
- using namespace std;
- int main()
- {
- fstream lista; // dichiarazione dello stream generico
- gioco g; // variabile RAM di tipo struct gioco
- char scelta;
- char nameg[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 >> g.nome; 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.close(); //chiusura del file
- lista.clear();
- };
- break;
- case '2':
- {
- lista.open("Giochi.txt", ios::in | ios::binary);
- lista.read((char*)&g,sizeof(g));
- while(!lista.eof())
- {
- cout << "\n--- Dati gioco ---" << endl;
- 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));
- }
- lista.close();
- lista.clear();
- };
- break;
- case '3':
- {
- lista.open("Giochi.txt", ios::out | ios::app | ios::binary);
- lista.seekp(0, ios::end);
- cout << "Inserisci nome gioco ";
- cin >> g.nome;
- cin.ignore(80,'\n');
- cout << "Inserisci azienda di produzione: ";
- 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 Insert game's name that you want to edit: ";
- cin >> nameg;
- cin.ignore(80,'\n');
- lista.read((char*)&g,sizeof(g));
- while (!lista.eof()) {
- if (strcmp(g.nome ,nameg) == 0) {
- trovato = 1;
- cout << "\n--- GAME EDIT ---" << endl << endl;
- cout << "\n Insert game name ..."; cin>>g.nome; cin.ignore(80,'\n');
- cout << "\n Insert organization: "; cin.getline(g.casa,N); cin.ignore(80,'\n');
- cout << "\n Insert year of release: "; cin>>g.anno; cin.ignore(80,'\n');
- cout << "\n Insert price: "; 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 Game not found"; }
- 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':
- {
- /* 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
- */
- bool found = 0;
- fstream temp("tmp", ios::binary | ios::out);
- lista.open("Giochi.txt", ios::binary | ios::in);
- while(!lista.eof())
- {
- lista.read((char*)&g, sizeof(g));
- if(strcmp(g.nome, "***************************************************\0") != 0)
- temp.write((char*)&g, sizeof(g));
- }
- lista.close();
- temp.close();
- lista.open("Giochi.txt", ios::binary | ios::out);
- temp.open("tmp", ios::binary | ios::in);
- cout << "\nInsert game to delete: "; cin >> nameg;
- while(!temp.eof())
- {
- temp.read((char*)&g, sizeof(g));
- if(strcmp(g.nome, nameg) != 0)
- lista.write((char*)&g, sizeof(g));
- }
- lista.close();
- temp.close();
- if(strcmp(nameg, g.nome) == 0)
- {
- found = 1;
- cout << "\nGame deleted succesfully";
- }
- if(found == 0)
- {
- cout << "\nGame name doesn't exist";
- break;
- }
- };
- 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