Sie sind auf Seite 1von 4

unit UApriori; private

{ Private declarations }
interface public
{ Public declarations }
uses end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, DBTables, ComCtrls, IBDatabase, var
IBCustomDataSet, IBQuery, ExtCtrls; FApriori: TFApriori;
C : integer;
type
TFApriori = class(TForm) implementation
Query: TQuery;
Panel1: TPanel; uses DateUtils;
Panel2: TPanel;
Panel3: TPanel; {$R *.dfm}
Label1: TLabel;
Label2: TLabel; procedure TFApriori.FormShow(Sender: TObject);
EdtMinTransaksi: TEdit; begin
EdtMinConfidence: TEdit; C := 0;
BitBtn1: TBitBtn; Memo1.Clear;
Panel4: TPanel; end;
BitBtn2: TBitBtn; -----------------------------------------------------------------------------------------------------------
Memo1: TMemo; procedure TFApriori.BitBtn2Click(Sender: TObject);
Bevel2: TBevel; begin
Bevel3: TBevel; Close;
Bevel1: TBevel; end;
Label3: TLabel; -----------------------------------------------------------------------------------------------------------
EdtTotalTransaksi: TEdit; procedure TFApriori.Button1Click(Sender: TObject);
Query1: TQuery; var Awal,Akhir,Selisih,Waktu:Double;
Button1: TButton; begin
Edit1: TEdit; Awal := GetTickCount;
Label4: TLabel; Apriori;
procedure FormShow(Sender: TObject); Akhir := GetTickCount;
procedure BitBtn2Click(Sender: TObject); Selisih := Akhir - Awal;
procedure Button1Click(Sender: TObject); Waktu := Selisih / 1000;
procedure apriori; Edit1.Text:= ''+chr(10)+FloatToStr(waktu)+' Detik';
end;
except
procedure TFApriori.apriori; end;
var i,j,k,temp,total_transaksi, min_transaksi : integer;
min_confidence : real; Close;
keluar: boolean; SQL.Text :=
antecedent, konklusi : string; ' INSERT INTO C1 '+
begin ' SELECT KodeBuku, count(NoTrans) '+
min_transaksi := StrToInt(EdtMinTransaksi.text); ' FROM [Pinjam Details] '+
min_confidence := StrToFloat(EdtMinConfidence.Text); ' GROUP BY KodeBuku '+
Memo1.Clear; ' HAVING count(NoTrans) >= ' +
with Query do //SQL : select NoTrans, count(KodeBuku) from [Pinjam Details] group by NoTrans IntToStr(min_transaksi) +
begin ' ORDER BY KodeBuku';
Close; ExecSQL;
SQL.Text := //end of mengambil item yang memenuhi syarat (C1)
' SELECT count(NoTrans) '+
' FROM Pinjam '; //mengambil item yang memenuhi syarat (C2 dst)
Open; while not keluar do
begin
EdtTotalTransaksi.Text := Fields[0].AsString; inc(C);
total_transaksi := Fields[0].AsInteger;
Close;
//mengambil item yang memenuhi syarat (C1) SQL.Text := 'DROP TABLE C' + IntToStr(C);
C := 1; try
Close; ExecSQL;
SQL.Text := 'DROP TABLE C1'; except
try end;
ExecSQL;
except //buat tabel
end; Close;
SQL.Text := ' CREATE TABLE C' + IntToStr(C) + ' ( ';
Close; for i := 1 to C do
SQL.Text := SQL.Add(' ITEM' + IntToStr(i) + ' INTEGER, ');
' CREATE TABLE C1 ( '+ SQL.Add(' JML INTEGER)');
' ITEM1 INTEGER, '+ try
' JML INTEGER)'; ExecSQL;
try except
ExecSQL; end;
//hapus isi tabel yg tidak memenuhi syarat
//isi tabel Close;
Close; SQL.Text := ' DELETE FROM C'+ IntToStr(C) +
SQL.Text := 'INSERT INTO C'+ IntToStr(C) + ' WHERE JML <= '+
' SELECT DISTINCT '; FloatToStr(min_transaksi);
try
for i := 1 to C-1 do ExecSQL;
SQL.Add (' P.ITEM' + IntToStr(i) +', '); except
SQL.Add(' Q.ITEM' + IntToStr(C-1) +', '+ end;
' (SELECT COUNT(O.NOTRANS) '+
' FROM Pinjam O '+ //cek isi tabel
' WHERE (SELECT COUNT (*) FROM [Pinjam Details] D '+ Close;
' WHERE D.KODEBUKU IN ('); SQL.Text := ' SELECT * FROM C'+ IntToStr(C) ;
Open;
for i := 1 to C-1 do
SQL.Add (' P.ITEM' + IntToStr(i) +', '); if IsEmpty then keluar := true;
SQL.Add(' Q.ITEM' + IntToStr(C-1) +') '+ end; //end of while not keluar do
' AND D.NOTRANS= O.NOTRANS) >= '+ IntToStr(C) + ') '+
' FROM C'+ IntToStr(C-1) + ' P, C'+ IntToStr(C-1) + ' Q '+ //end of mengambil item yang memenuhi syarat (C2 dst)
' WHERE Q.ITEM'+ IntToStr(C-1) + ' > P.ITEM' + IntToStr(C-1) );
//Hitung confidence
for i := 2 to C-1 do for i := 2 to C-1 do
SQL.Add(' AND P.ITEM' + IntToStr(i) + ' > P.ITEM' + IntToStr(i-1) ); begin
SQL.Add(' ORDER BY '); Close;
for i := 1 to C-1 do SQL.Text := 'SELECT * FROM C' + IntToStr(i) + ' ORDER BY JML DESC';
SQL.Add (' P.ITEM' + IntToStr(i) +', '); Open;
SQL.Add(' Q.ITEM' + IntToStr(C-1)); while not eof do
try begin
ExecSQL; temp := 0;
except for j := i downto 1 do
end; begin
Query1.Close;
Query1.SQL.Text := ' SELECT JML FROM C' + IntToStr(i-1) + ' WHERE ';
for k := 1 to i-1 do
begin
Query1.SQL.Text := Query1.SQL.Text + ' item' + IntToStr(k) + ' = ' ;
if temp = k then
begin end; //end of with query do
Query1.SQL.Text := Query1.SQL.Text + Fields[temp].AsString + ' and '; end;
temp := temp + 2
end else end.
begin
Query1.SQL.Text := Query1.SQL.Text + Fields[temp].AsString + ' and ';
temp := temp + 1
end
end;
Query1.SQL.Text := copy(Query1.SQL.Text,1, length(Query1.SQL.Text)-7);
Query1.Open;

//jika nilai confidence minimum terpenuhi


if FieldByName('jml').AsInteger*100/
Query1.FieldByName('jml').AsInteger >= min_confidence then
begin
antecedent := 'JIKA meminjam ';
for k := 1 to i do
begin
if k = j then
konklusi := ' MAKA direkomendasikan buku '+ Fields[k-1].AsString +
' dengan SUPPORT '+
FormatFloat('0.00', FieldByName('jml').AsInteger/
total_transaksi*100) + ' %' +
' dan CONFIDENCE '+
FormatFloat('0.00',FieldByName('jml').AsInteger * 100 /
Query1.FieldByName('jml').AsInteger) + ' %'
else if ((j = 1) and (k>2)) or ((j>1) and (k>1)) then
antecedent := antecedent + ', ' + Fields[k-1].AsString
else antecedent := antecedent + Fields[k-1].AsString;
end;
Memo1.Lines.Add(antecedent + konklusi);
end;
end; //end of for j := 1 to i do
Next;
end; //end of while not eof
end;

Das könnte Ihnen auch gefallen