Язык программирования Delphi
История возникновения языка программирования Delphi. Программа тестирования, требования к ней. Компоненты button, combobox, edit, label, radiogroup, statictext, memo, их свойства. Описание программы (пошаговое), листинг. Минимальный состав оборудования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 05.12.2014 |
Размер файла | 619,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. Общая часть
1.1 Язык программирования Delphi
Цель: Поставленная задача заключалась в следующем. Необходимо создать программу тестирования, в которой вопрос сопровождается иллюстрацией.
История возникновения Delphi уходит своими корнями в далекие 60-е годы прошлого века.
Язык Паскаль (послуживший основой для написания Delphi), был разработан профессором Н.Виртом в конце 60-х годов специально для обучения программированию студентов. В числе студентов этого выдающегося профессора Цюрихского университета были Ф.Каин и А. Хейлсберг. Каин позднее основал корпорацию Borland. Под руководством этих двух студентов язык Паскаль был превращен в мощное средство разработки программ любой сложности.
Первым продуктом Borland для семейства Windows стала среда разработки Delphi 1, она была разработана для создания программ под Windows 3.1.
Появление новой версии Delphi 2 существенно отличило среду разработки от предыдущих продуктов. Данная версия была разработана уже под 32-разрядные операционные системы Windows 95 и Windows NT 4.
Следующие версии Delphi (3, 4, 5, б, 7) являлись следствием постепенного развития среды разработки - улучшались существующие компоненты, добавлялись новые возможности, большое внимание уделялось программированию баз данных и программ для глобальной сети Internet. Так же можно сказать, что Delphi иногда именуется еще, как и Object Pascal.
Сам Pascal ведь представлял собой исключительно процедурный язык. А Turbo Pascal, уже с версии 5.5, вместил в себе еще и объектно-ориентированные свойства, а в Object Pascal -- динамическую идентификацию типа данных с доступом к метаданным классов в компилируемом коде.
Отменной чертой Object Pascal от С++ является именно то, что все объекты по умолчанию находятся в динамической памяти. Но в виртуальных методах NewInstance и FreeInstance есть возможность переопределения. Object Pascal представляет собой итог расширения Turbo Pascal. Язык Delphi мощное и необратимое воздействие оказал на создание языка C#. Великое множество его решений и элементов вошли в С#. Самой первой автономной и полноценной версией Delphi для .NET считается именно Delphi 8. В 2006 году компания Borland, имеющая коммерческие права на JBuilder, Delphi и C++ Builder, из за их убыточности, задумывается о продаже этого направления.
Так же одной из инноваций можно считать интеграцию в Delphi технологии .Net от Microsoft.
Казалось бы, что следующею версию Delphi логично было бы назвать 9, а на самом деле она называется BorlandDelphi 2005. Давай те разберемся почему. Из основных особенностей среды разработки Delphi 2005 можно отметить то, что новая среда разработки объединила в себе весь опыт программирования и создания специальных продуктов для разработки программною обеспечения. В Delphi 2005 можно создавать программы для платформы Win32, а можно создавать программы под перспективную платформу .Net. Кроме того, до седьмой версии использовался язык программирования основанный на языке Pascal. В новой версии осуществлен возможность разработки программ на нескольких язы¬ках (Delphi, C++, Java), чего раньше не было ни в одной подобно среде разработки. Если так же к вышеперечисленному добавить, что в Delphi 2005 добавлено много новых компонентов и инструментов, то становиться понятно почему новая версия вышла под таким специфическим названием. В 2007 году правопреемником стает компания CodeGear, подконтрольная Borland, которая и дальше радует нас постоянными интересными новинками и обновлениями. Из стран СНГ, первым Borland Delphi появился в Росийской Федерации (1993 год). Сегодня с выходом каждой новой версии, програмирование в среде Delphi стает все более насыщенным и комфортным.
1.2 Программа тестирования
Тестирование широко применяется для оценки уровня знаний в учебных заведениях, при приеме на работу, для оценки квалификации персонала учреждений, т.е. практически во всех сферах деятельности человека. Испытуемому предлагается ряд вопросов (тест), на которые он должен ответить. Обычно к каждому вопросу дается несколько вариантов ответа, из которых надо выбрать правильный. Каждому варианту ответа соответствует некоторая оценка. Суммированием оценок за ответы получается общий балл, на основе которого делается вывод об уровне подготовленности испытуемого. В этом разделе рассматривается программа, позволяющая автоматизировать процесс тестирования. Определение требований к программе - один из важнейших этапов. На этом этапе подробно описывается исходная информация, и формулируются требования к результату. Кроме того, описывается поведение программы в особых случаях. При разработке программы, предназначенной для работы в Windows, требования к ней могут включать пункты о желаемом виде диалоговых окон программы. На этапе разработки алгоритма необходимо определить последовательность действий, которые надо выполнить для достижения поставленной цели, получения результата. Если задача может быть решена различными способами, и, следовательно, возможны различные варианты алгоритма решения, то, программист, используя некоторый критерий, выбирает наиболее подходящее решение. Затем составляется подробное составление алгоритма. При программировании в Delphi основная работа программиста заключается в разработке подпрограмм. Задачу организации взаимодействия разработанных подпрограмм берет на себя Delphi. Также Delphi удобна для создания программ с визуальными компонентами, которые уже созданы в ней и имеют стандартный набор команд. Среда разработки Delphi ориентирована, прежде всего, на создание программ для семейства операционных систем Windows. При этом большое внимание уделяется возможности визуальной разработки приложений с помощью большого набора готовых компонентов, а в стандартную поставку Delphi входят основные объекты, которые образуют удачно подобранную иерархию из 270 базовых классов, позволяющих избежать ручного кодирования. Эти компоненты охватывают практически все аспекты применения современных информационных технологий. В процессе построения приложения необходимо выбирать из палитры компоненты, на основе которых будет строиться проект. Еще до компиляции видно результаты своей работы. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции получаем код, который исполняется в 10-20 раз быстрее, чем то же, самое, сделанное при помощи интерпретатора. Cреда Delphi включает в себя полный набор визуальных инструментов для скоростной разработки приложений (RAD - rapid application development), поддерживающей разработку пользовательского интерфейса.
Требования к программе
В результате анализа различных тестов были сформулированы следующие требования к программе:
* программа должна обеспечить работу с тестом произвольной длины, т. е. не должно быть ограничения на количество вопросов в тесте;
* вопрос может сопровождаться иллюстрацией;
* для каждого вопроса может быть до четырех возможных вариантов ответа со своей оценкой в баллах;
* результат тестирования должен быть отнесен к одному из четырех уровней, например, "отлично", "хорошо", "удовлетворительно" или "плохо";
* вопросы теста должны находиться в текстовом файле;
* программа должна быть инвариантна к различным тестам, т. е. изменения в тесте не должны вызывать требование изменения программы;
* в программе должна быть заблокирована возможность возврата к предыдущему вопросу. Если вопрос предложен, то на него должен быть дан ответ.
На рис. 1 приведен пример диалогового окна программы тестирования во время ее работы.
Рис. 1 - Диалоговое окно программы тестирования
2. Специальная часть.
2.1 Используемые компоненты
Создавая данную программу я использовала различные компоненты, такие как button, combobox, edit, label, radiogroup, statictext, memo.
1. Button Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button, расположенная на странице библиотеки Standard.
Основное с точки зрения внешнего вида свойство кнопки - Caption (надпись). В надписях кнопок можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи.
Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанта «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Основное событие любой кнопки - OnClick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Помимо этого есть еще ряд событий, связанных с различными манипуляциями клавишами и кнопками мыши.
Свойство Cancel, если его установить в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку.
Это свойство целесообразно задавать равным true для кнопок «Отменить» в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc. Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.
Из методов, присущих кнопкам, имеет смысл отметить один - Click.
Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке. Пусть, например, вы хотите, чтобы при нажатии пользователем клавиши с символом «С» или «с» в любой момент работы с приложением выполнялись операции, предусмотренные в обработчике события OnClick кнопки Button.
1. Поскольку неизвестно, какой компонент будет находиться в фокусе в момент этого события, надо перехватить его на уровне формы.
Такой перехват осуществляется, если установить свойство формы KeyPreview в true. Тогда в обработчике события формы OnKeyPress можно написать оператор
if (key='C' or key='c') then Button1.Click;
Если пользователь ввел символ «С» или «с», то в результате будет выполнен обработчик щелчка кнопки Button1.
2. ComboBoxСтиль изображения этого компонента определяется свойством Style, которое может принимать следующие основные значения:
csDropDown - Выпадающий список со строками одинаковой высоты и с окном редактирования, позволяющим пользователю вводить или редактировать текст;
csSimple - Развернутый список со строками одинаковой высоты и с окном редактирования, позволяющим пользователю вводить или редактировать текст;
csDropDownList - Выпадающий список со строками одинаковой высоты, не содержащий окна редактирования.
Выбор пользователя или введенный им текст можно определить по значению свойства Text. Если же надо определить индекс выбранного пользователем элемента списка, то можно воспользоваться свойством ItemIndex. Если начальное значение не задано, то в момент запуска приложения пользователь не увидит в окне компонента одно из возможных значений списка и, вероятнее всего, не очень поймет, что с этим окном надо делать.
Если в окне проводилось редактирование данных, то ItemIndex = -1. По этому признаку можно определить, что редактирование проводилось.
Свойство MaxLength определяет максимальное число символов, которые пользователь может ввести в окно редактирования.
Если MaxLength = 0, то число вводимых символов не ограничено.
3. Edit
В компоненте 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. Поэтому в программе необходимо предусмотреть обработку этого исключения. Например:
var A: integer;
try
A := StrToInt(Edit1.Text);
{операторы, использующие переменную А}
except on EConvertError do
ShowMessage('Вы ввели ошибочное число;
повторите ввод');
Этот код обеспечивает сообщение пользователю об ошибке ввода и предотвращает ошибочные вычисления. Впрочем, это не лучший вариант предотвратить ошибочный ввод, поскольку пользователь узнает о своей ошибке только после того, как программа пытается использовать введенные данные. Лучше, если пользователь просто не сможет ввести неправильные символы. Например, если вы хотите, чтобы пользователь мог вводить в окно редактирования Edit только цифры и символ точки, вы можете в обработчик события OnKeyPress этого компонента вставить оператор:
if not (Key in ['0'..'9', ',']) then Key := #0;
Этот оператор подменит все символы, кроме цифр и запятой, нулевым символом, который не занесется в текст окна Edit.
Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. В противном случае значение MaxLength указывает максимальное число символов, которое может ввести пользователь.
Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля. По умолчанию значение PasswordChar равно #0 - нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки «*»), то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, которые вводит пользователь (см. рис. 3.5). Тем самым обеспечивается секретность ввода пароля.
4. Label, StaticText
Для отображения различных надписей на форме используются в основном компоненты Label, StaticText (появившийся только в Delphi 3) и Panel. Первые два из этих компонентов - метки, специально предназначенные для отображения текстов.
Тексты, отображаемые в перечисленных компонентах, определяются значением их свойства Caption. Его можно устанавливать в процессе проектирования или задавать и изменять программно во время выполнения приложения. Например:
Label1.Caption:= 'Новый текст';
Если требуется отобразить числовую информацию, можно воспользоваться функциями FloatToStr и IntToStr, переводящими соответственно числа с плавающей запятой и целые в строку. Для формирования текста, состоящего из нескольких фрагментов, можно использовать операцию «+», которая для строк означает их склеивание (конкатенацию). Например, если в программе имеется целая переменная I, отображающая число сотрудников некоторой организации, то вывести в метку Label1 информацию об этом можно оператором:
Label1.Caption:= 'Число сотрудников: '+IntToStr(I);
Во всех компонентах цвет фона определяется свойством Color, а цвет надписи - подсвойством Color свойства Font.
Для метки Label цвет и шрифт - единственно доступные элементы оформления надписи. Компонент StaticText имеет кроме того свойство BorderStyle, определяющее рамку текста - бордюр.
Размер меток Label и StaticText определяется также свойством AutoSize. Если это свойство установлено в true, то вертикальный и горизонтальный размеры компонента определяются размером надписи. Если же AutoSize равно false, то выравнивание текста внутри компонента определяется свойством Alignment, которое позволяет выравнивать текст по левому краю, правому краю или центру клиентской области метки.
В метке Label имеется свойство Wordwrap - допустимость переноса слов длинной надписи, превышающей длину компонента, на новую строчку. Чтобы такой перенос мог осуществляться, надо установить свойство WordWrap в true, свойство AutoSize в false (чтобы размер компонента не определялся размером надписи) и сделать высоту компонента такой, чтобы в нем могло поместиться несколько строк.
В метке StaticText перенос длинного текста осуществляется автоматически, если значение AutoSize установлено в false и размер компонента достаточен для размещения нескольких строк. Для того, чтобы в StaticText осуществлялся перенос при изменении пользователем размеров окна, надо осуществлять описанную выше перерисовку компонента методом Repaint в обработчике события формы OnResize.
5. RadioGroup
Радиокнопки образуют группы взаимосвязанных индикаторов, из которых может быть выбран только один. Они используются для выбора пользователем одной из нескольких взаимоисключающих альтернатив, например, отдела, в котором работает сотрудник, или пола сотрудника. Впрочем, радиокнопки могут использоваться и для отображения аналогичных данных. В этом случае управление кнопками осуществляется программно.
RadioGroup - это панель, которая может содержать регулярно расположенные столбцами и строками радиокнопки. Надпись в левом верхнем углу панели определяется свойством Caption. А надписи кнопок и их количество определяются свойством Items, имеющим тип TStrings. Щелкнув на кнопке с многоточием около этого свойства в окне Инспектора Объектов, вы попадете в редактор списков строк. В нем вы можете занести надписи, которые хотите видеть около кнопок, по одной в строке. Сколько строчек вы запишете - столько и будет кнопок.
Кнопки, появившиеся в панели после задания значений Items, можно разместить в несколько столбцов (не более 17), задав свойство Columns. По умолчанию Columns = 1, т.е. кнопки размещаются друг под другом.
Определить, какую из кнопок выбрал пользователь, можно по свойству ItemIndex, которое показывает индекс выбранной кнопки. Индексы, как всегда в Delphi, начинаются с 0. По умолчанию ItemIndex = -1, что означает отсутствие выбранной кнопки. Если вы хотите, чтобы в момент начала выполнения приложения какая-то из кнопок была выбрана (это практически всегда необходимо), то надо установить соответствующее значение ItemIndex во время проектирования. Если вы используете радиокнопки не для ввода, а для отображения данных, устанавливать значение ItemIndex можно программно во время выполнения приложения.
Компонент RadioGroup очень удобен, но не свободен от некоторых недостатков. Его хорошо использовать, если надписи кнопок имеют примерно одинаковую длину и если число кнопок в каждом столбце (при размещении их в нескольких столбцах) одинаково.
6. Memo
В компоненте Memo формат (шрифт, его атрибуты, выравнивание) одинаков для всего текста и определяется свойством Font. Если вы сохраните в файле текст, введенный или отредактированный пользователем, то будет создан текстовый файл, содержащий только символы и не содержащий элементов форматирования. При последующем чтении этого файла в Memo формат будет определяться текущим состоянием свойства Font компонента Memo, а не тем, в каком формате ранее вводился текст.
Свойства Alignment и WordWrap имеют тот же смысл, что, например, в метках, и определяют выравнивание текста и допустимость переноса длинных строк. Установка свойства ReadOnly в true задает текст только для чтения. Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. Свойства WantReturns и WantTab определяют допустимость ввода пользователем в текст символов перевода строки и табуляции.
Свойство ScrollBars определяет наличие полос прокрутка текста в окне. По умолчанию ScrollBars = ssNone, что означает их отсутствие. Пользователь может в этом случае перемещаться по тексту только с помощью курсора. Можно задать свойству ScrollBars значения ssHorizontal, ssVertical или ssBoth, что будет соответственно означать наличие горизонтальной, вертикальной или обеих полос прокрутки.
Свойства TabCount и Tab имеют смысл при вводе текста только при значении свойства компонента WantTabs = true. Это свойство разрешает пользователю вводить в текст символ табуляции. Если WantTabs = false, то нажатие пользователем клавиши табуляции просто переключит фокус на очередной компонент и символ табуляции в текст не введется.
Основное свойство окна memo - Lines, содержащее текст окна в виде списка строк и имеющее тип TStrings. Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства Lines в окне Инспектора Объектов. Перед вами откроется окно редактирования списков строк. Вы можете редактировать или вводить текст непосредственно в этом окне, или нажать кнопку CodeEditor и работать в обычном окне Редактора Кода. В этом случае, завершив работу с текстом, выберите из контекстного меню, всплывающего при щелчке правой кнопкой мыши, команду Close Page и ответьте утвердительно на вопрос, хотите ли вы сохранить текст в соответствующем свойстве окна редактирования.
Во время выполнения приложения вы можете заносить текст в окно редактирования с помощью методов свойства Lines типа TStrings. Этот тип широко используется в свойствах многих компонентов и его описание вы можете найти в во встроенной справке Delphi. Здесь коротко укажем только на его основные свойства и методы, используемые в свойстве Lines.
Весь текст, представленный одной строкой типа String, внутри которой используются разделители типа символов возврата каретки и перевода строки, содержится в свойстве Text.
Доступ к отдельной строке текста вы можете получить с помощью свойства Strings [Index: Integer]. Индексы, как и везде в Delphi, начинаются с 0. Так что Memo1.Lines.Strings[0] - это текст первой строки. Учтите, что если окно редактирования изменяется в размерах при работе с приложением и свойство WordWrap = true, то индексы строк будут изменяться при переносах строк, так что в этих случаях индекс мало о чем говорит.
Свойство только для чтения Count указывает число строк в тексте.
Для очистки текста в окне надо выполнить процедуру Clear. Этот метод относится к самому окну, а не к его свойству Lines.
Для занесения новой строки в конец текста окна редактирования можно воспользоваться методами Add или Append свойства Lines. Для загрузки текста из файла применяется метод LoadFromFile. Сохранение текста в фале осуществляется методом SaveToFile.
Пусть, например, в вашем приложении имеется окно редактирования Edit1, в котором пользователь вводит имя сотрудника, и есть кнопка, при щелчке на которой в окно Memo1 должна занестись шапка характеристики этого сотрудника, после чего пользователь может заполнить текст характеристики.
Обработчик щелчка на кнопке может иметь вид:
Memo1.Clear;
Memo1.Lines.Add ('ХАРАКТЕРИСТИКА');
Memo1.Lines.Add('Сотрудник '+Edit1.Text) ;.
Memo1.SetFocus;
Загрузка в окно Memo1 текста из файла (например, хранящейся в файле характеристики сотрудника) может осуществляться командой
Memo1.Lines.LoadFromFile ('text.txt');
Сохранение текста в файле может осуществляться командой
Memo1.Lines.SaveToFile ('text.txt');
2.2 Описание программы
delphi программа тестирование компонент
Тест представляет собой последовательность вопросов, на которые испытуемый должен ответить путем выбора правильного ответа из нескольких предложенных вариантов. В новом окне будет приведена инструкция по выполнению теста и небольшое описание.
При нажатии кнопки "Далее >>>" на форме отобразится вопрос и три варианта ответа, выбор варианта ответа производится кликом мыши. Продолжение тестирования производится кнопкой "Далее >>>" при этом на форме будут отображаться новые вопросы и три варианта ответа. По окончании теста, программа подсчитает количество набранных баллов . При закрытие все факторы сохраняются в файл с расширением .txt и именем файла аналогичным с фамилией тестируемого, папка в которой буду находится все эти файлы, называется tested м находится в папке программы.
После запуска программы и вывода на экран стартовой формы происходит событие onActivate. Процедура FormActivate сначала вызывает процедуру ResetForm, которая, присваивая значение False свойству visible, делает невидимыми поля вывода альтернативных ответов и переключатели. Аналогично делается невидимой область иллюстрации. Кроме того, процедура устанавливает максимально возможную ширину полей меток альтернативных ответов.
После очистки формы проверяется, указан ли при запуске программы параметр -- имя тестового файла.
Если параметр не указан (значение paramCount в этом случае равно нулю), то присвоением значения свойству caption метки Label5 выводится сообщение: Не задан файл вопросов теста И свойству Tag кнопки Button1 присваивается значение 2(Button1.Tag:=2;)
Если параметр задан, то открывается файл теста.
Программа тестирования получает имя файла теста как результат функции Paramstr(l). Реализация программы предполагает, что если имя файла теста задано без указания пути доступа к нему, то файл теста и файлы с иллюстрациями находятся в том же каталоге, что и программа тестирования. Если путь доступа указан, то файлы с иллюстрациями должны находиться в том же каталоге, что и файл теста. Такой подход позволяет сгруппировать все файлы одного теста в одном каталоге.
Открывается файл теста обычным образом. Сначала обращением к процедуре AssignFile имя файла связывается с файловой переменной, а затем вызывается инструкция открытия файла для чтения.
После успешного открытия файла вызывается процедура info, которая считывает из файла информацию о тесте и выводит ее присваиванием прочитанного текста свойству Caption поля метки Labels.
Затем вызывается процедура GetLevei, которая считывает из файла теста информацию об уровнях оценки. Эта процедура заполняет массивы level И mes.
После вывода информационного сообщения программа ждет, когда пользователь нажмет кнопку OK (Button1).
Командная кнопка Buttoni используется для:
* аварийного завершения работы приложения (в случае, если не задано имя файла теста);
* начала тестирования (после прочтения информационного сообщения);
* перехода к следующему вопросу (после выбора одного из ответов);
* завершения работы программы (после прочтения результатов тестирования).
Свойство Tag кнопки Buttoni используется для идентификации текущего состояния формы и выбора действия при щелчке на кнопке Buttoni.
После вывода информации о тесте значение свойства Tag кнопки Button: равно нулю. Поэтому в результате первого щелчка на кнопке Buttoni выполняется та часть программы, которая обеспечивает вывод первого вопроса, замену находящегося на кнопке текста ОК на текст Дальше, и устанавливает в выбранное состояние переключатель RadioButton5, который закрыт панелью и поэтому не виден пользователю. Кроме того, присваиванием значения False свойству Enabled кнопка Buttoni делается недоступной, тем самым блокируется переход к следующему вопросу до тех пор, пока не будет выбран один из ответов. Значению свойства Button1.Tag присваивается единица, тем самым выполняется подготовка к обработке следующего щелчка кнопки Button1.
После выбора ответа и нажатия кнопки Дальше (Buttoni) (в этом случае значение свойства Button1.Tag равно единице) к набранной сумме баллов добавляется количество баллов за выбранный ответ. Затем, если не достигнут конец файла, вызывается процедура вывода очередного вопроса. Если достигнут конец файла, то сначала закрывается файл теста, изменяется текст на кнопке Buttoni и значение Button1. Tag, а затем посредством процедуры Itog выводятся результаты тестирования.
Если значение Button1.Tag равно двум, то применением метода close к форме Form1 закрывается окно программы, в результате чего программа завершает работу.
Вывод вопроса и альтернативных ответов выполняет процедура VoprosToScr. Сначала процедура увеличивает счетчик вопросов vopros и присвоением значения свойству Caption формы выводит номер текущего вопроса в заголовок окна. Затем процедура читает строки из файла теста до тех пор, пока первым символом очередной прочитанной строки не будет точка или "обратная наклонная черта".
После вывода текста вопроса делается проверка: какой символ используется в качестве признака конца вопроса. Если обратная наклонная черта, что свидетельствует о том, что к вопросу есть иллюстрация, то свойству Form1.image1.Tag присваивается единица и из прочитанной строки выделяется имя файла иллюстрации.
Загрузка иллюстрации осуществляется применением метода LoadFromFile к свойству image1. Picture. Однако после загрузки иллюстрация на экране не появляется, так как значение свойства Image1. visible равно False.
После считывания иллюстрации процедура считывает вопросы. После обработки последнего вопроса, если была загружена иллюстрация, вызовом процедуры ScaleImage вычисляется и устанавливается размер области иллюстрации. После этого установкой значения свойства Imagel.Top задается положение верхней границы области иллюстрации, а присваиванием значения True свойству image1. visible иллюстрация делается видимой.
Так как количество символов в тексте вопроса и число альтернативных ответов от вопроса к вопросу могут меняться, и, следовательно, на экране они могут занимать разное количество строк, то каждый раз перед выводом текста очередного ответа устанавливается значение свойства тор как расстояние от нижней границы предыдущего альтернативного ответа. Для поля вывода первого альтернативного ответа (Label) значение тор вычисляется от нижней границы поля вопроса (Labels) или, если к вопросу есть иллюстрация, от нижней границы поля иллюстрации (imagei).
Выбор ответа пользователь осуществляет щелчком одного из переключателей. После вывода вопроса ни один из переключателей, соответствующих альтернативному ответу, не является выбранным. Выбран только переключатель RadioButtonS, который находится за панелью Panel1 и поэтому не виден пользователю.
Для обработки события onclick переключателей RadioButton1,
RadioButton2, RadioButton3 и RadioButton4
В Программе используется общая процедура-- TForm1.RadioButtonciick. Эта процедура получает в качестве параметра объект, на котором произошло событие. Сравнивая полученное значение с именами объектов-кнопок выбора, процедура присваивает значение глобальной переменной otv, которая используется процедурой VoprosToScr для увеличения набранной суммы баллов. Кроме того, процедура TForm1.RadioButtonClick делает доступной кнопку перехода к следующему вопросу (Buttonl), которая после вывода очередного вопроса недоступна.
Процедура Itog, сравнивая набранную сумму баллов summa со значением элементов массива level, определяет, какого уровня достиг испытуемый, и выводит соответствующее сообщение присвоением значения свойству
2.3 Минимальный состав оборудования
- Процессор - не ниже Pentium 166;
- Операционная система - Windows 95, 98, 2000, XP;
- Оперативная память - 16 Мб;
- Минимальное требуемое место на жестком диске - 5 Мб.
Заключение
В результате выполнения данной курсовой работы была получена программа тестирования. Было проведено исследование компонентов программной среды Borland Delphi 6.0, которые использовались при создании этой программы. Были выявлены следующие достоинства полученного программного продукта:
1. Минималистичный интерфейс программы позволяет сразу же приступить к игре и не вызывает утомления от длительной работы с программой;
2. Программа не требует установки в систему;
3. Программный продукт малотребователен к системным ресурсам компьютера. Минимальная конфигурация: процессор - не ниже Pentium, оперативная память - не ниже 16 Mb, операционная система - Windows 95 / 98/ Me / NT / 2000 / XP.
В результате учета всех сделанных выше замечаний можно заключить, что программа полностью удовлетворяет поставленной при разработке задаче, имея при этом минимально необходимую функциональность. Так же следует заметить возможность улучшения и дальнейшего развития программного продукта, для чего потребуется освоение новых областей знаний и приемов программирования. Данная программа тестирования в основном применяется для оценки уровня знаний в учебных заведениях, при приеме на работу, для оценки квалификации персонала учреждений, т. е. практически во всех сферах. В настоящее время широко в нашу жизнь внедряются информационные технологии. На сегодняшний день, наверное, не осталось никакой области, где-бы они не применялись. Одной из сфер деятельности, в которой информационные технологии получили широкое распространение, являются игры и досуг.
Листинг программы
unit tester_;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
jpeg;
type
TForml = class(TForm)
// вопрос
Label5: TLabel;
// альтернативные ответы
Label1: TLabel;
Рис. 1.71. Форма программы тестирования
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
// переключатели выбора ответа
RadioButtonl: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
Imagel: TImage; // областьвыводаиллюстрации
Buttonl: TButton;
Panell: TPanel;
RadioButton5: TRadioButton;
procedure FormActivate(Sender: TObject);
procedure ButtonlClick(Sender: TObject);
procedure RadioButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
// Эти объявления вставлены сюда вручную
procedure Info;
procedure VoprosToScr;
procedure ShowPicture; // выводитиллюстрацию
procedure ResetForm; // "очистка" формы перед выводом
// очередного вопроса
procedure Itog; // результат тестирования
private
/' Private declarations }
public
I Public declarations j
end;
var
Forrnl: TForml; // форма
implementation
{$R *.DFM}
const
N_LEV=4; // четыреуровняоценки
N_ANS=4; // четыре варианта ответов
var >
f:TextFile;:
fn:string; // имя файла вопросов
// сумма, соответствующая уровню
level:array[l..N_LEV] of integer;
// сообщение, соответствующее уровню
mes:array[1..N_LEV] of string;
score: array[ 1. .N_ANS] of integer; //' оценказавыборответа
suirnia: integer; // набраноочков
vopros:integer; // номертекущеговопроса
otv:integer; // номер выбранного ответа
// вывод информации о тесте
procedure Tforml.Info;
var
s,buf:string;
begin
readln(f,s);
Forml.Caption := s;
buf:='';
repeat
readln(f,s);
if s[l] <>
then buf := buf +s + #13;
until s[1] ='.' ;
Label5.caption:=buf;
end;
// прочитать информацию об оценках за тест
Procedure GetLevel;
var
i:integer;
buf:string;
begin
i:=l;
repeat
readln(f,buf) ;
if buf[1] <> '.' then begin
mes[i]:=buf; // сообщение
readln(f,level[i]); // оценка
i:=i+l;
end;
until buf[1]='.';
end;
// масштабированиеиллюстрации
Procedure TForml.ShowPicture;
var
w,h: integer; // максимально возможные размеры картинки
begin
// вычислить допустимые размеры картинки
w:=C.lientWidth-10;
h:=ClientHeight
- Panell.Height -10
- Label5.Top
- Label5.Height - 10;
// вопросы
if Label1.Caption О "
then h:=h-Labell.Height-10;
if Label2.Caption <> "
then h:=h-Label2.Height-10;
if Label3.Caption <> ''
then h:=h-Label3.Height-10;
if Label4.Caption <> ''
then h:=h-Label4.Height-10;
// если размер картинки меньше w на h,
// то она не масштабируется
ImageI.Top:=Forml.Label5.Top+Label5.Height+10;
if Image1.Picture.Bitmap.Height > h
then Imagel.Height:=h
else Imagel.Height:= Imagel.Picture.Height;
if Imagel.Picture.Bitmap.Width > w
then Imagel.Width:=w
else Imagel.Width:=Imagel.Picture.Width;
Imagel.Visible := True;
end;
// вывестивопрос
Procedure TForml.VoprosToScr;
var
i:integer;
s,buf:string;
ifn:string; // файлиллюстрации
begin
vopros:=vopros+l;
caption:='Вопрос ' + IntToStr(vopros);
// прочитатьвопрос
buf:='';
repeat
readln(f,s);
if (s[l] о '.') and (s[l] <> 'V)
then buf:=buf+s+' ';
until (s[l] ='.') or (s[l] ='\');
Label5.caption:=buf; // вывести вопрос
I Иллюстрацию прочитаем, но выведем только после
того, как прочитаем альтернативные ответы
и определим максимально возможный размер
области формы, который можно использовать
для ее вывода.}
if s[l] <> 'V
then Imagel.Tag:=0 // к вопросу нет иллюстрации
else // к вопросу есть иллюстрация
begin
Imagel.Tag:=l;
ifn:=copy(s,2,length(s)) ;
try
Imagel.Picture.LoadFromFile(ifn) ;
except
on E:EFOpenError do
Imagel. Tag:=0;
end;
end;
// читаем варианты ответов
i:=l;
repeat
buf:='';
repeat // читаем текст варианта ответа
readln(f,s);
if (s[l]<>' . ' ) and (s[l] <> ', ' )
then buf:=buf+s+' ';
until (s[l] = r, ' )or(s[l] = ' . ') ;
// прочитан альтернативный ответ
scored] := StrToInt (s [2] ) ;
case i of
1: Labell.caption:=buf;
2: Label2.caption:=buf;
3: Label3.caption:=buf;
4: Label4.caption:=buf;
end;
i:=i+l;
until s[l] = ' . ' ;
// здесь прочитана иллюстрация и альтернативные ответы
// текст вопроса уже выведен
if Imagel.Tag =1 // есть иллюстрация к вопросу
then ShowPicture;
// вывод альтернативных ответов
if Forml.Labell.Caption О ''
then begin
if Forml.Imagel.Tag =1
then Labell.Top:=Imagel.Top+Imagel.Height+10
else Labell.Top:=Label5.Top+Label5.Height+10;
RadioButtonl.Top:=Labell.Top;
Labell.visible:=TRUE;
RadioButtonl.visible:=TRUE;
end;
if Forml.Label2.Caption <> "
then begin
Label2.top:=Labell.top+ Labell.height+10;
RadioButton2.top:=Label2.top;
Label2 . visible: =TRUE;
RadioButton2.visible:=TRUE;
end;
if Forml.Label3.Caption о "
then begin
Label3.top:=Label2.top+ Label2.height+10;
RadioButton3.top:=Label3.top;
Label3.visible:=TRUE;
RadioButton3.visible:=TRUE;
end;
if Forml.Label4.Caption О '{*
then begin
Label4.top:=Label3.top+ Label3.height+10;
RadioButton4.top:=Label4.top;
Label4.visible:=TRUE;
RadioButton4.visible:=TRUE;
end;
end;
Procedure TForml.ResetForm;
begin // сделать невидимыми все метки и переключатели
Labell.Visible:=FALSE;
Labell.Caption:='';
Labell.Width:=ClientWidth-Labell.left-5;
RadioButtonl.Visible:=FALSE;
Label2.Visible:=FALSE;
Label2.Caption:='';
Label2.Width:=ClientWidth-Label2.left-5;
RadioButton2.Vis ible:=FALSE;
Label3.Visible:=FALSE;
Label3.Caption:='';
Label3.Width:=ClientWidth-Label3.1eft-S;
RadioButton3.Visible:=FALSE;
Label4.Visible:=FALSE;
Label4.Caption:='';
Labe14.Width:=C1ientWidth-Label4.lett-5;
RadioButton4.Visible:=FALSE;
Label5.Width:=ClientWidth-Label5.left-5;
Imagel.Visible:=FALSE;
end;
// определение достигнутого уровня
procedure TForml.Itog;
var
i:integer;
buf:string;
begin
buf:='';
buf:='Результаты тестирования'+ #13
+'Всего баллов: '+ IntToStr(summa);
i:=l;
while (summa < level[i]) and (i<N_LEV) do
i:=i+l;
buf:=buf+ #13+mes(i];
Label5.Top:=20;
Label5.Caption:=buf;
end;
procedure TForml.FormActivate(Sender: TObject);
begin
ResetForm;
if ParamCount = 0
then begin
Label5.Caption:= 'He заданфайлвопросовтеста.';
Buttonl.Caption:='Ok';
Buttonl.Tag:=2;
Buttonl.Enabled:=TRUE
end
else begin
fn := ParamStr(l);
assignfile(f,fn);
try
reset(f);
except
on EFOpenError do
begin
ShowMessage{'Файлтеста '+fn+' ненайден.');
Buttonl.Caption: = 'Ok' ;
Buttonl.Tag:=2;
Buttonl.Enabled:=TRUE;
exit;
end;
end;
Info; // прочитать и вывести информацию о тесте
GetLevel; // прочитать информацию об уровнях оценок
end;
end;
// щелчокнакнопке Buttonl
procedure TForml.ButtonlClick(Sender: TObject);
begin
case Buttonl.tag of
0: begin
Buttonl.caption:='Дальше';
Buttonl.tag:=1;
RadioButton5.Checked:=TRUE;
// выводпервоговопроса
Butt onl.Enabled:=Fa1s e;
ResetForm;
VoprosToScr;
end;
1: begin // выводостальныхвопросов
summa:=surama+score[otv];
RadioButton5.Checked:=TRUE;
Buttonl.Enabled:=False;
ResetForm;
if not eof(f)
then VoprosToScr
else
begin
summa:=summa+score[otv];
closefile(f);
Buttonl.caption:='Ok';
Forml.caption:='Результат1;
Buttonl.tag:=2;
Buttonl.Enabled:=TRUE;
Itog; // вывестирезультат
end;
end;
2: begin // завершениеработы
Forml.Close;
end;
end;
end;
/./ Процедура обработки события Onclick
// длякомпонентов RadioButtonl-RadioButton4
procedure TForml.RadioButtonClick(Sender: TObject);
begin
if sender = RadioButtonl
then otv:=1
else if sender = RadioButton2
then otv:=2
else if sender = RadioButton3
then otv:=3
else otv:=4;
Buttonl.enabled:=TRUE;
end;
// обеспечиваетнастройкукомпонентов
procedure TForml.FormCreate(Sender: TObject);
begin
Imagel.AutoSize := False;
Imagel.Proportional := True;
RadioButtonl.Visible := False;
end;
end.
Список использованной литературы
1. Бобровский С. Delphi 5 - М.: Питер, 2002.
2. Гаевский А.Разработка программных приложений на Delphi 6 - М.: Киев, 2000.
3. Джон Матчо, Дэвид Р.Фолкнер. «Delphi» - пер. с англ. - М.:Бином, 1998г.
4. Епанишников А. М., Епанишников В. А. Программирование в среде Turbo Pascal 7.0. М.: Диалог МИФИ, 1998.
5. Зуев В. А.. Turbo Pascal 6.0, 7.0. М.: Веста; Радио и связь, 1998.
6. Коцюбинский А.О., Грошев С.В. Язык программирования Delphi 5 - М.: «Издательство Триумф», 1999.
7. Леонтьев В. Delphi 5 - М.: Москва «Олма-Пресс», 1999.
8. МоисеевА. Object Pascal - М.: Москва, 2000.
9. Немнюгин С.А. Программирование - М.: Питер, 2000.
10. Программирование под ред. В.В.Старлова - М: Питер, 1999.
11. Ремизов Н. Delphi - М.: Питер, 2000.
12. Сван Т. Основы программирования в среде для Windows 95. Киев, 1996.
13. Справочная система Delphi 5.0 Help.
14. Т.А. Ильина. Программирование на Delphi 6 - М.: Питер, 2000.
15. Фаронов В. В. Delphi 4. Учебный курс. М.: Нолидж, 1999.
16. Федоров А. Г. Создание Windows-приложений в среде Delphi. М.: ТОО «Компьютер Пресс», 1999.
17. Хендерсон К. Руководство разработчика баз данных в Delphi 2. Киев: Диалектика, 1998.
18. Ч. Куписевич. Программирования на Delphi. - М: Киев, 1986.
Размещено на Allbest.ru
Подобные документы
Рассмотрение особенностей среды программирования Delphi. Разработка программы для пересчета длины из фунтов в килограммы с использованием следующих объектов: Edit, Label, Button. Значения свойств поля ввода-редактирования и командной кнопки Перерасчет.
практическая работа [177,2 K], добавлен 18.10.2012Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.
курсовая работа [1,2 M], добавлен 04.08.2014Свойства компонентов Label, Edit, Button, Memo вкладки Standard среды Си++ Builder и использование их в программе. Построение простейших форм приложений по вводу-выводу данных. Порядок действий при вычислении выражений. Линейные вычислительные процессы.
лабораторная работа [191,0 K], добавлен 31.03.2012Delphi - среда быстрой разработки, в которой в качестве языка программирования используется типизированный объектно-ориентированный язык Delphi. Варианты программного пакета. Особенности работы, вид экрана после запуска. Описание структуры программы.
курсовая работа [1,3 M], добавлен 25.11.2014Разработка программы автоматизации процесса проверки знаний учащихся. Использование языка программирования Borland Delphi 7.0, его свойства, компоненты для работы со строками. Создание обучающих тестов на знание лексики и грамматики английского языка.
курсовая работа [521,0 K], добавлен 06.03.2016Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.
курсовая работа [738,1 K], добавлен 17.05.2010Особенности создания программы "Файловый менеджер" в среде объектно-ориентированного программирования Delphi. Назначение и основные функции программы, формулировка задачи. Описание программы, использованные компоненты, интерфейс и порядок применения.
контрольная работа [1,3 M], добавлен 19.06.2012Ознакомление с историей создания и особенностями объектно-ориентированного языка программирования Delphi. Разработка приложения, фиксирующего количество повторений какого-либо слова в тексте, введённом в поле MEMO. Описание интерфейса программы.
курсовая работа [880,1 K], добавлен 21.04.2015Обзор средств программирования. Описание и свойства языка Delphi. Основания для разработки, ее назначение, предъявляемые требования, стадии разработки. Описание схемы основного модуля, процедур, программы. Используемые технические и программные средства.
курсовая работа [42,8 K], добавлен 25.02.2012Рассмотрение теории и технологии работы со средой программирования Delphi. Описание Описание интерфейса программы, структуры данных, генерации точек. Разработка задания по выявлению всех квадратов, которые могут быть образованы точками на плоскости.
реферат [21,0 K], добавлен 13.01.2015