[H-L-L.ru]

Форма входа

Меню сайта

Categories
Программы с GUI [8]
Создание программ с графическим интерфейсом пользователя

Главная » Статьи » C++ Builder 6 - GUI » Программы с GUI

Программа для тестирования (тест)
Когда мне понадобилось написать программу для тестирования по одному из предметов, оказалось, что в интернете мало материала на эту тему. К тому же главным недостатком найденных исходников было то, что они брали вопросы и ответы из текстового файла, что не делает надежным процесс тестирования. Поэтому я разработал свою программу.
Она состоит и четырех форм
.
Первая-для приветствия, вторая-сам процесс тестирования, третья-вывод результатов, четвертая-справка по особенностям работы(в моем случае это было пояснение некорректно отображаемых символов).

Тест состоит из 10 вопросов(их число может быть любым). Вот заготовки форм:

Form1:



Form2:



Form3:



Form4:



Дизайн

Кнопки BitBtn

За рисунок на кнопке отвечает свойство Kind. Сперва изменяете это свойство на нужное, а затем в Caption прописываете то, что будет написано на кнопке.

Формы

Размер формы выберите свой, в зависимости от длин вопросов и ответов.В BorderStyle выберите BsSingle. Так же рекомендую установить в false все свойства BorderIcons, чтобы закрытие приложения мы контролировали сами. На первой форме можно оставить в true подсвойство biMinimize. В свойстве Position выберите poDesktopCenter, чтобы форма появлялась на середине экрана.

Лейблы

Свойство AutoSize в false, чтобы кусок последней буквы не отсекался(актуально для формы с приветствием,справкой и результатами, для формы с тестированием лучше это свойство оставить в true). На форме с результатами слова "Вы набрали" и "баллов" пишутся в отдельных лейблах.
За цвет, размер и тип текста отвечает свойство Font(color, size, name). Для тестирования я использовал шрифт Verdana. Для отображения надписей на других формах-Monotype Corsiva.

MainMenu

Щелкаем по нему дважды и в Caption прописываем "Справка". Для вызова обработчика события нужно щелкнуть по слову "Справка"  в окне с заголовком Form2->MainMenu1 .

Вот код для каждой из форм:

Важно!
Текст модуля нельзя копировать напрямую, т.к. это вызовет ошибки при компиляции(относится к обработчикам событий). Следует сперва щелкнуть, например, по кнопке, а затем вставить код:

Пример для
BitBtn1:

Щелкаем дважды по кнопке BitBtn1, появится:

void __fastcall TForm3::BitBtn1Click(TObject *Sender)
{
     
}


Затем между фигурными скобкам вставляем код:

 Form1->Close();
 Form2->Close();
 Form3->Close();
 Form4->Close(); 


И в итоге получаем:

void __fastcall TForm3::BitBtn1Click(TObject *Sender)
{
 Form1->Close();
 Form2->Close();
 Form3->Close();
 Form4->Close();       
}


Unit1.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

extern int pravil_otvet;//переменная, для хранения правильного ответа к вопросу

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
 Form1->Close();
 Form2->Close();
 Form3->Close();
 Form4->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{

           Form2->Label5->Caption="Как называют манекенщицу супер-класса?";
           Form2->Label1->Caption="Топ-модель";
           Form2->Label2->Caption="Тяп-модель";
           Form2->Label3->Caption="Поп-модель";
           Form2->Label4->Caption="Ляп-модель";
           pravil_otvet=1;//присваиваем номер правильного ответа

 Form1->Visible=false;
 Form2->Visible=true;
}
//---------------------------------------------------------------------------

Unit2.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

int s=0, i=0, pravil_otvet, nomer=0;//
s-сумма правильных ответов, i-вспомогательная переменная, nomer-номер текущего вопроса

TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::N1Click(TObject *Sender)
{
 Form4->Visible=true;       
}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn2Click(TObject *Sender)
{
 Form2->Visible=false;
 Form3->Visible=true;
 Form3->Label2->Caption=s;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
 if(RadioButton1->Checked==true)i=1;//проверяем, какой ответ был выбран
 if(RadioButton2->Checked==true)i=2;
 if(RadioButton3->Checked==true)i=3;
 if(RadioButton4->Checked==true)i=4;
 if(i==pravil_otvet)s++;//если выбранный и правильный совпадают, то увеличиваем сумму на единичку
 i=0;//обнуление требуется для корректного подсчета суммы
 
 RadioButton1->Checked=false;//очищаем нажатую кнопку
 RadioButton2->Checked=false;
 RadioButton3->Checked=false;
 RadioButton4->Checked=false;

 nomer++;//номер вопроса изменяется с каждым нажатием кнопки

switch(nomer)
{
  case 1:
           Form2->Label5->Caption="Кто вырос в джунглях среди диких зверей?";
           Form2->Label1->Caption="Колобок";
           Form2->Label2->Caption="Маугли";
           Form2->Label3->Caption="Бэтмен";
           Form2->Label4->Caption="Чарльз Дарвин";
           pravil_otvet=2;
                   break;

  case 2:
           Form2->Label5->Caption="Как называлась детская развлекательная программа, популярная в прошлые годы?";
           Form2->Label1->Caption="АБВГДейка";
           Form2->Label2->Caption="ЁКЛМНейка";
           Form2->Label3->Caption="ЁПРСТейка";
           Form2->Label4->Caption="ЕЖЗИКейка";
           pravil_otvet=1;
                   break;

  case 3:
           Form2->Label5->Caption="Как звали невесту Эдмона Дантеса, будущего графа Монте-Кристо? ";
           Form2->Label1->Caption="Мерседес";
           Form2->Label2->Caption="Тойота";
           Form2->Label3->Caption="Хонда";
           Form2->Label4->Caption="Лада";
           pravil_otvet=1;
                   break;

  case 4:
           Form2->Label5->Caption="Какой цвет получается при смешении синего и красного?";
           Form2->Label1->Caption="Коричневый";
           Form2->Label2->Caption="Фиолетовый";
           Form2->Label3->Caption="Зелёный";
           Form2->Label4->Caption="Голубой";
           pravil_otvet=2;
                   break;
          
  case 5:
           Form2->Label5->Caption="Из какого мяса традиционно готовится начинка для чебуреков?";
           Form2->Label1->Caption="Баранина";
           Form2->Label2->Caption="Свинина";
           Form2->Label3->Caption="Телятина";
           Form2->Label4->Caption="Конина";
           pravil_otvet=1;
                   break;
          
  case 6:
           Form2->Label5->Caption="Какой народ придумал танец чардаш?";
           Form2->Label1->Caption="Венгры";
           Form2->Label2->Caption="Румыны";
           Form2->Label3->Caption="Чехи";
           Form2->Label4->Caption="Молдаване";
           pravil_otvet=1;
                   break;
          
  case 7:
           Form2->Label5->Caption="Изучение соединений какого элемента является основой органической химии?";
           Form2->Label1->Caption="Кислород";
           Form2->Label2->Caption="Углерод";
           Form2->Label3->Caption="Азот";
           Form2->Label4->Caption="Кремний";
           pravil_otvet=2;
                   break;

  case 8:
           Form2->Label5->Caption="Кто открыл тайну трёх карт графине из «Пиковой дамы» А. С. Пушкина?";
           Form2->Label1->Caption="Казанова";
           Form2->Label2->Caption="Калиостро";
           Form2->Label3->Caption="Сен-Жермен";
           Form2->Label4->Caption="Томас Воган";
           pravil_otvet=3;
                   break;

  case 9:
           Form2->Label5->Caption="В какой стране была пробурена первая промышленная нефтяная скважина?";
           Form2->Label1->Caption="Кувейт";
           Form2->Label2->Caption="Иран";
           Form2->Label3->Caption="Ирак";
           Form2->Label4->Caption="Азербайджан";
           pravil_otvet=4;
                   break;

  case 10:
           BitBtn1->Enabled=false;
           RadioButton1->Enabled=false;//делаем кнопки "не нажимаемыми", чтобы пользователь нажал на "закончить тест"
           RadioButton2->Enabled=false;
           RadioButton3->Enabled=false;
           RadioButton4->Enabled=false;
}
}
//---------------------------------------------------------------------------


Unit3.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm3::BitBtn1Click(TObject *Sender)
{
 Form1->Close();
 Form2->Close();
 Form3->Close();
 Form4->Close();       
}
//---------------------------------------------------------------------------


Unit4.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm4::BitBtn1Click(TObject *Sender)
{
 Form4->Visible=false;//скрываем форму справки после просмотра       
}
//---------------------------------------------------------------------------

Программа в процессе работе:



Если вам требуется вместе с вопросом показать изображение, то используйте компонент Image и его свойство Picture. Разместите на форме нужно количество этих компонентов и в каждый подгрузите нужную картинку. Для всех свойство Visible установите в false. Затем в нужном вопросе допишите код, например:

           Form2->Label5->Caption="Как звали невесту Эдмона Дантеса, будущего графа Монте-Кристо? ";
           Form2->Label1->Caption="Мерседес";
           Form2->Label2->Caption="Тойота";
           Form2->Label3->Caption="Хонда";
           Form2->Label4->Caption="Лада";
           Form2->Image1->Visible=true;
           pravil_otvet=1;
                   break;

Т.е. вы покажете изображение подгруженное в
Image1. Но чтобы при переходе к следующему вопросу изображение убралось или заменилось новым, перед switch нужно дописать:

Form2->Image1->Visible=false;
Form2->Image2->Visible=false;

...


Form2->Image[i]->Visible=false;

В зависимости от количества ваших изображений. Это простой способ и поможет избежать отображения сразу двух изображений. Как вариант-дописать в следующем вопросе:

  case 3:
           Form2->Label5->Caption="Как звали невесту Эдмона Дантеса, будущего графа Монте-Кристо? ";
           Form2->Label1->Caption="Мерседес";
           Form2->Label2->Caption="Тойота";
           Form2->Label3->Caption="Хонда";
           Form2->Label4->Caption="Лада";
           Form2->Image1->Visible=true;
           pravil_otvet=1;
                   break;

  case 4:
          
Form2->Image1->Visible=false; //скрываем
           Form2->Label5->Caption="Какой цвет получается при смешении синего и красного?";
           Form2->Label1->Caption="Коричневый";
           Form2->Label2->Caption="Фиолетовый";
           Form2->Label3->Caption="Зелёный";
           Form2->Label4->Caption="Голубой";
           Form2->Image2->Visible=true; //успешно скрыв старое изображение, показываем новое
           pravil_otvet=2;
                   break;



Источник: создание теста,тест на c++,тест в c++ builder,как сделать программу для тестирования,тесты на си,написать тест c++

Всего комментариев: 2
1 Deer  
Привет Автор! =) Помоги пожалуйста.
Я собрал твой код всё работает!
только вот пытаюсь сделать чтобы прога выбрала 20 case из 50 random, а после 20 вопросов вывело на следующую форму где показано сколько правильных ответов в %.

2 Admin  
Создайте соответствующую тему на форуме.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Полная версия сайта