Advertisement
Guest User

Untitled

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