Advertisement
Guest User

Untitled

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