Зертханалық жұмыс. С++ Buildеr 6 ортасындағы графика

С++ Buildеr 6 ортасындағы графика. Объектіні қозғалысқа келтіру. Анимация


Әдістемелік нұсқаулар


1.Графиктік файлдардың форматтары. C++ Builder ортасында графиктік файлдардың 3 түрлі типімен жұмыс жасауға болады.

Файл типі Кеңеймесі
Биттік матрица (Bitmaps) Пиктограммалар Метафайлдар (Metafiles) IPEG Image file EnhancidMetafiles . bmp . ico . wmf . ipg; . ipeg . emf


Бұл файлдардың барлығында суреттер немесе кескіндер сақталады, бірақ бұлардың файлдағы сақталу тәсілдері әртүрлі болады. Мысалы, .btm; .ico - кескіндер файлға биттік матрица түрінде сақталады.Бұл биттік матрицалар кескіндегі әрбір пиксельдің (нүктенің) түсін көрсетеді. Бұл биттік матрицада сақталған кескінді кез келген компьютер өзінің мүмкіндігіне қарай көрсете алады.Келесі.іco кеңеймесіменберілген файлда пиктограммалар (значоктар) сақталады. Пиктограммалардың өлшемін өзгерту қажет емес. Метафайлдарда кескіннің биттері сақталмайды, керісінше сол кескінді салу әдістері сақталады. Яғни олар сурет салу командалары.

2.Графиктік файлдарды сақтауға арналған C++ Builder-дің класстары. C++ Builder ортасында графиктік кескінді сақтауға арналған келесі кластар қолданылады:

T BitMap Бұл кластардың барлығы үшін түпкі класс

TIcon TGraphic. Мұндағы TРicture класы – өзінде

TMetafile қалған 3 кластың қасиеттерін қамти алады.

TPicture

Сондықтан, төмендегідей і

TPicture.TІcon; TРicture.TМetafile;

ТРicture.TBitMap

қасиеттерін шақыру мүмкін болады.


3. Кескінді немесе суретті қарау және суретті салу.

1.Imageкомпоненті. Бұл Additational жапсырмасында орналасқан. Мұнда жоғарыда айтылған графиктік файлдар сақталған кескінді көруге болады.

Негізгі қасиеттері:

Қасиеттің аты Қызметі және қабылдайтын мәндері
Picture(TPicture) бұл қасиет файлдағы кескінді Imageтерезесіне жүктейді. Imageтерезесінде суретті көруге ғана емес, сақтауға да болады.
AvtoSize (Boolean) Егер бұл қасиет true мәнге ие болса, онда іmage компонентінің өлшемдері ол көрсететін кескін өлшеміне қарай келтіріледі.
Stretch (Boolean) Егер бұл қасиет true мәнге ие болса, керісінше, кескін немесе сурет өлшемдері іmage компонентінің өлшемдеріне келтіріледі. Бұл қасиет пиктограммаларға әсер етпейді, себебі пиктограммалардың өлшемдері өзгермейді.
Center (Boolean) Егер бұл қасиет true мәнге ие болса, онда бұл кескін іmage компонентінің ортасында орналасады.
Transparent (Boolean) Егер бұл қасиет true мәнге ие болса, онда кескін көрінбей тұрады, (түссіз (празрачный) болып кетеді), бұл әсіресе бір кескіннің үстіне екіншісін беттестіргенде жиі қолданылады. Бұл қасиет тек биттік матрицаларға ғана жүреді.


Іmage компонентінің терезесіне кескінді жүктеу үшін немесе сақтау үшін сәйкесінше OpenPictureDialogжәне SavePictureDialogстандарт диалогтық терезе қолданылады.

4. Канва (Холст, кенеп, Canvаs. C++ Builder ортасында графикамен жұмыс істеу үшін кескінді орналастыратын орын немесе бет керек. C++ Builder – де ол үшін Canvаsқасиеті анықталған. Мұндай қасиет Image, Form, PaintBox, ListBox, StringGrid, BitMap, т.б. бар. Канваның өзінің қасиеттері және әдістері бар. Канва нүктелерден тұрады, бұл нүктелердің (х,у)координаталары болады. (4.16-сурет) Канваның (0,0) нүктесі оның сол жақ төбесінде орналасады.

Бұл (х,у) координаталары пиксельмен есептеледі. Пиксельдің ең негізгі қасиеті - оның түсі. Канвада сурет салу үшін оның Pixels қасиеті қолданылады. Бұл екі өлшемді массив түрінде анықталады және ол пикселдің түсін береді, яғни типі Pixels[X] [Y] : clColor;


Жаттығу жұмыстары


f(x)=exp(0.5*Х) графигін [-5,5 ] аралығында h=0.01қадаммен салу керек /4.17-сурет/.

4.17-сурет.f(x)=exp(0.5*Х) функция графигі


Программа мәтіні:

#include

#pragma hdrstop

#include "Unit1.h"

#include "math.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

floatf(floatx) //функцияның мәндерін есептеу

{

floatf=exp(0.5*x);

return f;

}

void GrafSizy() // график сызатын функция

{ float x1,x2,y1,y2,x0,y0;

float x,mx,my;


//график салынатын облысты даярлау

intIbik=Form1->Image1->ClientHeight; // image1-дин биктги

intIyz=Form1->Image1->Width; //image1-дин узындыгы

// Y осьти сызу, ол (xY,yY) басталып (xY,cY) нүктеде бітеді;

floatxY=Iyz/2;

floatyY=10;

floatcY=Ibik-10;

Form1->Image1->Canvas->MoveTo(xY,yY);

Form1->Image1->Canvas->LineTo(xY,cY);

// X осьти сызу ол (xХ,yХ) басталып (сХ, yX ) нүктеде бітеді;

floatxX=10;

floatyX=Ibik/2;

floatcX=Iyz-10;

Form1->Image1->Canvas->MoveTo(xX,yX);

Form1->Image1->Canvas->LineTo(cX,yX);

//бастапкы мандерди аныктау

x1=-5; x2=5; y1=f(x1); y2=f(x2);

//масштабты тагайындау

mx=Iyz/(x2-x1); my=Ibik/(y2-y1);

//координата бас нуктеге (xY,yX) бару

x0=xY; y0=yX;

Form1->Image1->Canvas->MoveTo(x0,y0);

//график сызу басталды

x=x1;

while (x<x2)

{

Form1->Image1->Canvas->Pixels[x0+mx*x][y0-my*f(x)]=clBlack;

x=x+0.01;

}

//

Form1->Image1->Canvas->TextOutA(x0,y0,'0');

Form1->Image1->Canvas->TextOutA(xY,yY,"Y");

Form1->Image1->Canvas->TextOutA(cX,yX,"X");

}

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

GrafSizy();

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Memo1->Text="Программа у=ехр(х) функциясынын [-5,5] аралыгындагы графигин 0.01 кадаммен салып шыгады";

}

5. Канвада қолданылатын сурет салу құралдарын пайдалану, Pen(қалам,қарындаш, , қылқалам. Канваның Pen(ТPen)қасиеті бар. ТРenқасиеті объект ретінде қарастырылады. Бұл объектінің өзінің де қасиеттері бар.

Негізгі қаситтері:

Color–қалам түсі

Width –қалыңдығы (қалыпты жағдайда 1 пикселге тең!)

Height - биіктігі

Style –қалам стилін білдіреді

Канваның келесі қасиеттерін пайдаланып суреттер салуға болады:

PenPos(TPoint)–бұл қасиет канваның қаламының бастапқы позициясын анықтайды, яғни қаламның қай жерде тұрғанының координатасын көрсетеді.

K=Image1->Canvas-> PenPos ;

MoveTo(x,y)–қасиеті қаламды координаталары (x,y) нүктесіне апарып қояды;

Draw(x,y; Graphic:);-бұл графиктік обьектіні канваға шығарады. График обьектісінің орнында .bmp, .ico немесе метафайл болуы мүмкін.

6. Суретке мәтін шығару.TextOut(x,y; const AnsiString Text);-бұл х,у нүктесінен бастап текст тұрақтысында сақталған мәтінді канваға шығарады.

7. Тұйық облыстарды бояу.FillRect(const TRect Rect); - канвада Rectтөртбұрышын бояйды. Бояу үшін қылқаламның түсі және стилі қолданылды.

FloodFill(x,y; TColor Color; TFillStyle FillStyle); - х,унүктесінен бастап немесе х,унүктесі жататын тұйық облысты Color түске FillStyleстилмен немесе өрнекпен /узор/ бояйды.

Brush–бұл канваның қасиеті болып табылады. Канвадағы тұйық фигураларды бояйды. Канваның өзінің фонын көрсетеді.

Brush обьектісінің негізгі қасиеттер:

Color–түсін береді

Style BSSolid-тұтас бояйды;

BSHorizontal–горизонталь сызықтармен бояйды.

8. Сурет салуға болатын обьектілер немесе компоненттер. Суретті салуға немесе қарауғаImageкомпонентіне басқа Formнемесе PaintBoxкомпоненттерін де қолдануға болады. Оларда даCanvas қасиеті бар.Формада сурет салғанда оның OnPaintоқиғасы қолданылады.

Image-де сурет салған кезде оның DrawIngқасиеті қолданылады.

Аннимация. Аннимация –бұл кесінді немесе суретті қозғалтуды айтады.

C++ Builder-де Windows -тың дайын аннимацияларын қолдануға болады немесе салынғансуреттің оның бөліктерін қозғалту арқылы жылжытуға болады.

Кескінді қозғалысқа келтірудің бірнеше тәсілдері бар:


  1. Timer компоненттері пайдаланылады. Мұнда уақытқа байланысты кескінді жылжытуға болады. Мұнда кескін алдын-ала процедура түрінде анықталып алынады. Уақытқа байланысты кескіннің қозғалатын бөлігінің координаталары өзгертіледі.

  2. Кескіннің түсін Canva-ның түсімен сәйкестендіру. Мұнда сурет салушы қаламның түсін өзгертіп отырады.

  3. Animate компоненті бар. Win32-де орналасқан.Бұл компонент Windows-тағы стандарт видеоклиптерді формада көрсету үшін қолданылады. Бұл видеоклиптердің кеңеймесі.AVI.Стандарт видеоклиптерініңShell 32.dllбиблеотекасы болады.

Өзіндік жұмыс тапсымалары

Тапсырмалар:
a) Функцияның графиктерін салу программасын құрыңыз:
1. y=a*x^2+b*x
2. y=x^3+a*x^2+b*x
3. y=a*sinx +b
4. y=-a*x^2+b*x
5. y=a*x^5
6. y=a*cos(x-1)+|x|
7. y=a/x
8. y=(x+a)/(x-b)
9. y=a+b/x+c/x^2
10. y=a-b/x-c/x^2


b) Суреттерді салу және оларды қозғалту программасын құрыңыз:

Вариант 1 –“тышқан” Вариант 2 – “нысана”


В
ариант 3 – “қорған”
Вариант 4 – “робот”


Вариант 5-“танк” Вариант 6 –“штанга”


Вариант 7-“Саққұлақ” Вариант 8 –“қоян”


Вариант 9- «чебурашка» Вариант 10 – «жұлдызша»


11 – зертханалық жұмыс.

С++ Buildеr 6 ортасында деректер қорын құру


Әдістемелік нұсқаулар


Borland C++ Builder қолданып, бiр қолданушылық деректер қорымен, сонымен қатар ДҚБЖ серверлерімен, яғни Oracle, Sybase, Informix, Interbase, MS SQL Server, DB2, сондай-ақ ODBC-көздерімен жұмыс жасайтын қосымша құруға болады.

C++ Builder-де деректер жиыны – бұл жазбалар жиынынан тұратын объект, олардың әрқайсысы өрістерден және ағымдағы жазба көрсеткіштерінен тұрады. Деректер жиыны C++ Builder –де TDataSet абстрактілі класының (абстрактілі клас- басқа кластарды туындататын класс, бірақ берілген кластан объект экзамплярын құруға болмайды) тума класстары болады. Мысалы, Data Access парағының компоненттер палитрасындағы TQuery, TTable және TStoredProc компоненттері - TDBDataSet мұрагерлері, олар өз кезегінде TDataSet мұрагерлері. TDataSet - кестелерді ашу, сұраныстарды және жолдар бойынша ауыстыруларды орындайтын құралдармен қамтамасыз ететін, кестелерді басқару және сұраныстар абстракциясынан тұрады.

TDataSource компоненті

DataSource компоненті TDataSet (TTable, TQuery, TStoredProc) және Data Controls компоненттері арасындағы аралық қызметін атқарады. Data Controls компоненттері - формада деректердің ұсынылуын қамтамасыз ететін басқару элементтері. TdataSet компоненттері Borland Database Engine (BDE) кітапханасымен байланысты басқарады, ал DataSource компоненті Data Controls компоненті деректерімен байланысты басқарады.

ДҚ-ның қарапайым қосымшаларында DataSource компоненті - TDataSet (TTable немесе TQuery) бір компонентімен және Data Controls (DBGrid, DBEdit және т.б.) бірнеше компонентімен байланысты. DataSource компонентінің TDataSet және DataControls компоненттерімен байланысы келесі қасиеттер мен оқиғаларды қолдану арқылы жүзеге асады:

DataSet қасиеті – TDataSource компонентінің атын белгілейді. DataSet мәнін объектілер инспекторы арқылы орнатылады.

Enabled қасиеті - TDataSource және Data Controls компоненттері арасындағы байланысты белсенді етеді немесе тоқтады. Егер Enabled қасиетінің мәні true болса, онда TDataSource Data Controls компоненттерімен байланысқан, яғни деректер жиыны өзгерiстерiн қабылдайды. Enabled қасиетін қолдану TDataSource пен Data Controls визуальды компоненттерiн уақытша айыруға мүмкiндiк бередi. Мысалы, іздеу жағдайында, экранда барлық кестелерді парақтағанда кестеде үлкен көлемдегі жазбаларды көрсетпеу үшін.

AutoEdit қасиеті - Data Controls компоненттерінде өңдеу қалай басталатынын бақылайды. Егер мәні true болса, онда өңдеу тәртiбі TDataSet компонентімен байланысқан Data Controls компонентiнің фокус алу кезiнен басталады. Қарсы жағдайда өңдеу режимі TDataSet компонентінің Edit әдісін шақыру кезінде басталады, мысалы DBNavigator компонентіндегі Edit батырмасын қолданушы басқаннан кейін.

OnDataChange оқиғасы – өрістер, жазбалар, кестелер, сұраныстар мәндерін өзгерту кезінде шақырылады.

OnUpdateData оқиғасы - қолданушы TDataSet-тегі ағымдағы жазбаны өзгерткісі келгенде шақырылады.

TTable компоненті

Деректер қорындағы кестелерге қатынаудың ең қарапайым жолы TТable компонентін қолдану, ол бір кестеге қатынауға рұқсат береді. Осы мақсатта жиі қолданатын қасиеттері төмендегілер:

Active – берілген кесте ашық (true) немесе жоқ (false) екенін көрсетеді.

DatabaseName - құрамында ізделінетін кесте бар каталог аты, немесе қашықтағы ДҚ псевдонимі (alias) (Псевдонимдер BDE конфигурациясы утилиталары арқылы орнатылады, немесе мәзірдің Database/Explore пункті арқылы шақырылатын SQL Explorer арқылы орнатылады). Бұл қасиет кесте жабық (оның Active қасиеті false болғанда) болған жағдайда ғана өзгертіледі.

Мысалы:

Table1->Active = false;

Table1->DatabaseName = "BCDEMOS"

Table1->Active = true;

TableName – кесте аты.

Exclusive – егер бұл қасиет true мәнін қабылдаса, кесте берілген қосымшамен ашық болғанда, кестені басқа ешқандай қолданушы аша алмайды. Егер бұл қасиет false (үнсіздік бойынша) болса, онда басқа қолданушыларда осы кестені аша алады.

IndexName – кестеге екінші индексті белгілейді. Бұл қасиетті кесте ашық болғанда өзгертуге болмайды.

