Skip to content

vilfilll/cpp-transport-catalogue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 

Repository files navigation

Transport Catalogue (C++)

Транспортный справочник на C++17 с поддержкой хранения маршрутов, обработки JSON-запросов, построения оптимальных маршрутов и визуализации транспортной сети в SVG.

Приложение загружает данные о городе, обрабатывает запросы к транспортной системе и возвращает результаты через JSON-интерфейс.

Ключевые возможности

Работа с транспортными данными

  • хранение остановок, маршрутов и расстояний между ними;
  • получение статистики по автобусам и остановкам;
  • обработка JSON-запросов и JSON-ответов.

Маршрутизация

  • построение кратчайших маршрутов;
  • учёт времени ожидания и скорости автобусов;
  • расчёт общего времени поездки;
  • формирование пошагового маршрута.

Визуализация

  • генерация SVG-карты транспортной сети;
  • отображение маршрутов и остановок;
  • настройка оформления через JSON.

Стек

Язык

  • C++17

Используемые возможности C++

  • STL
  • std::optional
  • std::variant
  • std::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 — точка входа.

Сборка и запуск

Windows (PowerShell)

cd transport-catalogue

g++ -std=c++17 -O2 *.cpp -o transport_catalogue.exe

Get-Content ..\example_input.json | .\transport_catalogue.exe

Linux/macOS

cd 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 параметры маршрутизации

Поддерживаемые запросы

Base requests

  • Stop
  • Bus

Statistics requests

  • Stop
  • Bus
  • Map
  • Route

Пример входных данных

{
  "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
  }
}

About

Transport Catalogue

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages