Материал: Организация базы данных для хранения динамических моделей беспроводных компьютерных Ad hoc сетей

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Файл модуля UnitDM.cpp

#include <vcl.h>

#pragma hdrstop

#include "UnitDM.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"*dm;

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

__fastcall Tdm::Tdm(TComponent* Owner)

: TDataModule(Owner)

{

}

//---------------------------------------------------------------------------__fastcall Tdm::DataModuleCreate(TObject *Sender)

{s = GetCurrentDir();=s+s[3]+"GRAPH.FDB";>DatabaseName=s;>Open();opts;>IndexFieldNames="NAME;ID";

}

//---------------------------------------------------------------------------__fastcall Tdm::DataModuleDestroy(TObject *Sender)

{(IBTransaction1->Active)->Commit();

}

Модуль getstr.cpp

#include <vcl.h>

#pragma hdrstop

#include "getstr.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"*rmGetName;

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

__fastcall TrmGetName::TrmGetName(TComponent* Owner)

: TForm(Owner)

{

}

Файл модуля new_Point.cpp

#include <vcl.h>

#pragma hdrstop

#include "new_Point.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"*newPoint;

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

__fastcall TnewPoint::TnewPoint(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TnewPoint::eXKeyPress(TObject *Sender, char &Key)

{(Key!=0x8)

{*edt = dynamic_cast<TEdit *>(Sender);= edt->Text;=s.SubString(1,edt->SelStart)+Key+s.SubString((edt->SelStart)+1,s.Length());

{d=StrToFloat(s);

}(...)

{=0x0;

}

}

}

//---------------------------------------------------------------------------__fastcall TnewPoint::FormActivate(TObject *Sender)

{>Text="";>Text="";>Text="";>Text="";>Text="";;

}

//---------------------------------------------------------------------------__fastcall TnewPoint::eXChange(TObject *Sender)

{>Enabled=(eX->Text!="")&&(eY->Text!="")&&(eA->Text!="")&&(eB->Text!="")&&

(eRin->Text!="");

}

Файл модуля view.cpp

#include <vcl.h>

#include <controls.hpp>

#pragma hdrstop

#include "view.h"

#include "UnitDM.h"

#include "math.h"

#include "getstr.h"

#include "new_Point.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"*fView;

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

__fastcall TfView::TfView(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------clLine = (TColor) RGB(25,25,150);clCircle =(TColor) RGB(252,255,240);clPoint= (TColor) RGB(255,0,0);RPoint=2;min (double t1, double t2)

{(t1<t2) return t1;return t2;

}__fastcall TfView::CalcGraph()

{(!dm->qGraph->IsEmpty())

{>qGraph->DisableControls();

TBookmark BK = dm->qGraph->GetBookmark(); //идентифицировать данный фрагмент текста по закладке.

// gImage->Width = gImage->Height;T= UpDown1->Position;>qGraph->First();= dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value ,= dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value,= dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value,= dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value;(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())

{(maxX < dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value) maxX = dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value;(maxY < dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value) maxY = dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value;(minX > dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value) minX = dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value;(minY > dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value) minY = dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value;

}(maxY> maxX) maxX=maxY;(minY< minX) minX=minY;(gImage->Width<gImage->Height)= gImage->Width / (maxX-minY);= gImage->Height / (maxX-minY);>qGraph1->SQL->Clear();(int i=0;i<dm->qGraph->SQL->Count;i++) dm->qGraph1->SQL->Add(dm->qGraph->SQL->Strings[i]);(int i=0;i<dm->qGraph->Params->Count;i++) dm->qGraph1->Params->Items[i]->Value=dm->qGraph->Params->Items[i]->Value;>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();

}

}__fastcall TfView::PaintGraph()

{(!dm->qGraph->IsEmpty())

{>qGraph->DisableControls();BK = dm->qGraph->GetBookmark();

// gImage->Width = gImage->Height;>Canvas->Brush->Color=clWhite;>Canvas->FillRect(gImage->ClientRect);T= UpDown1->Position;

// if (cbShowR->Checked)

{(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())(predPoint == dm->qGraph->RecNo)

{>Canvas->Pen->Color = clGray;>Canvas->Brush->Color =clCircle;x1=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-dm->qGraphR->Value-minX),=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-dm->qGraphR->Value-minX),=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T+dm->qGraphR->Value-minX),=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T+dm->qGraphR->Value-minX);>Canvas->Ellipse((int) x1,(int) y1,(int) x2,(int) y2);

}

}>Canvas->Pen->Color = clLine;>qGraph1->Open();>Canvas->Pen->Width=2;>Canvas->Pen->Color = clLine;(dm->qGraph1->First();!dm->qGraph1->Eof;dm->qGraph1->Next())(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())

{x1=(dm->qGraphX->Value+dm->qGraphA->Value*T),=(dm->qGraphY->Value+dm->qGraphB->Value*T),=(dm->qGraph1X->Value+dm->qGraph1A->Value*T),=(dm->qGraph1Y->Value+dm->qGraph1B->Value*T),=min(pow(dm->qGraph1R->Value,2),pow(dm->qGraphR->Value,2));(((dm->qGraph1->RecNo)<(dm->qGraph->RecNo)) && ((pow(x1-x2,2)+pow(y1-y2,2))<=d))

{>Canvas->MoveTo((int) (scale*(x1-minX)),(int) (scale*(y1-minX)));>Canvas->LineTo((int) (scale*(x2-minX)),(int) (scale*(y2-minX)));

}

}>qGraph1->Close();>Canvas->Pen->Color =clPoint;>Canvas->Brush->Color =clPoint;(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())

{x1=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)-RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)-RPoint,=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)+RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)+RPoint;>Canvas->Ellipse((int) x1,(int) y1,(int) x2,(int) y2);

}>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();

}

}__fastcall TfView::FormActivate(TObject *Sender) //активация формы

{>DataSet = dm->tGraphNames;>DataSet = dm->qGraph;=0;(Sender);>OnChange = eTimeChange;

}

//---------------------------------------------------------------------------__fastcall TfView::FormResize(TObject *Sender) //изменение размера

{();();

}

//---------------------------------------------------------------------------__fastcall TfView::gImageMouseMove(TObject *Sender, TShiftState Shift,X, int Y)

{T= UpDown1->Position;(gImage->Canvas->Pixels[X][Y]==clPoint)

{ dm->qGraph->DisableControls();BK = dm->qGraph->GetBookmark();(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())

{x1=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)-RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)-RPoint,=scale*(dm->qGraphX->Value+dm->qGraphA->Value*T-minX)+RPoint,=scale*(dm->qGraphY->Value+dm->qGraphB->Value*T-minX)+RPoint;(((x1<=X)&&(x2>=X)&&(y1<=Y)&&(y2>=Y))&&(predPoint!=dm->qGraph->RecNo))

{(HWin == NULL)

{= new THintWindow(this);>Parent = fView;>Color = clInfoBk;

}= dm->qGraph->RecNo;= "X="+dm->qGraphX->AsString+", Y="+dm->qGraphY->AsString+", R="+dm->qGraphR->AsString;Tr;.Left = fView->Left+gImage->Left+X-gImage->Canvas->TextWidth(s)/2;.Top = fView->Top+gImage->Top+Y;.Right = Tr.Left + gImage->Canvas->TextWidth(s)+20;.Bottom = Tr.Top + gImage->Canvas->TextHeight(s);();>ActivateHint(Tr,s);

}

}>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();

}

{(predPoint != 0)

{= 0;();

}= 0;(HWin!=NULL)

{>Free();=NULL;= 0;

}

}

}

//---------------------------------------------------------------------------__fastcall TfView::FormClose(TObject *Sender, TCloseAction &Action)

{>DataSet = NULL;>DataSet = NULL;

}

//---------------------------------------------------------------------------__fastcall TfView::BitBtn1Click(TObject *Sender) //новый граф

{>ShowModal();(rmGetName->ModalResult==mrOk)

{>spNewGraph->Params->Items[1]->Value = rmGetName->Edit1->Text;id;>spNewGraph->ExecProc();= dm->spNewGraph->Params->Items[0]->Value;>tGraphNames->Refresh();opt;>tGraphNames->Locate("ID",id, opt);

}(Sender);

}

//---------------------------------------------------------------------------__fastcall TfView::BitBtn2Click(TObject *Sender) //удалить граф

{(MessageDlg("Удалить граф "+dm->tGraphNamesNAME->AsString+"?",mtConfirmation,TMsgDlgButtons() << mbYes<<mbNo,0)== mrYes)

{>spDeleteGraph->Params->Items[0]->Value = dm->tGraphNamesID->Value;>spDeleteGraph->ExecProc();>tGraphNames->Refresh();

}(Sender);

}

//---------------------------------------------------------------------------__fastcall TfView::Button2Click(TObject *Sender) //удалить узел

{(MessageDlg("Удалить узел?",mtConfirmation,TMsgDlgButtons() << mbYes << mbNo,0)== mrYes)

{>spDeletePoint->Params->Items[0]->Value = dm->qGraphGRAPH_ID->Value;>spDeletePoint->Params->Items[1]->Value = dm->qGraphGRAPH_TIME->Value;>spDeletePoint->Params->Items[2]->Value = dm->qGraphX->Value;>spDeletePoint->Params->Items[3]->Value = dm->qGraphY->Value;>spDeletePoint->Params->Items[4]->Value = dm->qGraphA->Value;>spDeletePoint->Params->Items[5]->Value = dm->qGraphB->Value;>spDeletePoint->Params->Items[6]->Value = dm->qGraphR->Value;>spDeletePoint->ExecProc();>qGraph->Close();>qGraph->Open();

}(Sender);

}

//---------------------------------------------------------------------------__fastcall TfView::Button1Click(TObject *Sender) //добавить узел

{>ShowModal();(newPoint->ModalResult==mrOk)

{>spAddPoint->Params->Items[0]->Value = dm->tGraphNamesID->Value;>spAddPoint->Params->Items[1]->Value = 0;>spAddPoint->Params->Items[2]->Value = StrToFloat(newPoint->eX->Text);>spAddPoint->Params->Items[3]->Value = StrToFloat(newPoint->eY->Text);>spAddPoint->Params->Items[4]->Value = StrToFloat(newPoint->eA->Text);>spAddPoint->Params->Items[5]->Value = StrToFloat(newPoint->eB->Text);>spAddPoint->Params->Items[6]->Value = StrToFloat(newPoint->eRin->Text);>spAddPoint->ExecProc();>qGraph->Close();>qGraph->Open();

}(Sender);

}

//---------------------------------------------------------------------------__fastcall TfView::dsNamesDataChange(TObject *Sender, TField *Field)

{>qGraph->Close();>qGraph->Params->Items[0]->Value = dm->tGraphNamesID->Value;>qGraph->Params->Items[1]->Value = 0;>qGraph->Open();(Sender);

}

//---------------------------------------------------------------------------__fastcall TfView::eTimeChange(TObject *Sender)

{();();

}

//---------------------------------------------------------------------------__fastcall TfView::BitBtn3Click(TObject *Sender) //сохранить

{>qGraph->DisableControls();BK = dm->qGraph->GetBookmark();T= UpDown1->Position;*stm = new TStringList();>Add(dm->tGraphNamesNAME->AsString);>Add(eTime->Text);(dm->qGraph->First();!dm->qGraph->Eof;dm->qGraph->Next())

{X =dm->qGraphX->Value+dm->qGraphA->Value*T,=dm->qGraphY->Value+dm->qGraphB->Value*T;>Add(FloatToStr(X)+" "+FloatToStr(Y)+" "+dm->qGraphA->AsString+" "+dm->qGraphB->AsString+" "+dm->qGraphR->AsString);

}>qGraph->GotoBookmark(BK);>qGraph->FreeBookmark(BK);>qGraph->EnableControls();->DefaultExt="txt";->Filter="ASCII files (*.txt)|*.txt|";->Title="Сохранить граф "+dm->tGraphNamesNAME->AsString;(SaveDialog1->Execute())

{

{FileNameR = SaveDialog1->FileName;>SaveToFile(FileNameR);

}(...)

{("Не удалось сохранить",mtError, TMsgDlgButtons() << mbOK ,0);

}

}stm;

}

//---------------------------------------------------------------------------__fastcall TfView::Button3Click(TObject *Sender) //загрузить из файла

{->DefaultExt="txt";->Filter="ASCII files (*.txt)|*.txt|";->Title="Сохранить граф "+dm->tGraphNamesNAME->AsString;(OpenDialog1->Execute())

{ int T=0;*stm = new TStringList(); // а надо ли в Мемо?FileNameR = OpenDialog1->FileName;>LoadFromFile(FileNameR);(stm->Count>2)

{buf[100];(buf, stm->Strings[0].c_str());= String(buf);>spNewGraph->Params->Items[1]->Value = FileNameR ;>spNewGraph->ExecProc();id = dm->spNewGraph->Params->Items[0]->Value;>tGraphNames->Refresh();opt;>tGraphNames->Locate("ID",id, opt);(buf, stm->Strings[1].c_str());= StrToInt(String(buf));X,Y,A,B,R;(int i=2; i<stm->Count;i++ )

{(buf, stm->Strings[i].c_str());*p = strtok(buf, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));= strtok(NULL, " \r\n");= StrToFloat(String(p));>spAddPoint->Params->Items[0]->Value = id;>spAddPoint->Params->Items[1]->Value = 0;>spAddPoint->Params->Items[2]->Value = X-A*T;>spAddPoint->Params->Items[3]->Value = Y-B*T;>spAddPoint->Params->Items[4]->Value = A;>spAddPoint->Params->Items[5]->Value = B;>spAddPoint->Params->Items[6]->Value = R;>spAddPoint->ExecProc();

}

}>qGraph->Close();>qGraph->Open();stm;->Position=T;(Sender); }

}