# SIEĆ METRA ## Skład zespołu: * Grzegorz Czarnecki * Kamil Sulkowski * Marcin Zasuwa ## Sieć metra: ![Alt text](docs/main_screen.png?raw=true "Main screen") ![Alt text](docs/station_info.png?raw=true "Station info") ## Opis aplikacji: Stworzona aplikacja jest symulacją sieci metra. Umożliwia badanie przepływu pasażerów pomiędzy różnymi stacjami przez różne pociągi. Aplikacja ma interfejs okienkowy, który potrafi przedstawić sieć w sposób graficzny. Dodatkowo posiada automatyczny symulator upływu czasu przez co można na bieżąco śledzić postępy symulacji i przepływ pasażerów na każdej ze stacji. ## Użyte technologie: * C++20 * CMake * Qt-5 ## Wymagania do zbudowania: * kompilator obsługujący standard C++20 (gcc >=10.1), * CMake >= 3.17 * Qt-5 ## Krótki opis struktury projektu: Projekt został logicznie podzielony na trzy subprojekty: * **Core** (zawiera główną logikę projektu) * **Qt_metro** (Wykorzystuje funkcjonalność Core z interfejsem graficznym) * **Tests** (testy aplikacji) Ważniejsze klasy subprojektu core: * **Station:** Zawiera obsługę pojedynczej stacji metra * **Network:** Sieć metra, składająca się ze stacji metra * **Train:** Obsługuje pociąg * **Passenger:** Klasa reprezentująca pasażera wraz z jego aktualną pozycją * **DijkstraPathfinder:** Wyszukiwanie odpowiedniego połączenia ## Uruchomienie aplikacji: Aby uruchomić aplikację należy ją pierw zbudować wydając polecenia: ``` shell script cmake -Bcmake-build-debug -H. cmake --build cmake-build-debug --target core qt_metro tests_run ``` Następnie można już uruchomić aplikację poleceniem: ``` shell script ./cmake-build-debug/src/qt/qt_metro ``` ## Testowanie: Podczas pisania aplikacji staraliśmy się stosować podejście TDD (tam, gdzie było to możliwe). Do testów wykorzystano framework Doctest. Powodów jego wyboru było kilka: w zupełności wystarczające potrzeby, pod nasze zastosowania i prostota w pisaniu testów, oraz wielkość (tylko jeden plik .h dołączany do projektu), a także dobra integracja z IDE. Ze względu na dość proste GUI zrezygnowaliśmy z testów GUI, które byłyby dość skomplikowane. ## Uruchomienie testów: Uruchomienie testów polega na uruchomieniu odpowiedniej konfiguracji CMake(po wstępnym zbudowaniu projektu), za pomocą polecenia: ```shell script ./cmake-build-debug/Doctest_tests/Doctest_tests_run ``` ## Niezaimplementowane funkcjonalności: Ze względu na ograniczenia czasowe nie udało nam się zaimplementować stref biletowych. Nasz kod jest jednak modułowy i dodanie tej funkcjonalności nie powinno stanowić większych problemów. Ta funkcjonalność nie była jednak wysoko w naszym priorytecie, dlatego uważamy, że nie była ona niezbędna. ## Podział pracy w zespole: * Grzegorz Czarnecki: * Klasa sieci metra * GUI * Kamil Sulkowski: * Klasa pociągu metra * GUI * Marcin Zasuwa: * Klasa pasażera metra * GUI