Skip to content

AdonsKali/Technology-development-lab3

Repository files navigation

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №3

«Программа визуализации данных и печати графика»

Выполнил: Деревянкин Я.В
Группа: 932321


Постановка задачи

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

  1. Загружать данные из файлов различных форматов (.sqlite, .json). Где ключом является значение "Time", а значением ключа — "Value"
  2. Отображать данные в виде линейных и столбчатых графиков
  3. Поддерживать различные стили оформления (цветной, черно-белый)
  4. Экспортировать графики в PDF-формат
  5. Обеспечить лёгкое добавление новых источников данных и типов графиков

Предлагаемое решение

Реализовать программу с визуальным интерфейсом с использованием паттернов проектирования:

  • Адаптер — для унификации работы с различными источниками данных и типами графиков
  • Внедрение зависимостей (IoC) — для управления зависимостями и обеспечения слабой связанности компонентов
  • Фабрика — для создания адаптеров данных в зависимости от типа файла
  • MVC — для отображения файловой системы (QFileSystemModel — модель, QTreeView/QTableView — представления)

Создать абстрактные интерфейсы IData (для загрузки данных), IChart (для построения графиков) и IChartStyle (для стилизации). Использовать IOC-контейнер для управления зависимостями.


Сущности и классы

1. IData (Абстрактный интерфейс данных)

Абстрактный класс для всех источников данных. Определяет интерфейс для загрузки и получения данных.

Методы:

  • getType() — возвращает тип источника данных ("sqlite", "json")
  • getPoints() — возвращает вектор точек (x, y) для построения графика
  • load(source) — загрузка данных из указанного источника

2. SQLDataAdapter (Адаптер для SQLite)

Реализация интерфейса IData для загрузки данных из SQLite баз данных.

3. JSONDataAdapter (Адаптер для JSON)

Реализация интерфейса IData для загрузки данных из JSON-файлов.

4. IDataFactory (Интерфейс фабрики данных)

Абстрактный интерфейс для создания адаптеров данных.

Методы:

  • create(filePath) — создает адаптер для указанного файла
  • supports(filePath) — проверяет, поддерживается ли данный файл

5. DataFactory (Фабрика данных)

Конкретная реализация фабрики данных.

6. IChart (Абстрактный интерфейс графика)

Интерфейс для создания различных типов графиков.

Методы:

  • getSupportedDataType() — возвращает поддерживаемый тип данных ("line", "bar")
  • createChart(data) — создает и возвращает объект графика

7. LineChartAdapter (Адаптер линейного графика)

Реализация интерфейса IChart для создания линейных графиков.

8. BarChartAdapter (Адаптер столбчатого графика)

Реализация интерфейса IChart для создания столбчатых графиков.

9. IChartStyle (Абстрактный интерфейс стиля)

Интерфейс для применения стилей оформления к графикам.

Методы:

  • applyStyle(chart) — применяет стиль к графику
  • getColorMode() — возвращает режим печати (цветной/черно-белый)
  • getName() — возвращает название стиля

10. ColorStyle (Цветной стиль)

Реализация интерфейса IChartStyle для цветного оформления.

11. GrayscaleStyle (Черно-белый стиль)

Реализация интерфейса IChartStyle для черно-белого оформления.

12. ChartService (Сервис управления графиками)

Центральный сервис для оркестрации создания графиков.

Методы:

  • registerChart(dataType, chart) — регистрация графика для типа данных
  • setStyle(style) — установка текущего стиля оформления
  • setChartType(chartType) — установка типа графика
  • createChart(data) — создание графика на основе данных с применением стиля

13. PDFPrinter (Сервис печати)

Сервис для экспорта графиков в PDF-формат.

Методы:

  • setFileName(fileName) — установка имени файла
  • print(chartView, colorMode) — печать графика в PDF

14. IOCContainer (Контейнер внедрения зависимостей)

Реализация паттерна Service Locator для управления созданием объектов.

Методы:

  • GetObject<T>() — получение объекта указанного типа
  • RegisterInstance<TInterface>(instance) — регистрация готового экземпляра
  • RegisterFactory<TInterface, TConcrete, TArgs...>() — регистрация фабричного метода

15. MainWindow (Главное окно приложения)

Основной пользовательский интерфейс.

Компоненты:

  • QFileSystemModel — модель файловой системы (слева — папки, справа — файлы)
  • QTreeView — отображение дерева папок
  • QTableView — отображение списка файлов
  • QComboBox — выбор типа графика (линейный/столбчатый)
  • QCheckBox — переключение черно-белого режима
  • QPushButton — кнопка печати в PDF

Функциональность:

  • Навигация по файловой системе
  • Автоматическая загрузка и отображение данных при выборе файла
  • Переключение между типами графиков
  • Переключение между стилями оформления
  • Экспорт графика в PDF

UML-диаграмма

Ссылка: https://drive.google.com/file/d/15FCWKrIWWo5EnFKi58Tfy3PeGAkaYlJA/view?usp=sharing


Инструкция пользователя

Запуск программы

После запуска открывается главное окно с файловым менеджером.

Навигация по файлам

  1. В левой панели отображается дерево папок
  2. В правой панели отображаются файлы с расширениями .sqlite, .json
  3. Клик по папке обновляет список файлов в правой панели

Выбор файла для отображения

  1. Кликните по любому файлу в правой панели
  2. Программа автоматически определит тип файла и загрузит данные
  3. Данные будут отображены в виде графика в нижней части правой панели

Настройка отображения

  • Тип диаграммы — выберите "Line Chart" (линейный) или "Bar Chart" (столбчатый)
  • Черно-белый график — включите для подготовки к черно-белой печати

Экспорт в PDF

  1. Нажмите кнопку "Печать графика"
  2. Выберите место сохранения и имя файла
  3. PDF будет сохранен в формате A4 с автоматическим масштабированием

Тесты

Case 1: Загрузка SQLite базы данных

Входные данные: Файл SQLite с таблицей (1438 записей)
Результат: Корректное отображение данных в виде линейного или столбчатого графика с правильным временным масштабом

Case 2: Загрузка JSON файла

Входные данные: JSON-файл с массивом объектов [{"x":1, "y":10}, {"x":2, "y":20}, ...]
Результат: Корректная загрузка точек и отображение графика

Case 3: Переключение стилей

Входные действия: Включение чекбокса "Черно-белый график"
Результат: График перерисовывается в черно-белом стиле (оттенки серого)

Case 4: Экспорт в PDF

Входные действия: Нажатие кнопки "Печать графика" → выбор пути сохранения
Результат: Сохранение графика в файл PDF с правильным масштабированием на странице A4

Case 5: Переключение типов графиков

Входные действия: Выбор "Bar Chart" в комбобоксе
Результат: Данные перерисовываются в виде столбчатой диаграммы с автоматической агрегацией при большом количестве точек

Case 6: Обработка некорректных данных

Входные действия: Выбор файла с неподдерживаемым форматом
Результат: Сообщение об ошибке в статусной строке

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors