---
# System prepended metadata

title: SIEĆ METRA

---

# 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 
