Комплекс интеллектуального анализа данных

Разработка комплекса интеллектуального анализа данных, получаемых в процессе работы коммерческого предприятия розничной торговли. Исследование стационарности ассоциаций, выявление частоты появления ассоциаций. Скрипты для создания баз данных и таблиц.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.08.2013
Размер файла 706,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

data2 = Series1->XLabel[ValueIndex].SubString(len-9,10);

len = Series2->XLabel[ValueIndex].Length();

p = Series2->XLabel[ValueIndex].AnsiPos(";");

articul = Series2->XLabel[ValueIndex].SubString(p-7,6);

location = Series2->XLabel[ValueIndex].SubString(p+1,len-p);}

//---------------------------------------------------------------------------

void __fastcall TForm2::Series2Click(TChartSeries *Sender, int ValueIndex,

TMouseButton Button, TShiftState Shift, int X, int Y)

{int len,p;

len = Series1->XLabel[ValueIndex].Length();

articul = Series1->XLabel[ValueIndex].SubString(len-28,6);

data1 = Series1->XLabel[ValueIndex].SubString(len-20,10);

data2 = Series1->XLabel[ValueIndex].SubString(len-9,10);

len = Series2->XLabel[ValueIndex].Length();

p = Series2->XLabel[ValueIndex].AnsiPos(";");

Label10->Caption = Series2->XLabel[ValueIndex].SubString(p-7,6);

location = Series2->XLabel[ValueIndex].SubString(p+1,len-p);}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button5Click(TObject *Sender)

{if(Label10->Caption.IsEmpty()) { Application->MessageBox("Выберите артикул!","Не выбраны данные.",MB_OK); }

else { AnsiString Query;

int A;

double AB;

Query = "SELECT SUM(SALESCOUNT) "

"FROM ASSOTIATIONS_2D "

"WHERE ((ARTICLE1=\'"+Label10->Caption+"\' AND ARTICLE2=\'"+articul+"\') "

"OR (ARTICLE2=\'"+Label10->Caption+"\' AND ARTICLE1=\'"+articul+"\')) "

"AND LOCID="+location+" "

"AND SALESDATE BETWEEN \'"+data1+"\' AND \'"+data2+"\'";

pFIBDatabase2->Open();

AB = pFIBDatabase2->QueryValue(Query,0);

OracleSession1->Connected = true;

OracleQuery1->SQL->Text = "SELECT COUNT(SUPERMAG.SMCASHCHECKS.CHECKNUM) "

"FROM SUPERMAG.SMCASHCHECKS,SUPERMAG.SMCASHCHECKITEMS "

"WHERE SUPERMAG.SMCASHCHECKITEMS.ARTICLE=\'"+Label10->Caption+"\' "

"AND SUPERMAG.SMCASHCHECKITEMS.LOCID="+location+" "

"AND SUPERMAG.SMCASHCHECKITEMS.CHECKNUM=SUPERMAG.SMCASHCHECKS.CHECKNUM "

"AND SUPERMAG.SMCASHCHECKITEMS.ZNUM=SUPERMAG.SMCASHCHECKS.ZNUM "

"AND SUPERMAG.SMCASHCHECKITEMS.DESKNUM=SUPERMAG.SMCASHCHECKS.DESKNUM "

"AND SUPERMAG.SMCASHCHECKS.PRINTTIME >= \'"+data1+"\' "

"AND SUPERMAG.SMCASHCHECKS.PRINTTIME <= \'"+data2+"\' ";

OracleQuery1->Execute();

A = OracleQuery1->FieldAsInteger(0);

Edit6->Text = FloatToStr(((A-AB)/A)*100);

OracleSession1->Connected = false;

pFIBDatabase2->Close(); }}

//---------------------------------------------------------------------------

