Podsumowanie: Projekt baza danych
- klasy i obiekty
- 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
) - typ wyliczeniowy: enum class
- odczyt linii tekstu ze strumienia wejściowego funkcją getline
- zamiana liczb na napisy: funkcja to_string(), funkcja stoi()
- 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 funcjonalnoś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
- zapis bazy danych do pliku
- odczyt zapisanego wcześniej stanu 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)data_urodzenia
: obiekt klasyData
reprezentujący datę urodzeniaplec
: wartość wyliczeniowaKobieta
,Mezczyzna
lubNieznana
Operacje (publiczne metody):
- konstruktor domyślny
- konstruktor pozwalający zainicjować obiekt podanym imieniem, nazwiskiem, data urodzenia i informacją o płci
- operator porównania
<
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)
- operator
«
umieszczający rekord w strumieniu wyjsciowym, np. w takiej postaci
Imie Nazwisko, 21-11-1999, Mezczyzna
Klasa: Data
Obiekt klasy Data
posiada pola:
dzien
: liczba całkowitamiesiąc
: liczba całkowita (lub typ wyliczeniowyStycznen
=1,Luty
=2, …,Grudzien
=12)rok
: liczba całkowita
Operacje:
- konstruktor domyślny (data 1 stycznia 1960 r.)
- konstruktor pozwalający zainicjować wszystkie pola obiektu
- operator
«
wypisujący do strumienia wyjsciowego datę w postaciDD-MM'YYYY
Klasa: Baza
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 danych
Operacje (publiczne metody):
- konstruktor domniemany tworzy pustą bazę o rozmiarze 100
- konstruktor tworzący pustą bazę o rozmiarze wskazanym w argumencie
- destruktor
- metoda
Dodaj
dodająca pojedynczy rekord do bazy danychvoid 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
- operator
«
wypisujący do strumienia wyjściowego całą zawartość bazy danych - metoda
Zapisz
, która zapisuje zawartość bazy danych do wskazanego plikuvoid Zapis(const char* nazwa_pliku)
- metoda
Wczytaj
, która wypełnia bazę danych zawartością podanego plikuvoid Wczytaj(const char* nazwa_pliku)
Zakładamy, że wskazany plik został utworzony wcześniej metodą
Zapisz
. Zaproponuj odpowiedni format zapisu/odczytu danych tak aby metodaWczytaj
była w stanie bezbłednie odtworzyć wczesniej zapisany stan bazy - metoda
Sortuj
powoduje posortowanie kolejności rekordów alfabetycznie względem nazwisk - konstruktor kopiujacy oraz dociążony operator przypisania
Program
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:
- 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ć). Nowy rekord dodawany jest automatycznie na końcu bazy danych.
- Wyświetl - wyświetlenie aktualnej zawartości bazy danych (wszystkich rekordów).
- Sortuj - posortowanie rekordów alfabetycznie wg. nazwisk
- Zamknij - zapisanie aktualnego stanu bazy danych do pliku oraz zamknięcie programu.
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.