MasterFields – басқа кестемен байланыс жасау үшiн өрiстiң атын анықтайды.

MasterSource – TDataSource компонентінің аты, TTable осы арқылы байланысқан кестеден деректерді алады.

ReadOnly - егер бұл қасиет true болса, кесте "тек қана оқу үшiн" тәртiбінде ашылған. Кесте ашық болғанда ReadOnly қасиетiн өзгертуге болмайды.

Fields - TField объектілері массиві. Бұл қасиетті қолданып, кесте құрылымы алдан-ала белгілі болғанда, өрістерге нөмірі бойынша қатынауға болады:

Edit1->Text=Table1->Fields[2]->AsString;

TTable компонентімен жұмыс жасағанда жиі қолданылатын әдістер:

Open және Close - Active қасиетіндегі True және False мәндеріне сәйкес.

Refresh - ДҚ деректер жиынын қайтадан санауға мүмкiндiк бередi.

First, Last, Next, Prior ағымдағы жазба көрсеткішін біріншіге, соңына, келесіге және алдынғы жазбаларға сәйкес ауыстырады, мысалы:

Table1->First();

while (!Table1->Eof)

{

//бірнәрсе жасаймыз...

Table1->Next();

};

Insert, Edit, Delete, Append – жазба қосу үшін кестелерді жазу, өңдеу, алып тастау, жазбаларды қосу режимдерiне ауыстырады

Post – өзгертілген деректерді физикалық сақтауды жүзеге асырады.

Мысалы,

Table2->Insert();

Table2->Fields[0]->AsInteger = 100;

Table2->Fields[1]->AsString =Edit1->Text;

Table2->Post();

Cancel – енгізілген өзгертулерді (физикалық сақталмаған) болдырмайды.

Формаға TТable компонентін енгізу үшін, келесілерді орындау қажет:


  • Data Access парағындағы TТable компонентін формаға немесе деректер модуліне орналастыру;

  • DatabaseName қасиетіне ДҚ орналасқан каталог немесе псевдоним атын беру;

  • TableName қасиетіне кесте атын беру немесе тізімнен кесте атын таңдау;

  • Формаға DataSource компонентін орналастыру және DataSet қасиетінің мәніне TТable компоненті атына беру;

  • Data Controls компоненттерін орналастыру және оларды DataSource компонентімен байланыстыру, яғни ДҚ кестелеріндегі деректер экранда көріну үшін.

TDBGrid компоненті

TDBGrid компоненті TTable немесе TQuery компоненттері деректерін экранда кестелік түрде көрсетуді қамтамасыз етеді. Қосымшада берілген ДҚ көрсету, қою, жою, өңдеу үшін TDBGrid қолданады. Әдетте TDBGrid DBNavigator-мен бірге қолданылады, сонымен қатар басқа да интерфейстік элементтерді TTable компонентінің First, Last, Next, Ptior, Insert, Delete, Edit, Append, Post, Cancel өңдеуші оқиға әдістерін қосу арқылы қолдануға болады.

Кестенің сыртқы түрін (мысалы, баған тақырыбы жазуын) өңдеушінің Columns Editor қасиеті арқылы өзгертуге болады. Columns Editor шақыру DBGrid компонетінің контекстті мәзірінен сәйкес опцияны таңдау арқылы немесе объектілер инспекторы бағанынан Columns қасиетінің мәнін беру арқылы жүзеге асады.


4.18-сурет. DBGrid бағаны қасиетін Columns Editor арқылы орнату.


DBGrid сипаттамаларын берудің тағы бір жолы TField компоненттері жиынының статистикалық әдістері бойынша. Деректер жиынындағы әр өріске құрылған TField типіндегі компонент арқылы DBGrid-те көріну үшін енін, форматын, маскасын, орналасатын жерін және басқа да сипаттамаларын орнатуға болады.

Float, Integer және Date өрістері DisplayMask қасиетіне ие. Бұл қасиетті, деректерді DBGrid компонентінде немесе Data Controls-тың басқа компонентінде форматтау үшін қолдануға болады. Мысалы, дата типті өрістерге mm-dd-yy экрандық форматын қолдануға болады.

Кейбір TField (мысалы, TStringField) компоненттері EditMask қасиетіне ие, ол DBGrid және басқа Data Controls компоненттеріне деректерді енгізуді орнатады.

EditMask қасиетін орнату үшін Object Inspector-дегі Field компонентін орнатып, EditMask қасиетін таңдау керек, кейін Input Mask Editor диалогты панелі көрінеді /4.19-сурет/. Өңдеу маскасын тексеру үшін Test Input өрісіне мән енгізу қажет


4.19-сурет. Input Mask Editor диалогтік панелі


Жаттығу жұмыстары


Қарапайым қосымша құру

ДҚ кестелерін өңдеуге арналған қарапайым қосымша құрып көрейік. Ол үшін BCDEMOS деректер қорындағы COUNTRY кестесін қолданамыз, C++ Builder комплектісінің құрамындағы.

Жаңа жоба құрамыз және оның басты формасын COUNT1.CPP деп сақтаймыз, ал жобаның өзін COUNT.MAK деп сақтаймыз. Data Access парағының компоненттер палитрасын қолдана отырып, TTable және DataSource компоненттерін формаға орналастырамыз. Table1 компонентінің Database Name қасиетіне BCDEMOS мәнін орнатамыз, TableName қасиетіне COUNTRY.DB мәнін, Active қасиетіне true мәніне теңестіреміз. Ары қарай DataSource1 компонентінің DataSet қасиетінің мәніне Table1 теңестіреміз.

