Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.55 KB | None | 0 0
  1. #include "../../std_lib_facilities.h"
  2. using namespace std;
  3. #define N 50
  4. struct gioco{
  5. char nome[N];
  6. char casa[N];
  7. int anno;
  8. float prezzo;
  9. };
  10. int main()
  11. {
  12. fstream lista; // dichiarazione dello stream generico
  13. gioco g; // variabile RAM di tipo struct gioco
  14. char scelta;
  15. char nomegioco[N];
  16. char continua;
  17. do{
  18. cout<<"1) Riempimento lista"<<endl; // creazione del file
  19. cout<<"2) Visualizza lista"<<endl;
  20. cout<<"3) Aggiungi gioco alla lista"<<endl;
  21. cout<<"4) Modifica gioco"<<endl;
  22. cout<<"5) Elimina gioco dalla lista"<<endl;
  23. cin>>scelta;
  24. cin.ignore();
  25. switch(scelta){
  26.  
  27. case '1': // creazione del file
  28. {
  29. lista.open("Giochi.txt",ios::out|ios::binary);
  30. do
  31. {
  32.  
  33. cout<<"--- Inserisci dati gioco ---"<<endl;
  34. // I valori acquisiti da tastiera sono scritti nella variabile di RAM chiamata g
  35. cout<<"\n Inserisci nome gioco..."; cin.getline(g.nome,N); cin.ignore(80,'\n');
  36. cout<<"\n Inserisci casa prodruttrice..."; cin.getline(g.casa,N); cin.ignore(80,'\n');
  37. cout<<"\n Inserisci anno di rilascio..."; cin>>g.anno; cin.ignore(80,'\n');
  38. cout<<"\n Inserisci prezzo..."; cin>>g.prezzo; cin.ignore(80,'\n');
  39.  
  40. // lista.write((char*)&g,sizeof(g)); // operazione di scrittura nel file
  41. cout<<"Continuare l'inserimento di un'altro gioco? (s/n)";
  42. cin>>scelta;
  43. cin.ignore(80,'\n');
  44. }while(scelta=='s');
  45. lista.write((char*)&g,sizeof(g)); // operazione di scrittura nel file
  46. lista.close(); //chiusura del file
  47. lista.clear();
  48. };
  49. break;
  50. case '2': // visualizzazione del file
  51. {
  52. lista.open("Giochi.txt",ios::in|ios::binary); // apertura in lettura in modalità binario
  53. lista.read((char*)&g,sizeof(g));// 1° lettura prima del ciclo di lettura;si copia da memoria di massa nella variabile di RAM g
  54. while(!lista.eof())
  55. {
  56. cout<<"\n--- Dati gioco ---"<<endl; // visualizzazione dei campi del record appena letto
  57. cout<<"Nome: "<<g.nome<<endl;
  58. cout<<"Casa Prodruttrice: "<<g.casa<<endl;
  59. cout<<"Anno: "<<g.anno<<endl;
  60. cout<<"Prezzo: "<<g.prezzo<<endl;
  61. lista.read((char*)&g,sizeof(g)); //si esegue la lettura da file del record successivo
  62. }
  63.  
  64. lista.close(); //chiusura del file
  65. lista.clear();
  66. };
  67. break;
  68. case '3': // Aggiungere un solo gioco alla fine del file
  69. {
  70. lista.open("Giochi.txt",ios::out|ios::app|ios::binary);// aprire il file in append
  71. lista.seekp(0,ios::end); // posizionamento relativo alla fine del file
  72. cout<<"Inserisci nome gioco...";
  73. cin.getline(g.nome,N);
  74. cin.ignore(80,'\n');
  75. cout<<"Inserisci casa prodruttrice...";
  76. cin.getline(g.casa,N);
  77. cin.ignore(80,'\n');
  78. cout<<"Inserisci anno di rilascio...";
  79. cin>>g.anno;
  80. cin.ignore(80,'\n');
  81. cout<<"Inserisci prezzo...";
  82. cin>>g.prezzo;
  83. cin.ignore(80,'\n');
  84. lista.write((char*)&g,sizeof(g)); // scrittura sul file del record appena riempito in RAM
  85. lista.close();
  86. lista.clear();
  87. };
  88. break;
  89. case '4': // Modifica dei dati di un gioco
  90. {
  91. bool trovato = 0; // flag che segnala se trova l'elemento che deve essere modificato
  92. lista.open("Giochi.txt",ios::in|ios::out|ios::binary);
  93. cout <<"\n Inserire il nome del gioco che si vuole modificare...";
  94. cin >> nomegioco;
  95. cin.ignore(80,'\n');
  96. lista.read((char*)&g,sizeof(g));
  97. while (!lista.eof()) {
  98. if (strcmp(g.nome ,nomegioco) == 0) {
  99. trovato = 1;
  100. cout<<"\n MODIFICA DEL GIOCO...";
  101. cout<<"\n Inserisci nome gioco..."; cin.getline(g.nome,N); cin.ignore(80,'\n');
  102. cout<<"\n Inserisci casa prodruttrice..."; cin.getline(g.casa,N); cin.ignore(80,'\n');
  103. cout<<"\n Inserisci anno di rilascio..."; cin>>g.anno; cin.ignore(80,'\n');
  104. cout<<"\n Inserisci prezzo..."; cin>>g.prezzo; cin.ignore(80,'\n');
  105.  
  106. lista.seekg(-sizeof(g),ios::cur);
  107. lista.write((char*)&g,sizeof(g));
  108. break;}
  109. lista.read((char*)&g,sizeof(g)); }
  110.  
  111. if (trovato == 0) {
  112. cout << "\n Gioco non trovato"; }
  113.  
  114. lista.close();
  115. lista.clear();
  116.  
  117. /* AGGIUNGERE IL CODICE SORGENTE CHE PERMETTE DI MODIFICARE I DATI PRESENTI IN UN RECORD.
  118. IL RECORD DA MODIFICARE DEVE ESSERE SELEZIONATO IN BASE AL NOME DEL GIOCO (OSSIA IL
  119. NOME DEL GIOCO DEVE ESSERE ACQUISITO DA TASTIERA)
  120. DOVRA' ESSERE IMPLEMENTATO UN CICLO IN CUI SI LEGGONO I RECORD FINO A QUANDO SI INCONTRA
  121. IL RECORD CHE CONTIENE IL NOME CERCATO; A QUEL PUNTO SI VISUALIZZA TUTTO IL RECORD E
  122. SI CHIEDE ALL'UTENTE DI INSERIRE I NUOVI VALORI DA SOVRASCRIVERE A QUELLI ESISTENTI.
  123. PREVEDERE OVVIAMENTE IL CASO IN CUI IL NOME DEL GIOCO NON ESISTE NEL FILE !
  124. */
  125.  
  126. };
  127. break;
  128. case'5': // Eliminazione di un gioco dal file
  129. { bool trovato_ = 0;
  130. ifstream lista;
  131. ofstream temporanera;
  132. lista.open("Giochi.txt", ios::binary);
  133. temporanera.open("filetemporanero",ios::binary);
  134.  
  135. for (;;){ // endless loop
  136. //Il file originale viene letto, vengono copiati solo i record non eliminati
  137. lista.read((char*)&g, sizeof(g));
  138. if ( lista.eof()){
  139. lista.close();
  140. temporanera.close();
  141. break;}
  142. else {
  143. if (strcmp(g.nome,"*******************\0") != 0)
  144. temporanera.write((char*)&g, sizeof(g)); }
  145. }
  146. lista.close();
  147. temporanera.close();
  148. // Il file originale viene letto, vengono copiati solo i record non eliminati
  149. ifstream temporaneraa;
  150. ofstream listatemp;
  151. listatemp.open("Giochi.txt",ios::binary);
  152. temporaneraa.open("filetemporanero",ios::binary);
  153. cout<<"\n Inserire il gioco da eliminare...";
  154. cin>>nomegioco;
  155. for (;;) {
  156. temporaneraa.read((char*)&g, sizeof(g));
  157. if (temporaneraa.eof()) {
  158. listatemp.close();
  159. temporaneraa.close();
  160. break; }
  161. else
  162. if (strcmp(g.nome ,nomegioco) != 0){
  163. listatemp.write((char*)&g, sizeof(g));}// copia file originale
  164. }
  165. if (strcmp(nomegioco, g.nome) == 0){
  166. trovato_ = 1;
  167. cout<<"\n Gioco da eliminare è esistente,è stato eliminato con successo!";}
  168. if(trovato_==0){
  169. cout<<"\n Gioco da eliminare non esiste ";
  170. break;}
  171. listatemp.close();
  172. temporaneraa.close();
  173. /* AGGIUNGERE IL CODICE SORGENTE CHE PERMETTE DI ELIMINARE I DATI PRESENTI IN UN RECORD.
  174. IL RECORD DA CANCELLARE DEVE ESSERE SELEZIONATO IN BASE AL NOME DEL GIOCO (OSSIA IL
  175. NOME DEL GIOCO DEVE ESSERE ACQUISITO DA TASTIERA).
  176. DEVONO ESSERE USATI DUE STREAM:
  177. - UNO DI LETTURA (INPUT) PER LEGGERE TUTTI I RECORD ESISTENTI NEL FILE
  178. - UNO DI SCRITTURA (OUTPUT) PER SCRIVERE IN UN FILE DI APPOGGIO (COPIANDOLI) TUTTI I RECORD TRANNE
  179. QUELLO CHE SI VUOLE CANCELLARE (CHE NON VERRA' COPIATO)
  180. DOPO QUESTA OPERAZIONE BISOGNERA' COPIARE TUTTI I RECORD DAL FILE DI APPOGGIO CREATO AL FILE ORIGINALE
  181. */
  182. };
  183. break;
  184. } // END SWITCH
  185.  
  186. cout<<"\n\n Tornare di nuovo al menu? (s/n)";
  187. cin>>continua;
  188. cout<<endl<<endl;
  189. } while(continua=='s');
  190.  
  191. return 0;
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement