# SIEĆ METRA
## Skład zespołu:
* Grzegorz Czarnecki
* Kamil Sulkowski
* Marcin Zasuwa
## Sieć metra:


## 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