return true;
}
else return false;
}
// savolni chiqarish
void __fastcall TForm1::ShowQuestion()
{
int top;
int i;
// savol
Form1->Caption = IntToStr(nq)+"-savol";
Label1->Width = ClientWidth - Label1->Left -20;
Label1->Caption = Question.Text;
Label1->AutoSize = true;
if (Question.Img != "") // savolda tasvir bor
{
/* rasmni chiqarish uchun mumkin bo’lgan soxa balandligini aniqlash */
int RegHeight = Button1->Top-(Label1->Top
+ Label1->Height +10)//savolni chiqarish saxasi
-(RadioButton[1]->Height + 10) * Question.nAnswer;
Image1->Top = Label1->Top + Label1->Height + 10;
// rasmni yuklab, uni balandligini aniqlaymiz
Image1->Visible = false;
Image1->AutoSize = true;
// **** istisnoni qayta ishlashni qo’yamiz
Image1->Picture->LoadFromFile(Question.Img);
if(Image1->Height>RegHeight) //картинка не помещается
{
Image1->AutoSize = false;
Image1->Height = RegHeight;
Image1->Proportional = true;
}
Image1->Visible = true;
// положение полей отсчитываем от иллюстрации
top = Image1->Top + Image1->Height + 10;
}
else // положение полей отсчитываем от вопроса
top=Label1->Top + Label1->Height + 10;
// javob variantlari
for (i = 0; i < Question.nAnswer; i++)
{
RadioButton[i]->Top = top;
RadioButton[i]->Caption = Question.Answer[i];
RadioButton[i]->Visible = true;
RadioButton[i]->Checked = false;
top += 20;
}
}
// javobni tanlashda radiotugmani bosish
void __fastcall TForm1::RadioButtonClick(TObject *Sender)
{
int i =0;
while (!RadioButton[i]->Checked)
i++;
selAnswer = i+1;
//javob tanlandi, Keyingi tugmani ruxsatli qilsa
//bo’ladi
Button1->Enabled = true;
}
// ekrandan so’rovni o’chirish
void __fastcall TForm1::EraseQuestion(void)
{
Image1->Visible=false;//rasmni chiqarish maydonini
//yashirish
// javobni tanlash maydonini yashirish
for (int i = 0; i <4; i++)
{
RadioButton[i]->Visible = false;
RadioButton[i]->Checked = false;
}
Button1->Enabled=false;//Keyingi tugmani murojaatsiz
//qilish
}
//Button1 tugmasini bosish
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool ok; //navbatdagi savolni fayldan o'qish natijasi
switch(Button1->Tag) {
case 0://dastur ishi boshida birinchi savolni o'qish
// va chiqarishda OK tugmasini bosish
GetQuestion();
nq=1;
ShowQuestion();
Button1->Caption="Keyingisi";
Button1->Enabled=false;
Button1->Tag=1;
break;
case 1: //Keyingi tugmasini bosish
if(selAnswer==Question.rAnswer)//to'g'ri javobni
//tanlash
right++;
EraseQuestion();
ok=GetQuestion();
if (ok) {
nq++; //savollar hisoblagich
ShowQuestion();
}
else //savollar boshqa yo'q
{
FileClose(f);
//natijani chiqarish
AnsiString st; //xabar
int i; //yetib olgan daraja nomeri
Form1->Caption="Testlash natijasi";
st = "Savollar: " + IntToStr(nq)+
"\nTo'g'ri javoblar: "+IntToStr(right) + "\n";
//bahoni aniqlash
i=0;//faraz qilamiz, topshiruvchi barcha savollarga
//to'g'ri javob berdi
while ((right
i++;
st=st+mes[i];
Label1->Caption=st;
Button1->Caption="OK";
Button1->Enabled=true;
Button1->Tag=2;
}
break;
case 2: //dastur ishining oxirida OK tugmasini bosish
Application->Terminate(); //dastur ishini tugatish
}
}
//GetString funksiyasi fayldan satrlarni o'qiydi
//funksiya qiymati - o'qilgan belgilar soni
int __fastcall GetString(int f, AnsiString *st)
{
unsigned char buf[300]; // satr (bufer)
unsigned char *p = buf; // satrga ko'rsatkich
int n;//o'qilgan baytlar soni (FileRead f-ya qiymati)
int len = 0; // satr uzunlligi
n = FileRead(f, p, 1);
while (n!=0)
{
if (*p == '\r')
{
n= FileRead(f, p, 1); // '\n' ni o'qish
break;
}
len++;
p++;
n = FileRead(f, p, 1);
}
*p = '\0';
if ( len !=0 )
st->printf("%s", buf);
return len;
}
// fayldan butun sonni o'qish
int __fastcall GetInt(int f)
{
char buf[20]; // satr (bufer)
char *p = buf; // satrga ko'rsatkich
AnsiString st;
int n; //o'qilgan baytlar soni (FileRead f-ya qiymati)
int a; // fayldan o'qilgan son
n = FileRead(f, p, 1) ;
while ((*p>='0')&&(*p<='9')&&(n>0))
{
p++;
n = FileRead(f, p, 1);
}
if (*p = '\r')
n = FileRead(f, p, 1); // '\n' ni o'qish
*p = '\0';
//NULL- terminated-satrni AnsiString-satrga
//o'zgartirish
st.printf("%s",buf);
a = StrToInt(st);
return a;
}
Imtihon qiluvchi – 2
Imtihon qiluvchi – 2 dasturi (1.71-rasm) testlash jarayonini avtomatlashtirishga imkon beradi. Test fayl nomi dasturga – yuklanish bo’yrug’i sifatida ko’rsatib uning yuklanish vaqtida o’zatiladi (1.72-rasm).
Test o’zida aniqlangan tuzilishga ega bo’lgan XML-hujjatni tavsiflaydi (1.73-rasm). head va description tugunlar test haqida nomlanish va umumiy ma’lumotlardan iborat. q tugunlar – bu savollar. q tugundagi text atributi qiymati o’zida savolni, right atributi – to’g’ri javob nomerini tasvirlaydi. Xar bir a tuguni – bu javob variantidir. level tugunlari testlash natijasida baholash darajasi xaqida ma’lumotlardan tashkil topgan: score atributi erishgan daraja uchun kerak bo’ladigan, to’g’ri javoblar sonini, text atribut – baholash aniqlaydi. Test faylini, masalan, Bloknot yordamida yaratish mumkin. Misol sifatida 1.73-rasmda test keltirilgan.
C++da dasturlash
Savollar
if (shart)
if (shart)then operator
if (shart)operator1 else operator2
if (shart)
while (shart) operator
do{operator}while(shart)
if (shart)
while (shart) operator
do{operator}while(shart)
Do'stlaringiz bilan baham: |