Data Controls парағының компоненттер палитрасын қолданып, формаға DBGrid және DBNavigator компоненттерін орналастырамыз. Екі компоненттің DataSource қасиетіне DataSource1 мәнін меншіктейміз.


4.20-сурет. COUNT қосымшасының басты формасы


Алынған жобаны компиляциялауға және тестілеуге болады.

Бұдан басқа, осындай қосымша құрудың өте қарапайым әдісі бар. Осы мақсатта мәзірден Database/Explore пунктін таңдап, SQL Explorer утилитасын қолдануға болады. SQL Explorer терезесінің сол жақ бөлігінен Databases парағын таңдап және сәйкесінше деректер қоры атының жаңындағы "+" белгісін басып, Tables опциясын таңдау қажет. Осыдан кейін терезенің оң жақ бөлігінен Summary бүктемесін таңдаймыз және қажетті кесте аты (біздің жағдайда COUNTRY.DB) жұлдызшасын тышқан арқылы бос формаға әкелеміз. Формада TDBGrid, TDataSource және TTable компоненттері пайда болады. Осыдан кейін DBNavigator-ды қосып, оны TDataSource-пен байланыстырамыз және кестені белсенді етеміз.

4.21-сурет. SQL Explorer


Өзіндік жұмысқа тапсырмалар


  1. Студенттердің стипендиясын есептеу. Студенттерге төлейтін стипендияны есептейтін деректер қорын құру, онда келесі мәліметтер болуы керек: сынақ кітапшасының нөмірі, фамилиясы, аты, студенттің тегі, туған жылы, топ шифры, рейтинг, ақы коэффициенті, негізгі степендия, ақы суммасы, жалпы сумма, айлық төлем және т.б. Жоғарғы стипендия алатын студенттер санын, орташа стипендияны, стипендия алмайтындар санын анықтау (%-бен), сонымен қатар жалпы стипендиялық фондты анықтау.

  2. Автотранспорттық шаруашылық жұмысының есебі. Келесі мәліметтері бар деректер қорын құру: жүргізушінің табельдік нөмірі, фамилия және инициалы, класс, дата, жүру уақыты, тоннасы, жол парағының нөмiрi, автомобил типі, нөмірі және т.б. Әрбір жүргізушіге ағымдағы айлығын есептеу, 1 км_тоннасы – 3 000 т.

  3. Компьютерлік фирма жұмысы есебі. Келесі мәліметтері бар деректер қорын құру: компьютер маркасы, процессор типі, қатты диск және оперативті жады өлшемі , бағасы, бастапқы саны, сатылу датасы, сатып алушы фамилиясы, сатылғандар саны және т.б. Белгілі уақыт аралығында сатылған бір маркалы компьютерлер санын есептеу және тізімін шығару.

  4. Аэропорт кассасы жұмысының есебі. Келесі мәліметтері бар деректер қорын құру: рейс нөмірі, белгіленген пункт, ұшу уақыты, жолаушылардың фамилиясы және инициялы, документ нөмірі, рейске билет құны, рейс билеттерінің сатылу санын анықтау

  5. Оқытушылардың жүктемесiн есептеу. Келесі мәліметтер бойынша деректер қорын құру: табельдік нөмірі, фамилиясы, аты, тегі, жұмысқа кірген жылы, атағы, ғылыми дәрежесі, пәндері, семестр нөмірі, сағат саны, экзамен немесе сынық және т.б. Профессорлер, доценттер және ассистенттер құрамының пайызын есептеу, сонымен қатар әр оқытушының жалпы жүктемесін сағатпен есептеу.

  6. Автосалондағы машиналарды маркасына, шыққан жылына және бағасына және түсіне қарай сұрыптап шығарып беретін деректер қоры қосымшасын құру.

  7. Поликлиникадағы дәрігерлердің аты-жөні бойынша, мамандығы бойынша және еңбек өтілі бойынша деректер қоры қосымшасын құрыңыз.

  8. Кітапханадағы кітаптарды, авторы, шыққан жылы, бағасы және тиражы бойынша деректер қоры қосымшасын құрыңыз.

  9. Аэропорт анықтамалық бюросының мәліметтеріне сәйкес рейстерді бағыттары бойынша, апта күндері бойынша және номерлері бойынша деректер қоры қосымшасын құрыңыз.

  10. Стоматологқа келушілердің тізімі, келген күні бойынша және дәрігері бойынша деректер қоры қосымшасын құрыңыз.


12 – зертханалық жұмыс.

С++ Buildеr 6 ортасында деректер қорын басқару

</x2)

Borland C++ Builder ортасы деректер қорына қатынаудың үлкен мүмкіндіктеріне ие. Деректер қоры тек сақтауға емес, сонымен қатар ақпараттарды таңдау және өңдеуге, маңызды аспектілердің бірі оларға сұраныстар құруға арналған.

C++ Builder-дегі сұраныстар – өзімен бірге деректер жиынын ұсынатын объект. Әдетте сұраныстар құру үшін TQuery компоненті – TDataSet абстрактілі класының тума класстары қолданылады.


TQuery компоненті

TQuery компоненті TTable компоненті сияқты, TDataSet компонентінің барлық қасиеттеріне ие.

TDataSource компоненті Data Controls компоненттері және TQuery компоненті арасындағы өзара әрекеттерді басқарады. Әдетте қосымшада әрбір TQuery компонентіне бір DataSource компоненті болады.

