Информационная поддержка планирования и учета учебной работы по балльно-рейтинговой системе, страница 17

При создании новой записи в реестре ей необходимо присвоить уникальный ключ. Для этого разработана специальная процедура вычисления ключа новой записи virtual int GetFirstFreeKey(). Она сделана виртуальной, так как кодирование ключей объектов-наследников может выполняться по другим правилам; в базовом классе функция возвращает первое свободное число из арифметической прогрессии, определяемой полями MinRecKey, MaxRecKey и StepRecKey.

Для добавления записи в список предусмотрена функция TBasicFixedRecord* Add, параметром которой является указатель на добавляемую запись. Для удаления записи по заданному порядковому номеру в списке служит функция int DeleteForPos(int). При этом используется функция поиска записи по заданному порядковому номеру TBasicFixedRecord* FindForPos(int). Запись с заданным ключом можно удалиь используя int DeleteForKey(int).

Запись, содержащая в своем поле Id заданный текст, может быть найдена с помощью функции TBasicFixedRecord* FindForID(AnsiString). Аналогично, с помощью функции int DeleteForID(AnsiString) можно удалить запись, содержащую заданный текст в поле Id.

При загрузке базы данных все строки реестра загружаются в память компьютера с помощью процедуры virtual int Load(). Если в процессе работы в реестр были внесены изменения, то данные сохраняются в файл с помощью процедуры virtual int Unload(). Обе процедуры работы с файлом объявлены как виртуальные в расчете на классы-потомки.

Для получения данных из других экземпляров баз данных разработана процедура синхронизации двух реестров, которая добавляет в реестр недостающие записи и обновляет старые: int SynchAddingFrom(TBasicRegister*). Параметром этой процедуры является адрес реестра, загруженного из другой базы данных.

Те реестры, которые не содержат связей с другими информационными таблицами, могут состоять из записей класса, производного от TbasicFixedRecord. Это, например, реестр дисциплин, в котором только устанавливается соответствие между кодом (ключом) дисциплины, её названием и атрибутивной информацией.

Коротко опишем основные классы, производные от базового класса записи.

В записи базового типа не предусмотрено поле для хранения ключей записей из других реестров. Эта возможность реализована в классе TbasicRecordWithKeyArray, производном от TbasicFixedRecord. В этом классе специально добавлены поля данных: число ключей в массиве и массив ключей. Предусмотрены функции для работы с этими полями записи. Те классы записей, поля которых содержат массивы ключей записей из других реестров, являются потомками класса TbasicRecordWithKeyArray. Это записи реестров пользователей, преподавателей, студентов и групп.

В случае, когда запись одного реестра должна содержать не только ключи, но и символьные обозначения записей другого реестра, она может быть произведена от класса TBasicRecordWithKeyAndIdArray. Такая необходимость возникает, например, в реестре учебных поручений, в который необходимо вносить обозначения академических групп и подгрупп при планировании, когда ключи групп нового набора ещё не определены. Запись такого класса содержит, наряду с целочисленным массивом ключей связанных записей, ещё и строковый массив обозначений.

Отметим, что в реестрах, непосредственно произведенных от базового класса TBasicRegister, процедуры загрузки размещают в основной памяти компьютера всю информационную таблицу из файла. Это позволяет использовать их для хранения таблиц относительно небольшого размера. Для хранения больших объемов данных, которые не должны одновременно размещаться в памяти, разработан класс индексированного реестра TBasicIndexed, позволяющий загружать в память по одной записи из многофайловой таблицы. Все файлы такого реестра имеют одно и то же имя и различаются расширением имени: например, файлы SemestrMaps.ar.1 и SemestrMaps.ar.2 – это два последовательно заполненных файла одного и того же реестра модульных карт дисциплин кафедры. В таком реестре могут храниться разные по времени создания версии одного и того же документа, имеющие одинаковые ключи. При удалении устаревших документов производится сжатие многофайлового реестра.