Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Projekt: baza danych osobowych cd ====== **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'') * typ wyliczeniowy: [[https://en.cppreference.com/w/cpp/language/enum|enum class]] * [[https://pl.wikibooks.org/wiki/C%2B%2B/Sk%C5%82adniki_statyczne|pola i metody statyczne]] **Dodatkowe zagadnienia:** * konwersja typów za pomocą konstruktora z jednym argumentem * [[https://cplusplus.com/doc/tutorial/files/|operacje na plikach]]: * plik nagłowkowy ''<fstream>'' * strumien wyjściowy (zapis do pliku) [[https://cplusplus.com/reference/fstream/ofstream/|ofstream]] * strumień wejściowy (odczyt z pliku) [[https://cplusplus.com/reference/fstream/ifstream/|ifstream]] * uzyskiwanie dostępu do pliku: [[https://cplusplus.com/reference/fstream/ifstream/open/|open()]], [[https://cplusplus.com/reference/fstream/ifstream/close/|close()]], [[https://cplusplus.com/reference/fstream/ifstream/is_open/|is_open()]] * sprawdzanie błędów: [[https://cplusplus.com/reference/ios/ios/eof/|eof()]], [[https://cplusplus.com/reference/ios/ios/good/|good()]], [[https://cplusplus.com/reference/ios/ios/fail/|fail()]] * odczyt linii tekstu ze strumienia wejściowego [[https://cplusplus.com/reference/string/string/getline/|getline]], odczyt znaku ze strumienia [[https://cplusplus.com/reference/istream/istream/get/|get()]] * konwersja liczb na napisy: [[https://en.cppreference.com/w/cpp/string/basic_string/stol|stoi()]], konwersja napisów na liczby [[https://en.cppreference.com/w/cpp/string/basic_string/to_string|to_string()]] * wyszukiwanie znaków w napisie metodą [[https://www.algorytm.edu.pl/biblioteki/string/find.html|find()]] * wyodrębnianie podciągu znakow z napisu [[https://en.cppreference.com/w/cpp/string/basic_string/substr|substr]] ===== Projekt: Baza danych osobowych c.d. ===== Do projektu bazy danych z poprzednich zajęć dodajemy możliwość zapisu i odczytu bazy danych z pliku. * Opis projektu: [[.:05_projekt_baza_danych|Projekt: baza danych osobowych]] * Kod źródłowy z poprzednich zajęć {{zajecia:po_2025_1:05_baza:baza.zip}} dostępny również w repozytorium [[https://github.com/IS-UMK/po_2025_src/tree/master/05_baza_danych|GitHub]] Uzupełnij projekt o poniższe elementy. Do klasy ''Data'' dodaj: * konstruktor ''Data(const string& s)'', który inicjuje obiekt reprezentujący datę napisem w postaci ''DD-MM-YYYY''. Zakładamy, że argument będzie zawsze zawierała poprawny format daty, metoda nie musi tego weryfikować. Tego typu konstruktor pozwoli na konwersję napisu na datę. \\ <code C++>Data d=(Data)"21-11-1999";</code> Do klasy ''Baza'' dodaj: * metodę ''Zapisz'', która zapisuje zawartość bazy danych w pliku tekstowym wskazanym w argumencie pliku <code C++> void Zapisz(const char* nazwa_pliku) const</code> * metoda ''Wczytaj'', która wypełnia bazę danych zawartością podanego w argumencie pliku <code C++>Baza& Wczytaj(const char* nazwa_pliku)</code> 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ć zapisany wczesniej stan bazy. Jeżeli wskazany plik istnieje i można go odczytać to aktualna zawartość bazy danych jest zastępowana zawartością pliku, w przeciwnym razie zawartość bazy danych pozostaje bez zmian. ===== Program ==== Rozbuduj program realizowany na poprzednich zajęciach ([[05_projekt_baza_danych#zadanie_5baza_danych_osobowych|Zadanie 5: Baza danych osobowych]]) o możliwość zapisu i odczytu bazy danych z pliku. Przy pierwszym uruchomieniu program startuje z pustą bazą danych. Użytkownik może dodawać rekordy do bazy danych, przeglądać zawartość bazy danych oraz sortować rekordy alfabetycznie. Program powinien działać w pętli do momentu wybrania opcji zakończenia pracy. 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, 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.