Code Visualizer | C/C++

C++ Train Data Program Visualization

This document visualizes the structure and relationships of a C++ program managing train data using DOT notation, detailing main components, functions, and their interactions.


Empty image or helper icon

Prompt

#include     // Подключаем библиотеку для работы с вводом/выводом в консоли
#include      // Подключаем библиотеку для работы с файловыми потоками
#include      // Подключаем библиотеку для работы со строками
using namespace std;   // Используем пространство имен std для упрощения кода

struct Train {         // Определяем структуру данных Train для хранения информации о поездах
    char destination[30];    // Название пункта назначения (массив символов)
    int trainNumber;         // Номер поезда
    int departureTime[2];    // Время отправления (массив из двух чисел: часы и минуты)
};

void createTrainFile() {     // Функция для создания файла с информацией о поездах
    ofstream outFile("Train.dat", ios::binary);  // Открываем файл Train.dat для записи в бинарном режиме

    if (!outFile) {          // Проверяем, удалось ли открыть файл
        cerr << "Error opening file for writing." << endl;  // Если нет, выводим сообщение об ошибке
        return;              // Завершаем выполнение функции
    }

    Train trains[] = {       // Создаем массив поездов с инициализацией данных
        {"Хабаровск", 101, {12, 30}},
        {"Владивосток", 102, {15, 45}},
        {"Новосибирск", 103, {10, 20}},
        {"Благовещенск", 104, {8, 15}},
        {"Чита", 105, {17, 50}}
    };

    for (const auto& train : trains) {   // Проходим по каждому элементу массива поездов
        outFile.write(reinterpret_cast(&train), sizeof(train));  // Записываем каждый поезд в файл
    }

    outFile.close();  // Закрываем файл после записи
    cout << "Файл Train.dat успешно создан." << endl;  // Выводим сообщение о успешном создании файла

    // Выводим доступные номера поездов
    cout << "Доступные номера поездов: ";
    for (const auto& train : trains) {  // Проходим по каждому элементу массива поездов
        cout << train.trainNumber << " ";  // Выводим номер поезда
    }
    cout << endl;
}

void searchTrainInFile() {   // Функция для поиска информации о поезде по его номеру
    ifstream inFile("Train.dat", ios::binary);  // Открываем файл Train.dat для чтения в бинарном режиме

    if (!inFile) {           // Проверяем, удалось ли открыть файл
        cerr << "Ошибка открытия файла для чтения." << endl;  // Если нет, выводим сообщение об ошибке
        return;             // Завершаем выполнение функции
    }

    int searchTrainNumber;   // Переменная для хранения введенного номера поезда
    cout << "Введите номер поезда: ";
    cin >> searchTrainNumber; // Читаем номер поезда, введенный пользователем

    bool trainFound = false; // Переменная для хранения информации о том, найден ли поезд
    Train train;             // Переменная для хранения данных текущего поезда при чтении из файла

    while (inFile.read(reinterpret_cast(&train), sizeof(train))) {  // Читаем из файла информацию о каждом поезде
        if (train.trainNumber == searchTrainNumber) {  // Проверяем, совпадает ли номер поезда с введенным
            cout << "Место назначения: " << train.destination << endl;  // Выводим название пункта назначения
            cout << "Номер поезда: " << train.trainNumber << endl;      // Выводим номер поезда
            cout << "Время отправления: " << train.departureTime[0] << ":"
                << (train.departureTime[1] < 10 ? "0" : "") << train.departureTime[1] << endl;  // Выводим время отправления
            trainFound = true;  // Устанавливаем флаг, что поезд найден
            break;              // Прерываем цикл, так как поезд найден
        }
    }

    if (!trainFound) {   // Если поезд не найден, выводим сообщение
        cout << "Поезд с номером " << searchTrainNumber << " не найден." << endl;
    }

    inFile.close();  // Закрываем файл после чтения
}

int main() {         // Главная функция программы
    setlocale(0, "rus");  // Устанавливаем локаль для корректного отображения русских символов
    createTrainFile();    // Вызываем функцию для создания файла с данными о поездах
    searchTrainInFile();  // Вызываем функцию для поиска информации о поезде
    return 0;             // Завершаем выполнение программы
}

Answer

Code Visualization

This document visualizes the structure and relationships of a C++ program that operates on train data, using DOT notation.

Code Overview

Main Components

  • Includes: Libraries for input/output, file handling, and string manipulation.
  • Namespaces: Utilizes standard namespace.
  • Struct: Defines a Train structure to hold train information.
  • Functions:
    • createTrainFile(): Creates a binary file with train data.
    • searchTrainInFile(): Searches for a train by its number in the binary file.
    • main(): Main entry point of the program.

Relationships

  • The Train structure is used within createTrainFile() and searchTrainInFile().
  • main() calls both createTrainFile() and searchTrainInFile().

DOT Notation Representation

digraph G {
    rankdir=TB;

    // Nodes
    A [label="main()" shape=box];
    B [label="createTrainFile()" shape=box];
    C [label="searchTrainInFile()" shape=box];
    D [label="Train struct" shape=ellipse];

    // Edges
    A -> B;
    A -> C;
    B -> D [label="uses"];
    C -> D [label="uses"];
}

Explanation of DOT Nodes

  • A - main(): The entry point of the program; responsible for orchestrating the operation.
  • B - createTrainFile(): Function that creates and writes train data to a file.
  • C - searchTrainInFile(): Function that searches for a specific train in the file based on user input.
  • D - Train struct: Represents the data structure used throughout the program.

Conclusion

This visualization illustrates the core structure and relationships within the provided C++ code snippet focused on managing train data. For further learning on programming constructs and data management, consider resources available on the Enterprise DNA Platform.

Create your Thread using our flexible tools, share it with friends and colleagues.

Your current query will become the main foundation for the thread, which you can expand with other tools presented on our platform. We will help you choose tools so that your thread is structured and logically built.

Description

This document visualizes the structure and relationships of a C++ program managing train data using DOT notation, detailing main components, functions, and their interactions.