rendered paste body/*Napisz program, kt�ry b�dzie zapisywa� do pliku rekordy o nastepujacej strukturze (ksiazka): isbn, tytul, autor, rok_wydania, ilosc_stron, wydawnictwo, rodzaj_okladki. Po kazdym zapisie program ma wyswietlal aktualna zawartosc pliku.Program umozliwia aktualizacje wybranego rekordu*/#include <iostream>#include <fstream>#include <conio.h>using namespace std;struct ksiazka{ char autor[50]; char isbn[50]; char tytul[50]; char wydawnictwo[50]; char rodzaj_okladki[50]; int rok_wydania; int ilosc_stron; void wczytaj(void); void wypisz(void);};void ksiazka::wypisz(void){ cout<<"\n"<<autor<<endl; cout<<tytul<<endl; cout<<isbn<<endl; cout<<wydawnictwo<<endl; cout<<rodzaj_okladki<<endl; cout<<rok_wydania<<endl; cout<<ilosc_stron<<endl;}void ksiazka::wczytaj(void){ cout<<"Podaj autora: "; cin>>autor; cout<<"Podaj isbn "; cin>>isbn; cout<<"Podaj tytul: "; cin>>tytul; cout<<"Podaj wydawnictwo: "; cin>>wydawnictwo; cout<<"Podaj rodzaj_okladki: "; cin>>rodzaj_okladki; cout<<"Podaj rok_wydania: "; cin>>rok_wydania; cout<<"Podaj ilosc_stron: "; cin>>ilosc_stron;}void zapisz(ksiazka x); //funkcja zapisuje jeden rekord z bazy w trybie binarnym do plikuvoid czysc_plik(void); //funkcja usuwa cala zawartosc plikuint main(){ ksiazka baza[100]; //100 elementowa tablica int pozycja=0; //zmienna zlicza ile elementow wprwoadzono czysc_plik(); //jesli plik istniał to go czysczę i rozpoczynam zapis do "swierzego" while(1) { //system("cls"); system("clear"); int pytanie; cout << "1 - wprowadz rekordy\n" << "2 - aktualizuj rekordy\n" << "3 - wczytaj z pliku i wyswietl\n" << "0 - wyjdz\n" << "co chcesz zrboic: "; cin >> pytanie; switch (pytanie) { case 1: { baza[pozycja].wczytaj(); zapisz(baza[pozycja]); //dopisuje wprowadzony rekord do pliku pozycja++; break; } case 2: { for (int i=0; i<pozycja; i++) { cout << i+1 << ".\n"; baza[i].wypisz(); } int ktory; cout << "Ktory modyfikowac?"; cin >> ktory; baza[ktory-1].wczytaj(); czysc_plik(); //po modyfikacji jakiegos rekordu czysczcze caly plik for (int i=0; i<=pozycja; i++) zapisz(baza[i]); //i zapisuje cala baze od poczatku do pliku break; } case 3: { pozycja=0; fstream plik("plika.txt",ios::binary | ios::in); //otwieram w trybie binarnym, ale tylko do odczytu for(pozycja=0; ;pozycja++) { //na while zby zwieksza pozycje :/ nie bardzo wiem czmu plik.read(reinterpret_cast<char*>(&baza[pozycja]),sizeof(baza[pozycja])); //wczytuje kolejne rekordy do bazu z pliku if(plik.eof()) break; //jesli koniec pliku przerywam for'a } plik.close(); //wypisywanie rekordow for (int i=0; i<pozycja; i++) { cout << "Rekord numer: " << i+1<<endl; baza[i].wypisz(); } getchar(); getchar(); break; } case 0: return 0; } } system("pause");}void zapisz(ksiazka x){ fstream plik("plika.txt", ios::out| ios::app| ios::binary); //otwieram plik do dopisywania na koncu w trybie binarnym plik.write(reinterpret_cast<char*>(&x), sizeof(x)); plik.close();}void czysc_plik(void){ fstream plik("plika.txt", ios::out| ios::binary); //plik otwarty w trybie pisania (ignoruje to co bylo wczesniej) plik.close();}