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

virtual void Clear();// освобождение всей динамической памяти

// Процедуры работы с записями

virtual int GetFirstFreeKey();

virtual TBasicFixedRecord* CreateNewRec(); //созданиепустойзаписи

TBasicFixedRecord* Add(TBasicFixedRecord* );

TBasicFixedRecord* FindForPos(int);//поиск записи по номеру

int DeleteForPos(int);   // удаление записи по номеру

TBasicFixedRecord* FindForKey(int);//поискзаписипоключу

int DeleteForKey(int);   // удаление записи, заданной по ключу

TBasicFixedRecord* FindForID(AnsiString);//поискпообозначению

int DeleteForID(AnsiString);/ удаление записи по обозначению

// Процедуры работы с файлом

virtual int Unload();

virtual int Load();

// Процедура синхронизации

int SynchAddingFrom(TBasicRegister*); // добавление недостающих

//записей и обновление ранних

};

Записи реестра хранятся виде файла на диске компьютера. При запуске программы происходит загрузка данных из файла в память объекта (экземпляра класса, производного от TBasicRegister). Имя файла реестра содержится в текстовом поле AnsiString Filename. Доступ к этому полю осуществляется с помощью функции AnsiString GetFileName(). Имя файла задается при создании экземпляра класса и изменению не подлежит.

Данные, загруженные из реестра в память, могут претерпевать в процессе редактирования изменения. Для отслеживания появления новой информации, которую нужно сохранить в файл, предусмотрен бинарный флаг bool ismodify. Если произошли изменения хотя бы в одной из записей реестра, то этот флаг автоматически устанавливается в true, что приведет к сообщению о необходимости сохранения данных реестра при выходе из программы “Электронный журнал”. Значение этого флага можно узнать, используя процедуру bool GetModify(). Явное изменение флага в реестре осуществляется с помощью функции void SetModify(), которая устанавливает значение флага в true.

Для навигации по записям используется переменная TBasicFixedRecord* first. После загрузки реестра из файла эта переменная хранит адрес на первую из списка записей реестра. С помощью процедуры  TBasicFixedRecord* GetFirst() можно получить адрес первой записи реестра.

При заполнении списка записей реестра переменные int MinRecKey, MaxRecKey, StepRecKey используются для построения последовательности ключей. Переменная  MinRecKey содержит минимальное допустимое значение ключа записи, переменная MaxRecKey – максимальное значение ключа, переменная StepRecKey – шаг изменения ключа. Эти значения устанавливаются в соответствии с соглашением о кодировании ключей, что гарантирует уникальность ключа при добавлении новой записи.

Для освобождения памяти списка предусмотрена функция int BasicClear().

Для доступа к полям флага модификации, имени файла и адреса первой записи в списке предусмотрены свойства: bool isModify, AnsiString FileName и TBasicFixedRecord* First, объявленные в открытой секции интерфейса класса.

Создание пустого реестра производится вызовом конструктора TBasicRegister(AnsiString). Аргументом конструктора является имя файла реестра. Виртуальный деструктор вызывает функцию освобождения памяти списка BasicClear().

Для работы со списком записей предусмотрены следующие процедуры.

Процедура int Count() возвращает число записей в реестре.

Процедура int CalcIdCount(AnsiString) производит подсчет числа записей, значение поля Id которых равно заданной в параметре строки.

Функция int DeleteUnregRecs() удаляет из реестра записи, у которых флаг регистрации registered установлен в значение false.

Функция int SortForDecKey() упорядочивает записи в загруженном реестре по убыванию ключей.

Функция virtual void Clear() используется для освобождения всей динамической памяти объекта перед его уничтожением. Функция задана виртуальной, так как у объектов-наследников освобождение памяти будет выполняться иначе.

Для создания новой пустой записи в реестре предусмотрена функция virtual TBasicFixedRecord* CreateNewRec(). Она создает новый экземпляр записи с полями, заполненными по умолчанию, и возвращает его адрес. Эта функция должна перекрываться в потомках класса, поскольку она должна создавать запись нужного типа, соответствующего типу реестра.