Транспортный справочник на C++17 с поддержкой хранения маршрутов, обработки JSON-запросов, построения оптимальных маршрутов и визуализации транспортной сети в SVG.
Приложение загружает данные о городе, обрабатывает запросы к транспортной системе и возвращает результаты через JSON-интерфейс.
- хранение остановок, маршрутов и расстояний между ними;
- получение статистики по автобусам и остановкам;
- обработка JSON-запросов и JSON-ответов.
- построение кратчайших маршрутов;
- учёт времени ожидания и скорости автобусов;
- расчёт общего времени поездки;
- формирование пошагового маршрута.
- генерация SVG-карты транспортной сети;
- отображение маршрутов и остановок;
- настройка оформления через JSON.
- C++17
- STL
std::optionalstd::variantstd::string_view
- JSON
- взвешенный ориентированный граф;
- поиск оптимального маршрута.
- SVG
Проект реализован в виде нескольких независимых подсистем:
JSON Request
↓
Request Handler
↓
┌─────────────────────────┐
│ Transport Catalogue │
│ хранение маршрутов │
└─────────────────────────┘
┌─────────────────────────┐
│ Transport Router │
│ граф + поиск маршрута │
└─────────────────────────┘
┌─────────────────────────┐
│ Map Renderer │
│ генерация SVG │
└─────────────────────────┘
↓
JSON Response
Основные компоненты:
transport_catalogue.*— хранение остановок, маршрутов и расстояний;transport_router.*,graph.h,router.h— построение графа и маршрутизация;map_renderer.*,svg.*— генерация SVG-карты;json.*,json_builder.*,json_reader.*— обработка JSON;request_handler.*— взаимодействие между подсистемами;main.cpp— точка входа.
cd transport-catalogue
g++ -std=c++17 -O2 *.cpp -o transport_catalogue.exe
Get-Content ..\example_input.json | .\transport_catalogue.execd transport-catalogue
g++ -std=c++17 -O2 *.cpp -o transport_catalogue
./transport_catalogue < ../example_input.jsonПриложение принимает JSON-объект со следующими полями:
| Поле | Описание |
|---|---|
base_requests |
описание остановок и маршрутов |
stat_requests |
запросы к транспортной системе |
render_settings |
настройки SVG-карты |
routing_settings |
параметры маршрутизации |
StopBus
StopBusMapRoute
{
"base_requests": [
{
"type": "Stop",
"name": "A",
"latitude": 55.611087,
"longitude": 37.20829,
"road_distances": {
"B": 1000
}
},
{
"type": "Stop",
"name": "B",
"latitude": 55.595884,
"longitude": 37.209755,
"road_distances": {
"A": 1200
}
},
{
"type": "Bus",
"name": "256",
"stops": ["A", "B"],
"is_roundtrip": false
}
],
"stat_requests": [
{
"id": 1,
"type": "Bus",
"name": "256"
}
],
"render_settings": {
"width": 1200,
"height": 600
},
"routing_settings": {
"bus_wait_time": 2,
"bus_velocity": 30
}
}