Podsumowanie zajęć:
iostream
), łańcuchy znakowe (string
)Dodatkowe zagadnienia:
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 funkcjonalnoś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 oddzielone spacją)data_urodzenia
: obiekt klasy Data
reprezentujący datę urodzeniaplec
: wartość wyliczeniowa Kobieta
, Mezczyzna
lub Nieznana
Operacje (publiczne metody):
<<
umieszczający rekord w strumieniu wyjsciowym ostream
, np. w takiej postaci Imiona Nazwisko, 21-11-1999, Mezczyzna
WczytajOsobe
static Osoba WczytajOsobe()
która tworzy obiekt Osoba
i wypełnia wszystkie pola obiektu danymi podanymi przez użytkownika ze standardowego wejścia cin
. Użytkownik proszony jest o wypełnienie wszystkich pól rekordu (imię, nazwisko, data urodzenia, płeć). Metoda zwraca wypełniony obiekt Osoba
.
<
służący do porównania kolejności dwóch rekordów pod względem nazwiska bool Osoba::operator<(const Osoba&)
Operator zwraca wartość true
lub false
w zależności od porządku obiektów a < b
i moze być wykorzystany do posortowania rekordów alfabetycznie
Obiekt klasy Data
posiada pola (prywatne):
dzien
: liczba całkowitamiesiąc
: liczba całkowita (lub typ wyliczeniowy Stycznen
=1, Luty
=2, …, Grudzien
=12)rok
: liczba całkowitaOperacje publiczne:
<<
wypisujący do strumienia wyjsciowego ostream
datę w postaci DD-MM-YYYY
Obiekt klasy Baza
przechowuje zbiór rekordów (obiektów klasy Osoba
) oraz pozwala na manipulację zawartością i wyświetlanie bazy danych. Rekordy przechowywane są w dynamicznie tworzonej tablicy, która jest powiększana w miarę dodawania nowych rekordów.
Atrybuty (prywatne pola):
osoby
: adres do tablicy przechowującej rekordy (obiekty klasy Osoba
)rozmiar
: rozmiar tablicy zawierającej rekordyile_elementow
: ilość rekordów znajdujących się w bazie danychROZMIAR_DOMYSLNY
: stała statyczna zawierająca domyślny rozmiar bazy danych (100)Operacje (publiczne metody):
ROZMIAR_DOMYSLNY
)Dodaj
dodająca pojedynczy rekord do bazy danych Baza& Dodaj(const Osoba&)
Nowy rekord dodawany jest jako ostatni element kolekcji rekordów. Jeżeli rozmiar bazy jest wyczerpany (ilość rekordów jest równa dostępnemu rozmiarowi) to przed dodaniem nowego rekordu rozmiar bazy danych jest zwiększany dwukrotnie. Należy zaimplementować odpowiednią metodę prywatną, która będzie odpowiedzialna za zwiększenie rozmiaru tablicy przechowującej rekordy.
<<
wypisujący do strumienia wyjściowego ostream
całą zawartość bazy danych Sortuj
powoduje posortowanie kolejności rekordów alfabetycznie względem nazwisk. std::sort
z biblioteki <algorithm>
lub mozna spróbować samodzielnie zaimplementować algorytm sortowania, wykorzystujący operator porównania <
zdefiniowany w klasie Osoba
.operator=
Dokończ implementację klas Baza
, Osoba
, Data
zgodnie z powyższą specyfikacją i zrealizuj program, który będzie wykorzystywał te klasy do zarządzania prostą bazą danych osobowych w następujący sposób. Podczas uruchomienia programu tworzona jest pusta baza danych o domyślnym rozmiarze.
Następnie program wypisuje menu umożliwiające użytkownikowi podjęcie jednej z czterech akcji do wykonania:
Po wykonaniu wybranej przez użytkownika akcji menu wyświetlane jest ponownie. Użytkownik może podjąć kolejną akcję, aż do momentu wybrania ostatniej pozycji menu, która zamyka program.
Rozwiązanie w postaci plików nagłówkowych *.h
i źródłowych *.cpp
umieść w Moodle Zadanie 5