Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • JupyterHub
    • Soft
  1. ИСиТ
  2. ПСП
  3. Практика
  4. Лаб. работа “Обзор базовых конструкций и основных элементов языка”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Слайды
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Регистрация в JupyterHub
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Формы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
        • Расчетно-графическая работа: Разработка веб-приложения с использованием Laravel
          • Методические рекомендации по выполнению работы
          • Варианты заданий для расчетно-графической работы
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
      • Практика
        • Программное обеспечение
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Обзор базовых конструкций и основных элементов языка”
        • Лаб. работа “Структурные элементы класса, методы взаимодействия объектов и организация наследования”
        • Лаб. работа “Типы исключительных ситуаций и процесс их обработки”
        • Лаб. работа “Потоки ввода/вывода и работа с файлами”
        • Лаб. работа “Организация потоков, параллельной обработки, синхронизации и распределённой обработки синхронизуемых участков кода”
        • Лаб. работа “Структурные механизмы языка программирования для реализации полиморфизма в программах”
        • Лаб. работа “Средства языка для организации работы в сети. Основные классы и интерфейсы реализации сетевого взаимодействия”
        • Лаб. работа “Библиотеки и средства внедрения визуальных компонент для организации GUI-интерфейсов пользователя. Обработка событий”
        • Лаб. работа “Концепция распределённой обработки данных и технологии удалённой обработки данных”
      • Темы курсовых проектов по дисциплине “Программирование сетевых приложений”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Слайды
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа “Основы программирования на Python”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Линейное программирование”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
        • Лаб. работа “Предобработка данных”
        • Лаб. работа “Машинное обучение: классификация”
        • Лаб. работа “Создание и обучение простейших нейронных сетей”
        • Лаб. работа “Системы массового обслуживания”
        • Лаб. работа “Обработка естественного языка”
        • Лаб. работа “Компьютерное зрение”
        • Лаб. работа “Нейросети и глубокое обучение”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Слайды
      • Слайды
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”
    • ИППРПО
      • Теория
      • Практика
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Управление процессами в Shell”
        • Лаб. работа “Управление файловой системой в Shell”
        • Лаб. работа “Управление пакетами в ОС Linux”
        • Лаб. работа “Сетевые инструменты в Linux”
        • Лаб. работа “Мониторинг и анализ системы Linux”
        • Лаб. работа “Основы Docker. Управление контейнерами”
        • Лаб. работа “Docker: Сети”
        • Лаб. работа "Docker: Образы"
        • Лаб. работа “Docker Compose: Управление многоконтейнерными приложениями”
        • Лаб. работа “CI/CD с GitLab”

Содержание

  • Цель работы
  • Теоретические сведения
    • Структура проекта в Qt Creator
    • Базовый файл CMakeLists.txt
    • Переменные и типы данных
    • Преобразование и приведение типов
    • Управляющие конструкции
    • Массивы и строки
    • Структурированная привязка (C++17)
  • Задание для выполнения
    • Требования к программе
    • Пример вычисления адреса подсети
    • Пример ожидаемого вывода
  • Индивидуальные задания
    • Вариант 1. Учёт сетевых интерфейсов
    • Вариант 2. Конвертер единиц передачи данных
    • Вариант 3. Учёт пользователей чата
    • Вариант 4. Журнал запросов DNS
    • Вариант 5. Таблица маршрутизации
    • Вариант 6. Биллинг интернет-трафика
    • Вариант 7. Сканер открытых портов (имитация)
    • Вариант 8. Мониторинг серверов
    • Вариант 9. Лог-файл HTTP-запросов
    • Вариант 10. Адресная книга протоколов
    • Вариант 11. Справочник сетевых подключений
    • Вариант 12. База данных Wi-Fi сетей
    • Вариант 13. Учёт DHCP-аренд
    • Вариант 14. Статистика пакетов
    • Вариант 15. Конвертер адресов
    • Вариант 16. Журнал подключений VPN
    • Вариант 17. Реестр IoT-устройств
    • Вариант 18. Таблица контейнеров Docker
    • Вариант 19. База почтовых ящиков
    • Вариант 20. Учёт firewall-правил
  • Порядок выполнения
  • Контрольные вопросы
  • Содержание отчёта
  1. ИСиТ
  2. ПСП
  3. Практика
  4. Лаб. работа “Обзор базовых конструкций и основных элементов языка”

