[H-L-L.ru] |
Форма входа |
Меню сайта |
Categories | |
|
Главная » Статьи » 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 | ||
| ||