Buxoro davlat universiteti




Download 3,73 Mb.
bet20/23
Sana02.06.2021
Hajmi3,73 Mb.
#14738
1   ...   15   16   17   18   19   20   21   22   23
Test fayllari deb nomlangan Pageda, quyidagi komponentlarni joylashtirdik. Label, SpeenEdit, SpeedButton, ScrollBox va Edit komponentalar pagega bor (2.3.2-chizma). Bularning vazifasi quyidagidan iboratdir.

2.3.2-chizma. Dasturning test fayllari qismi.



Formadagi va ScrollBox dagi Labellarda izoh sifatida foydalanilgan. Formadagi SpeenEdit komponenti- testdagi fayllarni soni, Variantdagi savollar sonini olish uchun ishlatilgan. Natural son qabul qila oladi. Test fayllaro soni 10 tagacha olsak yetarli deb o`yladim.

2.3.3-chizma. Test fayllari bo`limi 10 ta fayl tanlashning ko`rinishi.

SpeenEdit komponentasining qiymati orqali test fayllar sonini boshqariladi va fayllarni sonini kamaytirish imkoniyati mavjuddir. Buning uchun quyidagi change procedura hodisasi yoziladi:

procedure TForm1.TestFaylCountChange(Sender: TObject);

var


n,i:integer;

begin


n:=TestFaylCount.Value;

For i:=1 to 10 do

begin
if i>n then

begin


(FindComponent('F'+IntToStr(i)) As TEdit).Visible:=False;

(FindComponent('B'+IntToStr(i)) As TSpeedButton).Visible:=False;

(FindComponent('UT'+IntToStr(i)) As TEdit).Visible:=False;

(FindComponent('T'+IntToStr(i)) As TSpinEdit).Visible:=False;

(FindComponent('L'+IntToStr(i)) As TLabel).Visible:=False;

(FindComponent('F'+IntToStr(i)) As TEdit).Text:='';

end

else


begin

(FindComponent('F'+IntToStr(i)) As TEdit).Visible:=True;

(FindComponent('B'+IntToStr(i)) As TSpeedButton).Visible:=True;

(FindComponent('UT'+IntToStr(i)) As TEdit).Visible:=True;

(FindComponent('T'+IntToStr(i)) As TSpinEdit).Visible:=True;

(FindComponent('L'+IntToStr(i)) As TLabel).Visible:=True;

end;

end;


end;

ScrollBoxda mos ravishda faylning joylashgan manzilini qabul qilish uchun Edit komponentasiga olishimiz uchun SpeedButton komponetasining OnClick hodisasidan foydalanganmiz, ammo faylni tanlashimiz uchun esa OpenDialog komponentasi kerak bo`ladi. Dastur matni quyidagicha:

procedure TForm1.B1Click(Sender: TObject);

var


B:TSpeedButton;

F:TEdit;


Num,name1,s:String;

begin


if (Sender is TSpeedButton) then B:=(Sender as TSpeedButton);

Name1:=B.Name;

Num:=Copy( Name1, 2, (Length(Name1)-1) );

F:=(FindComponent('F'+Num) As TEdit);

if OD.Execute then

begin s:=F.Text;

F.Text:=OD.FileName;

if s=F.Text then

F1Change(F);

end;


end;

Fayl tanlangandan keyin esa, U fayl bizning talabga javob berishini tekshirishimiz zarur bo`ladi. Bu ishni qachon bajarishimiz kerak deb o`ylaysiz? Albatta fayl manzili aniq bo`lgandan keyin. Bu hodisa fayl manzili yozilgandan Edit komponentasi Qiymati o`zgargan paytda bajarilishi kerak va u quyidagicha:

procedure TForm1.F1Change(Sender: TObject);

var L:TLabel;

F,UT:TEdit;

Num,name1:String;

W,D,Table:Variant;

i,n,r,c:integer;

ch:boolean;

begin


if (Sender is TEdit) then F:=(Sender as TEdit);

Name1:=F.Name;

Num:=Copy( Name1, 2, (Length(Name1)-1) );

UT:=(FindComponent('UT'+Num) As TEdit);

L:=(FindComponent('L'+Num) As TLabel);

if F.Text<>'' then

begin

if FileExists(F.Text) then



begin

// fayldagi wordda jadvallar to`griligini aniqlash

try

try


ch:=false;

W:=CreateOleObject('Word.Application');

//ShowMessage(F.Text);

W.Documents.Open(FileName:=F.Text,ReadOnly:=true);

//W.Visible:=true;

n:=W.ActiveDocument.Tables.Count;

//ShowMessage(IntToStr(n));

if n<=0 then

begin UT.Text:='0'; L.Caption:=''; end

else


begin

for i:=1 to n do

begin

