2.3. Test variantini formalari va uning modullari.
Biz tayyorlagan dasturimizda bitta forma joylashtirilgan bo`lib, formaning ko`rinishi (2.3.1-chizma) da ko`rsatilgan.
2.3.1-chizma. Dasturning ko`rinish oynasi.
Dasturimizda 1 ta formadan foydalangan bo`lib ko`p formali matn yozishni oldini oldik. Lekin ko`p oynali formalar o`rniga PageControl komponentasidan foydaladik. Bu PageControl komponentasiga 6 ta bo`lim yaratdik va har bir bo`lim bitta page bo`lib ular quyidagilardan iborat:
Test fayllari
Tasdiqlash
Yordam
Talaba uchun testni generatsiyalash
Mualliflar
Testni shakllantirish
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 .
0>
Do'stlaringiz bilan baham: |