Лаб. работа “Обзор базовых конструкций и основных элементов языка”

Программирование сетевых приложений
Практика
Автор

Бизюк Андрей

Дата публикации

9 апреля 2026 г.

Цель работы

Освоить инструменты разработки Qt (Qt Creator, CMake/qmake), закрепить знания синтаксиса языка C++, базовых типов данных, операторов и управляющих конструкций путём разработки консольного приложения, обрабатывающего пользовательский ввод и выводящего результаты вычислений.

Теоретические сведения

Структура проекта в Qt Creator

Проект на C++ в Qt Creator создаётся через шаблон Non-Qt Project → Plain C++ Application. Система сборки — CMake (рекомендуется) или qmake. Основные файлы проекта:

Структура проекта

Структура проекта

Базовый файл CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(Lab1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(Lab1 main.cpp)

Переменные и типы данных

int age = 20;
double pi = 3.14159;
char symbol = 'A';
bool isConnected = true;
string name = "network";
auto port = 8080;          // автоматический вывод типа
const int MAX_SIZE = 100;  // именованная константа

Преобразование и приведение типов

int port = stoi("8080");               // строка → int
string s = to_string(3.14);            // число → строка
double d = static_cast<double>(7) / 2; // явное приведение: 3.5

Управляющие конструкции

// Условный оператор
if (port > 1024) {
    cout << "Пользовательский порт" << endl;
} else if (port > 0) {
    cout << "Системный порт" << endl;
} else {
    cout << "Некорректный порт" << endl;
}

// Цикл for
for (int i = 0; i < devices.size(); i++) {
    cout << devices[i] << endl;
}

// Цикл range-based for
for (const auto& dev : devices) {
    cout << dev << endl;
}

// Цикл while
while (connected) {
    // обработка
}

// Оператор switch
switch (choice) {
    case 1: process(); break;
    case 2: configure(); break;
    default: cout << "Неизвестная команда" << endl;
}

Массивы и строки

// Массив стандартной библиотеки
#include <vector>
vector<string> protocols = {"TCP", "UDP", "HTTP"};

// Строки
#include <string>
string msg = "Hello, Network!";
int len = msg.length();
string sub = msg.substr(7, 7);  // "Network"
size_t pos = msg.find("Hello"); // 0

Структурированная привязка (C++17)

pair<string, int> server = {"192.168.1.1", 8080};
auto [ip, port] = server;
cout << ip << ":" << port << endl;

Задание для выполнения

Разработать консольное приложение для работы с информацией о сетевых подключениях. Программа должна предоставлять текстовое меню, обрабатывать пользовательский ввод и выполнять вычисления с использованием базовых конструкций языка C++.

Требования к программе

  1. Создать проект C++ в Qt Creator с использованием CMake.

  2. Определить структуру данных для хранения информации о сетевом подключении:

    • IP-адрес (строка)
    • порт (целое число)
    • протокол (строка: TCP/UDP)
    • статус подключения (логическое значение)
  3. Реализовать функции:

    • void addConnection(vector<...>& list) — ввод данных о подключении с клавиатуры и добавление в список
    • void showConnections(const vector<...>& list) — вывод всех подключений в табличном виде
    • void findConnection(const vector<...>& list) — поиск по IP-адресу (вывод порта, протокола, статуса)
    • void calculateSubnet(const string& ip, const string& mask) — вычисление адреса подсети и широковещательного адреса
    • void validatePort(int port) — проверка корректности номера порта (1–65535, вывод: системный/пользовательский/динамический)
  4. Реализовать текстовое меню:

    1. Добавить подключение
    2. Показать все подключения
    3. Найти подключение по IP
    4. Вычислить адрес подсети
    5. Проверить номер порта
    0. Выход
  5. Использовать vector, string, управляющие конструкции (if/else, for, while, switch), преобразование типов.

Пример вычисления адреса подсети

Для IP 192.168.1.100 и маски 255.255.255.0: - Разбить IP и маску на октеты, преобразовать в целые числа - Побитовое И: адрес подсети = 192.168.1.0 - Инвертировать маску, побитовое ИЛИ с IP: широковещательный = 192.168.1.255

Пример ожидаемого вывода

=== Сетевые подключения ===
| # | IP-адрес       | Порт | Протокол | Статус  |
|---|----------------|------|----------|---------|
| 1 | 192.168.1.1    | 8080 | TCP      | Подключен |
| 2 | 10.0.0.1       | 53   | UDP      | Отключен   |
| 3 | 172.16.0.100   | 443  | TCP      | Подключен |
Всего: 3

Вычисление подсети:
IP: 192.168.1.100, Маска: 255.255.255.0
Адрес подсети:    192.168.1.0
Широковещательный: 192.168.1.255

Проверка порта:
Порт 8080: пользовательский (1024–49151)
Порт 80: системный (0–1023)
Порт 50000: динамический (49152–65535)

Индивидуальные задания

В каждом варианте необходимо разработать консольное приложение с текстовым меню, использующее vector, string, управляющие конструкции (if/else, for, while, switch), преобразование типов и базовые операции с массивами и строками.

Вариант 1. Учёт сетевых интерфейсов

Структура: имя интерфейса (eth0/wlan0/…), MAC-адрес, IP-адрес, скорость (Мбит/с), статус (up/down).

Пункт меню Функция
1. Добавить интерфейс Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по имени Поиск интерфейса, вывод MAC, IP, скорости
4. Активные интерфейсы Вывод только интерфейсов со статусом up
5. Общая пропускная способность Сумма скоростей всех активных интерфейсов
0. Выход Завершение программы

Вариант 2. Конвертер единиц передачи данных

Структура: название подключения, скорость (в Мбит/с), тип (Ethernet/Wi-Fi/Оптоволокно).

Пункт меню Функция
1. Добавить подключение Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Мбит/с → КБ/с Перевод скорости: Мбит/с × 1000 / 8
4. Время загрузки файла Ввод размера файла (МБ) и скорости → время в секундах
5. Сравнение скоростей Ввод двух скоростей → какая выше и на сколько %
0. Выход Завершение программы

Вариант 3. Учёт пользователей чата

Структура: логин, IP-адрес, время подключения (минуты), статус (в сети/не в сети).

Пункт меню Функция
1. Добавить пользователя Ввод данных, добавление в vector
2. Показать всех Табличный вывод всех записей
3. Поиск по логину Поиск пользователя, вывод IP и времени
4. Время в формате ЧЧ:ММ Ввод минут → часы и минуты
5. Статистика Общее количество, количество онлайн, среднее время
0. Выход Завершение программы

Вариант 4. Журнал запросов DNS

Структура: доменное имя, IP-адрес, тип записи (A/AAAA/CNAME), время отклика (мс).

Пункт меню Функция
1. Добавить запись Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по домену Поиск записей, вывод IP и типа
4. Среднее время отклика Вычисление среднего значения по всем записям
5. Фильтр по типу Ввод типа записи → вывод только записей этого типа
0. Выход Завершение программы

Вариант 5. Таблица маршрутизации

Структура: адрес сети, маска подсети, шлюз, интерфейс, метрика.

Пункт меню Функция
1. Добавить маршрут Ввод данных, добавление в vector
2. Показать таблицу Табличный вывод всех записей
3. Поиск по сети Поиск маршрута, вывод шлюза и интерфейса
4. Вычисление подсети Ввод адреса и маски → адрес подсети
5. Минимальная метрика Вывод маршрута с наименьшей метрикой
0. Выход Завершение программы

Вариант 6. Биллинг интернет-трафика

Структура: IP-адрес, объём трафика (МБ), стоимость за МБ, дата (строка).

Пункт меню Функция
1. Добавить запись Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Стоимость трафика IP Поиск по IP → объём × стоимость
4. Общая стоимость Сумма по всем записям
5. Топ-3 по объёму Сортировка и вывод 3 записей с наибольшим трафиком
0. Выход Завершение программы

Вариант 7. Сканер открытых портов (имитация)

Структура: IP-адрес, номер порта, статус (открыт/закрыт/фильтруется), сервис (SSH/HTTP/FTP/…).

Пункт меню Функция
1. Добавить результат Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Открытые порты IP Поиск по IP → только открытые порты
4. Статистика портов Количество открытых, закрытых, фильтруемых
5. Известные порты Ввод номера → вывод названия сервиса (80→HTTP, 22→SSH, 21→FTP, 53→DNS, 443→HTTPS, 25→SMTP)
0. Выход Завершение программы

Вариант 8. Мониторинг серверов

Структура: имя сервера, IP-адрес, загрузка CPU (%), использование RAM (%), статус (online/offline).

Пункт меню Функция
1. Добавить сервер Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по имени Поиск сервера, вывод всех параметров
4. Средняя загрузка Средний CPU и RAM по всем серверам
5. Критические серверы Вывод серверов с CPU > 80% или RAM > 80%
0. Выход Завершение программы

Вариант 9. Лог-файл HTTP-запросов

Структура: IP-адрес клиента, метод запроса (GET/POST/PUT/DELETE), URL, код ответа (200/404/500/…), размер ответа (байт).

Пункт меню Функция
1. Добавить запись Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Фильтр по коду Ввод кода → вывод записей с этим кодом
4. Статистика кодов Количество записей для каждого кода ответа
5. Общий объём данных Сумма размеров ответов по всем записям
0. Выход Завершение программы

Вариант 10. Адресная книга протоколов

Структура: название протокола, номер порта, транспорт (TCP/UDP), описание (строка).

Пункт меню Функция
1. Добавить протокол Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по порту Поиск протокола по номеру порта
4. Фильтр по транспорту Ввод TCP/UDP → только записи этого транспорта
5. Сортировка по порту Вывод всех записей, отсортированных по номеру порта
0. Выход Завершение программы

Вариант 11. Справочник сетевых подключений

Структура: IP-адрес, порт, протокол (TCP/UDP), статус (подключён/отключён).

Пункт меню Функция
1. Добавить подключение Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по IP Поиск записи, вывод порта и протокола
4. Адрес подсети Ввод IP и маски → подсеть и broadcast
5. Категория порта Ввод порта → системный / пользовательский / динамический
0. Выход Завершение программы

Вариант 12. База данных Wi-Fi сетей

Структура: SSID, BSSID (MAC), канал, уровень сигнала (дБм), безопасность (WPA2/WPA3/Open).

Пункт меню Функция
1. Добавить сеть Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по SSID Поиск сети, вывод канала и безопасности
4. Сети по уровню сигнала Сортировка по убыванию уровня сигнала
5. Фильтр по безопасности Ввод типа → только сети с этой защитой
0. Выход Завершение программы

Вариант 13. Учёт DHCP-аренд

Структура: MAC-адрес клиента, IP-адрес, время начала аренды (часы), длительность аренды (часы), статус (активна/истекла).

Пункт меню Функция
1. Добавить аренду Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по MAC Поиск аренды, вывод IP и оставшегося времени
4. Активные аренды Вывод только записей со статусом «активна»
5. Количество свободных IP Ввод начального IP, размера пула, вычисление свободных адресов
0. Выход Завершение программы

Вариант 14. Статистика пакетов

Структура: IP-источник, IP-назначение, протокол, размер пакета (байт), временная метка (строка).

Пункт меню Функция
1. Добавить пакет Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Пакеты от IP Поиск по IP-источнику
4. Статистика по протоколу Количество пакетов и общий объём для каждого протокола
5. Средний размер пакета Вычисление среднего размера по всем записям
0. Выход Завершение программы

Вариант 15. Конвертер адресов

Структура: IP-адрес, маска подсети, префикс (число 0–32).

Пункт меню Функция
1. Добавить запись Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Префикс → маска Ввод числа (0–32) → десятичная маска подсети (например, 24 → 255.255.255.0)
4. Маска → префикс Ввод маски → число префикса
5. Количество хостов Ввод префикса → максимальное количество хостов в подсети
0. Выход Завершение программы

Вариант 16. Журнал подключений VPN

Структура: имя пользователя, IP-адрес, сервер подключения, длительность сеанса (минуты), объём трафика (МБ).

Пункт меню Функция
1. Добавить запись Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по пользователю Поиск записей, вывод серверов и длительности
4. Общий трафик пользователя Сумма трафика по всем сеансам пользователя
5. Самый длительный сеанс Вывод записи с максимальной длительностью
0. Выход Завершение программы

Вариант 17. Реестр IoT-устройств

Структура: ID устройства, тип (датчик/камера/лампа/…), IP-адрес, состояние (online/offline), значение (строка).

Пункт меню Функция
1. Добавить устройство Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по типу Ввод типа → все устройства этого типа
4. Устройства онлайн Вывод только устройств со статусом online
5. Количество по типам Подсчёт устройств каждого типа
0. Выход Завершение программы

Вариант 18. Таблица контейнеров Docker

Структура: имя контейнера, образ, порт, статус (running/stopped), объём памяти (МБ).

Пункт меню Функция
1. Добавить контейнер Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по образу Все контейнеры с указанным образом
4. Контейнеры по статусу Фильтр: running или stopped
5. Общая память Суммарный объём памяти всех запущенных контейнеров
0. Выход Завершение программы

Вариант 19. База почтовых ящиков

Структура: адрес почты, POP3-сервер, порт POP3, SMTP-сервер, порт SMTP.

Пункт меню Функция
1. Добавить ящик Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по адресу Поиск ящика, вывод серверов и портов
4. Проверка портов Проверка: POP3-порт = 110/995, SMTP-порт = 25/587/465
5. Ящики на сервере Ввод имени SMTP-сервера → все ящики на этом сервере
0. Выход Завершение программы

Вариант 20. Учёт firewall-правил

Структура: номер правила, IP-адрес источника, IP-адрес назначения, порт, действие (ALLOW/DENY), протокол (TCP/UDP/ANY).

Пункт меню Функция
1. Добавить правило Ввод данных, добавление в vector
2. Показать все Табличный вывод всех записей
3. Поиск по IP Все правила, где IP встречается как источник или назначение
4. Статистика действий Количество ALLOW и DENY правил
5. Правила для порта Ввод порта → все правила, связанные с этим портом
0. Выход Завершение программы

Порядок выполнения

  1. Запустить Qt Creator, создать проект: File → New → Non-Qt Project → Plain C++ Application, выбрать CMake.
  2. В файле main.cpp подключить необходимые заголовочные файлы: <iostream>, <string>, <vector>, <sstream>.
  3. Определить структуру Connection и реализовать все требуемые функции.
  4. Реализовать главное меню в функции main() с использованием цикла while и оператора switch.
  5. Протестировать все пункты меню: добавить минимум 3 подключения, вывести список, выполнить поиск, вычислить подсеть, проверить порты.
  6. Убедиться в корректной работе преобразования типов при вводе порта и разборе IP-адресов.
  7. Скомпилировать и запустить программу, сохранить скриншоты результатов.

Контрольные вопросы

  1. Какие базовые типы данных языка C++ вы использовали в программе?
  2. Чем отличается int от unsigned int? Какие типы целых чисел существуют в C++?
  3. Что такое автоматический вывод типа (auto)? В каких случаях его следует использовать?
  4. Чем отличается static_cast<double>(7)/2 от 7/2?
  5. Какие виды циклов существуют в C++? В каких случаях предпочтительнее использовать range-based for?
  6. Как работает оператор switch? Почему необходим break в каждом case?
  7. Чем отличается vector от обычного массива? Какие преимущества он предоставляет?
  8. Какие методы класса string вы использовали? Опишите их назначение.
  9. Что такое структурированная привязка (structured binding) и когда она применяется?

Содержание отчёта

  1. Тема, цель и задание лабораторной работы.
  2. Структура проекта (скриншот дерева файлов в Qt Creator).
  3. Текст программы (main.cpp) с комментариями.
  4. Скриншоты результата выполнения программы (демонстрация всех пунктов меню).
  5. Ответы на контрольные вопросы.
Наверх
Лаб. работа “Программирование сетевых приложений с использованием сокетов”
Лаб. работа “Структурные элементы класса, методы взаимодействия объектов и организация наследования”