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 Nieznana
Operacje (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 rekordy rozmiar
: 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 danych Zapisz
, 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.