Как сделать тест делфи

Глава 13

Разработать программу для тестирования знаний в разных областях. Пользователь должен ответить на несколько вопросов, которые случайным образом выбираются из общей базы вопросов. После того как пользователь ответил на все вопросы, программа должна высчитать и выдать результат прохождения теста — процент правильных ответов. Также необходимо дать возможность пользователю подключать внешние файлы, содержащие вопросы и варианты ответов к ним. Для того чтобы пользователь не смог прочитать правильные ответы, следует зашифровать файл с вопросами и ответами.

Перед тем как разработать сам тест, разберем содержимое файла, в котором будут храниться вопросы и варианты ответов к ним. Это будет ini-файл следующей структуры:

0=Неправильный вариант к первому вопросу

1= Неправильный вариант ко второму вопросу

0=Неправильный вариант к первому вопросу

1= Неправильный вариант ко второму вопросу

0=Неправильный вариант к первому вопросу

1=Неправильный вариант ко второму вопросу

В этом ini-файле шесть разделов: num, Q, A, W1, W2 и W3. Как вы понимаете, если кто-то заглянет в этот файл, то уже через несколько минут он будет знать правильные ответы на все вопросы. А если он этот файл подкорректирует, то и вовсе будет получать только правильные варианты ответов. Для того чтобы этого не случилось, мы будем шифровать нашу базу вопросов. Это можно сделать с помощью программы Блокнот-шифровальщик, рассмотренной в главе 7. Для шифрования выберем небольшое смещение, например, 101. После того как вы создали все вопросы и варианты ответов к ним, не забудьте указать количество вопросов в разделе num. После этого зашифруйте базу, используя смещение 101.

⊚ Пример зашифрованной базы вопросов/ответов можно найти на прилагаемом к книге компакт-диске в файле Chapter_13\comp.ini.

Разработка формы

Создайте новый проект Delphi. Присвойте свойству Caption формы значение Tester, а свойству BorderStyle — bsNone. У верхнего края формы разместите компонент Label категории Standard, присвоив его свойству Caption значение Первый вопрос:.

Ниже разместите компонент Memo категории Standard, с помощью которого мы будем отображать текущий вопрос. Присвойте свойству Memo1.Readonly значение True, чтобы пользователь не мог изменить текст вопроса.

Под вопросом будут расположены варианты ответов. Разместите под компонентом Memo1 компонент RadioGroup (группа переключателей) категории Standard и присвойте его свойству Caption значение Варианты ответов:. Разместите на компоненте RadioGroup1 четыре компонента RadioButton (переключатели) категории Standard. Очистите для каждого из них свойство Caption, а свойству Name присвойте значения an1, an2, an3 и an4 соответственно.

В любом месте формы разместите компонент Label, который изначально будет невидимым. Он будет служить для отображения результатов и в последствии будет растянут на всю форму. Установите для него свойства согласно табл. 13.1.

Таблица 13.1. Свойства компонента Label, отображающего результат теста

СвойствоЗначениеПояснение
AlignmenttaCenterВыравнивание текста — по центру
ColorclBlackЦвет фона — черный
Font.ColorclRedЦвет текста — красный
Font.NameArialНазвание шрифта
Font.Size26Размер шрифта
Font.Style[fsBold]Начертание шрифта — полужирное
VisibleFalseПри запуске программы метка невидима

Осуществлять переход к следующему вопросу мы будем с помощью панелей. Разместите под вариантами ответов пять компонентов Panel категории Standard. Для каждой из них присвойте свойству Caption значение Следующий вопрос>>>>>, свойству Color — значение clMaroon, а свойству Font.Color — значение clWhite. Присвойте им имена (свойство Name) p1, р2, p3, р4 и р5. Для того чтобы убрать выпуклость и привести панель к виду стильной кнопки, изменим значение свойства BevelInner на bvRaised, а свойства BevelOuter — на bvLowered. Для всех панелей, кроме p1, присвойте свойству Visible значение False (изначально будет видна только первая панель).

Поскольку в программе будет предусмотрена возможность динамической загрузки базы вопросов/ответов, нам понадобится диалоговое окно открытия файла. Для этого разместим на форме компонент OpenDialog категории Dialogs и присвоим ему имя Open1 (свойство Name). Кроме того, определите в свойстве Filter следующий фильтр: ini-файлы|*.ini|Все файлы|*.*.

Теперь разработаем меню программы. Для этого разместите на форме компонент MainMenu категории Standard и создайте меню в соответствии с рис. 13.1.

⇖ Разработка меню рассматривается в главе 6, «Программа просмотра рисунков».

