Итак нам необходимо написать программу которая будет проверять вашу уверенность в себе.
На экран выводятся вопросы один за другим, выбираем вариант ответа и так до тех пор пока на все вопросы не ответим, в конце теста выводится результат теста.
Как же работает программа?
Рассмотрим код нашей программы, вот перед нами процедура outResult которая выводит результат теста на экран в компонент Memo1. В процедуре создаем 3 множества что бы проверить количество баллов полученных пользователем при выполнении теста. Переменная-счетчик count содержит набранное количество баллов теперь мы сравниваем операцией in входит ли в диапазон какого либо одного из трех множеств наши баллы если да то мы загружаем файл вывода результата теста, если нет то продолжаем до тех пор пока не попадем в одно из множеств.
procedure outResult;
var low,mid,hi: set of byte;
begin
hi:=[0..25];
mid:=[26..45];
low:=[46..128];
with form1 do begin
memo1.Clear;
if count in hi then memo1.lines.LoadFromFile('hi.txt'); info.Panels[0].Text:='';
if count in mid then memo1.lines.LoadFromFile('mid.txt'); info.Panels[0].Text:='';
if count in low then memo1.lines.LoadFromFile('low.txt'); info.Panels[0].Text:='';
end;
end;
Вот простая процедура которая загружает список вопросов из файла ans.txt в список строк
TStringList. Далее мы будем использовать этот список по назначению а именно выбирать по одной строчки из списка и выводить в компонент Memo.
procedure loadans;
begin
list:=TStringList.Create;
list.LoadFromFile('ans.txt');
end;
Вот как раз процедура nextline это и делает первая команда очищает мемо компонент
потом мы добавляем из списка строк (вопросы) следующую строку переменная next_ содержит номер следующего вопроса т.е вот эта строка кода form1.memo1.lines.Add(list.Strings[next_]);
выглядит вот так form1.memo1.lines.Add(list.Strings[21]); если это на примере вывода 21 го вопроса. Следующая строчка кода добавляет в нижниюю строку статусбара номер вопроса.
procedure nextline;
begin
form1.memo1.Clear;
form1.memo1.lines.Add(list.Strings[next_]);
form1.info.Panels[0].Text:='Вопрос: '+inttostr(next_);
//debug
end;
Осталось разобраться с действиями которые происходят при выборе одного из вариантов ответа, 4 радио кнопки radiobutton. Вот код из одной радио кнопки: мы проверяем если вопрос последний 31й то устанавливаем счетчик следующего вопроса в нуль вызываем процедуру вывода ответа и выходим иначе если это не последний вопрос то мы увеличиваем счетчик на 4 увеличиваем счетчик строк на одну вызываем процедуру вывода следующего вопроса и перед выключение радио кнопки (снятия галочки с кнопки) делаем паузу в 250 мс.
if next_=31 then begin next_:=0; outResult; exit; end else count:=count+4; inc(next_); nextline; sleep(250); radiobutton1.Checked:=false;
end;
Комментариев нет:
Отправить комментарий