TQuery компонентінің жиі қолданылатын қасиеттері:

Active - берілген сұраныс ашық (true) немесе жабық (false) екенін көрсетеді.

Eof, Bof – бұл қасиеттер, ағымдағы жазба көрсеткіші деректер жиынының сәйкесінше бірінші немесе соңғы жолында болғанда true мәнін қабылдайды, яғни сұраныстың орындалу нәтижесі болатын.

DatabaseName - сұраныс жүзеге асатын каталог аты немесе қашықтағы ДҚ псевдонимі (alias).

DataSource – параметрленген сұраныстар үшін деректер көзін көрсетеді.

Fields – бұл қасиет тек орындалу уақытында қол жетімді (run-time only) және реттік нөмірі бойынша анықталған өрісті модификациялау немесе оқу үшін қолданылады.

Params – құрамында параметрленген сұраныстар үшін параметрлер болады, келесі мысалдағы SomeNo сияқты

Select * from Orders where CustNo=:SomeNo

SQL – жолдық массив, құрамында SQL сұраныс операторының мәтіні бар.

TQuery компоненті экранда көрінетін деректер жиынын құру және анықтау, жолдарды өңдеу, жою және қою үшін SQL операторларын қолдануға рұқсат береді.

RequestLive – егер бұл қасиет true мәнін иемденсе, сұраныс синтаксисінің нәтижесі, қолданушы деректер өзгерісін ДҚ-да сақтай алады. Егер RequestLive false мәнін иемденсе сұраныс нәтижесі read-only күйіне қайтарылады.

TQuery компонентінің келесі әдістері жиі қолданылады:

ExecSQL – SQL-сұраныстарды орындайды. Бұл әдісті деректерді жою немесе өңдеу, қою кезінде қолдану керек. SELECT (деректерді таңдау) операторы орындалғанда Open әдісін қолдану керек. Келесі мысал ExecSQL әдісін қолдануды көрсетеді:

Query1->Close();

Query1->SQL->Clear();

Query1->SQL->Add("Delete emp where empno=1010");

Query1->ExecSQL();

Open - TQuery компонентін ашады. Ол Active қасиетіне true мәнін меншіктеу эквиваленті. Сұраныс нәтижесі деректер жиыны болғанда қолданылады (әдетте мұндай сұраныстар SELECT операторынан басталады). Open әдісін қолдану мысалы:

Query1->Open();

Close - TQuery компонентін жабады. Close шақыру эквиваленті Active қасиетіне false мәнін меншіктеу. Close әдісін қолдану мысалы:

Query1->Close();

TQuery компоненттерінің жиі қолданылатын әдістері:

First, Last, Next, Prior ағымдағы жазба көрсеткішін сәйкесінше бірінші, соңғы, келесі және алдынғы жазбаларға ауыстырады.

Insert, Edit, Delete, Append, Post, Cancel – сұраныс нәтижесін түрлендіреді. Insert әдісі жол сұранысы нәтижесіне енгізуге мүмкіндік береді, мысалы:

Query2->Insert();

Query2->Fields[0]->AsInteger = 100;

Query2->Fields[1]->AsString =Edit1->Text;

Query2->Post();

Post әдісі Insert, Update немесе Delete операцияларын бекітеді. Cancel әдісі Insert, Delete, Edit немесе Append аяқталмаған операцияларын болдырмайды.

Visual Query Builder

Visual Query Builder (VQB) – SQL-ге негізделген сұраныстар құрудың визуалды құралы болып табылады. Бұл құрал арқылы комплексті сұраныстар құруға болады.

Visual Query Builder –ді TQuery компонетін таңдау арқылы және тышқанның оң жағын басып, пайда болған контексті мәзірден Query Builder опциясын таңдау арқылы шақыруға болады.

Ескерту. Visual Query Builder - Borland C++ Builder барлық версиясының комплектісіне кірмеуі немесе орнатылмаған болуы мүмкін. Бұл жағдайда контекстті мәзірде сәйкес опция болмайды.

Query Builder таңдағаннан кейін экранда Databases диалогтік панелі пайда болады, ол ДҚ таңдауға және онымен байланысты жүзеге асыруға мүмкіндік береді /4.22-сурет/.


4.22-сурет. Деректер қоры псевдоним таңдау


Деректер қорымен байланысқаннан кейін экранда Visual Query Builder терезесі шығады және сұраныста қолданатын кестелерді таңдау диалогтық панелі пайда болады /4.23-сурет/.


4.23-сурет. ДҚ-мен байланысқаннан кейін Visual Query Builder

терезесі және Add Table диалогтық панелі пайда болады.


Visual Query Builder инструменттер панелі кестеде көрсетілген.

Батырма Міндеттері
New Жаңа сұраныс құрады.
Open Сұраныс файлын ашады.
Save As Сұранысты файлда сақтайды.
Options Options диалогтік панелін экранға орналастырады, сұраныстың әртүрлі опцияларын орнатуға мүмкіндік береді.
Table Table диалогтік панелін экранға орналастырады, SQL операторға кестелер енгізуге мүмкіндік береді.
Expression Expression диалогтік панелін экранға орналастырады, ол есептейтін өріс құруға мүмкіндік береді.
SQL Генерацияланған SQL- сұраныстың мәтіні бар терезе шығарады.
Run Выполняет сгенерированный запрос и выводит на экран результаты.
OK TQuery компонентінің қасиетіне генерацияланған сұранысты меншіктейді және Visual Query Builder жабады.
Cancel TQuery компонентінің қасиетіне генерацияланған сұранысты меншіктеуді болдырмайды және Visual Query Builder жабады.
Help Visual Query Builder үшін жүйелік көмекті экранға шығарады.
       

