Skip to content

callhestia/wkuwator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Wkuwator

Konsolowa aplikacja do powtórek materiału napisana w czystym C++. Program służy do nauki z wykorzystaniem fiszek zapisywanych w lokalnym pliku tekstowym.

🚀 Kompilacja i uruchomienie

Projekt wykorzystuje standard C++17. Pliki źródłowe są rozdzielone na moduły. Aby skompilować program, wykonaj w terminalu:

g++ main.cpp file_manager.cpp spaced_repetition.cpp main_menu.cpp -o wkuwator -std=c++17
./wkuwator

🛠️ Architektura Git i Workflow

Repozytorium zawiera już bazowe pliki projektu (Flashcard.hpp, deck.txt). Pracujemy na odgałęzieniach (branchach), aby zachować stabilność gałęzi main.

1. Klonowanie repozytorium

Pobierz projekt na swój komputer:

git clone [https://github.com/callhestia/wkuwator.git](https://github.com/callhestia/wkuwator.git)
cd wkuwator

2. Praca na branchach

Przed rozpoczęciem kodowania stwórz własną gałąź. Nie pracuj bezpośrednio na main:

git checkout -b feature-nazwa_twojego_modulu

żeby upewnić się, że jesteś na własnym branchu:

git branch

3. Synchronizacja i wysyłka

Po zakończeniu pracy w danym dniu, zapisz zmiany i wyślij je na serwer:

git add .
git commit -m "Krótki opis wykonanej pracy"
git push -u origin feature-nazwa_twojego_modulu

4. Pull Request

Gdy Twój moduł jest gotowy, otwórz na GitHubie Pull Request z Twojego brancha do main. Kod zostanie połączony po weryfikacji przez resztę zespołu.


📂 Zarządzanie Fiszkami (deck.txt)

Baza wiedzy programu znajduje się w pliku tekstowym. Każda linijka to jedna osobna fiszka.

Format zapisu

Dane są oddzielone separatorem | (pionowa kreska). Kolejność danych w linii musi być zgodna ze strukturą Flashcard: Pytanie|Odpowiedź|CzasPowtórki|Trudność|Interwał|Seria

Przykład poprawnego wpisu:

Stolica Polski|Warszawa|1710252000|2.5|1|0

Wyjaśnienie parametrów:

  • Pytanie/Odpowiedź: Dowolny tekst (nie używaj znaku | wewnątrz treści!).
  • CzasPowtórki: Unix Timestamp (liczba sekund od 1970 roku). 0 oznacza, że fiszka jest nowa i gotowa do nauki od razu.
  • Trudność: Wartość zmiennoprzecinkowa (domyślnie 2.5). Wyższa wartość = łatwiejsza fiszka.
  • Interwał: Liczba dni do następnej powtórki.
  • Seria: Liczba kolejnych poprawnych odpowiedzi.

Jak ręcznie dodać fiszkę?

  1. Otwórz plik deck.txt.
  2. Dopisz na końcu nową linię, zachowując format: Pytanie|Odpowiedź|0|2.5|1|0
  3. Zapisz plik. Program przy starcie automatycznie załaduje nową kartę.

📋 Podział zadań i odpowiedzialności

Każdy moduł .cpp musi zawierać nagłówek #include "Flashcard.hpp".

💾 Dawid: Zarządzanie danymi (file_manager.cpp)

Główne zadanie: Zainicjowanie obiektów w pamięci na podstawie pliku deck.txt przy starcie programu oraz zapisanie wszelkich zmian (nowe fiszki, zaktualizowane daty) z powrotem do pliku na koniec sesji. Odpowiadasz również za konfigurację.

Wymagania:

  • Wczytywanie pliku tekstowego linijka po linijce.
  • Konwersja tekstu (rozdzielonego znakiem |) na wektor obiektów Flashcard.
  • Funkcja zrzucająca aktualny stan wektora do pliku tekstowego.
  • Zabezpieczenie na wypadek braku pliku deck.txt (program ma go automatycznie utworzyć).
  • Obsługa zapisu/odczytu pliku config.txt (przechowującego wybrany system nauki).
  • Cel poboczny/przyszłościowy: Migracja formatu zapisu z .txt na .json (zobacz bibliotekę nlohmann/json).

⚙️ Franek: Silnik nauki (silnik.cpp)

Główne zadanie: Implementacja algorytmów obliczających czas kolejnej powtórki. Zarządzasz dwoma systemami weryfikacji: opartym na samoocenie (0-5) oraz na bezpośrednim wpisywaniu tekstu z tolerancją dla literówek i braku polskich znaków.

Wymagania:

  • System Samooceny: Funkcja przyjmująca fiszkę i ocenę (0-5), aktualizująca interwał i mnożnik trudności (np. logika algorytmu SM-2).
  • Normalizacja tekstu: Skrypt czyszczący surową odpowiedź ze zbędnych spacji oraz konwertujący duże litery na małe.
  • Analiza błędów: Implementacja algorytmu odległości Levenshteina do wyliczania ilości literówek między znormalizowanymi słowami.
  • System Wpisywania: Funkcja analizująca tekst względem marginesu błędu (np. 1 błąd na 5 liter). W przypadku zmieszczenia się w marginesie przyznajesz karę punktową, przy perfekcyjnej odpowiedzi – nagrodę, a przy błędzie resetujesz passę.
  • Przeliczanie nowego czasu (w sekundach) i aktualizacja zmiennej nextReview we flashcardzie.
  • Zwracanie do modułu interfejsu kodu statusu (np. 0 - perfekcyjnie, 1 - literówka, 2 - błąd), aby GUI wiedziało, jak zareagować.

🖥️ Mikołaj: Interfejs i Dokumentacja (menu.cpp oraz DOKUMENTACJA.md)

Główne zadanie: Budowa pętli aplikacji (menu, nauka, dodawanie, ustawienia). Pobierasz dane od użytkownika i przekazujesz je do Silnika Nauki, reagując na otrzymane statusy. Odpowiadasz również za techniczną i użytkową dokumentację projektu.

Wymagania:

  • Stworzenie głównej pętli menu w konsoli.
  • Obsługa podmenu "Ustawienia" do zmiany trybu nauki (Samoocena / Wpisywanie) i przekazanie wyboru do modułu Zarządzania Danymi.
  • Interfejs do wprowadzania nowych fiszek z poziomu klawiatury.
  • Flow Systemu Wpisywania: Wyświetlenie pytania -> Pobranie tekstu -> Przekazanie do Silnika -> Odebranie statusu -> Wyświetlenie wyniku (w przypadku literówki/błędu wyświetlenie również poprawnej odpowiedzi).
  • Flow Systemu Samooceny: Wyświetlenie pytania -> Oczekiwanie na [Enter] -> Wyświetlenie odpowiedzi -> Pobranie oceny (0-5) -> Przekazanie oceny do Silnika.
  • Napisanie pliku DOKUMENTACJA.md: instrukcja obsługi, mechanika systemów weryfikacji (w tym wyrozumiałość dla literówek), cel projektu i opis struktury dla wykładowcy.

⚠️ Zasady pracy

  1. Struktura danych: Plik Flashcard.hpp jest nienaruszalny. Każda zmiana w strukturze wymaga zgody całego zespołu.
  2. Baza danych: Używamy wyłącznie separatora | w pliku deck.txt.
  3. Komunikacja: Autorzy logiki (Osoba 1 i 2) muszą dostarczyć Osobie 3 opisy funkcji i zwracanych wartości, aby interfejs poprawnie wyświetlał komunikaty.

źródła:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages