Этапы разработки программы
Содержание
Введение…………………………………………………………………..3
1 Этапы разработки программы…………………………………………4
1.1 Постановка задачи……………………………………………..4
1.2 Язык программирования Delphi………………………………4
1.3 Пользовательский интерфейс…………………………………5
2 Описание исходных текстов программы……………………………...6
2.1 Создание простейшей кнопки …………………………………...6
2.2 Опции окна редактирования ………………………………….8
2.3 Функции……………………………………………………….10
3 Процедуры……………………………………………………………..13
3.1 Процедура работы таймера времени………………………...15
3.2 Форма с результатами тестирования (Form3/Unit3)………...16
Заключение……………………………………………………………….18
Список использованных источников……………………………………19
Приложение А…………………………………………………………….20
Приложение Б……………………………………………………………..28
Приложение В…………………………………………………………….30
Введение
Внедрение электронно-вычислительных машин, современных средств переработки и передачи информации послужило началом нового процесса, называемым информатизацией общества. Широкое распространение получил научно-технический прогресс. В настоящее время одним из направлений научно-технического прогресса является компьютеризация практически всех сфер человеческой деятельности.
Сейчас компьютер является неотъемлемой частью работы людей. Компьютеры используются в школах и университетах. Они помогают систематизации полученные данных, как в рабочих целях, так и в учебных.
В данном курсовом проекте была создана “Программа для текстовых проверок знаний”. Она представляет собой опросник из 15 вопросов, определяющий уровень знаний по русскому языку, полученных после начальной школы.
1 Этапы разработки программы
Определение требований к программе – один из важнейших этапов. На этом этапе подробно описывается исходная информация, и формулируются требования к результату. Кроме того, описывается поведение программы в особых случаях.
При разработке программы, предназначенной для работы в Windows, требования к ней могут включать пункты о желаемом виде диалоговых окон программы.
На этапе разработки алгоритма необходимо определить последовательность действий, которые надо выполнить для достижения поставленной цели, получения результата. Если задача может быть решена различными способами, и, следовательно, возможны различные варианты алгоритма решения, то, программист, используя некоторый критерий, выбирает наиболее подходящее решение. Затем составляется подробное составление алгоритма.
При программировании в Delphi основная работа программиста заключается в разработке подпрограмм. Задачу организации взаимодействия разработанных подпрограмм берет на себя Delphi. Также Delphi удобна для создания программ с визуальными компонентами, которые уже созданы в ней и имеют стандартный набор команд.
1.1 Постановка задачи
Поставленная задача заключалась в следующем. Необходимо создать программу для проведения текстовых проверок знаний в форме тестирования.
1.2 Язык программирования Delphi
Среда разработки Delphi ориентирована, прежде всего, на создание программ для семейства операционных систем Windows. При этом большое внимание уделяется возможности визуальной разработки приложений с помощью большого набора готовых компонентов, а в стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов, позволяющих избежать ручного кодирования. Эти компоненты охватывают практически все аспекты применения современных информационных технологий.
В процессе построения приложения необходимо выбирать из палитры компоненты, на основе которых будет строиться проект. Еще до компиляции видно результаты своей работы. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции получаем код, который исполняется в 10 раз быстрее, чем то же самое, сделанное при помощи интерпретатора. Среда Delphi включает в себя полный набор визуальных инструментов для скоростной разработки приложений, поддерживающей разработку пользовательского интерфейса.
1.3 Пользовательский интерфейс
При запуске теста, показывается название программы и кнопка “Начать тест”.
После нажатия этой кнопки начинается сам тест, при этом откроется новое окно, а старое закроется.
При нажатии кнопки “Начать тест” на форме отобразится вопрос и четыре варианта ответа, выбор варианта ответа производится кликом мыши. Продолжение тестирования производится кнопкой “Ответить >>>” при этом на форме будут отображаться новые вопросы и четыре варианта ответа.
По окончании теста, программа подсчитает количество правильных ответов и выставит на их основе оценку тестируемого.
2 Описание исходных текстов программы
unit Unit2; // модуль главной формы
В этом модуле содержится несколько основных функций необходимых для работы программы.
Переменные.
var
Form2: TForm2;
Ini: TIniFile;
QuestNum: Integer;
QuestCount: Integer;
Scores: Integer;
Wrong: Integer;
ProgPath : string;
Count : integer;
2.1 Создание простейшей кнопки
Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button расположенная на странице библиотеки Standard.
Основное с точки зрения внешнего вида свойство кнопки — Caption (надпись). В надписях кнопок можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанта «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Основное событие любой кнопки — onclick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Помимо этого есть еще ряд событий, связанных с различными манипуляциями клавишами и кнопками мыши.
Свойство Cancel, если его установить в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок «Отменить» в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc. Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.
Из методов, присущих кнопкам, имеет смысл отметить один — Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки onclick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке. Пусть, например, вы хотите, чтобы при нажатии пользователем клавиши с символом «С» или «с» в любой момент работы с приложением выполнялись операции, предусмотренные в обработчике события onclick кнопки Button1. Поскольку неизвестно, какой компонент будет находиться в фокусе в момент этого события, надо перехватить его на уровне формы. Такой перехват осуществляется, если установить свойство формы KeyPreview в true. Тогда в обработчике события формы onkeypress можно написать оператор
if (key='C' or key='c') then Button1.Click;
Если пользователь ввел символ «С» или «с», то в результате будет выполнен обработчик щелчка кнопки Button1.
2.2 Опции окна редактирования
В компоненте Edit вводимый и выводимый текст содержится в свойстве Text. Это свойство можно устанавливать в процессе проектирования или задавать программно. Выравнивание текста, как это имело место в метках и панелях, невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается, и пользователь может перемещаться по нему с помощью курсора. Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.
Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш: Ctrl-C — копирование выделенного текста в буфер обмена Clipboard (команда Copy), Ctrl-X — вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl-V — вставка текста из буфера Clipboard в позицию курсора (команда Paste), Ctrl-Z — отмена последней команды редактирования.
Edit можно использовать и просто как компоненты отображения текста. Для этого надо установить в true его свойство ReadOnly и целесообразно установить AutoSelect в false. В этом случае пользователь не сможет изменять отображаемый текст, и окно редактирования становится подобным меткам. При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел. Для вывода это описанные при рассмотрении меток функции FloatToStr и IntToStr. При вводе это функции StrToFloat — преобразование строки в значение с плавающей запятой, и StrToInt — преобразование строки в целое значение. Если вводимый текст не соответствует числу (например, содержит недопустимые символы), то функции преобразования генерируют исключение EConvertError.
Этот код обеспечивает сообщение пользователю об ошибке ввода и предотвращает ошибочные вычисления. Впрочем, это не лучший вариант предотвратить ошибочный ввод, поскольку пользователь узнает о своей ошибке только после того, как программа пытается использовать введенные данные. Лучше, если пользователь просто не сможет ввести неправильные символы. Например, если вы хотите, чтобы пользователь мог вводить в окно редактирования Edit только цифры и символ точки, вы можете в обработчик события onkeypress этого компонента вставить оператор:
if not (Key in ['0'..'9', ',']) then Key := #0;
Этот оператор подменит все символы, кроме цифр и запятой, нулевым символом, который не занесется в текст окна Edit.
Внешний вид формы (Form2) в дизайнере форм. Иерархия расположения компонентов на форме приведена на рис.1.
Рисунок 1 - Иерархия расположения компонентов на форме
2.3 Функции
Ниже я приведу описание функций:
1) функция, ss2nn которая переводит секунды в минуты + секунды в строковом формате (необходимо для подсчета времени прошедшего с начала тестирования):
function TForm2.ss2nn(Seconds: Integer): String;
var
nMin, nSec: Integer;
begin
{Проверяем, меньше чем 1/Min}
if Seconds < 60 then Result := '0 минут ' + IntToStr(Seconds) + ' секунд'
else begin
{Определяем минуты}
nMin := Seconds div 60;
{Определяем секунды}
nSec := Seconds - (nMin * 60);
{Возвращаем результат}
Result := IntToStr(nMin) + ' минут ' + IntToStr(nSec) + ' секунд';
end;
end;
Функции надо передать количество секунд и в результате мы получим значение типа string. Например, если мы передадим функции число 70, то получим в результате 1 минут 10 секунд.
2) процедура ShowQuestion - функция, которая загружает текст вопроса и варианты ответов, а так же показывает текст вопроса и варианты ответов на текстовых метках.
procedure TForm2.ShowQuestion;
var
Count, i: Integer;
begin
if (QuestNum > QuestCount) and (QuestNum > 0) then
begin
{ Если номер текущего вопроса больше чем должно быть показано и кол-во вопросов >0 то выполняем следующее....}
Form3 := TForm3.Create(self);//создаем форму с результатами тестирования
res := (Scores * 100) div QuestCount;// узнаем кол-во правильных ответов
Form3.Gauge1.Progress := res; // выводим правильные ответы на графике в %
Form3.Gauge2.Progress := 100-res; //выводим кол-во неправильных ответов
//сколько всего вопросов....
Form3.Label5.Caption := 'Вопросов в тесте: '+IntToStr(QuestCount);
//пишем на label кол-во правильных ответов
Form3.Label3.Caption := IntToStr(Scores);
//тоже самое, только неправильные
Form3.Label4.Caption := IntToStr(Wrong);
Timer1.Enabled:=False; //выключаем таймер времени
Form3.TimeLabel.Caption:=TimeLabel.Caption; //выводим время на label времени
Form3.ShowModal;// наконец показываем форму с результатами
Form2.close; //закрываем форму с вопросами end;
Если данное условие не выполняется, то…
Рассмотрим это фрагмент функции более подробно. Для загрузки вопросов я использовал класс TIniFile – этот класс используется для работы с ini-файлами . Список вопросов и ответов хранится в специально сформированном файле Test.ini, откуда программа их загружает. Вот вырезка из файла Test.ini:
[Тест]
Количество Вопросов=15
Название теста = Проверка знаний по русскому языку
[Вопрос №1]
Текст вопроса = Вставьте проверяемые безударные гласные А или О. Укажите слова с буквой О.
Текст кнопки 1 = ХВ__ТАТЬ
Текст кнопки 2 = К__РАТЕЛЬНЫЙ
Текст кнопки 3 = НАК__ПИТЬ ДЕНЬГИ
Текст кнопки 4 = НАСЛ__ЖДАТЬСЯ
Правильный вариант = 3
Ниже приведена процедура загрузки вопроса и вариантов ответов:
//загружаем текст вопроса
Label1.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст вопроса', 'Вопрос отсутствует');
//загружаем варианты ответов
RadioButton1.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 1', 'ERROR');
RadioButton2.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 2', 'ERROR');
RadioButton3.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 3', 'ERROR');
RadioButton4.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 4', 'ERROR');
{Процедура загрузки завершена}
end;
В данной функции метод ReadString класса TIniFile собственно и производит загрузку начальных значений меток (label) с вопросом и вариантами ответов.
3 Процедуры
1) Процедура – обработчик события нажатия на кнопку «Начать тест»(Button1):
procedure TForm2.Button1Click(Sender: TObject);
begin
Count:=0;
Timer1.Enabled:=True;
Label10.Visible:=True;
TimeLabel.Visible:=True;
BitBtn1.Visible := true;
Panel3.Visible := true;
Button1.Visible := false;
Label9.Visible:=True;
BitBtn1.onclick(self);
end;
Во время выполнения этой процедуры происходит показ всех нужных для правильной работы программы компонентов, запуск таймера, а также скрытие самой кнопки «Начать тест».
2) процедура – обработчик события нажатия на кнопку «Ответить»(Button):
procedure TForm2.BitBtn1Click(Sender: TObject);
var
Answer, CA: Integer;
begin
Answer := Ini.ReadInteger('Вопрос №' + inttostr(QuestNum), 'Правильный вариант', -1);
if Answer < 0 then Exception.Create('В файле с вопросами не написан правильный вариант');
ca := 0;
if RadioButton1.Checked then
Ca := 1;
if RadioButton2.Checked then
Ca := 2;
if RadioButton3.Checked then
Ca := 3;
if RadioButton4.Checked then
Ca := 4;
if Ca = Answer then
inc(Scores)
else
inc(Wrong);
inc(QuestNum);
Label6.Caption := 'Номер вопроса: ' + IntToStr(QuestNum);
Label8.Caption := 'Правильных ответов: ' + IntToStr(Scores);
Label7.Caption := 'Неправильных ответов: ' + IntToStr(Wrong);
ShowQuestion;
end;
Читаем Правильный ответ из рабочего ini файла программы:
Answer := Ini.ReadInteger('Вопрос №' + inttostr(QuestNum), 'Правильный вариант', -1);
Собственно определяем правильный ответ или нет
if Ca = Answer then
inc(Scores)
else
inc(Wrong);.....
Введение…………………………………………………………………..3
1 Этапы разработки программы…………………………………………4
1.1 Постановка задачи……………………………………………..4
1.2 Язык программирования Delphi………………………………4
1.3 Пользовательский интерфейс…………………………………5
2 Описание исходных текстов программы……………………………...6
2.1 Создание простейшей кнопки …………………………………...6
2.2 Опции окна редактирования ………………………………….8
2.3 Функции……………………………………………………….10
3 Процедуры……………………………………………………………..13
3.1 Процедура работы таймера времени………………………...15
3.2 Форма с результатами тестирования (Form3/Unit3)………...16
Заключение……………………………………………………………….18
Список использованных источников……………………………………19
Приложение А…………………………………………………………….20
Приложение Б……………………………………………………………..28
Приложение В…………………………………………………………….30
Введение
Внедрение электронно-вычислительных машин, современных средств переработки и передачи информации послужило началом нового процесса, называемым информатизацией общества. Широкое распространение получил научно-технический прогресс. В настоящее время одним из направлений научно-технического прогресса является компьютеризация практически всех сфер человеческой деятельности.
Сейчас компьютер является неотъемлемой частью работы людей. Компьютеры используются в школах и университетах. Они помогают систематизации полученные данных, как в рабочих целях, так и в учебных.
В данном курсовом проекте была создана “Программа для текстовых проверок знаний”. Она представляет собой опросник из 15 вопросов, определяющий уровень знаний по русскому языку, полученных после начальной школы.
1 Этапы разработки программы
Определение требований к программе – один из важнейших этапов. На этом этапе подробно описывается исходная информация, и формулируются требования к результату. Кроме того, описывается поведение программы в особых случаях.
При разработке программы, предназначенной для работы в Windows, требования к ней могут включать пункты о желаемом виде диалоговых окон программы.
На этапе разработки алгоритма необходимо определить последовательность действий, которые надо выполнить для достижения поставленной цели, получения результата. Если задача может быть решена различными способами, и, следовательно, возможны различные варианты алгоритма решения, то, программист, используя некоторый критерий, выбирает наиболее подходящее решение. Затем составляется подробное составление алгоритма.
При программировании в Delphi основная работа программиста заключается в разработке подпрограмм. Задачу организации взаимодействия разработанных подпрограмм берет на себя Delphi. Также Delphi удобна для создания программ с визуальными компонентами, которые уже созданы в ней и имеют стандартный набор команд.
1.1 Постановка задачи
Поставленная задача заключалась в следующем. Необходимо создать программу для проведения текстовых проверок знаний в форме тестирования.
1.2 Язык программирования Delphi
Среда разработки Delphi ориентирована, прежде всего, на создание программ для семейства операционных систем Windows. При этом большое внимание уделяется возможности визуальной разработки приложений с помощью большого набора готовых компонентов, а в стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов, позволяющих избежать ручного кодирования. Эти компоненты охватывают практически все аспекты применения современных информационных технологий.
В процессе построения приложения необходимо выбирать из палитры компоненты, на основе которых будет строиться проект. Еще до компиляции видно результаты своей работы. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции получаем код, который исполняется в 10 раз быстрее, чем то же самое, сделанное при помощи интерпретатора. Среда Delphi включает в себя полный набор визуальных инструментов для скоростной разработки приложений, поддерживающей разработку пользовательского интерфейса.
1.3 Пользовательский интерфейс
При запуске теста, показывается название программы и кнопка “Начать тест”.
После нажатия этой кнопки начинается сам тест, при этом откроется новое окно, а старое закроется.
При нажатии кнопки “Начать тест” на форме отобразится вопрос и четыре варианта ответа, выбор варианта ответа производится кликом мыши. Продолжение тестирования производится кнопкой “Ответить >>>” при этом на форме будут отображаться новые вопросы и четыре варианта ответа.
По окончании теста, программа подсчитает количество правильных ответов и выставит на их основе оценку тестируемого.
2 Описание исходных текстов программы
unit Unit2; // модуль главной формы
В этом модуле содержится несколько основных функций необходимых для работы программы.
Переменные.
var
Form2: TForm2;
Ini: TIniFile;
QuestNum: Integer;
QuestCount: Integer;
Scores: Integer;
Wrong: Integer;
ProgPath : string;
Count : integer;
2.1 Создание простейшей кнопки
Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button расположенная на странице библиотеки Standard.
Основное с точки зрения внешнего вида свойство кнопки — Caption (надпись). В надписях кнопок можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанта «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Основное событие любой кнопки — onclick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Помимо этого есть еще ряд событий, связанных с различными манипуляциями клавишами и кнопками мыши.
Свойство Cancel, если его установить в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок «Отменить» в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc. Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.
Из методов, присущих кнопкам, имеет смысл отметить один — Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки onclick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке. Пусть, например, вы хотите, чтобы при нажатии пользователем клавиши с символом «С» или «с» в любой момент работы с приложением выполнялись операции, предусмотренные в обработчике события onclick кнопки Button1. Поскольку неизвестно, какой компонент будет находиться в фокусе в момент этого события, надо перехватить его на уровне формы. Такой перехват осуществляется, если установить свойство формы KeyPreview в true. Тогда в обработчике события формы onkeypress можно написать оператор
if (key='C' or key='c') then Button1.Click;
Если пользователь ввел символ «С» или «с», то в результате будет выполнен обработчик щелчка кнопки Button1.
2.2 Опции окна редактирования
В компоненте Edit вводимый и выводимый текст содержится в свойстве Text. Это свойство можно устанавливать в процессе проектирования или задавать программно. Выравнивание текста, как это имело место в метках и панелях, невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается, и пользователь может перемещаться по нему с помощью курсора. Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.
Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш: Ctrl-C — копирование выделенного текста в буфер обмена Clipboard (команда Copy), Ctrl-X — вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl-V — вставка текста из буфера Clipboard в позицию курсора (команда Paste), Ctrl-Z — отмена последней команды редактирования.
Edit можно использовать и просто как компоненты отображения текста. Для этого надо установить в true его свойство ReadOnly и целесообразно установить AutoSelect в false. В этом случае пользователь не сможет изменять отображаемый текст, и окно редактирования становится подобным меткам. При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел. Для вывода это описанные при рассмотрении меток функции FloatToStr и IntToStr. При вводе это функции StrToFloat — преобразование строки в значение с плавающей запятой, и StrToInt — преобразование строки в целое значение. Если вводимый текст не соответствует числу (например, содержит недопустимые символы), то функции преобразования генерируют исключение EConvertError.
Этот код обеспечивает сообщение пользователю об ошибке ввода и предотвращает ошибочные вычисления. Впрочем, это не лучший вариант предотвратить ошибочный ввод, поскольку пользователь узнает о своей ошибке только после того, как программа пытается использовать введенные данные. Лучше, если пользователь просто не сможет ввести неправильные символы. Например, если вы хотите, чтобы пользователь мог вводить в окно редактирования Edit только цифры и символ точки, вы можете в обработчик события onkeypress этого компонента вставить оператор:
if not (Key in ['0'..'9', ',']) then Key := #0;
Этот оператор подменит все символы, кроме цифр и запятой, нулевым символом, который не занесется в текст окна Edit.
Внешний вид формы (Form2) в дизайнере форм. Иерархия расположения компонентов на форме приведена на рис.1.
Рисунок 1 - Иерархия расположения компонентов на форме
2.3 Функции
Ниже я приведу описание функций:
1) функция, ss2nn которая переводит секунды в минуты + секунды в строковом формате (необходимо для подсчета времени прошедшего с начала тестирования):
function TForm2.ss2nn(Seconds: Integer): String;
var
nMin, nSec: Integer;
begin
{Проверяем, меньше чем 1/Min}
if Seconds < 60 then Result := '0 минут ' + IntToStr(Seconds) + ' секунд'
else begin
{Определяем минуты}
nMin := Seconds div 60;
{Определяем секунды}
nSec := Seconds - (nMin * 60);
{Возвращаем результат}
Result := IntToStr(nMin) + ' минут ' + IntToStr(nSec) + ' секунд';
end;
end;
Функции надо передать количество секунд и в результате мы получим значение типа string. Например, если мы передадим функции число 70, то получим в результате 1 минут 10 секунд.
2) процедура ShowQuestion - функция, которая загружает текст вопроса и варианты ответов, а так же показывает текст вопроса и варианты ответов на текстовых метках.
procedure TForm2.ShowQuestion;
var
Count, i: Integer;
begin
if (QuestNum > QuestCount) and (QuestNum > 0) then
begin
{ Если номер текущего вопроса больше чем должно быть показано и кол-во вопросов >0 то выполняем следующее....}
Form3 := TForm3.Create(self);//создаем форму с результатами тестирования
res := (Scores * 100) div QuestCount;// узнаем кол-во правильных ответов
Form3.Gauge1.Progress := res; // выводим правильные ответы на графике в %
Form3.Gauge2.Progress := 100-res; //выводим кол-во неправильных ответов
//сколько всего вопросов....
Form3.Label5.Caption := 'Вопросов в тесте: '+IntToStr(QuestCount);
//пишем на label кол-во правильных ответов
Form3.Label3.Caption := IntToStr(Scores);
//тоже самое, только неправильные
Form3.Label4.Caption := IntToStr(Wrong);
Timer1.Enabled:=False; //выключаем таймер времени
Form3.TimeLabel.Caption:=TimeLabel.Caption; //выводим время на label времени
Form3.ShowModal;// наконец показываем форму с результатами
Form2.close; //закрываем форму с вопросами end;
Если данное условие не выполняется, то…
Рассмотрим это фрагмент функции более подробно. Для загрузки вопросов я использовал класс TIniFile – этот класс используется для работы с ini-файлами . Список вопросов и ответов хранится в специально сформированном файле Test.ini, откуда программа их загружает. Вот вырезка из файла Test.ini:
[Тест]
Количество Вопросов=15
Название теста = Проверка знаний по русскому языку
[Вопрос №1]
Текст вопроса = Вставьте проверяемые безударные гласные А или О. Укажите слова с буквой О.
Текст кнопки 1 = ХВ__ТАТЬ
Текст кнопки 2 = К__РАТЕЛЬНЫЙ
Текст кнопки 3 = НАК__ПИТЬ ДЕНЬГИ
Текст кнопки 4 = НАСЛ__ЖДАТЬСЯ
Правильный вариант = 3
Ниже приведена процедура загрузки вопроса и вариантов ответов:
//загружаем текст вопроса
Label1.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст вопроса', 'Вопрос отсутствует');
//загружаем варианты ответов
RadioButton1.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 1', 'ERROR');
RadioButton2.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 2', 'ERROR');
RadioButton3.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 3', 'ERROR');
RadioButton4.Caption := Ini.ReadString('Вопрос №' + inttostr(QuestNum), 'Текст кнопки 4', 'ERROR');
{Процедура загрузки завершена}
end;
В данной функции метод ReadString класса TIniFile собственно и производит загрузку начальных значений меток (label) с вопросом и вариантами ответов.
3 Процедуры
1) Процедура – обработчик события нажатия на кнопку «Начать тест»(Button1):
procedure TForm2.Button1Click(Sender: TObject);
begin
Count:=0;
Timer1.Enabled:=True;
Label10.Visible:=True;
TimeLabel.Visible:=True;
BitBtn1.Visible := true;
Panel3.Visible := true;
Button1.Visible := false;
Label9.Visible:=True;
BitBtn1.onclick(self);
end;
Во время выполнения этой процедуры происходит показ всех нужных для правильной работы программы компонентов, запуск таймера, а также скрытие самой кнопки «Начать тест».
2) процедура – обработчик события нажатия на кнопку «Ответить»(Button):
procedure TForm2.BitBtn1Click(Sender: TObject);
var
Answer, CA: Integer;
begin
Answer := Ini.ReadInteger('Вопрос №' + inttostr(QuestNum), 'Правильный вариант', -1);
if Answer < 0 then Exception.Create('В файле с вопросами не написан правильный вариант');
ca := 0;
if RadioButton1.Checked then
Ca := 1;
if RadioButton2.Checked then
Ca := 2;
if RadioButton3.Checked then
Ca := 3;
if RadioButton4.Checked then
Ca := 4;
if Ca = Answer then
inc(Scores)
else
inc(Wrong);
inc(QuestNum);
Label6.Caption := 'Номер вопроса: ' + IntToStr(QuestNum);
Label8.Caption := 'Правильных ответов: ' + IntToStr(Scores);
Label7.Caption := 'Неправильных ответов: ' + IntToStr(Wrong);
ShowQuestion;
end;
Читаем Правильный ответ из рабочего ini файла программы:
Answer := Ini.ReadInteger('Вопрос №' + inttostr(QuestNum), 'Правильный вариант', -1);
Собственно определяем правильный ответ или нет
if Ca = Answer then
inc(Scores)
else
inc(Wrong);.....
Толық нұсқасын 30 секундтан кейін жүктей аласыз!!!
Әлеуметтік желілерде бөлісіңіз:
Facebook | VK | WhatsApp | Telegram | Twitter
Қарап көріңіз 👇
Пайдалы сілтемелер:
» Туған күнге 99 тілектер жинағы: өз сөзімен, қысқаша, қарапайым туған күнге тілек
» Абай Құнанбаев барлық өлеңдер жинағын жүктеу, оқу
» Дастархан батасы: дастарханға бата беру, ас қайыру
Соңғы жаңалықтар:
» 2025 жылы Ораза және Рамазан айы қай күні басталады?
» Утиль алым мөлшерлемесі өзгермейтін болды
» Жоғары оқу орындарына құжат қабылдау қашан басталады?