class Czytelnik
{
private:
string _imie;
string _nazwisko;
long _id;
public:
Czytelnik (int numerek)
{
cout<<"Wprowadz imie nowego czytelnika"<<endl;
cin>>_imie;
cout<<"Wprowadz nazwisko nowego czytelnika"<<endl;
cin>>_nazwisko;
_id=numerek+1;
}
Czytelnik ()
{}
void WypiszDane ()
{
cout<<"Imie:\t\t"<<_imie<<endl;
cout<<"Nazwisko:\t"<<_nazwisko<<endl;
cout<<"Identyfikator:\t"<<_id<<endl;
}
void Wyszukaj (string imie, string nazwisko, int &id, int wybor)
{
if (id==_id)
{id=_id;}
if ((imie==_imie)and (nazwisko==_nazwisko))
{id=_id;}
}
void Zapisz(void)
{
string czytelnik;
string numerCzytelnika;
char cztlnik[2];
sprintf( cztlnik,"%d", _id);
fstream plik;
plik.open(cztlnik, ios::out | ios::binary);
plik.write((char*)this,sizeof(int)+sizeof(long) + sizeof(char)*100+2 );
plik.close();
};
void odczytaj(void)
{
string czytelnik;
string numerCzytelnika;
char cztlnik[2];
sprintf( cztlnik,"%d", _id);
fstream plik;
plik.open(cztlnik, ios::in | ios::binary);
plik.read((char*)this,sizeof(int)+sizeof(long) + sizeof(char)*100+2 );
plik.close();
};
};
Tak jak pisałem, jestem początkujący, więc za ewentualne niezgodności z ogólnie przyjętymi standardami przepraszam. Metody (oprócz dwóch ostatnich) spełniają swoją rolę w programie, dlatego są jakie są.
// Wklejam cały kod programu, po zmianach jakie mu jeszcze próbowałem nadać. Może ktoś akurat uruchomi i wywnioskuje co jest nie tak... W komentarzach są też moje próby uruchomienia tego na inne sposoby. Z góry dziękuję za wszelkie wskazówki... I jeszcze raz przepraszam za ewentualny "brzydko" napisany kod.
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
class Czytelnik
{
private:
string _imie;
string _nazwisko;
long _id;
public:
Czytelnik (int numerek)
{
cout<<"Wprowadz imie nowego czytelnika"<<endl;
cin>>_imie;
cout<<"Wprowadz nazwisko nowego czytelnika"<<endl;
cin>>_nazwisko;
_id=numerek+1;
}
Czytelnik ()
{}
void WypiszDane ()
{
cout<<"Imie:\t\t"<<_imie<<endl;
cout<<"Nazwisko:\t"<<_nazwisko<<endl;
cout<<"Identyfikator:\t"<<_id<<endl;
}
void Wyszukaj (string imie, string nazwisko, int &id, int wybor)
{
if (id==_id)
{id=_id;}
if ((imie==_imie)and (nazwisko==_nazwisko))
{id=_id;}
}
void Zapisz(void)
{
string czytelnik;
string numerCzytelnika;
char cztlnik[2];
sprintf( cztlnik,"%d", _id);
fstream plik;
plik.open(cztlnik, ios::out | ios::binary);
//plik.write((char*)this,sizeof(int)+sizeof(long) + sizeof(char)*100+2 );
plik.write((char*)this,9999999 );
plik.close();
};
void Odczytaj(int numerek)
{
string czytelnik;
string numerCzytelnika;
char cztlnik[2];
sprintf( cztlnik,"%d", numerek+1);
fstream plik;
plik.open(cztlnik, ios::in | ios::binary);
//plik.read((char*)this,sizeof(int)+sizeof(long) + sizeof(char)*100+2 );
plik.read((char*)this,9999999);
plik.close();
};
};
class Ksiazka
{
private:
string _tytul;
string _autor;
int _rokWydania;
bool _wypozyczona;
int _wypozyczajacy;
long _id;
public:
Ksiazka (int numerek)
{
_id=numerek+1;
cout<<"Wprowadz tytul nowej ksiazki:"<<endl;
cin>>_tytul;
cout<<"Wprowadz imie i nazwisko autora:"<<endl;
cin>>_autor;
cout<<"Wprowadz rok wydania ksiazki:"<<endl;
cin>>_rokWydania;
_wypozyczona=0;
_wypozyczajacy=0;
}
Ksiazka ()
{}
void WypiszDane (int &wypozyczajacy)
{
cout<<"Tytul:\t"<<_tytul<<endl;
cout<<"Autor\t"<<_autor<<endl;
cout<<"Rok wydania:\t"<<_rokWydania<<endl;
cout<<"Identyfikator:\t"<<_id<<endl;
if (_wypozyczona!=0)
{
cout<<"Wypozyczona przez: "<<endl;
wypozyczajacy=_wypozyczajacy;
}
else
{
cout<<"Można wypozyczyc"<<endl;
wypozyczajacy=0;
}
};
void Wyszukaj (string tytul, string autor,int rokWydania, int &id, int wybor)
{
if (id==_id)
{id=_id;}
if ((tytul==_tytul)and(autor==_autor)and(rokWydania==_rokWydania))
{id=_id;}
};
void Wypozycz (int idWypozyczajacego)
{
_wypozyczajacy=idWypozyczajacego;
_wypozyczona="TRUE";
};
void Zwroc ()
{
_wypozyczajacy=0;
_wypozyczona="FALSE";
};
bool SprawdzanieWypozyczenia ()
{
if (_wypozyczona==0)
{return(0);}
else
{return(1);}
};
};
void Menu (int &wybor);
void MenuCzytelnicy (int &wybor);
void MenuKsiazki (int &wybor);
void MenuWypozyczenia (int &wybor);
int main ()
{
int LicznikCzytelnikow=0;
int LicznikKsiazek=0;
Czytelnik czytelnicy [100];
Ksiazka ksiazki [500];
fstream PlikLicznikCzytelnikow;
PlikLicznikCzytelnikow.open("licznikCzytelnikow.dat", ios::in);
PlikLicznikCzytelnikow>>LicznikCzytelnikow;
PlikLicznikCzytelnikow.close();
/* ifstream ifs("plik.foo", ios::binary); // otwieramy plik do odczytu binarnego
char* temp = new char[sizeof(int)]; // tymczasowy bufor na dane
ifs.read(temp, 999999); // wczytujemy dane do bufora
//int* number1 = (int*)(temp); // rzutujemy zawartość bufora na typ int
czytelnicy = (Czytelnik*)(temp);*/
for (int i=0; i<=LicznikCzytelnikow-1; i++)
{czytelnicy[i].Odczytaj(i);
cout<<"Odczytano dane czytelnika :"<<i<<endl;}
system ("pause");
Poczatek:
system("CLS");
int Wybor=0;
Menu(Wybor);
int Opcja=0;
system ("cls");
int y=0;
switch (Wybor)
{
case 1: {
MenuCzytelnicy (Opcja);
switch (Opcja)
{
case 1: {
system ("cls");
cout<<"Zestawienie wszystkich czytelnikow:";
for (int i=0; i<=LicznikCzytelnikow-1; i++)
{
cout<<endl<<"Dane czytelnika:"<<endl;
czytelnicy[i].WypiszDane();
}
system ("PAUSE");
}
break;
case 2: {
WyszukajCzytelnika:
system ("cls");
int WyszukiwanieCzytelnika;
cout<<"Wyszukiwanie czytelnika:"<<endl;
cout<<"Wprowadz 1, jesli chcesz wyszukiwac wedlug identyfikatora czytelnika"<<endl;
cout<<"Wprowadz 2, jesli chcesz wyszukiwac wedlug imienia i nazwiska czytelnika"<<endl;
cin>>(WyszukiwanieCzytelnika);
int IdentyfikatorCzytelnika=150;
switch (WyszukiwanieCzytelnika)
{
case 1: {
cout<<"Wprowadz identyfikator czytelnika"<<endl;
cin>>IdentyfikatorCzytelnika;
for (int i=0; i<=LicznikCzytelnikow-1; i++)
{
czytelnicy[i].Wyszukaj("a","b", IdentyfikatorCzytelnika, WyszukiwanieCzytelnika);
}
}
break;
case 2: {string Imie, Nazwisko;
cout<<"Wprowadz imie czytelnika"<<endl;
cin>>Imie;
cout<<"Wprowadz nazwisko czytelnika"<<endl;
cin>>Nazwisko;
for (int i=0; i<=LicznikCzytelnikow-1; i++)
{
czytelnicy[i].Wyszukaj(Imie,Nazwisko, IdentyfikatorCzytelnika, WyszukiwanieCzytelnika);
}
}
break;
default:{cout <<"BLAD! Zly klawisz."<<endl;
system ("PAUSE");
goto WyszukajCzytelnika;}
}
czytelnicy[IdentyfikatorCzytelnika-1].WypiszDane();
system ("PAUSE");
}
break;
case 3: {
system ("cls");
cout<<"Dodawanie nowego czytelnika"<<endl;
czytelnicy[LicznikCzytelnikow]=Czytelnik(LicznikCzytelnikow);
cout<<"Wprowadzono czytelnika o nastepujacych danych:"<<endl;
czytelnicy[LicznikCzytelnikow].WypiszDane();
LicznikCzytelnikow++;
system ("PAUSE");
}
break;
}
}
break;
case 2:
{
MenuKsiazki (Opcja);
switch (Opcja)
{
case 1: {
system ("cls");
cout<<"Zestawienie wszystkich ksiazek:";
for (int i=0; i<=LicznikKsiazek-1; i++)
{
cout<<endl<<"Dane ksiazki:"<<endl;
ksiazki[i].WypiszDane(y);
}
system ("PAUSE");
}
break;
case 2: {
WyszukajKsiazke:
system ("cls");
int WyszukiwanieKsiazki;
cout<<"Wyszukiwanie ksiazki:"<<endl;
cout<<"Wprowadz 1, jesli chcesz wyszukiwac wedlug identyfikatora ksiazki"<<endl;
cout<<"Wprowadz 2, jesli chcesz wyszukiwac wedlug tytulu, autora i roku wydania"<<endl;
cin>>(WyszukiwanieKsiazki);
int IdentyfikatorKsiazki=550;
switch (WyszukiwanieKsiazki)
{
case 1: {
cout<<"Wprowadz identyfikator ksiazki"<<endl;
cin>>IdentyfikatorKsiazki;
for (int i=0; i<=LicznikKsiazek-1; i++)
{
ksiazki[i].Wyszukaj("a","b",0000, IdentyfikatorKsiazki, WyszukiwanieKsiazki);
}
}
break;
case 2: {string Tytul, Autor;
int RokWydania;
cout<<"Wprowadz tytul ksiazki"<<endl;
cin>>Tytul;
cout<<"Wprowadz autora ksiazki"<<endl;
cin>>Autor;
cout<<"Wprowadz rok wydania ksiazki"<<endl;
cin>>RokWydania;
for (int i=0; i<=LicznikCzytelnikow-1; i++)
{
ksiazki[i].Wyszukaj(Tytul,Autor,RokWydania, IdentyfikatorKsiazki, WyszukiwanieKsiazki);
}
}
break;
default:{cout <<"BLAD! Zly klawisz."<<endl;
system ("PAUSE");
goto WyszukajKsiazke;}
}
int Wypozyczajacy;
ksiazki[IdentyfikatorKsiazki-1].WypiszDane(Wypozyczajacy);
if (Wypozyczajacy!=0)
{
czytelnicy[Wypozyczajacy-1].WypiszDane();
}
system ("PAUSE");
}
break;
case 3: {
system ("cls");
cout<<"Dodawanie nowej ksiazki"<<endl;
ksiazki[LicznikKsiazek]=Ksiazka(LicznikKsiazek);
cout<<"Wprowadzono ksiazke o nastepujacych danych:"<<endl;
ksiazki[LicznikKsiazek].WypiszDane(y);
LicznikKsiazek++;
system ("PAUSE");
}
break;
}
}
break;
case 3:
{
MenuWypozyczenia(Opcja);
switch (Opcja)
{
case 1:{
}
break;
case 2:{
}
break;
case 3:{DodajWypozyczenie:
system("cls");
int IdKsiazki, IdCzytelnika;
cout<<"Wprowadź identyfikator ksiazki ktora chcesz wypozyczyc"<<endl;
cin>>IdKsiazki;
cout<<"Wprowadz identyfikator czytelnika wypozyczajacego"<<endl;
cin>>IdCzytelnika;
if ((IdKsiazki>LicznikKsiazek)or(IdCzytelnika>LicznikCzytelnikow))
{cout<<"Nie ma w bazie ksiazki lub czytelnika o wpisanym identyfikatorze. Sprobuj ponownie."<<endl;
system("Pause");
goto DodajWypozyczenie;
}
if (ksiazki[IdKsiazki-1].SprawdzanieWypozyczenia()!=0)
{cout<<"Ta ksiazka jest juz wypozyczona!"<<endl;
system("pause");}
else
{ksiazki[IdKsiazki-1].Wypozycz(IdCzytelnika);
ksiazki[IdKsiazki-1].WypiszDane(IdCzytelnika);
czytelnicy[IdCzytelnika-1].WypiszDane();
system ("PAUSE");}
}
break;
case 4: {
}
break;
}
}
break;
default:
{if (Wybor!=0)
{cout<<"BLAD! Wprowadzono nieznany znak. "<<endl;
system("PAUSE");}
}
}
if (Wybor!=0)
{goto Poczatek;}
PlikLicznikCzytelnikow.open("licznikCzytelnikow.dat", ios::out);
PlikLicznikCzytelnikow<<LicznikCzytelnikow<<endl;
PlikLicznikCzytelnikow.close();
for (int i=0; i<=LicznikCzytelnikow-1; i++)
{czytelnicy[i].Zapisz();}
/* fstream PlikCzytelnicy;
PlikCzytelnicy.open("tablicaCzytelnicy.dar", ios::binary);
// for(int i=0;i<99;i++)
char* temp = new char[999999];
PlikCzytelnicy.read(temp,999999);
// PlikCzytelnicy.write(x,9999999);
// {PlikCzytelnicy<<czytelnicy[i]<<endl;} //<---- ...i jej elementy
*/
/* ofstream ofs("plik.foo", ios::binary); // otwieramy plik do zapisu binarnego
ofs.write((char*)(czytelnicy), 999999); // zapisujemy dane do pliku*/
return 0;
}
void Menu (int &wybor)
{
cout<<"Wybierz z klawiatury numerycznej:"<<endl;
cout<<"1 - przejdz do dzialu czytelnikow."<<endl;
cout<<"2 - przejdz do dzialu ksiazek."<<endl;
cout<<"3 - przejdz do dzialu wypozyczen."<<endl;
cout<<"0 - natychmiastowe wyjscie."<<endl;
cin>>(wybor);
};
void MenuCzytelnicy (int &wybor)
{
cout<<"Wybierz ponownie z klawiatury numerycznej:"<<endl;
cout<<"1 - wyswietl wszystkich czytelnikow"<<endl;
cout<<"2 - wyszukaj czytelnika"<<endl;
cout<<"3 - dodaj czytelnika"<<endl;
cin>>(wybor);
};
void MenuKsiazki (int &wybor)
{
cout<<"Wybierz ponownie z klawiatury numerycznej:"<<endl;
cout<<"1 - wyswietl wszystkie ksiazki"<<endl;
cout<<"2 - wyszukaj ksiazke"<<endl;
cout<<"3 - dodaj ksiazke"<<endl;
cin>>(wybor);
};
void MenuWypozyczenia (int &wybor)
{
cout<<"Wybierz ponownie z klawiatury numerycznej:"<<endl;
cout<<"1 - aby pokazac wypozyczenia wskazanego czytelnika"<<endl;
cout<<"2 - aby pokazac kto wypozycza dana ksiazke"<<endl;
cout<<"3 - aby dodac wypozyczenie"<<endl;
cout<<"4 - aby usunac wypozyczenie"<<endl;
cin>>(wybor);
};