Комплекс интеллектуального анализа данных
Разработка комплекса интеллектуального анализа данных, получаемых в процессе работы коммерческого предприятия розничной торговли. Исследование стационарности ассоциаций, выявление частоты появления ассоциаций. Скрипты для создания баз данных и таблиц.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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