Add Table диалогтік панелі /4.23-сурет/ Visual Query Builder ашылған кезде немесе диалогтік панелдің сәйкес батырмаларын таңдағанда пайда болады. Ол сұранысқа кестелер енгізеді, ағымдағы ДҚ барлық кестелер тізімін шығарады. Егер Include System Tables опциясын белгілесек, сұраныстар құру үшін берілген ДҚ-ның жүйелік кестелері қол жетімді болады.


4.24-сурет. Visual Query Builder жұмыс бетінде тізімнен

таңдаған кесте пайда болады


Сұранысқа бір немесе бірнеше кесте енгізу үшін келесілерді орындау қажет:


  • Егер Add Table диалогтік панелі экранда жоқ болса, оны экранға шығару үшін инструменттер панелінен Table басылады.

  • Диалогты панелдегі кесте тізімінен кесте аты таңдалады және Add батырмасын басамыз. Таңдалған кесте құрылы сипаттамсы Visual Query Builder терезесінің жоғарғы бөлігінде көрінеді.

  • керекті кестелер сұранысқа енгізілгенше екінші қадам қайталана береді, соңынан Close батырмасы басылады.


Кестелердің бірінің бағанын сұранысқа енгізу үшін, баған атын таңдау керек және осы бағанды терезенің төменгі бөлігіндегі кестеге орналастырады.


4.25-сурет. Аралас сұраныс құру


Бірнеше кестелер ақпараттарын араластыру үшін, әртүрлі кестелер қалай байланысатынын анықтау керек. Visual Query Builder көмегімен кестелер байланысына қызмет ететін бағандарды анықтауға болады. осы мақсатта, кестеаралық байланысты жүзеге асыратын, байланысқан кестелердің бірінен баған атын таңдау керек, сосын тышқанның сол жағымен басып және курсорды басқа кестенің сәйкес бағанына алып барамыз. Нәтижесі – суретте көрсетілген.

Кестелердің байланысу критерийін өңдеуге және көруге болады, яғни Visual Query Builder терезесінің жоғары бөлігінде байланысты көрсететін сызықты екі рет шерту арқылы. Осылай Join диалогтік блогы пайда болады /4.26-сурет/:


4.26-сурет. Кестелердің байланысу критерийін таңдау


Сұраныстың сұрыптау критерийін анықтау үшін, Visual Query Builder терезесінің төменгі бөлігіндегі кестеден Criteria жолын қолдану керек.

Criteria жолы SQL операторының WHERE ұсынған сұраныс өрнектерін қабылдайды, кестеде көрсетілген:

Өрнек Сипаттамасы
= Тең
> Үлкен
< Кіші
!= Тең емес
Like Үлгiмен салыстырылатын символдар жолы
Between Бастапқы мәннен кіші емес және соңғы мәннен үлкен емес
In Тізім құрамында болады
     

Есептейтін өріс құру үшін батырмамен инструменттер панеліндегі Expression басамыз. Expression диалогтік панелі пайда болады /4.28-сурет/.

4.28-сурет. Expression диалогтік панелін шақыру


Expression диалогтік панелі сұраныста арифметикалық операцияларды көбейту, бөлулер, қосу, алу, бағандардың аты және avg, count, min, max, sum сияқты құрама өрнектерді қолдануға мүмкіндік береді.

Visual Query Builder-мен генерацияланған сұраныс орындауға болады. Сұраныс нәтижесі Result Window (нәтижелер терезесі) диалогтік панеліндегі экранда көрінеді. Бұл терезе бағандар сұранысы, таңдау критерийі, топтастыру және сұрыптау критерийлері дұрыс анықталғанына көз жеткізуге мүмкіндік береді. Сұранысты орындау үшін, батырмамен инструменттер панеліндегі Run-ды басу қажет. Result Window терезесі пайда болады /4.29-сурет/.

4.29-сурет. Сұраныс нәтижесі Result Window экранында көрінеді


4.30-сурет. SQL Statement терезесіндегі

SQL генерацияланған операторы


Сұраныс мәтінін тексеруге болады, SQL Statement терезесін қарау арқылы. Бүл терезе генерацияланған SQL операторын көрсетеді. Сұраныстар бағаны, таңдау критерийі, топтастыру немесе сұрыптау критерийі өзгергенде және қосқанда SQL Statement терезесі автоматты өңделеді /4.30-сурет/.

Visual Query Builder жұмысын аяқтау үшін инструменттер панеліндегі жасыл белгісі бар батырманы басу керек. Осыдан кейін TQuery компонентінің Visual Query Builder белсенді болған SQL қасиетіне SQL-сұранысының генерацияланған мәтіні меншіктеледі.


Жаттығу жұмыстары


1-жаттығу.


TQuery компонентін қолдану

TTable, TQuery, TDataSource, TDBGrid компоненттерін қолданып қосымша құрып көрейік. Бұл мақсатқа Customer.db және Orders.db кестелерін пайдаланамыз, олар Borland C++ Builder комплектісіне кіретін BCDEMOS деректер қорында орналасқан. Құрылған қосымша Customer кестесінен клиенттер тізімін, Orders кестесінен олардың тапсырыстарын шығару керек, сонымен қатар клиент нөмірі диапазонын таңдауға рұқсат беруі қажет.

