iostream), łańcuchy znakowe (string)Zaimplementuj program realizujący bazę danych przechowującą dane osobowe: imię (lub imiona), nazwisko, data urodzenia, płeć. Baza danych powinna umożliwiać następujące funcjonalności:
Zaproponuj i zaimplementuj odpowiednie klasy pozwalające na realizację programu w postaci obiektowej (klasa Baza, Osoba, Data). Zadbaj o hermetyzację (pola klas powinny byc prywatne).
Obiekt klasy Osoba reprezentuje pojedynczy rekord z danymi osobowymi.
Atrybuty (prywatne pola):
nazwisko: napis zawierający nazwisko imie: napis zawierający imię (lub imiona)data_urodzenia: obiekt klasy Data reprezentujący datę urodzeniaplec: wartość wyliczeniowa Kobieta, Mezczyzna lub NieznanaOperacje (publiczne metody):
< bool Osoba::operator<(const Osoba&)
który porównuje kolejność dwóch rekordów pod względem nazwiska (bedzie wymagane do posortowania rekordów alfabetycznie)
« umieszczający rekord w strumieniu wyjsciowym, np. w takiej postaci Imie Nazwisko, 21-11-1999, Mezczyzna
Obiekt klasy Data posiada pola:
dzien: liczba całkowitamiesiąc: liczba całkowita (lub typ wyliczeniowy Stycznen=1, Luty=2, …, Grudzien=12)rok: liczba całkowitaOperacje:
« wypisujący do strumienia wyjsciowego datę w postaci DD-MM'YYYY
Obiekt klasy Baza przechowuje listę rekordów (obiektów klasy Osoba) oraz pozwala na manipulację zawartością i wyświetlanie bazy.
Atrybuty (prywatne pola):
osoby: adres do tablicy przechowującej rekordyrozmiar: rozmiar tablicy zawierającej rekordyilosc: ilość rekordów znajdujących się w bazie danychOperacje (publiczne metody):
Dodaj dodająca pojedynczy rekord do bazy danych void Dodaj(const Osoba&)
Nowy rekord dodawany jest na końcu rekordów. Jeżeli rozmiar bazy jest wyczerpany (ilość rekordów wyczerpała dostepny rozmiar) to przed dodaniem nowego rekordu rozmiar bazy danych jest zwiększany dwukrotnie
« wypisujący do strumienia wyjściowego całą zawartość bazy danychZapisz, która zapisuje zawartość bazy danych do wskazanego pliku void Zapis(const char* nazwa_pliku)
Wczytaj, która wypełnia bazę danych zawartością podanego pliku void Wczytaj(const char* nazwa_pliku)
Zakładamy, że wskazany plik został utworzony wcześniej metodą Zapisz. Zaproponuj odpowiedni format zapisu/odczytu danych tak aby metoda Wczytaj była w stanie bezbłednie odtworzyć wczesniej zapisany stan bazy
Sortuj powoduje posortowanie kolejności rekordów alfabetycznie względem nazwisk
Napisz program, który korzystając z klas Baza, Osoba, Data będzie realizował następujące działanie.
Program wypisuje menu umożliwiając użytkownikowi podjęcie jednej akcji do wykonania:
Po wykonaniu akcji menu wyświetlane jest ponownie i użytkownik może podjąć inną akcję aż do momentu zakonczenia programu. Przy pierwszym uruchomieniu program startuje z pustą bazą danych. W momencie zamknięcia programu (po wybraniu opcji 4 z menu) aktualny stan bazy danych jest zapisywany w pliku znajdującym się w bieżącym katalogu programu. Przy każdym kolejnym uruchomieniu programu, jeszcze przed wypisaniem menu, program sprawdza, czy w bieżącym katalogu znajduje się plik zawierający zapis bazy danych z poprzedniego uruchomienia. Jeżeli plik istnieje to stan bazy danych zostaje odtworzony z tego pliku i program kontynuuje swoje działanie.