Projekt: baza danych osobowych
Podsumowanie zajęć:
- klasy i obiekty, pola i metody
- zakresy dostępu, hermetyzacja: private, public
- konstruktory (domniemany, kopiujący), destruktory
- przeciążanie funkcji, przeciążanie operatorów (operator przypisania)
- strumienie (
iostream
), łańcuchy znakowe (string
)
Dodatkowe zagadnienia:
- typ wyliczeniowy: enum class
- odczyt linii tekstu ze strumienia wejściowego funkcją getline
- algorytm sortowania funkcją sort z pliku nagłowkowego <algorithm>
Projekt: Baza danych osobowych
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:
- dodanie pojedynczego rekordu do bazy danych
- wypełnienie rekordu (imię, nazwisko, płec osoby) danymi podanymi przez użytkownika
- wyświetlenie rekordów oraz całej bazy danych
- sortowanie kolejności rekordów względem nazwiska
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).
Klasa: Osoba
Obiekt klasy Osoba
reprezentuje pojedynczy rekord z danymi osobowymi.
Atrybuty (prywatne pola):
nazwisko
: napis zawierający nazwiskoimie
: napis zawierający imię (lub imiona oddzielone spacją)data_urodzenia
: obiekt klasyData
reprezentujący datę urodzeniaplec
: wartość wyliczeniowaKobieta
,Mezczyzna
lubNieznana
Operacje (publiczne metody):
- konstruktor domyślny
- konstruktor pozwalający zainicjować wszystkie pola obiektu poprzez argumenty
- operator
<<
umieszczający rekord w strumieniu wyjsciowymostream
, np. w takiej postaci
Imiona Nazwisko, 21-11-1999, Mezczyzna
- metodę statyczną
WczytajOsobe
static Osoba WczytajOsobe()
która tworzy obiekt
Osoba
i wypełnia wszystkie pola obiektu danymi podanymi przez użytkownika ze standardowego wejściacin
. Użytkownik proszony jest o wypełnienie wszystkich pól rekordu (imię, nazwisko, data urodzenia, płeć). Metoda zwraca wypełniony obiektOsoba
. - operator porównania
<
służący do porównania kolejności dwóch rekordów pod względem nazwiskabool Osoba::operator<(const Osoba&)
Operator zwraca wartość
true
lubfalse
w zależności od porządku obiektówa < b
i moze być wykorzystany do posortowania rekordów alfabetycznie
Klasa: Data
Obiekt klasy Data
posiada pola (prywatne):
dzien
: liczba całkowitamiesiąc
: liczba całkowita (lub typ wyliczeniowyStycznen
=1,Luty
=2, …,Grudzien
=12)rok
: liczba całkowita
Operacje publiczne:
- konstruktor domyślny, ustawia datę 1 stycznia 1960 r.
- konstruktor pozwalający zainicjować wszystkie pola obiektu
- operator
<<
wypisujący do strumienia wyjsciowegoostream
datę w postaciDD-MM-YYYY
Klasa: Baza
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 klasyOsoba
)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):
- konstruktor domniemany tworzy pustą bazę o domyślnym rozmiarze (
ROZMIAR_DOMYSLNY
) - konstruktor tworzący pustą bazę o rozmiarze wskazanym w argumencie
- destruktor
- metoda
Dodaj
dodająca pojedynczy rekord do bazy danychBaza& 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.
- operator
<<
wypisujący do strumienia wyjściowegoostream
całą zawartość bazy danych - metoda
Sortuj
powoduje posortowanie kolejności rekordów alfabetycznie względem nazwisk.
Do posortowana można wykorzystać funkcjęstd::sort
z biblioteki<algorithm>
lub mozna spróbować samodzielnie zaimplementować algorytm sortowania, wykorzystujący operator porównania<
zdefiniowany w klasieOsoba
. - konstruktor kopiujacy oraz dociążony operator przypisania
operator=
Zadanie 5: Baza danych osobowych
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:
- Dodaj - dodanie nowego rekordu do bazy danych. Użytkownik proszony jest o wypełnienie wszystkich pól nowego rekordu (imię, nazwisko, data urodzenia, płeć).
- Wyświetl - wyświetlenie aktualnej zawartości bazy danych (wszystkich rekordów).
- Sortuj - posortowanie alfabetycznie (wg nazwisk) wszystkich rekordów w bazie danych.
- Zamknij - zakończenie programu.
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