r:=W.ActiveDocument.Tables.item(i).Rows.Count;



c:=W.ActiveDocument.Tables.item(i).Columns.Count;

if not((r=5) and (c=1)) then

begin

ch := true;



break;

end;


end;

if ch then

begin

L.Caption:=IntToStr(i)+' - jadvalda xatolik';



UT.Text:='';

end


else

begin


L.Caption:='OK';

UT.Text:=IntToStr(n);

end;

end;
except



L.Caption:='Fayl bilan ishlashga xatolik';

UT.Text:='';

end;

finally


W.Quit;

W:=UnAssigned;

end;
end

else


begin

UT.Text:='';

L.Caption:='Fayl mavjud emas';

end;


end

else


begin

L.Caption:='';

UT.Text:='';

end;


end;

Test faylidagi test jadvallari tekshirilgandan so`ng umumiy testlar soni aniqlanadi va Editga yoziladi. Bundan so`ng siz umumiy testlar sonidan ko`p qiymat olsihga ruxsat bermasligingiz kerak bo`ladi. Buning uchun quyidagi kod berilishi kerak

procedure TForm1.UT1Change(Sender: TObject);

var L:TLabel;

UT:TEdit;

T:TSpinEdit;

Num,name1:String;

begin
if (Sender is TEdit) then UT:=(Sender as TEdit);

Name1:=UT.Name;

Num:=Copy( Name1, 3, (Length(Name1)-2) );

if (Num<>'11') then

T:=(FindComponent('T'+Num) As TSpinEdit);

L:=(FindComponent('L'+Num) As TLabel);

//showmessage('L'+Num);

if UT.Text<>'' then

begin


//

end


else

begin


if (Num<>'11') then

T.Value:=0;

L.Caption:='';

end;


end;

Bunda testlar soni aniq bo`ldi va har biriga nechta testligi ko`rsatildi. Buning natijasi Variantdagi testlar soniga bo`rib tushishi kerak. Bu quyidagicha

procedure TForm1.T1Change(Sender: TObject);

var T:TSpinEdit;

UT:TEdit;

Num,name1:String;

i,s:integer;

begin


if (Sender is TSpinEdit) then T:=(Sender as TSpinEdit);

Name1:=T.Name;

Num:=Copy( Name1, 2, (Length(Name1)-1) );

UT:=(FindComponent('UT'+Num) As TEdit);

if (UT.Text<>'') then

begin


if T.Value>StrToInt(UT.Text) then

T.Value:=0;

if T.Value<0 then T.Value:=0;

end


else

begin


T.Value:=0;

end;


s:=0;

For i:=1 to 10 do

s:=s+(FindComponent('T'+IntToStr(i)) As TSpinEdit).Value;

TestCount.Value:=s;

End;


Bu jarayonni 10 yoki 11 marta yozmaslik uchu bizlar dastur matnini umulashtirganmiz sababi qaysi obyekt kelishi oldindan aniqmasligidadir. Bundan so`ng esa Qolgan komponentalarning xuddi shu hodisasiga joriy hodisani uladik.

Agar biz testlar faylini tanlaganimizdan so`ng, u biz qo`ygan fayl tayyorlash talabiga to`g`ri kelsa, “OK” degan qiymat Label komponentasiga namoyish etiladi. Aks holda, qaysi tartib nomeridagi fayl bo`lsa, o`sha faylning tartib raqami bilan shu jadvalda xatolik mavjud degan yozuv “Fayl to`g`riligining tasdig`i” sohasida ko`rinadi. Masalan: birinchi faylga talabga mos tarzdagi faylni tanlasak, bizga “OK” yozuvi va ikkinchi faylga noto`g`ri faylni joylashtirsak, “n-jadvalda xatolik ” yozuvi Labelda ko`rinadi (2.3.4-chizma).



2.3.4-chizma. Test fayllariga misol dasturi.



Variantdagi savollar soniga umumiy savollardan nechtasi tanlangan bo`lsa, shu qiymatlarning yig`indisi natija sifatida kelib tushadi. 2.3.3-rasmda ko`ringanidek, “umumiy savollar soni = 11”, “nechta test = 0” va “Variantdagi savollar soni =0” . Agar “nechta test =4” deb bersak, avtomatik tarzda “Variantdagi savollar soni = 4” bo`ladi (2.3.5-chizma).

2.3.5-chizma. Test fayliga test sonini aniqlash.



Agar dasturda nechta fayl tanlangan bo`lsa ularni ishlatish majburiydir. Ya`ni test fayli tanlangandan keyin, shu faylning umumiy testlar sonidan nechta test deb nomlanuvchi sohasining qiymati nolga teng bo`lishi mumkin emas .



Download 3,73 Mb.
1   ...   15   16   17   18   19   20   21   22   23




Download 3,73 Mb.