All pastes #845413 Raw Edit

prog2

public cpp v1 · immutable
#845413 ·published 2008-01-07 17:58 UTC
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();}