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 klasyDatareprezentujący datę urodzeniaplec: wartość wyliczeniowaKobieta,MezczyznalubNieznana
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 rekordy
*rozmiar: 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
Dodajdodają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
* metodaZapisz, 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 metodaWczytajbyła w stanie bezbłednie odtworzyć wczesniej zapisany stan bazy - metoda
Sortujpowoduje 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.