Жаңа прект құрамыз және оның басты формасын CUST1.CPP деп, ал жобаны CUST.MAK деп сақтаймыз.

Форма тақырыбын "Контроль заказов" тақырыбына өзгертеміз. Формаға TDBGrid компонентін, екі TGroupBox компонентін, бір Ttable компонентін, екі Tquery компонентін, үш TDataSource компонентін орналастырамыз. GroupBox1 компонентіне үш TRadioButton компонентін және екі TButton компонентін қоямыз. GroupBox2 компонентіне екі TEdit компонентін және бір TButton компонентін қоямыз.


4.31-сурет. CUST қосымшасы формасына

компоненттерді орналастыру


Бұл компоненттерге келесі қасиеттерді орнатамыз:

Компонент аты Қасиеті Мәні
Table1 DatabaseName BCDEMOS
TableName CUSTOMER.DB
Active False
DataSource1 DataSet Table1
DBGrid1 DataSource DataSource1
Query1 Database Name BCDEMOS
SQL select * from orders
Active False
DataSource2 DataSet Query1
Query2 DatabaseName BCDEMOS
DataSource3 DataSet Query2
Button1 Caption Открыть список &клиентов
Button2 Caption Открыть список &заказов
RadioButton1 Caption Клиенты
Checked True
RadioButton2 Caption Заказы
GroupBox1 Caption
GroupBox2 Caption
Button3 Caption Установить &диапазон
Edit1 Text
Edit2 Text
Label1 Caption Начало:
Label2 Caption Конец:
RadioButton3 Caption Заказы клиентов

Button1 батырмасына OnClick оқиғасын құрамыз:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if (Table1->Active)

{

Table1->Close();

Button1->Caption = "Ioe?uou nienie &eeeaioia";

}

Else

{

Table1->Open();

Button1->Caption= "Cae?uou nienie &eeeaioia";

}

}

Енді осы батырманы басқанда Customer кестесі бірде ашылады, бірде жабылады, сонымен қатар батырмадағы жазу өзгеріп отырады.

Button2 батырмасына OnClick өңдеуші оқиғасын құрамыз :

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if (Query1->Active)

{

Query1->Active = false;

Button2->Caption = "Ioe?uou список &caeacia";

}

Else

{

Query1->Active = true;

Button2->Caption = "Заe?uou список &caeacia";

}

}

Button2 батырмасын басқанда Query1 сұранысы бірде ашылады, бірде жабылады, құрамында тапсырыстар тізімі бар:

RadioButton1 және RadioButton2 радиобатырмаларына OnClick өңдеуші оқиғасын құрамыз:

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{

DBGrid1->DataSource = DataSource1;

}

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

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{

DBGrid1->DataSource =DataSource2;

}

Енді осы радиобатырмалар көмегімен клиенттер тізімі және тапсырыстар тізімі арасында ауысуға болады.

Button3 батырмасына OnClick өңдеуші оқиғасын құрамыз:

void __fastcall TForm1::Button3Click(TObject *Sender)

{

if (Table1->Active)

{

Table1->SetRangeStart();

Table1->Fields[0]->AsString = Edit1->Text;

Table1->SetRangeEnd();

Table1->Fields[0]->AsString = Edit2->Text;

Table1->ApplyRange();

}

}

Енді Edit1 және Edit2 өңдеу өрістері және Button3 батырмасы көмегімен клиенттер нөмірі диапазонын таңдауға болады, яғни олар туралы мәліметтер DBGrid1 көрінуі үшін.

Сосын Visual Query Builder арқылы Query2 компонентінің SQL қасиетін орнатамыз. Деректер қоры аты ретінде BCDEMOS таңдаймыз және сұранысқа CUSTOMER және ORDERS кестелерін енгіземіз. Ары қарай кестелер арасында байланыс орнатамыз.

Сұранысқа келесі өрістерді енгіземіз:


  • Customer.CustNo

  • Customer.Company

  • Orders.OrderNo

  • Orders.AmountPaid

4.32-сурет. Аралас сұраныс құру үшін Visual Query Builder қолдану


Енді сұраныс нәтижесін сатып алушы нөмірі бойынша сұрыптаймыз және Visual Query Builder –ден шығамыз.

Объектілер инспекторын қолданып, Query2 компонентін таңдаймыз және Active қасиеті мәнін true теңестіреміз.

RadioButton3 радиобатырмасына OnClick өңдеуші оқиғасын құрамыз:

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

DBGrid1->DataSource= DataSource3;

}

Қосымшаны компиляциялаймыз. Қос деректер жиынын ашу үшін. батырмамен "Открыть список заказов" басамыз. Радиобатырмаларды қолданып, олардың арасында ауысып көреміз.


4.33-сурет. Дайын қосымша осылай көрінеді


2-жаттығу

Деректер модулі.

Алдынғы жаттығуда Data Access беті компоненттерін қосымшаның басты формасына орналастырдық. Бірақ мұндай жағдай, формада көп санды көрінбейтін компоненттердің болуы қолданушы интерфейсін жобалауды қиындатады. Осы мақсатта C++ Builder-де арнайы деректер модулі - TDataModule типі бар. Осы типтегі компонентті шартты түрде форма түрі деп қарастыруға болады. мұндай компонент-контейнер Data Access беті компоненттерін құрамында ұстай алады, ал өзі бағдарламаның орындалу уақытында қолданушыға көрінбейді.

Наши рекомендации