Dostałem zadanie przerobić program z rekordami, bazujący na strukturach i plikach binarnych, na model klasowy. Zacząłem przerabiać ale okazało się że nie mam pojęcia jak tworzyć dobre tablice dla klas. Czy ktoś na podanym niżej przykładzie, mógłby mi doradzić jak zadeklarować tablicę do końca i wczytać dane z pliku (sprawdzenie czy jakiekolwiek rekordy się w pliku znajdują).
Przy poniższym kodzie zakończenie programu wywołuje błąd.
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
class pracownik //klasa dla pracownika
{
protected:
string imie;
string nazwisko;
string stanowisko;
int ID;
int rok;
public:
//konstruktor
pracownik(){}
//ID, imie, nazwisko, stanowisko, rok
pracownik(int, string, string, string, int);
};
//dziedziczenie
class sprzedawca : public pracownik
{
private:
float sprzedane;
public:
sprzedawca(){}
//ID, imie, nazwisko, stanowisko, rok, sprzedaz
sprzedawca(int, string, string, string, int, float);
static sprzedawca *TablicaSprzedawca;
//destruktor tablicy
~sprzedawca(){delete TablicaSprzedawca;}
int sprID();
};
sprzedawca *sprzedawca::TablicaSprzedawca = NULL;
//konstruktor
pracownik::pracownik(int sellerID, string imieS, string nazwiskoS, string stanowiskoS, int rokS)
{
ID = sellerID;
imie = imieS;
nazwisko = nazwiskoS;
stanowisko = stanowiskoS;
rok = rokS;
}
sprzedawca::sprzedawca(int sellerID, string imieS, string nazwiskoS, string stanowiskoS,int rokS, float Sell): pracownik(sellerID, imieS, nazwiskoS, stanowiskoS, rokS)
{
sprzedane = Sell;
}
//metody
int sprzedawca::sprID()
{
return ID;
}
// glowny program
int main(int argc, char *argv[])
{
//zmienne programu
int opcja, licznik=0;
bool koniec=false;
//zmienne plikowe
char bazaS[] = "sprzedawca.dat";
FILE* plik;
//zmienna klasowa
string imie, nazwisko, stanowisko;
int rok, ID;
float sprzedaz;
//tablica klasy (domyslam sie ze niepoprawna)
//sprzedawca s[100], buf[100];
do
{
//sprawdzam ilosc wpisow
licznik=0;
plik = fopen(bazaS, "rb");
fread(&s,sizeof(s),1,plik);
for(int j=0;j<100;j++)
{
if(s[j].sprID()!=NULL)
licznik++;
}
fclose(plik);
//menu
cout<<"Prosze wybrac opcje poprzez wybranie odpowiedniej cyfry"<<endl;
cout<<"1. Dodaj rekord"<<endl;
cout<<"2. Usun rekord"<<endl;
cout<<"3. Usun wszystkie rekordy"<<endl;
cout<<"4. Wyswietl baze pracownikow"<<endl;
cout<<"5. Wyswietl pracownikow z premia powyzej 3000 zl"<<endl;
cout<<"6. Zakoncz"<<endl<<endl;
cout<<"Aktualna liczba rekordow: "<<licznik<<endl;
cin>>opcja;
cin.ignore();
if((opcja>6)||(opcja<1))
{
cout<<endl<<"Uwaga!!! Zakres od 1-6."<<endl<<endl;
system("PAUSE");
system("cls");
}
else
{
if(opcja == 1)
{
}
else if(opcja == 2)
{
}
else if(opcja == 3)
{
}
else if(opcja == 4)
{
}
else if(opcja == 5)
{
}
else if(opcja == 6)
{
koniec=true;
}
system("PAUSE");
system("cls");
}
}while(koniec==false);
return EXIT_SUCCESS;
}