Урок 62 - Методы, наследование классов, операции с классами Delphi, (часть 4/6)
В предыдущих уроках мы уже создали ряд методов: чтения и записи свойств, конструктор, деструктор. Поскольку вы уже освоились с методами, давайте создадим еще два метода: SaveToFile и LoadFromFile, позволяющих сохранять сведения о личности в файле и читать их из файла.
Без подобных методов наш класс явно неполноценный. Введите в класс объявления открытых методов:
procedure SaveToFile(FileName: string = ''); procedure LoadFromFile(FileName: string);Первый метод содержит значение параметра по умолчанию. Предполагается, что если при вызове метода параметр не задан, то имя файла бу-.дет совпадать с именем личности, записанным в поле FName. Реализация объявленных методов может быть такой:
procedure TPerson.SaveToFile(FileName: string = ''); var F: TextFile; begin if FileName = '' then FileName := FName + '.txt' else FileName := ChangeFileExt (FileName, '.txt'); AssignFile(F, FileName); Rewrite(F); Writeln(F, FName); Writeln(F, FDepl) ; Writeln(F, FDep2) ; Writeln(F, FDep3); Writeln(F, IntToStr(FYear)) ; . Writeln(F, FSex); if FAttr then Writeln(F, 't') else Writeln(F, 'f') ; Writeln(F, FComment); CloseFile(F); if FDoc <> nil then FDoc^.Lines.SaveToFile(ChangeFileExt(FileName, '.rtf')); end; procedure TPerson.LoadFromFile(FileName: string); var F: TextFile; s: string; begin FileName := ChangeFileExt(FileName, '.txt'); AssignFile(F, FileName); Reset(F); Readln(F, FName); Readln(F, FDepl); Readln(F, FDep2); Readln(F, FDep3); Readln(F, s) ; FYear := StrToInt(s); Readln(F, FSex); Readln(F, s) ; FAttr := (s = ' t' ) ; Readln(F, FComment); CloseFile(F); if (FDoc <> nil) and FileExists(ChangeFileExt(FileName, '.rtf)) then begin FDoc^.Lines.LoadFromFile(ChangeFileExt(FileName, '.rtf')); FDoc^.Lines.SaveToFile(FileTMP); end; end;
Вы уже достаточно опытны, чтобы подобный код можно было не комментировать. Отмечу только, что в этом коде хранение данных полей предусмотрено в текстовом файле. Это не лучший вариант, но наиболее простой. Одним из недостатков такого хранения является то, что файлы доступны возможным злоумышленникам, которые могут прочитать их, получить доступ к конфиденциальным данным, а могут и изменить характеристику. Правда, все это они смогут сделать и с помощью вашего тестового приложения. Но приложение можно защитить паролем. А текстовый файл ничем не защитишь.
Так что может иметь смысл хотя бы зашифровать его в процедуре SaveToFile и дешифровать в процедуре LoadFromFile.
Вызов метода SaveToFile в вашем тестовом приложении может быть оформлен оператором:
Pers.SaveToFile;
ИЛИ
if SaveDialogl.Execute then Pers.SaveToFile(SaveDialogl.FileName);
В первом случае имя файла будет совпадать с именем личности. Во втором пользователь может указать в стандартном диалоге имя файла. В любом случае, вероятно, перед сохранением полезно вызвать обработчик щелчка на кнопке Запись, чтобы в объекте запомнились значения соответствующих окон редактирования.
Вызов метода LoadFromFile в вашем тестовом приложении может быть оформлен оператором:
if OpenDialogl.Execute
then Pers.LoadFromFile(OpenDialogl.FileName);
После него, вероятно, полезно вызвать обработчик щелчка на кнопке Чтение, чтобы прочитанные данные немедленно отобразились в окнах редактирования.
Все открытые и защищенные свойства и методы наследуются в классах, для которых данный класс является родительским.
Продолжение в следующем уроке.
Удачи!
Встретимся в следующем уроке!