void __fastcall TForm2::Edit4KeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{ if(Key == VK_RETURN){ if(TabbedNotebook1->PageIndex)Button3->OnClick(NULL);

else Button1->OnClick(NULL); }

//---------------------------------------------------------------------------

Заголовочный файл модуля обработки “Unit1.h”

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include "FIBDatabase.hpp"

#include "FIBDataSet.hpp"

#include "pFIBDatabase.hpp"

#include "pFIBDataSet.hpp"

#include <DB.hpp>

#include <ComCtrls.hpp>

#include "CGAUGES.h"

#include "Oracle.hpp"

#include "OracleData.hpp"

#include "FIBQuery.hpp"

#include "pFIBQuery.hpp"

#include "WORK.H"

//---------------------------------------------------------------------------

class TForm1: public TForm

{__published: // IDE-managed Components

TpFIBDatabase *pFIBDatabase1;

TpFIBDataSet *pFIBDataSet1;

TpFIBTransaction *pFIBTransaction1;

TpFIBTransaction *pFIBTransaction2;

TpFIBDatabase *pFIBDatabase2;

TGroupBox *GroupBox1;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TRadioButton *RadioButton3;

TComboBox *ComboBox1;

TEdit *Edit1;

TUpDown *UpDown1;

TDateTimePicker *DateTimePicker1;

TDateTimePicker *DateTimePicker2;

TLabel *Label1;

TLabel *Label2;

TButton *Button1;

TCGauge *CGauge1;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TLabel *Label6;

TOracleQuery *OracleQuery1;

TButton *Button2;

TOracleSession *OracleSession1;

TpFIBQuery *pFIBQuery1;

TpFIBDataSet *pFIBDataSet2;

void __fastcall RadioButton1Click(TObject *Sender);

void __fastcall RadioButton2Click(TObject *Sender);

void __fastcall RadioButton3Click(TObject *Sender);

void __fastcall ComboBox1Change(TObject *Sender);

void __fastcall DateTimePicker1Change(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

private: // User declarations

public: // User declarations

AnsiString str;

TDateTime D1,D2;

__fastcall TForm1(TComponent* Owner);};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Файл реализации модуля обработки “ Unit1.cpp”

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

WORK *Obr;

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "FIBDatabase"

#pragma link "FIBDataSet"

#pragma link "pFIBDatabase"

#pragma link "pFIBDataSet"

#pragma link "CGAUGES"

#pragma link "Oracle"

#pragma link "OracleData"

#pragma link "FIBQuery"

#pragma link "pFIBQuery"

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ Obr = NULL;}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{ComboBox1->Enabled = RadioButton1->Checked;

Edit1->Enabled = RadioButton1->Checked;

UpDown1->Enabled = RadioButton1->Checked;

DateTimePicker1->Enabled = RadioButton2->Checked;

DateTimePicker2->Enabled = RadioButton2->Checked;}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{ComboBox1->Enabled = RadioButton1->Checked;

Edit1->Enabled = RadioButton1->Checked;

UpDown1->Enabled = RadioButton1->Checked;

DateTimePicker1->Enabled = RadioButton2->Checked;

DateTimePicker2->Enabled = RadioButton2->Checked;

DateTimePicker1->OnChange(NULL);}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{ComboBox1->Enabled = false;

Edit1->Enabled = false;

UpDown1->Enabled = false;

DateTimePicker1->Enabled = false;

DateTimePicker2->Enabled = false;

str="SELECT SUM(SALESCOUNT),ARTICLE1,ARTICLE2,LOCID "

"FROM ASSOTIATIONS_2D "

"GROUP BY ARTICLE1,ARTICLE2,LOCID "

"ORDER BY ARTICLE1,ARTICLE2";}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1Change(TObject *Sender)

{switch(ComboBox1->ItemIndex)

{case 0:{ D1 = EncodeDate(StrToInt(Edit1->Text),3,1);

D2 = EncodeDate(StrToInt(Edit1->Text),5,31);

break;}

case 1: {D1 = EncodeDate(StrToInt(Edit1->Text),6,1);

D2 = EncodeDate(StrToInt(Edit1->Text),8,31);

break; }

case 2: {D1 = EncodeDate(StrToInt(Edit1->Text),9,01);

D2 = EncodeDate(StrToInt(Edit1->Text),11,30);

break; }

case 3: {D1 = EncodeDate(StrToInt(Edit1->Text)-1,12,01);

D2 = EncodeDate(StrToInt(Edit1->Text),2,29);

//break; }}

str="SELECT SUM(SALESCOUNT),ARTICLE1,ARTICLE2,LOCID "

"FROM ASSOTIATIONS_2D "

"WHERE SALESDATE>='"+D1.DateString()+"' "

"AND SALESDATE<='"+D2.DateString()+"' "

"GROUP BY ARTICLE1,ARTICLE2,LOCID "

"ORDER BY ARTICLE1,ARTICLE2";}

//---------------------------------------------------------------------------

void __fastcall TForm1::DateTimePicker1Change(TObject *Sender)

{D1 = DateTimePicker1->Date;

D2 = DateTimePicker2->Date;

str="SELECT SUM(SALESCOUNT),ARTICLE1,ARTICLE2,LOCID "

"FROM ASSOTIATIONS_2D "

"WHERE SALESDATE>='"+DateTimePicker1->Date.DateString()+"' "

"AND SALESDATE<='"+DateTimePicker2->Date.DateString()+"' "

"GROUP BY ARTICLE1,ARTICLE2,LOCID "

"ORDER BY ARTICLE1,ARTICLE2";}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{if(Button1->Caption == "Обработка")

{if(Obr!=NULL)return;

Button1->Caption = "Отмена";

Obr = new WORK(true);

Obr->FreeOnTerminate = true;

Obr->Resume();}

else {if(Obr==NULL)return;

Button1->Caption = "Обработка";

Obr->Terminate();}}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{int count1;

if(Application->MessageBox("Все записи из таблицы будут удалены!\nВы уверены?","Подтверждение.",MB_OKCANCEL) == 1)

{pFIBDatabase2->Open();

pFIBDataSet2->Active = true;

count1 = pFIBDataSet2->RecordCountFromSrv();

CGauge1->MaxValue = count1;

Label6->Caption =IntToStr(count1);

pFIBDataSet2->First();

pFIBTransaction2->StartTransaction();

while(!pFIBDataSet2->Eof)

{pFIBDataSet2->Delete();

CGauge1->Progress++;

Label4->Caption = IntToStr(CGauge1->Progress);}

Application->MessageBox("Все записи удалены.","Удаление.",MB_OK);

pFIBDatabase2->Execute("SET GENERATOR TEST_G TO 0;");

pFIBTransaction2->Commit();

pFIBDataSet2->Active = false;

pFIBDatabase2->Close();

CGauge1->Progress = 0;

Label4->Caption = "";

Label6->Caption = ""; }}

//---------------------------------------------------------------------------

Файл класса получения количества продаж товаров “ salescount.h ”:

#ifndef SCH

#define SCH

//---------------------------------------------------------------------------

struct sc{

char ar[8];

int count;};

//---------------------------------------------------------------------------

class salescount

{public:

salescount(TOracleQuery*);

~salescount();

void SetDates(const TDateTime, const TDateTime);

void GetCount(const char*, const int,int*,int*);

private:

TList **List;

int *ind,*cheks;//cheks - общее кол-во чеков при заданном Locid

int num;

TDateTime *FirstD, *LastD;

TOracleQuery *Query;

void AddNewCounts(const int);};

//---------------------------------------------------------------------------

salescount::salescount(TOracleQuery *Q)

{Query = Q;

num = 0;

List = NULL;

ind = NULL;

cheks = NULL;

FirstD = new TDateTime;

LastD = new TDateTime;

Query->Session->Connected = true;}

//---------------------------------------------------------------------------

salescount::~salescount()

{int i,j;

for(j = 0;j < num;j++)

{for(i = 0;i < List[j]->Count;i++) delete (sc *)List[j]->Items[i];

delete List[j]; }

if(List)delete[] List;

if(ind)delete[] ind;

delete FirstD;

delete LastD;

Query->Session->Connected = false;}

//---------------------------------------------------------------------------

void salescount::SetDates(const TDateTime D1, const TDateTime D2)

{*FirstD = D1;

*LastD = D2;

(*FirstD)-=1;

(*LastD)+=1;}

//---------------------------------------------------------------------------

void salescount::GetCount(const char *Art, const int Loc,int *SC,int *nSC)

{int i,index=-1;

for(i = 0;i <num; i++)

if(ind[i]==Loc) {index = i;break;}

if(index == -1) {AddNewCounts(Loc);

index = num-1; }

if(List[index]->Count)

{ sc *cnt;

for(int j = 0;j < List[index]->Count;j++)

{cnt = (sc *)List[index]->Items[j];

if(StrComp(cnt->ar,Art)==0)

{*SC = cnt->count;

*nSC = cheks[index]-cnt->count;

return;} }}

*SC = 0;

*nSC = 0;}

//---------------------------------------------------------------------------

void salescount::AddNewCounts(const int Loc)

{sc *cnt;

TList **buft;

int *bufi,*bufc;

int i;

num++;

buft = new TList*[num];

for(i = 0;i < num-1;i++) buft[i] = List[i];

if(List)delete[] List;

List = buft;

List[num-1] = new TList;

bufi = new int[num-1];

bufc = new int[num-1];

for(i = 0;i < num-1;i++) {bufi[i] = ind[i];bufc[i] = cheks[i];}

if(ind)delete[] ind;

if(cheks)delete[] cheks;

ind = bufi;

cheks = bufc;

ind[num-1] = Loc;

cheks[num-1] = 0;

Query->Close();

Query->SQL->Text = "SELECT COUNT(CH.CHECKNUM) "

"FROM SUPERMAG.SMCASHCHECKS CH "

"WHERE CH.PRINTTIME >= \'"+FirstD->DateString()+"\' "

"AND CH.PRINTTIME <= \'"+LastD->DateString()+"\' "

"AND CH.LOCID=\'"+IntToStr(Loc)+"\' ";

Query->Execute();

cheks[num-1] = Query->FieldAsInteger(0);

Query->Close();

Query->SQL->Text = "SELECT CHI.ARTICLE,COUNT(CH.CHECKNUM) "

"FROM SUPERMAG.SMCASHCHECKS CH,SUPERMAG.SMCASHCHECKITEMS CHI "

"WHERE CHI.LOCID=\'"+IntToStr(Loc)+"\' "

"AND CHI.CHECKNUM=CH.CHECKNUM "

"AND CHI.ZNUM=CH.ZNUM "

"AND CHI.DESKNUM=CH.DESKNUM "

"AND CH.PRINTTIME >= \'"+FirstD->DateString()+"\' "

"AND CH.PRINTTIME <= \'"+LastD->DateString()+"\' "

"GROUP BY CHI.ARTICLE "

"ORDER BY CHI.ARTICLE";

Query->Execute();

while(!Query->Eof)

{cnt = new sc;

StrCopy(cnt->ar,Query->FieldAsString(0).c_str());

cnt->count = Query->FieldAsInteger(1);

if(List[num-1]->Count == List[num-1]->Capacity) List[num-1]->Expand();

List[num-1]->Add(cnt);

Query->Next();}}

//---------------------------------------------------------------------------

#endif

Заголовочный файл потока обработки “WORK.h”

//---------------------------------------------------------------------------

#ifndef WORKH

#define WORKH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include "Unit1.h"

#include "salescount.h"

//---------------------------------------------------------------------------

class WORK: public TThread

{private:

int locid,count1,count2,AB,A,B,nA,nB;

char ar1[8], ar2[8];

double a,b,anb,bna;

int snc;

void __fastcall Sync();

protected:

void __fastcall Execute();

public:

__fastcall WORK(bool CreateSuspended);};

//---------------------------------------------------------------------------

#endif

Файл реализации потока обработки “ WORK.cpp”:

#include <vcl.h>

#pragma hdrstop

#include "WORK.h"

#pragma package(smart_init)

//---------------------------------------------------------------------------

__fastcall WORK::WORK(bool CreateSuspended)

: TThread(CreateSuspended)

{}

void __fastcall WORK::Sync()

{ switch(snc) {

case 0:{Form1->CGauge1->MaxValue = count2;

Form1->Label4->Caption = IntToStr(count1);

Form1->Label6->Caption = IntToStr(count2);

break;}

case 1:{Form1->Label4->Caption = IntToStr(count1);

Form1->CGauge1->Progress = count1;

break;}

case 2:{Application->MessageBox("Обработка завершена.","Завершение.",MB_OK);

Form1->Label4->Caption = "";

Form1->Label6->Caption = "";

Form1->CGauge1->Progress = 0;

break;} }}

//---------------------------------------------------------------------------

void __fastcall WORK::Execute()

{ /*AB - количество продаж ассоциаций за выбранный период

A - кол-во фактов продаж товара А

В - кол-во фактов продаж товара В

count1 - кол-во обработанных записей

count2 - общее кол-во записей

ar1 - артикул1

ar2 - артикул2

D1 - начальная дата

D2 - конечная дата

а - отношение кол-ва совместных продаж к кол-ву продаж товара А

b - отношение кол-ва совместных продаж к кол-ву продаж товара B */

Form1->pFIBDataSet1->Active = false;

Form1->pFIBDataSet1->SQLs->SelectSQL->Clear();

Form1->pFIBDataSet1->SQLs->SelectSQL->Add(Form1->str);

Form1->pFIBDatabase1->Open();

Form1->pFIBDataSet1->Active = true;

Form1->pFIBDatabase2->Open();

if(Form1->RadioButton3->Checked)

{Form1->D1 = VarToDateTime(Form1->pFIBDatabase1->QueryValue("SELECT MIN(SALESDATE) FROM ASSOTIATIONS_2D",0));

Form1->D2 = VarToDateTime(Form1->pFIBDatabase1->QueryValue("SELECT MAX(SALESDATE) FROM ASSOTIATIONS_2D",0));}

salescount ArtCount(Form1->OracleQuery1);

ArtCount.SetDates(Form1->D1, Form1->D2);

count2 = Form1->pFIBDataSet1->RecordCountFromSrv();

count1 = 0;

snc = 0;

Synchronize(Sync);

Form1->pFIBDataSet1->First();

while(!Form1->pFIBDataSet1->Eof&&!Terminated)

{ Form1->pFIBTransaction2->StartTransaction();

AB = Form1->pFIBDataSet1->RecordFieldValue(Form1->pFIBDataSet1->FieldByFieldNo(1),count1+1);

Form1->pFIBDataSet1->GetFieldData(2,ar1);

Form1->pFIBDataSet1->GetFieldData(3,ar2);

Form1->pFIBDataSet1->GetFieldData(4,&locid);

ArtCount.GetCount(ar1,locid,&A,&nA);

ArtCount.GetCount(ar2,locid,&B,&nB);

anb = A - AB;//Определение кол-ва чеков A*~B

bna = B - AB;

if(A&&B){ a = (double(AB)/A)*100;

b = (double(AB)/B)*100;

anb = anb/nB;

bna = bna/nA; }

else { a = 777;

b = 777; }

Form1->pFIBQuery1->ParamByName("ARTICLE1")->AsString = ar1;

Form1->pFIBQuery1->ParamByName("ARTICLE2")->AsString = ar2;

Form1->pFIBQuery1->ParamByName("LOCID")->AsInteger = locid;

Form1->pFIBQuery1->ParamByName("FIRSTDATE")->AsDateTime = Form1->D1;

Form1->pFIBQuery1->ParamByName("LASTDATE")->AsDateTime = Form1->D2;

Form1->pFIBQuery1->ParamByName("P5")->AsFloat = anb;

Form1->pFIBQuery1->ParamByName("P6")->AsFloat = bna;

Form1->pFIBQuery1->ParamByName("P2")->AsFloat = a;

Form1->pFIBQuery1->ParamByName("P3")->AsFloat = b;

if(a>b) Form1->pFIBQuery1->ParamByName("P4")->AsFloat = a;

else Form1->pFIBQuery1->ParamByName("P4")->AsFloat = b;

Form1->pFIBQuery1->ExecQuery();

Form1->pFIBTransaction2->CommitRetaining();

Form1->pFIBDataSet1->Next();

count1++;

snc = 1;

Synchronize(Sync); }

snc = 2;

Synchronize(Sync);

Form1->pFIBDataSet1->Active = false;

Form1->pFIBDatabase1->Close();

Form1->pFIBDatabase2->Close();}

//---------------------------------------------------------------------------

Приложение Г

Скрипт для создания таблицы задачи 3

SET SQL DIALECT 3;

/*Используется готовыя база данных с добавлением новой таблицы*/

connect "C:\TEST.GDB"

USER "SYSDBA" PASSWORD "masterkey";

CREATE TABLE Prob

(ID INTEGER NOT NULL,

ARTICLE1 CHAR(8) NOT NULL,

ARTICLE2 CHAR(8) NOT NULL,

LOCID INTEGER NOT NULL,

FIRSTDATE TIMESTAMP NOT NULL,

LASTDATE TIMESTAMP NOT NULL,

M FLOAT,

D FLOAT,

SKO FLOAT,

MSKO FLOAT,

S FLOAT ,

CONSTRAINT PK_2 PRIMARY KEY(ID));

COMMIT;

CREATE GENERATOR Prob_G;

COMMIT;

SET TERM ^;

CREATE TRIGGER Prob_T FOR Prob

ACTIVE BEFORE INSERT POSITION 0

AS BEGIN

IF(NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(Prob_G,1);

END^

SET TERM;^

COMMIT;

Приложение Д

Листинг программы задачи 3

Заголовочный файл модуля обработки “Obrabotka.h ”:

#ifndef ObrabotkaH

#define ObrabotkaH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ComCtrls.hpp>

#include "FIBDatabase.hpp"

#include "FIBDataSet.hpp"

#include "pFIBDatabase.hpp"

#include "pFIBDataSet.hpp"

#include <DateUtils.hpp>

#include "WORK.h"

#include "WORK_S2.h"

#include "WORK_S3.h"

#include "DLT.h"

#include <DB.hpp>

#include <ExtCtrls.hpp>

#include "CGAUGES.h"

#include <Graphics.hpp>

#include "FIBQuery.hpp"

#include "pFIBQuery.hpp"

//---------------------------------------------------------------------------

class TForm1: public TForm

{__published: // IDE-managed Components

TpFIBDatabase *SMSA;

TpFIBTransaction *pFIBTransaction1;

TpFIBDataSet *Sel_1;

TpFIBDataSet *Sel_2;

TpFIBDatabase *WORK_2;

TpFIBTransaction *pFIBTransaction2;

TPanel *Panel1;

TGroupBox *GroupBox1;

TLabel *Label1;

TLabel *Label2;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TRadioButton *RadioButton3;

TComboBox *ComboBox1;

TEdit *Edit1;

TUpDown *UpDown1;

TDateTimePicker *DateTimePicker1;

TDateTimePicker *DateTimePicker2;

TButton *Button1;

TPanel *Panel2;

TBevel *Bevel1;

TButton *Button2;

TCGauge *CGauge1;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TButton *Button3;

TImage *Image1;

TLabel *Label6;

TLabel *Label7;

TLabel *Label8;

TLabel *Label9;

TLabel *Label10;

TLabel *Label11;

TLabel *Label12;

TpFIBQuery *pFIBQuery1;

TButton *Button4;

TpFIBDataSet *Del;

TButton *Button5;

TButton *Button6;

TRadioGroup *RadioGroup1;

TLabel *Label13;

TLabel *Label14;

TLabel *Label15;

TLabel *Label16;

TButton *Button7;

void __fastcall RadioButton1Click(TObject *Sender);

void __fastcall RadioButton2Click(TObject *Sender);

void __fastcall RadioButton3Click(TObject *Sender);

void __fastcall ComboBox1Change(TObject *Sender);

void __fastcall DateTimePicker1Change(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

void __fastcall Button6Click(TObject *Sender);

void __fastcall Button7Click(TObject *Sender);

private: // User declarations

public: // User declarations

AnsiString str;

TDateTime D1,D2;

__fastcall TForm1(TComponent* Owner);};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Файл реализации модуля обработки “Obrabotka.cpp ”

#include <vcl.h>

#pragma hdrstop

#include "Obrabotka.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "FIBDatabase"

#pragma link "FIBDataSet"

#pragma link "pFIBDatabase"

#pragma link "pFIBDataSet"

#pragma link "CGAUGES"

#pragma link "FIBQuery"

#pragma link "pFIBQuery"

#pragma resource "*.dfm"

TForm1 *Form1;

WORK *Obr;

DLT *Dlt;

WORK_S2 *Obr2;

WORK_S3 *Obr3;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{Obr = NULL;

Dlt = NULL;

Obr2 = NULL;}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{ ComboBox1->Enabled = RadioButton1->Checked;

Edit1->Enabled = RadioButton1->Checked;

UpDown1->Enabled = RadioButton1->Checked;

DateTimePicker1->Enabled = RadioButton2->Checked;

DateTimePicker2->Enabled = RadioButton2->Checked;}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{ComboBox1->Enabled = RadioButton1->Checked;

Edit1->Enabled = RadioButton1->Checked;

UpDown1->Enabled = RadioButton1->Checked;

DateTimePicker1->Enabled = RadioButton2->Checked;

DateTimePicker2->Enabled = RadioButton2->Checked;

DateTimePicker1->OnChange(NULL);}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{ ComboBox1->Enabled = false;

Edit1->Enabled = false;

UpDown1->Enabled = false;

DateTimePicker1->Enabled = false;

DateTimePicker2->Enabled = false;

str="SELECT SUM(A.SALESCOUNT),A.ARTICLE1,A.ARTICLE2,A.LOCID, AVG(B.AR1COST),AVG(B.AR2COST) "

"FROM ASSOTIATIONS_2D A, AS_2D_INFO B "

"WHERE A.ID=B.ID "

"GROUP BY A.ARTICLE1,A.ARTICLE2,A.LOCID "

"ORDER BY A.ARTICLE1,A.ARTICLE2,A.LOCID";}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1Change(TObject *Sender)

{ switch(ComboBox1->ItemIndex)

{case 0: { D1 = EncodeDate(StrToInt(Edit1->Text),3,1);

D2 = EncodeDate(StrToInt(Edit1->Text),5,31);

break;}

case 1: {D1 = EncodeDate(StrToInt(Edit1->Text),6,1);

D2 = EncodeDate(StrToInt(Edit1->Text),8,31);

break; }

case 2: {D1 = EncodeDate(StrToInt(Edit1->Text),9,01);

D2 = EncodeDate(StrToInt(Edit1->Text),11,30);

break; }

case 3: {D1 = EncodeDate(StrToInt(Edit1->Text)-1,12,01);

D2 = EncodeDate(StrToInt(Edit1->Text),2,29);

//break; }}

str="SELECT SUM(A.SALESCOUNT),A.ARTICLE1,A.ARTICLE2,A.LOCID,AVG(B.AR1COST),AVG(B.AR2COST) "

"FROM ASSOTIATIONS_2D A, AS_2D_INFO B "

"WHERE A.SALESDATE>='"+D1.DateString()+"' "

"AND A.SALESDATE<='"+D2.DateString()+"' "

"AND A.ID=B.ID "

"GROUP BY A.ARTICLE1,A.ARTICLE2,A.LOCID "

"ORDER BY A.ARTICLE1,A.ARTICLE2,A.LOCID"; }

//---------------------------------------------------------------------------

void __fastcall TForm1::DateTimePicker1Change(TObject *Sender)

{D1 = DateTimePicker1->Date;

D2 = DateTimePicker2->Date;

str="SELECT SUM(A.SALESCOUNT),A.ARTICLE1,A.ARTICLE2,A.LOCID,AVG(B.AR1COST),AVG(B.AR2COST) "

"FROM ASSOTIATIONS_2D A, AS_2D_INFO B "

"WHERE A.SALESDATE>='"+DateTimePicker1->Date.DateString()+"' "

"AND A.SALESDATE<='"+DateTimePicker2->Date.DateString()+"' "

"AND A.ID=B.ID "

"GROUP BY A.ARTICLE1,A.ARTICLE2,A.LOCID "

"ORDER BY A.ARTICLE1,A.ARTICLE2,A.LOCID";}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{ Button3->Visible = false;

if(Button2->Caption == "Отмена")

{ switch(RadioGroup1->ItemIndex)

{case 0: {if(Obr!=NULL)Obr->Terminate();break;}

case 1: {if(Obr2!=NULL)Obr2->Terminate();break;}

case 2: {if(Obr3!=NULL)Obr3->Terminate();break;} }

Label5->Caption = "Завершение...";

Form1->Enabled = false; }

else {Panel1->Visible = true;

Panel2->Visible = false; }}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{Button3->Visible = true;

Button2->Caption = "Отмена";

Panel2->Visible = true;

Panel1->Visible = false;

Label14->Caption = IntToStr(RadioGroup1->ItemIndex+1);

switch(RadioGroup1->ItemIndex)

{case 0: { Obr = new WORK(true);

Obr->FreeOnTerminate = true;

Obr->Resume();

break; }

case 1: {Obr2 = new WORK_S2(true);

Obr2->FreeOnTerminate = true;

Obr2->Resume();

break; }

case 2: {Obr3 = new WORK_S3(true);

Obr3->FreeOnTerminate = true;

Obr3->Resume();

break; }}}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{switch(RadioGroup1->ItemIndex)

{case 0: {if(Obr!=NULL)

{if(!Obr->Suspended)

{Button3->Caption = "Старт";

Obr->Suspend();}

else {Button3->Caption = "Пауза";

Obr->Resume();}}}

case 1: {if(Obr2!=NULL)

{if(!Obr2->Suspended)

{Button3->Caption = "Старт";

Obr2->Suspend();}

else {Button3->Caption = "Пауза";

Obr2->Resume();}}}

case 2: { if(Obr3!=NULL)

{if(!Obr3->Suspended)

{Button3->Caption = "Старт";

Obr3->Suspend();}

else {Button3->Caption = "Пауза";

Obr3->Resume();}}}}}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{if(Application->MessageBox("Все записи из таблицы будут удалены!\nВы уверены?","Подтверждение.",MB_OKCANCEL) == 1)

{Button5->Visible = true;

Button6->Visible = true;

Panel2->Visible = true;

Panel1->Visible = false;

Label5->Caption = "Удаление";

Dlt = new DLT(true);

Dlt->FreeOnTerminate = true;

Dlt->Resume();}}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{if(Dlt!=NULL)Dlt->Terminate();

Panel1->Visible = true;

Panel2->Visible = false;}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{ if(Dlt!=NULL)

{ if(!Dlt->Suspended)

{Button6->Caption = "Старт";

Dlt->Suspend();}

else{ Button6->Caption = "Пауза";

Dlt->Resume();}}}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)

{Application->Terminate();}

//---------------------------------------------------------------------------

Заголовочный файл потока очистки базы “DLT.h”:

#ifndef DLTH

#define DLTH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include "Obrabotka.h"

//---------------------------------------------------------------------------

class DLT: public TThread

{private:

void __fastcall Sync();

int count1,snc;

protected:

void __fastcall Execute();

public:

__fastcall DLT(bool CreateSuspended);};

//---------------------------------------------------------------------------

#endif

Файл реализации потока очистки базы “DLT.cpp”:

#include <vcl.h>

#pragma hdrstop

#include "DLT.h"

#pragma package(smart_init)

//---------------------------------------------------------------------------

__fastcall DLT::DLT(bool CreateSuspended)

: TThread(CreateSuspended)

{}

//---------------------------------------------------------------------------

void __fastcall DLT::Sync()

{ switch(snc)

{ case 0:{Form1->Label12->Caption = IntToStr(count1);

Form1->CGauge1->MaxValue = count1;

break;}

case 1:{Form1->CGauge1->Progress++;

Form1->Label11->Caption = IntToStr(Form1->CGauge1->Progress);

break;}

case 2:{Form1->CGauge1->Progress = 0;

Form1->Label11->Caption = "";

Form1->Label12->Caption = "";

Form1->Button5->Visible = false;

Form1->Button6->Visible = false;

Form1->Panel1->Visible = true;

Form1->Panel2->Visible = false;

break;}}}

//---------------------------------------------------------------------------

void __fastcall DLT::Execute()

{ Form1->WORK_2->Open();

Form1->Del->Active = true;

count1 = Form1->Del->RecordCountFromSrv();

snc = 0;

Synchronize(Sync);

Form1->Del->First();

Form1->pFIBTransaction2->StartTransaction();

while(!Form1->Del->Eof&&!Terminated)

{Form1->Del->Delete();

snc = 1;

Synchronize(Sync); }

if(Terminated)

{Form1->pFIBTransaction2->Rollback();

snc = 2;

Synchronize(Sync);

Form1->Del->Active = false;

Form1->WORK_2->Close();

return; }

if(Application->MessageBox("Принять изменеия?","Записи удалены!",MB_YESNO) == 6)

{ Form1->WORK_2->Execute("SET GENERATOR PROB_G TO 0;");

Form1->pFIBTransaction2->Commit();}

else Form1->pFIBTransaction2->Rollback();

snc = 2;

Synchronize(Sync);

Form1->Del->Active = false;

Form1->WORK_2->Close();}

//---------------------------------------------------------------------------

Заголовочный файл потока обработки №1 “WORK.h”

#ifndef WORKH

#define WORKH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include "Obrabotka.h"

#include <math.h>

//---------------------------------------------------------------------------

class WORK: public TThread

{private:

void __fastcall Sync();

int snc,count2,count1,ST,k,i;

int locid,SC,DCn,Sum;

char ar1[8], ar2[8];

double M,D,SKO,MSKO,dsum;

TDateTime Start,Stop;

protected:

void __fastcall Execute();

public:

__fastcall WORK(bool CreateSuspended);};

//---------------------------------------------------------------------------

#endif

Файл реализации потока обработки №1 “ WORK.cpp”:

#include <vcl.h>

#pragma hdrstop

#include "WORK.h"

#pragma package(smart_init)

__fastcall WORK::WORK(bool CreateSuspended)

: TThread(CreateSuspended)

{}

//---------------------------------------------------------------------------

void __fastcall WORK::Sync()

{switch(snc)

{case 0:{Form1->Label5->Caption = "Подготовка данных";break;}

case 1:{Form1->Label5->Caption = "Определение диапазона дат";break;}

case 2:{Form1->Label5->Caption = "Определение количества записей бля обработки";break;}

case 3:{Form1->Label12->Caption = IntToStr(count2);

Form1->CGauge1->MaxValue = count2;

break;}

case 4:{Form1->Label7->Caption = Form1->D1.DateString();

Form1->Label9->Caption = Form1->D2.DateString();

break;}

case 5:{Form1->Label5->Caption = "Выборка данных";break;}

case 6:{Form1->Label5->Caption = "Обработка данных";break;}

case 7:{Form1->CGauge1->Progress = count1;

Form1->Label11->Caption = IntToStr(count1);

if(count1%10==0)

Form1->Label16->Caption = FloatToStr((double)ST/count1)+" мc";

break;}

case 8:{Form1->Label5->Caption = "Обработка завершена.";

Form1->Label7->Caption = "";

Form1->Label9->Caption = "";

Form1->Label12->Caption = "";

Form1->Label14->Caption = "";

Form1->Label16->Caption = "";

Form1->CGauge1->Progress = 0;

Form1->Label11->Caption = "";

Form1->Button2->Caption = "Назад";

Form1->Button3->Visible = false;

Form1->Enabled = true;

break;}}}

//---------------------------------------------------------------------------

void __fastcall WORK::Execute()

{//---- Place thread code here ----

/*DCn - кол-во дней в заданном периоде

SC - кол-во продаж пары товаров

M - среднее значение

D - дисперсия

SKO - СКО

MSKO - отношение среднего к СКО

count1 - кол-во обработанных записей

count2 - общее кол-во записей

ar1 - артикул1

ar2 - артикул2

D1 - начальная дата

D2 - конечная дата*/

snc = 0;

Synchronize(Sync);

Form1->Sel_1->Active = false;

Form1->Sel_1->SQLs->SelectSQL->Text = Form1->str;

Form1->SMSA->Open();

Form1->Sel_1->Active = true;

Form1->WORK_2->Open();

if(Form1->RadioButton3->Checked)

{snc = 1;

Synchronize(Sync);

Form1->D1 = VarToDateTime(Form1->SMSA->QueryValue("SELECT MIN(SALESDATE) FROM ASSOTIATIONS_2D",0));

Form1->D2 = VarToDateTime(Form1->SMSA->QueryValue("SELECT MAX(SALESDATE) FROM ASSOTIATIONS_2D",0));}

snc = 4;

Synchronize(Sync);

//Опеределение количества дней в заданном периоде

DCn = DaysBetween(Form1->D1,Form1->D2);

DCn++;

snc = 2;

Synchronize(Sync);

count1 = 0;

count2 = 0;

while(!Form1->Sel_1->Eof){count2++;Form1->Sel_1->Next();}

snc = 3;

Synchronize(Sync);

Form1->Sel_1->First();

ST = 0;

while(!Form1->Sel_1->Eof&&!Terminated)

{ Start = Time();

Form1->pFIBTransaction2->StartTransaction();

Sum = Form1->Sel_1->RecordFieldValue(Form1->Sel_1->FieldByFieldNo(1),count1+1);

Form1->Sel_1->GetFieldData(2,ar1);

Form1->Sel_1->GetFieldData(3,ar2);

Form1->Sel_1->GetFieldData(4,&locid);

//Вычисление среднего значения

M = Sum/(Double)DCn;

snc = 5;

Synchronize(Sync);

Form1->Sel_2->Active = false;

//Выборка данных для подсчета дисперсии

Form1->Sel_2->SQLs->SelectSQL->Text = "SELECT SALESCOUNT "

"FROM ASSOTIATIONS_2D "

"WHERE ARTICLE1 = '"+(AnsiString)ar1+"' AND "

"ARTICLE2 = '"+(AnsiString)ar2+"' AND "

"LOCID = "+IntToStr(locid)+" AND "

"SALESDATE>='"+Form1->D1.DateString()+"' "

"AND SALESDATE<='"+Form1->D2.DateString()+"'";

Form1->Sel_2->Active = true;

snc = 6;

Synchronize(Sync);

Form1->Sel_2->First();

k = DCn;

dsum = 0;

//Сумма квадратов отклоненний в дни, когда регистрировалась ассоциация

while(!Form1->Sel_2->Eof)

{Form1->Sel_2->GetFieldData(1,&SC);

dsum += (SC-M)*(SC-M);

k--;

Form1->Sel_2->Next();}

dsum += k*M*M;//Сумма квадратов отклоненний в остальные дни периода

D = dsum/DCn;

SKO = sqrt(D);

MSKO = M/SKO;

Form1->pFIBQuery1->ParamByName("ARTICLE1")->AsString = ar1;

Form1->pFIBQuery1->ParamByName("ARTICLE2")->AsString = ar2;

Form1->pFIBQuery1->ParamByName("LOCID")->AsInteger = locid;

Form1->pFIBQuery1->ParamByName("FIRSTDATE")->AsDateTime = Form1->D1;

Form1->pFIBQuery1->ParamByName("LASTDATE")->AsDateTime = Form1->D2;

Form1->pFIBQuery1->ParamByName("M")->AsFloat = M;

Form1->pFIBQuery1->ParamByName("D")->AsFloat = D;

Form1->pFIBQuery1->ParamByName("SKO")->AsFloat = SKO;

Form1->pFIBQuery1->ParamByName("MSKO")->AsFloat = MSKO;

Form1->pFIBQuery1->ExecQuery();

Form1->pFIBTransaction2->CommitRetaining();

Form1->Sel_1->Next();

count1++;

Stop = Time();

ST += MilliSecondsBetween(Start,Stop);

snc = 7;

Synchronize(Sync);}

Form1->Sel_1->Active = false;

Form1->Sel_2->Active = false;

Form1->SMSA->Close();

Form1->WORK_2->Close();

snc = 8;

Synchronize(Sync);}

//---------------------------------------------------------------------------

Заголовочный файл потока обработки №2 “WORK_S2.h”

#ifndef WORK_S2H

#define WORK_S2H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include "Obrabotka.h"

struct data

{char ar1[8];

char ar2[8];

int locid;

int sum_sc;};

//---------------------------------------------------------------------------

class WORK_S2: public TThread

{private:

void __fastcall Sync();

int snc,count2,count1,ST,k,i;

int SC,DCn;

double M,D,SKO,MSKO,dsum;

data *mas,*buf;

TDateTime Start,Stop;

protected:

void __fastcall Execute();

public:

__fastcall WORK_S2(bool CreateSuspended);};

//---------------------------------------------------------------------------

#endif

Файл реализации потока обработки №2 “ WORK_S2.cpp”

#include <vcl.h>

#pragma hdrstop

#include "WORK_S2.h"

#pragma package(smart_init)

//---------------------------------------------------------------------------

__fastcall WORK_S2::WORK_S2(bool CreateSuspended)

: TThread(CreateSuspended)

{}

//---------------------------------------------------------------------------

void __fastcall WORK_S2::Sync()

{switch(snc)

{case 0:{Form1->Label5->Caption = "Подготовка данных";break;}

case 1:{Form1->Label5->Caption = "Определение диапазона дат";break;}

case 2:{Form1->Label5->Caption = "Запись данных в массив";break;}

case 3:{Form1->Label12->Caption = IntToStr(count2);

Form1->CGauge1->MaxValue = count2;

break;}

case 4:{Form1->Label7->Caption = Form1->D1.DateString();

Form1->Label9->Caption = Form1->D2.DateString();

break;}

case 5:{Form1->Label5->Caption = "Выборка данных";break;}

case 6:{Form1->Label5->Caption = "Обработка данных";break;}

case 7:{Form1->CGauge1->Progress = count1;

Form1->Label11->Caption = IntToStr(count1);

if(count1%10==0)

Form1->Label16->Caption = FloatToStr((double)ST/count1)+" мc";

break;}

case 8:{Form1->Label5->Caption = "Обработка завершена.";

Form1->Label7->Caption = "";

Form1->Label9->Caption = "";

Form1->Label12->Caption = "";

Form1->Label14->Caption = "";

Form1->Label16->Caption = "";

Form1->CGauge1->Progress = 0;

Form1->Label11->Caption = "";

Form1->Button2->Caption = "Назад";

Form1->Button3->Visible = false;

Form1->Enabled = true;

break;}}}

//---------------------------------------------------------------------------

void __fastcall WORK_S2::Execute()

{snc = 0;

Synchronize(Sync);

Form1->Sel_1->Active = false;

Form1->Sel_1->SQLs->SelectSQL->Text = Form1->str;

Form1->SMSA->Open();

Form1->Sel_1->Active = true;

Form1->WORK_2->Open();

if(Form1->RadioButton3->Checked)

{snc = 1;

Synchronize(Sync);

Form1->D1 = VarToDateTime(Form1->SMSA->QueryValue("SELECT MIN(SALESDATE) FROM ASSOTIATIONS_2D",0));

Form1->D2 = VarToDateTime(Form1->SMSA->QueryValue("SELECT MAX(SALESDATE) FROM ASSOTIATIONS_2D",0));}

snc = 4;

Synchronize(Sync);

//Опеределение количества дней в заданном периоде

DCn = DaysBetween(Form1->D1,Form1->D2);

DCn++;

snc = 2;

Synchronize(Sync);

count1 = 0;

count2 = 0;

mas = NULL;

//Копирование данных в массив

while(!Form1->Sel_1->Eof)

{buf = new data[count2+1];

for(i = 0;i<count2;i++) buf[i] = mas[i];

if(mas!=NULL)delete[] mas;

mas = buf;

mas[count2].sum_sc = Form1->Sel_1->RecordFieldValue(Form1->Sel_1->FieldByFieldNo(1),count2+1);

Form1->Sel_1->GetFieldData(2,mas[count2].ar1);

Form1->Sel_1->GetFieldData(3,mas[count2].ar2);

Form1->Sel_1->GetFieldData(4,&mas[count2].locid);

count2++;

Form1->Sel_1->Next();}

snc = 3;

Synchronize(Sync);

ST = 0;

for(i = 0;i<count2&&!Terminated;i++)

{ Start = Time();

Form1->pFIBTransaction2->StartTransaction();

//Вычисление среднего значения

M = mas[i].sum_sc/(Double)DCn;

snc = 5;

Synchronize(Sync);

Form1->Sel_1->Active = false;

//Выборка данных для подсчета дисперсии

Form1->Sel_1->SQLs->SelectSQL->Text = "SELECT SALESCOUNT "

"FROM ASSOTIATIONS_2D "

"WHERE ARTICLE1 = '"+(AnsiString)mas[i].ar1+"' AND "

"ARTICLE2 = '"+(AnsiString)mas[i].ar2+"' AND "

"LOCID = "+IntToStr(mas[i].locid)+" AND "

"SALESDATE>='"+Form1->D1.DateString()+"' "

"AND SALESDATE<='"+Form1->D2.DateString()+"'";

Form1->Sel_1->Active = true;

snc = 6;

Synchronize(Sync);

Form1->Sel_1->First();

k = DCn;

dsum = 0;

//Сумма квадратов отклоненний в дни, когда регистрировалась ассоциация

while(!Form1->Sel_1->Eof)

{Form1->Sel_1->GetFieldData(1,&SC);

dsum += (SC-M)*(SC-M);

k--;

Form1->Sel_1->Next();}

dsum += k*M*M;//Сумма квадратов отклоненний в остальные дни периода

D = dsum/DCn;

SKO = sqrt(D);

MSKO = M/SKO;

Form1->pFIBQuery1->ParamByName("ARTICLE1")->AsString = mas[i].ar1;

Form1->pFIBQuery1->ParamByName("ARTICLE2")->AsString = mas[i].ar2;

Form1->pFIBQuery1->ParamByName("LOCID")->AsInteger = mas[i].locid;

Form1->pFIBQuery1->ParamByName("FIRSTDATE")->AsDateTime = Form1->D1;

Form1->pFIBQuery1->ParamByName("LASTDATE")->AsDateTime = Form1->D2;

Form1->pFIBQuery1->ParamByName("M")->AsFloat = M;

Form1->pFIBQuery1->ParamByName("D")->AsFloat = D;

Form1->pFIBQuery1->ParamByName("SKO")->AsFloat = SKO;

Form1->pFIBQuery1->ParamByName("MSKO")->AsFloat = MSKO;

Form1->pFIBQuery1->ExecQuery();

Form1->pFIBTransaction2->CommitRetaining();

count1++;

Stop = Time();

ST += MilliSecondsBetween(Start,Stop);

snc = 7;

Synchronize(Sync);}

if(mas!=NULL) delete[] mas;

Form1->Sel_1->Active = false;

Form1->SMSA->Close();

Form1->WORK_2->Close();

snc = 8;

Synchronize(Sync);}

//---------------------------------------------------------------------------

Заголовочный файл потока обработки №3 “WORK_S3.h”

#ifndef WORK_S3H

#define WORK_S3H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include "Obrabotka.h"

//---------------------------------------------------------------------------

class WORK_S3: public TThread

{ private:

void __fastcall Sync();

int snc,count2,count1,ST,k,i;

int locid,locid2,SC,DCn,Sum,ID;

char ar1[8], ar2[8], ar11[8],ar22[8];

double M,D,SKO,MSKO,Sa,Sb,S,dsum;

TDateTime Start,Stop;

Variant V;

protected:

void __fastcall Execute();

public:

__fastcall WORK_S3(bool CreateSuspended);};

//---------------------------------------------------------------------------

#endif

Файл реализации потока обработки №3 “ WORK_S3.cpp”

#include <vcl.h>

#pragma hdrstop

#include "WORK_S3.h"

#pragma package(smart_init)

//---------------------------------------------------------------------------

__fastcall WORK_S3::WORK_S3(bool CreateSuspended)

: TThread(CreateSuspended)

{}

//---------------------------------------------------------------------------

void __fastcall WORK_S3::Sync()

{switch(snc)

{case 0:{Form1->Label5->Caption = "Подготовка данных";break;}

case 1:{Form1->Label5->Caption = "Определение диапазона дат";break;}

case 2:{Form1->Label5->Caption = "Определение количества записей бля обработки";break;}

case 3:{Form1->Label12->Caption = IntToStr(count2);

Form1->CGauge1->MaxValue = count2;

break;}

case 4:{Form1->Label7->Caption = Form1->D1.DateString();

Form1->Label9->Caption = Form1->D2.DateString();

break;}

case 5:{Application->MessageBox("Ошибка обработки!","Ошибка!!!",MB_OK);break;}

case 6:{Form1->Label5->Caption = "Обработка данных";break;}

case 7:{Form1->CGauge1->Progress = count1;

Form1->Label11->Caption = IntToStr(count1);

if(count1%10==0)

Form1->Label16->Caption = FloatToStr((double)ST/count1)+" мc";

break;}

case 8:{Form1->Label5->Caption = "Обработка завершена.";

Form1->Label7->Caption = "";

Form1->Label9->Caption = "";

Form1->Label12->Caption = "";

Form1->Label14->Caption = "";

Form1->Label16->Caption = "";

Form1->CGauge1->Progress = 0;

Form1->Label11->Caption = "";

Form1->Button2->Caption = "Назад";

Form1->Button3->Visible = false;

Form1->Enabled = true;

break;}}}

//---------------------------------------------------------------------------

void __fastcall WORK_S3::Execute()

{snc = 0;

Synchronize(Sync);

Form1->Sel_1->Active = false;

Form1->Sel_1->SQLs->SelectSQL->Text = Form1->str;

Form1->SMSA->Open();

Form1->Sel_1->Active = true;

Form1->WORK_2->Open();

if(Form1->RadioButton3->Checked)

{snc = 1;

Synchronize(Sync);

Form1->D1 = VarToDateTime(Form1->SMSA->QueryValue("SELECT MIN(SALESDATE) FROM ASSOTIATIONS_2D",0));

Form1->D2 = VarToDateTime(Form1->SMSA->QueryValue("SELECT MAX(SALESDATE) FROM ASSOTIATIONS_2D",0));}

snc = 4;

Synchronize(Sync);

//Опеределение количества дней в заданном периоде

DCn = DaysBetween(Form1->D1,Form1->D2);

DCn++;

snc = 2;

Synchronize(Sync);

count1 = 0;

count2 = Form1->Sel_1->RecordCountFromSrv();

snc = 3;

Synchronize(Sync);

Form1->Sel_2->Active = false;

Form1->Sel_2->SQLs->SelectSQL->Text="SELECT ARTICLE1,ARTICLE2,LOCID,SALESCOUNT,ID "

"FROM ASSOTIATIONS_2D "

"WHERE SALESDATE>='"+Form1->D1.DateString()+"' "

"AND SALESDATE<='"+Form1->D2.DateString()+"' "

"ORDER BY ARTICLE1,ARTICLE2,LOCID";

Form1->Sel_2->Active = true;

Form1->Sel_2->First();

Form1->Sel_2->GetFieldData(1,&ar11);

Form1->Sel_2->GetFieldData(2,&ar22);

Form1->Sel_2->GetFieldData(3,&locid2);

Form1->Sel_2->GetFieldData(4,&SC);

Form1->Sel_2->GetFieldData(5,&ID);

Form1->Sel_1->First();

ST = 0;

while(!Form1->Sel_1->Eof&&!Terminated)

{Start = Time();

Form1->pFIBTransaction2->StartTransaction();

Sum = Form1->Sel_1->RecordFieldValue(Form1->Sel_1->FieldByFieldNo(1),count1+1);

Form1->Sel_1->GetFieldData(2,ar1);

Form1->Sel_1->GetFieldData(3,ar2);

Form1->Sel_1->GetFieldData(4,&locid);

Form1->Sel_1->GetFieldData(5,&Sa);

Form1->Sel_1->GetFieldData(6,&Sb);

//Вычисление среднего значения

M = Sum/(Double)DCn;

snc = 6;

Synchronize(Sync);

k = DCn;

dsum = 0;

i = 0;

//Сумма квадратов отклоненний в дни, когда регистрировалась ассоциация

while(!Form1->Sel_2->Eof&&locid == locid2&&!StrComp(ar1,ar11)&&!StrComp(ar2,ar22))

{i+= SC;

dsum += (SC-M)*(SC-M);

k--;

Form1->Sel_2->Next();

Form1->Sel_2->GetFieldData(1,&ar11);

Form1->Sel_2->GetFieldData(2,&ar22);

Form1->Sel_2->GetFieldData(3,&locid2);

Form1->Sel_2->GetFieldData(4,&SC);

Form1->Sel_2->GetFieldData(5,&ID);}

if(Sum == i && snc!=5)

{dsum += k*M*M;//Сумма квадратов отклоненний в остальные дни периода

D = dsum/DCn;

SKO = sqrt(D);

MSKO = M/SKO;

S = MSKO*(Sa+Sb);

Form1->pFIBQuery1->ParamByName("ARTICLE1")->AsString = ar1;

Form1->pFIBQuery1->ParamByName("ARTICLE2")->AsString = ar2;

Form1->pFIBQuery1->ParamByName("LOCID")->AsInteger = locid;

Form1->pFIBQuery1->ParamByName("FIRSTDATE")->AsDateTime = Form1->D1;

Form1->pFIBQuery1->ParamByName("LASTDATE")->AsDateTime = Form1->D2;

Form1->pFIBQuery1->ParamByName("M")->AsFloat = M;

Form1->pFIBQuery1->ParamByName("D")->AsFloat = D;

Form1->pFIBQuery1->ParamByName("SKO")->AsFloat = SKO;

Form1->pFIBQuery1->ParamByName("MSKO")->AsFloat = MSKO;

Form1->pFIBQuery1->ParamByName("S")->AsFloat = S;

Form1->pFIBQuery1->ExecQuery();

Form1->pFIBTransaction2->CommitRetaining();

Form1->Sel_1->Next();

count1++;

Stop = Time();

ST += MilliSecondsBetween(Start,Stop);

snc = 7;

Synchronize(Sync);}

else {snc = 5; Synchronize(Sync); Terminate();

Form1->pFIBTransaction2->Rollback(); }}

Form1->Sel_1->Active = false;

Form1->Sel_2->Active = false;

Form1->SMSA->Close();

Form1->WORK_2->Close();

snc = 8;

Synchronize(Sync);}

Приложение Ж

Скрипт для создания таблицы задачи 4

SET SQL DIALECT 3;

/*Используется готовыя база данных с добавлением новой подчиненной таблицы*/

connect "D:\DOCs\WORK\SMSA\SMSA.GDB"

USER "SYSDBA" PASSWORD "masterkey";

CREATE TABLE AS_2D_INFO

(ID INTEGER NOT NULL,

AR1COUNT FLOAT,

AR2COUNT FLOAT,

AR1COST FLOAT,

AR2COST FLOAT,

AR1COUNTX FLOAT,

AR2COUNTX FLOAT,

AR1COSTX FLOAT,

AR2COSTX FLOAT,

PRIMARY KEY(ID),

FOREIGN KEY(ID) REFERENCES ASSOTIATIONS_2D ON DELETE CASCADE ON UPDATE CASCADE);

COMMIT;

Приложение И

Листинг программы задачи 4

Заголовочный файл модуля обработки “Obrabotka.h ”:

#ifndef ObrabotkaH

#define ObrabotkaH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ComCtrls.hpp>

#include "FIBDatabase.hpp"

#include "FIBDataSet.hpp"

#include "pFIBDatabase.hpp"

#include "pFIBDataSet.hpp"

#include <DateUtils.hpp>

#include "WORK.h"

#include "DLT.h"

#include <DB.hpp>

#include <ExtCtrls.hpp>

#include "CGAUGES.h"

#include <Graphics.hpp>

#include "FIBQuery.hpp"

#include "pFIBQuery.hpp"

#include "Oracle.hpp"

#include "OracleData.hpp"

#include <jpeg.hpp>

//---------------------------------------------------------------------------

class TForm1: public TForm

{__published: // IDE-managed Components

TpFIBDatabase *SMSA;

TpFIBTransaction *pFIBTransaction1;

TpFIBDataSet *AS_2D;

TpFIBTransaction *pFIBTransaction2;

TPanel *Panel1;

TButton *Button1;

TPanel *Panel2;

TBevel *Bevel1;

TButton *Button2;

TCGauge *CGauge1;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TButton *Button3;

TImage *Image1;

TLabel *Label10;

TLabel *Label11;

TLabel *Label12;

TpFIBQuery *pFIBQuery1;

TButton *Button4;

TButton *Button5;

TButton *Button6;

TLabel *Label15;

TLabel *Label16;

TButton *Button7;

TOracleSession *DBSPUT;

TOracleQuery *OracleQuery1;

TpFIBDataSet *AS_2D_INFO;

TPanel *Panel3;

TMemo *Memo1;

TImage *Image2;

TGroupBox *GroupBox1;

TLabel *Label1;

TDateTimePicker *DTP1;

TDateTimePicker *DTP2;

TLabel *Label2;

TOracleDataSet *OracleDataSet1;

TLabel *Label6;

TLabel *Label7;

TLabel *Label8;

TLabel *Label9;

TImage *Image3;

TLabel *Label13;

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

void __fastcall Button6Click(TObject *Sender);

void __fastcall Button7Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Файл реализации модуля обработки “Obrabotka.cpp ”:

#include <vcl.h>

#pragma hdrstop

#include "Obrabotka.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "FIBDatabase"

#pragma link "FIBDataSet"

#pragma link "pFIBDatabase"

#pragma link "pFIBDataSet"

#pragma link "CGAUGES"

#pragma link "FIBQuery"

#pragma link "pFIBQuery"

#pragma link "Oracle"

#pragma link "OracleData"

#pragma resource "*.dfm"

TForm1 *Form1;

WORK *Obr;

DLT *Dlt;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ Obr = NULL;

Dlt = NULL;}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)


Подобные документы

  • Создание базы данных для ведения учёта товаров и услуг на предприятиях розничной торговли на примере компании "Евросеть СПБ". Экономическая сущность задач учета складских операций. Документальное оформление приёмки товаров. Среда создания базы данных.

    дипломная работа [3,1 M], добавлен 15.01.2012

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

    курсовая работа [743,7 K], добавлен 02.06.2009

  • Создание баз данных и таблиц. Ограничение доступа для пользователей. Хранимая процедура, доступная всем пользователям. Скрипты для проверки ограничений. Методы обеспечения безопасности сервера базы данных. Чтение, изменение и добавление данных.

    лабораторная работа [1,4 M], добавлен 23.07.2012

  • Создание таблиц базы данных с помощью MS Access "Страны Азии". Форма базы данных и запросы к выборкам данных. Модификация структуры таблиц, создания связей между главными таблицами, редактирование данных и проектирование форм для реальной базы данных.

    контрольная работа [723,9 K], добавлен 25.11.2012

  • Цель создания базы данных магазина. Понятие и сущность инфологического моделирования, его применение. Особенности разработки базы данных, создание таблиц, схемы данных, запросов, визуальных и печатных форм. Описание процесса работы с базами данных.

    курсовая работа [1,9 M], добавлен 15.11.2013

  • Основные виды баз данных. Система управления базами данных. Анализ деятельности и информации, обрабатываемой в поликлинике. Состав таблиц в базе данных и их взаимосвязи. Методика наполнения базы данных информацией. Алгоритм создания базы данных.

    курсовая работа [3,1 M], добавлен 17.12.2014

  • Интеллектуальный анализ данных как метод поддержки принятия решений, основанный на анализе зависимостей между данными, его роль, цели и условия применения. Сущность основных задач интеллектуального анализа: классификации, регрессии, прогнозирования.

    контрольная работа [25,8 K], добавлен 08.08.2013

  • Основы теории классификаторов. Идентификация, четкая и нечеткая классификация. Обучающие и тестовые последовательности наборов данных. Популярные метрики (меры) оценки расстояния между образами. Дискриминантный анализ. Деревья решений. Логический вывод.

    лекция [596,5 K], добавлен 28.12.2013

  • Концептуальное проектирование базы данных: разработка схемы и структуры таблиц, описание атрибутов. Реализация базы данных в среде СУБД MS SQL Server 2000. Основные принципы создания таблиц. Доступ и обработка данных с помощью утилиты Enterprise Manager.

    курсовая работа [3,8 M], добавлен 22.01.2013

  • Концепции хранилищ данных для анализа и их составляющие: интеграции и согласования данных из различных источников, разделения наборов данных для систем обработки транзакций и поддержки принятия решений. Архитектура баз для хранилищ и витрины данных.

    реферат [1,3 M], добавлен 25.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.