- •Задача 1. Конвертер
- •Задача 2. Фунты-килограммы
- •Задача 3. Сила тока.
- •Задача 4. Сопротивление
- •Задача 5. Кафе
- •Задача 6. Любимый напиток
- •Задача 7. Электроэнергия
- •Задание 8. Осаго
- •Задание 9.Просмотр иллюстраций
- •Задача 10. Калькулятор
- •Задача 11. Калькулятор-2
- •Задача 12.Секундомер
- •Задача 13. Угадай число
- •Задание 14.Угадай число-2
- •Задание 15.Запуск Internet Explorer
- •Задание 16.Конвертор
- •Задание 17.Конвертор 2
- •Задание 18.Погода
- •Задание 19.Средняя температура
- •Задание 20. Простая база данных
- •Задание 21. Редактор текста
- •Задание 22. Приветствие
- •Задача 23. Олимпийский флаг
- •Задание 24. Диаграмма
- •Задача 26. Круговая диаграмма.
- •Задача 27. Просмотр иллюстраций.
- •Задача 28 .Часы
- •Задача 29. Пинг понг.
- •Задача 30. Полет в облаках
- •Задача 31.Баннер
- •Задача 32. Фоновый рисунок
- •Задача 33. Wav
- •Задача 34. Mp3 Player
- •Задача 35.Воспроизведение midi
- •Задача 36.Compact Disk Player (версия 1)
- •Задача 37.Compact Disk Player (версия 2)
- •Задача 38.VideoPlayer
- •Задача 39. Анимация
- •Задача 40. Записная книжка
- •Задача 41 Магазин
- •Задача 42. Ежедневник
- •Задача 43. Сапер
- •Часть 1. Примеры и задачи
- •Часть 1. Примеры и задачи
- •Задача 44 Игра 15
- •Часть 1. Примеры и задачи
- •Задача 45. Игра "Собери картинку" (Puzzle)
- •Задача 46 Игра "Парные картинки"
- •Задача 47. Экзаменатор
- •Задача 48. Экзаменатор-2
- •Задача 49. Календарь
- •Задача 50. Будильник
- •Задача 51. Очистка диска
- •Задача 52.Печать
- •Задачи для самостоятельного решения Задача 1. Скидка
- •Задача 2.Доход по вкладу
- •Задача 3. Таблица умножения
- •Задача 4.Поездка на автомобиле
- •Задача 5.Стоимость разговора
- •Задача 6. Стеклопакет
- •Задача7. Калькулятор
- •Задача 8. Электроэнергия
- •Задача 9. Добрый день
- •Задача 10. Часы
- •Задача 11. Узоры
- •Задача 12. Курс доллара
- •Задача 13. Диаграмма
- •Задача 14. Домашние животные
- •Задача 15. Кораблик
- •Задача 16. Сапер
- •Задача 17 .Экзаменатор
- •Задача 18. База данных "Расходы"
Задача 48. Экзаменатор-2
Программа Экзаменатор-2 (Рис. 58) позволяет автоматизировать процесс тестирования. Имя файла теста передается программе при ее запуске — указывается в качестве параметра команды запуска .
Рис 58
Вывод: В этом задании мы научились автоматизировать процесс тестирования.
Листинг
int nQuery = 0; // всего вопроов
int nRight; // правильных ответов
int Right; // правильный ответ
int Sel; // ответ, выбранный испытуемым
static int mode =0; //0 - начало работы программы
// (вывести первый вопрос)
// 1 - процесс тестирования
// 2 - тестирование завершено
// началоработы void fastcall TForml::FormActivate(TObject *Sender)
{
if (ParamCount() ==0) {
Labell->Caption = "В командной строке надо указать "
"имяфайлатеста";
mode = 2; return;
XMLDocumentl->FileName = ParamStr(l); try
{
// открыть XML-документ XMLDocumentl->Active = True;
}
catch (EDOMParseError &e)
{
Labell->AutoSize = True;
Labell->Caption = "Ошибка доступа к файлу теста " +
ParamStr(l) +
"\nMessage: " + е.Message;
mode = 2;
236 Часть 1. Примеры и задачи
return;
Forml->Info(); // вывести информацию о тесте
// считывает и выводит вопрос с указанным номером int fastcall TForml::Qery(int i)
// привестиформувисходноесостояние RadioButtonl->Visible = False; RadioButton2->Visible = False; RadioButton3->Visible = False; RadioButton4->Checked = True; Button3->Enabled = False;
// настроитьинтерфейснаработусузлом qw _di_IXMLNode qw = XMLDocumentl-> DocumentElement->ChildNodes-> Nodes[WideString("qw")]; if ( i > qw->ChildNodes->Count -1 )
return -1;
nQuery++; // количество вопросов
/* Узел q - это вопрос. Параметр text узла q - это текст вопроса дети узла g - это альтернативные ответы */ _di_IXMLNode q = qw->ChildNodes->Nodes[i];
/* Атрибут Text узла qw - это текст вопроса, атрибут right - номер правильного ответа */
Игры и другие полезные программы 237
// вопрос Labell->AutoSize = false; Labell->Width = ClientWidth -20; Labell->Height = 150; Labell->Caption • q->GetAttribute(WideString("text")); Labell->AutoSize = true;
Right = StrToInt( q->GetAttribute(WideString("right")));
// узел "q" состоит из нескольких узлов "а" //(альтернативных ответов) _di_IXMLNode a; int j = 0; // номер узла "а" while ( j < q->ChildNodes->Count )
а = q->ChildNodes->Nodes[j]; switch ( j ) { case 0 : RadioButtonl->Caption = a->Text; RadioButtonl->Top = Labell->Top + Labell->Height + 10; RadioButtonl->Visible = True; break; case 1 : RadioButton2->Caption = a->Text; RadioButton2->Top = RadioButtonl->Top + RadioButtonl->Height + 10; RadioButton2->Visible = True,- break; case 2 : RadioButton3->Caption = a->Text; RadioButton3->Top = RadioButton2->Top + RadioButton2->Height + 10; RadioButton3->Visible = True; break;
return 0;
238 Часть 1. Примерыизадачи
// информацияотесте void fastcall TForml::Info() { Forml->Caption = XMLDocumentl->DocumentElement-> ChildNodes->Nodes[WideString("head")]->Text; Labell->Caption = XMLDocumentl->DocumentElement-> ChildNodes->Nodes[WideString("description")]->Text;
// щелчокнакнопкеОК void fastcall TForml::Button3Click(TObject *Sender)
static int i = 0; // номервопроса int r; // результатвыводавопроса: // -1 - вопросовбольшенет switch ( mode) { case 0: г = Qery(i++); mode = 1; break;
case 1:
// проверим, правильный ли ответ выбрал // испытуемый if ( Sel == Right) nRight++; // вывести следующий вопрос г = Qery(i++); if ( r == -1 ) // больше вопросов нет
// результаттестирования Result(); Button3->Enabled = true; mode = 2;
Игры и другие полезные программы 239
break;
case 2: Forml->Close(); // завершить работу программы
// вывести результат тестирования void fastcall TForml::Result()
(
int i = 0; int score; _di_lXMLNode Is; // интерфейс доступа к узлу levels _di_IXMLNode 1; // интерфейс доступа к узлу level
// считываем последовательно узлы level и сравниваем // значение параметра score с количеством правильных // ответов Is = XMLDocrnnentl->DocumentElement->
ChildNodes->Nodes[WideString("levels")] while ( i < ls->ChildNodes->Count) { 1 = ls~>ChildNodes->Nodes[i]; score = StrToInt( l-> GetAttribute(WideString("score"))); if ( nRight >= score ) break;
AnsiString mes; mes.printf("Экзамензакончен\п" "Всеговопросов: %i\n" "Правильныхответов: %i\n", nQuery,nRight);
240 Часть 1. Примерыизадачи
mes = mes + l->GetAttribute(WideString("text")); Labell->Width = Forml->ClientWidth - 20; Labell->Caption = mes;
// пользовательвыбралпервыйответ void fastcall TForml::RadioButtonlClick(TObject *Sender)
{
Sel = 1; Button3->Enabled = True;
// пользовательвыбралвторойответ void fastcall TForml::RadioButton2Click(TObject *Sender)
{
Sel = 2; Button3->Enabled = True;
// пользовательвыбралтретийответ void fastcall TForml::RadioButton3Click(TObject *Sender)
{
Sel = 3; Button3->Enabled = True;
