Загрузка данных


Для твоей работы я бы написал 2.1 так, чтобы преподаватель вообще не смог сказать, что “описания информационного хранилища нет”.

⸻

2.1 Описание информационного хранилища

Информационное хранилище программного средства реализовано в виде бинарного файла, предназначенного для долговременного хранения сведений о научной работе студентов Университета. Использование бинарного формата позволяет хранить числовые данные во внутреннем представлении, уменьшить объем хранимой информации и исключить необходимость преобразования текстовых строк в числовые значения при загрузке базы данных.

Логическая модель предметной области представлена объектами классов Student, Supervisor, ResearchWork и Record. Для записи данных в файл используется отдельная структура фиксированной длины PackedRecord. Такое решение позволяет отделить объектную модель программы от способа физического хранения информации.

Каждая запись информационного хранилища содержит следующие сведения:

* уникальный идентификатор записи;
* признак логического удаления;
* сведения о студенте;
* сведения о научном руководителе;
* сведения о научной работе;
* контрольную сумму записи.

Для хранения строковых данных используются символьные массивы фиксированной длины. Такой подход обеспечивает одинаковый размер каждой записи и позволяет выполнять прямой доступ к элементам файла по смещению.

При сохранении данных объект Record преобразуется в структуру PackedRecord и записывается в бинарный файл. При чтении выполняется обратное преобразование структуры PackedRecord в объектную модель программы.

С целью контроля целостности информации каждая запись содержит контрольную сумму. При открытии базы данных выполняется проверка контрольной суммы каждой записи. В случае обнаружения повреждения данных загрузка базы прекращается и пользователю выводится сообщение об ошибке.

Удаление записей реализовано методом логического удаления. При выполнении операции запись не удаляется физически из файла, а получает специальный признак deleted. Такой подход позволяет сохранить структуру информационного хранилища и избежать перераспределения данных внутри файла.

В оперативной памяти записи хранятся в контейнере std::vector. Для ускорения информационного поиска дополнительно формируются индексы на основе контейнера std::unordered_map. Индексы автоматически перестраиваются после добавления, изменения или логического удаления записей.

Для защиты информации бинарное хранилище сохраняется на диске только в зашифрованном виде. После завершения работы программы открытый файл базы данных автоматически шифруется алгоритмом AES-256-CBC. Пароль шифрования дополнительно защищается алгоритмом RSA и сохраняется в отдельном файле. В результате после штатного завершения работы на диске отсутствуют открытые версии базы данных и временные файлы.

На рисунке 2.1 представлена структура информационного хранилища.

⸻

И после этого вставляешь рисунок со структурой PackedRecord или скрин структуры из кода. Тогда раздел будет выглядеть полностью завершённым и соответствующим пункту консультации «Описание информационного хранилища (бинарный файл)».