Урок 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);

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

Продолжение в следующем уроке.

Удачи!
Встретимся в следующем уроке!



  1. LarryDiory
    LarryDiory 3 months ago
    Meds information sheet. Drug Class.
    <a href="https://coronav1rus.ru">buy zofran tablets</a>
    Some information about drug. Get information now.
  2. DaDorb
    DaDorb 2 months ago
    Drug information for patients. Brand names.
    <a href="https://buspar4u.top">online buspar</a> in the USA
    Actual news about drug. Read here.
Отменить.