Рис. 13.1. Меню для программы-теста

Полученная форма должна примерно соответствовать рис. 13.2.

Рис. 13.2. Форма программы-теста

Разработка программного кода

Для начала, объявим все глобальные переменные:

Источник

Создание тестирующих программ в среде программирования Delphi

Предлагаемые методические рекомендации отображают проектирование, оформление и разработку тестирующих программ в среде программирования Delphi.

Рекомендуются учителям информатики, учителям школьных предметов, учащимся старших классов общеобразовательных средних школ с углубленным изучением информатики.

Введение

Ощутимые шаги в раскрытии глубинных закономерностей человеческого обучения, сделанные мировой дидактикой, а также бурный прогресс в области развития персональных компьютеров выводят педагогов на необходимость создания электронных тестирующих программ для самоконтроля и самопроверки знаний обучающихся.

Основная цель данных методических рекомендаций состоит в том, чтобы дать знания о технологии создания тестирующих программ в среде программирования Delphi.

В результате использования этих рекомендаций могут быть сформированы умения и навыки проектирования тестирующих программ в среде программирования Delphi.

Создание тестирующей программы с использованием компонентов

TLabel, TButton, TRadioGroup

Создание интерфейса приложения

2. Задайте объектам следующие свойства

ОбъектСвойствоЗначение
ФормаNameForm1
CaptionТест самопроверки
ColorcllnfoBk
RadioGroupNameRadioGroup1, :, RadioGroup5
Caption
Items:(варианты ответов)
ItemIndex0,1,2,3 (индекс выбранного переключателя)
FontTimes New Roman, обычный, размер 14, цвет тёмно-синий
Label
(метка)NameLabel1. Label5
Caption:(текст выбранного вопроса)
FontTimes New Roman, полужирный, размер 14, цвет тёмно-синий
Label
(метка)NameLabel4
Caption
FontTimes New Roman, полужирный, размер 14, цвет красный
Label
(метка)NameLabel5
Caption
FontTimes New Roman, полужирный, размер 14, цвет красный
Button
(кнопка)NameButton1
CaptionЧисло правильных ответов
Button
(кнопка)NameButton2
CaptionВыход

Написание кода

1. Напишите программу теста в окне кода.

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin m:=0; if RadioGroup1.ItemIndex=1 then m:=m+1 else m:=m; end;

procedure TForm1.RadioGroup2Click(Sender: TObject);

begin n:=0; if RadioGroup2.ItemIndex=0 then n:=n+1 else n:=n; end;

procedure TForm1.RadioGroup3Click(Sender: TObject);

begin k:=0; if RadioGroup3.ItemIndex=0 then k:=k+1 else k:=k; end;

procedure TForm1.RadioGroup4Click(Sender: TObject);

begin w:=0; if RadioGroup4.ItemIndex=0 then w:=w+1 else w:=w; end;

procedure TForm1.RadioGroup5Click(Sender: TObject);

begin v:=0; if RadioGroup5.ItemIndex=2 then v:=v+1 else v:=v; end;

procedure TForm1.Button1Click(Sender: TObject);

begin l:=m+n+k+w+v; if l=5 then

begin Label4.Caption:=IntToStr(l); Label5.Caption:=’Отлично!’; end else if l=4 then

Написание кода

1. Запрограммируйте метку Label2 («Следующий вопрос») так, чтобы в метке Label1 выводился следующий вопрос, варианты ответа на него, и при достижении последнего вопроса метка Label2 становилась недоступной.

3.Напишите программу теста в окне кода.

a,b,c,d,f,g,j,l,m,n,k,p:integer; implementation uses Unit2;

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin a:=0; if RadioGroup1.ItemIndex=0 then a:=a+1 else a:=a; RadioGroup1.Visible:=False; end;

procedure TForm1.RadioGroup2Click(Sender: TObject);

begin b:=0; if RadioGroup2.ItemIndex=1 then b:=b+1 else b:=b; RadioGroup2.Visible:=False; end;

procedure TForm1.RadioGroup3Click(Sender: TObject);

begin d:=0; if RadioGroup3.ItemIndex=1 then d:=d+1 else d:=d; RadioGroup3.Visible:=False; end;

procedure TForm1.RadioGroup4Click(Sender: TObject);

begin c:=0; if RadioGroup4.ItemIndex=0 then c:=c+1 else c:=c; RadioGroup4.Visible:=False; end;

procedure TForm1.RadioGroup5Click(Sender: TObject);

begin f:=0; if RadioGroup5.ItemIndex=3 then f:=f+1 else f:=f; RadioGroup5.Visible:=False; end;

procedure TForm1.RadioGroup6Click(Sender: TObject);

begin g:=0; if RadioGroup6.ItemIndex=2 then g:=g+1 else g:=g; RadioGroup6.Visible:=False; end;

procedure TForm1.RadioGroup7Click(Sender: TObject);

begin j:=0; if RadioGroup7.ItemIndex=1 then j:=j+1 else j:=j; RadioGroup7.Visible:=False; end;

procedure TForm1.RadioGroup8Click(Sender: TObject);

begin l:=0; if RadioGroup8.ItemIndex=1 then l:=l+1 else l:=l; RadioGroup8.Visible:=False; end;

procedure TForm1.RadioGroup9Click(Sender: TObject);

begin m:=0; if RadioGroup9.ItemIndex=3 then m:=m+1 else m:=m; RadioGroup9.Visible:=False; end;

procedure TForm1.RadioGroup10Click(Sender: TObject);

begin n:=0; if RadioGroup10.ItemIndex=2 then n:=n+1 else n:=n; RadioGroup10.Visible:=False; end;

procedure TForm1.Label2Click(Sender: TObject);

1: begin Label1.Caption:=’2 вопрос. Массовое производство компьютеров началось в:’;

2: begin Label1.Caption:=’3 вопрос. Элементной базой процессоров ЭВМ 2-ого поколения являлись:’; RadioGroup3.Visible:=True; end;

3:begin Label1.Caption:=’4 вопрос. Какое устройство не предназначено для обработки информации?’; RadioGroup4.Visible:=True; end;

4:begin Label1.Caption:=’5 вопрос. За минимальную единицу измерения количества информации принят:’; RadioGroup5.Visible:=True; end;

5:begin Label1.Caption:=’6 вопрос. Сколько байтов занимает в памяти ПК слово ПОБЕДА?:’;

6:begin Label1.Caption:=’7 вопрос. Производительность работы компьютера зависит от:’;

7:begin Label1.Caption:=’8 вопрос. Какое устройство может оказывать вредное воздействие на здоровье человека?’; RadioGroup8.Visible:=True; end;

8:begin Label1.Caption:=’9 вопрос. При выключении компьютера вся информация стирается:’;

9:begin Label1.Caption:=’10 вопрос. В целях сохранения информации дискеты необходимо оберегать от:’; RadioGroup10.Visible:=True; Button2.Visible:=True;Label2.Visible:=False; end; end;

procedure TForm1.Button2Click(Sender: TObject);

begin p:= a+b+c+d+f+g+j+l+m+n; if p=10 then

begin Label1.Caption:=IntToStr(p)+’ правильных ответов из 10 вопросов.’+’ Отлично!’; end

begin Label1.Caption:=IntToStr(p)+’ правильных ответов из 10 вопросов.’+’ Хорошо!’; end

begin Label1.Caption:=IntToStr(p)+’ правильных ответов из 10 вопросов.’+’ Удовлетворительно.’;

end else if p

ОбъектСвойствоЗначение
ФормаNameForm1
CaptionТестирующая программа по информатике
ColorclSkyBlue
MainMenuNameMainMenu1
Label
(метка)NameLabel1
Caption
FontMS Sans Serif, полужирный курсив, размер 14, цвет красный
Label
(метка)NameLabel2. Label7
Caption:(текст вопроса)
FontMS Sans Serif, полужирный курсив, размер 12, цвет тёмно-синий
Button
(кнопка)NameButton1
CaptionВыход
FontMS Sans Serif, полужирный курсив, размер 14, цвет чёрный
ImageNameImage1
VisibleTrue
StretchTrue
Pictureуказать путь к рисунку
PanelNamePanel1. Panel6
Caption1,:6
PageControlNamePageControl1
Active PagesTabSheet1
VisibleTrue
TabSheet1. TabSheet6NameTabSheet1. TabSheet6
Captionвопрос1. вопрос6
RadioGroupNameRadioGroup1, :, RadioGroup6
Caption
Items:(варианты ответов)
ItemIndex0,1,2,3 (индекс выбранного переключателя)

Написание кода

2. Напишите программу теста в окне кода.

m,n,k,w,l,s,z:integer; implementation uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin n:=0; if RadioGroup1.ItemIndex=0 then begin n:=n+1; Panel1.Visible:=False; end else n:=n;

procedure TForm1.RadioGroup2Click(Sender: TObject);

begin m:=0; if RadioGroup2.ItemIndex=2 then begin m:=m+1;Panel2.Visible:=False; end else m:=m;

procedure TForm1.RadioGroup3Click(Sender: TObject);

begin k:=0; if RadioGroup3.ItemIndex=0 then begin k:=k+1; Panel4.Visible:=False; end else k:=k;

procedure TForm1.RadioGroup4Click(Sender: TObject);

begin w:=0; if RadioGroup4.ItemIndex=0 then begin w:=w+1; Panel3.Visible:=False; end else w:=w;

procedure TForm1.RadioGroup5Click(Sender: TObject);

begin s:=0; if RadioGroup5.ItemIndex=1 then begin s:=s+1; Panel5.Visible:=False; end else s:=s;

procedure TForm1.RadioGroup6Click(Sender: TObject);

begin z:=0; if RadioGroup6.ItemIndex=1 then begin z:=z+1; Panel6.Visible:=False; end else z:=z;

procedure TForm1.N3Click(Sender: TObject);

begin l:=m+n+k+w+s+z; Label1.Caption:=IntToStr(l)+’ правильных ответов из 6 вопросов’; end;

procedure TForm1.N4Click(Sender: TObject);

procedure TForm1.N7Click(Sender: TObject);

begin AboutBox.show; end;

procedure TForm1.N6Click(Sender: TObject);

begin MessageDlgPos(‘Будьте внимательны при выборе варианта ответа!

Повторный выбор ответа на вопрос недоступен!’,mtInformation,[mbOK],0,300,200); end; end.

3.Сохраните форму и проект в своей папке.

Литература

Источник

Создание файла (txt) теста через Delphi

Вложения

Как сделать тест делфи. Смотреть фото Как сделать тест делфи. Смотреть картинку Как сделать тест делфи. Картинка про Как сделать тест делфи. Фото Как сделать тест делфипроект 2.0.1.rar (187.4 Кб, 16 просмотров)

Создание програмы-теста на DELPHI
Помогите создать тест на Делфи про Строковый тип данных Паскаля=))

Чтение с txt файла и запись в StringGrid Delphi 7
Так как только учусь не могу понять как записать правильно. Читать оно читает, а данные не знаю как.

Создание и сохранение txt файла.
У меня не получается с объектом TFileStream. Помогите, чтобы записалось в файл(допустим.

Поиск и удаление текста в *.txt Delphi, перезапись файла
Здравствуйте, подскажите пожалуйста! Вопрос пустяковый если честно но разобраться не могу :cry.

Добавлено через 1 минуту
И убери эти вторые begin..end из указаной процедуры.

Так, ну в целом, для интересующихся, имеем вот такую функцию записи в файл:

По делу: лучше не использовать просто название файла, если мне память не изменяет (а она может изменять),то седьмая делфи отсылает в таком случае в папку system32:

Это будет однозначное указание на файл в той же директории, что и исполняемый файл. Хотя, конечно, мне могут сказать, что и первый вариант правильный и я спорить не буду.

Итого, я бы рекомендовал сделать так, это может дать результат:

Небольшая оптимизация: все, что имеет в комментариях слово «формирование» лучше перенести в обработчик OnResize формы. Изменение положения элементов логичнее обрабатывать там.

Проверить все это не могу, выбивает исключение при нажатии кнопки «следующий», а вылавливать его сейчас нет времени.

Препод сказал сделать с TXT форматом, чтобы типа любой «неуч» мог изменить его структуру

Добавлено через 1 минуту
Внёс данные коррективы, но успеха 0, к сожалению(

Вложения

Как сделать тест делфи. Смотреть фото Как сделать тест делфи. Смотреть картинку Как сделать тест делфи. Картинка про Как сделать тест делфи. Фото Как сделать тест делфипроект 2.0.2.rar (188.8 Кб, 19 просмотров)

Разберем процедуру Button2Click поэтапно:

Ок, тут вопросов нет. Хорошая проверка корректности.

В этом куске кода каждая вторая строчка вызывает вопросы. Переменная STEP не выполняет своей функции вообще.

В этом куске у нас полная солянка из значений. Вообще непонятно, какому тесту и что мы присваиваем.

Тут понятно и без лишних слов.

Вердикт: процедура непонятно что делает. Даже автор не знает, что там происходит, такое ощущение, что это попытка с помощью урагана на тракторном заводе собрать танк Т-90.

Внимание! В результате выполнения данного кода неквалифицированным персоналом есть вероятность случайного зарождения кибернетической жизни с угрозой дальнейшего захвата человечества. Рекомендуется удалить весь код процедуры без возможности восстановления и попробовать написать все заново, используя основы алгоритмики. За возможность появления в вашей квартире Джона Коннора, Сары Коннор и терминатора с целью устранения процедуры автор поста ответственности не несет.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *