ustify"> Конструктор Tperson.Create - створює екземпляр класу Tperson, що зберігає інформацію з одного запису в базі даних. Аргументи - ім'я злочинця, інформація про злочинця, масив символів, масив дійсних чисел.
constructor TPerson.Create (const Name: String; const Info: String; const з: array of char; const f: array of real) ;: integer; self.PName:=Name; .Plnfo :=info; i:=0 to 35 do beginself.FingerprintCharsp]:=c [i]; end; i:=0 to 11 do self.FingerprintFloatsfi]:=f [i]; end;
Методи для звернення до полів класу Tperson. Fchar (n) - отримати n-тий символ відбитку пальців, Ffloat (n) -n-тое дійсне число. Textlnfo повертає всю інформацію про злочинця у вигляді одного рядка.
function TPerson.FChar (n: integer): char; result:=self.fingerprintChars [n]; end; TPerson.FFIoat (n: integer): real;:=self.fingerprintFloats [n] ;; TPerson.TextlnfoO: string; vari.integer; .string; Ппр:= Ім'я: + Self.PName + # 13 # 10 + Інформація: + Self.Plnfo + # 13 # 10 + Символи: raquo ;; i:=0 to 35 do tmp:=tmp + FingerprintChars [i] + raquo ;;:=tmp + # 13 # 10 + 4Mcna: raquo ;;:=0to 11 do tmp:=tmp + FloatToStr (FingerprintFloats [i]) + raquo ;; result:=tmp + # 13 # 10 ;; end;
Функція ReadPerson зчитує з файлу, доступного через вільну змінну InputFile, одну запис бази даних, створює екземпляр класу Tperson з відповідними параметрами конструктора і повертає його допомогою змінною змінної р. У разі вдалого читання повертається true, інакше - false, function ReadPerson (var p.TPerson):
boolean; name, info: string; з: array [0..35] of char; F: array [0..11] of real ;; if (Eof (lnputFile)) then result:=false else begin readln (lnputFile, name); (lnputFile, info); i:=0 to 35 do begin read ( lnputFile, c [i]) ;; (lnputFile);:=0to 11 do begin read (lnputFile, f [i]) ;; (lnputFile);:=TPerson.Create (name, info, c, f);
result:=true; end ;;
Функція Personcmp порівнює два записи шляхом підсумовування числа співпадаючих символів і дійсних чисел. Процес лінійний.
Personcmp (const p1, p2: TPerson): boolean;, csum, fsum: integer; for i:=0 to 35 do begin if (p1.FChar (i)=p2.FChar (i )) then inc (csum); end;:=0to 11 do begin if (abs (p1 .FFIoat (i) -p2.FFIoat (i" lt;=abs (fmax (p1 .FFIoat (i), p2.FFIoat (i)) * 0.05)) then inc (fsum) ;; if ((csum gt;=35) and (fsum gt;=9)) then result:=true else result:=false;
end;
Оброблювач Tform 1. FormCreate викликається при створенні форми, тобто при запуску програми. Пов'язує глобальну змінну InputFile з файлом на диску, ініціалізує глобальну змінну DataList, що зберігає базу даних, зчитує з файлу кількість записів і за допомогою процедури ReadPerson заповнює список даних. Наприкінці в область виведення виводиться повідомлення про кількість записів в базі.
procedure TForml .FormCreate (Sender: TObject);,n,j:integer;:TPerson;AssignFile(lnputFile,laquo;db.txtraquo;);_ist:=TList.Create;(lnputFile);(lnputFile,n);i:=1 to n do begin if (ReadPerson (tmp)) then DataList.Add (tmp) ;; on ElnOutError do ShowMessage ( ct gt; aun з даними не знайдений. ) ;; CloseFile (lnputFile) ;;. Text:= B базі + lntToStr (DataList.Count) + записів. end;
Обробник події Tforml.SearchButtonClick викликається, коли користувач, заповнивши поля введення, натискає кнопку Пошук raquo ;. Процедура спочатку створює масив FloatEdits для того, щоб можна було в циклі звертатися до всіх 12 полях введення перевіряє, чи заповнені всі поля, і якщо все введено вірно, створює екземпляр класу TPErson - sample, ініціалізує його значеннями, введеними користувачем і запускає лінійний пошук по базі. Знайдені збіги включаються до списку Results. Якщо до кінця роботи циклу список порожній, в область виведення виводиться повідомлення про це. Інакше, в область виведення виводиться весь список знайдених збігів.
procedure TForm1.SearchButtonClick (Sender: TObject);
varkinteger;: TList;, tmp: TPerson;: array [0..35] of char;: array [0..11] of real ;: array [1..12] of TEdit ;: boolean;: string; begin FloatEdits [1]:=f1; FloatEdits [2]:=f2; FloatEdits [3]:=f3; FloatEdits [4]: ??= f4; [5]:=f5; FloatEdits [6]:=f6; FloatEdits [7]:=f7; FloatEdits [8]:=f8; [9]:=f9; FloatEdits [10]:=f10; FloatEdits [11]:=f11; FloatEdits [12]:=f12; BadFloatEdits:=false; for i:=1 to 12 do if (floatEdits [i] .Text=) then BadFloatEdits:=true; (BadFloatEdits) then ShowMessage ( He введено одне з чисел. ) eise begin tryi:=1 to 12 do f [i - 1]:=StrToFloat (FloatEdits [i] .Text); on EConvertError do BadFloatEdits:=true; end;:=SymbolsEdit.Text; (BadFloatEdits or (length (UnneededString) lt; gt; 36)) the...