Тестирование по разделу "Обыкновенные дроби"

Составление и описание программы для тестирования знаний пользователя по разделу математики "Обыкновенные дроби", написанной на языке Visual C++ с использование библиотеки MFC. Основные характеристики элементов управления разрабатываемой программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 29.06.2011
Размер файла 776,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

29

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«СЕВЕРО-КАВКАЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К КУРСОВОМУ ПРОЕКТУ

ПО ДИСЦИПЛИНЕ «Технология программирования»

НА ТЕМУ: «ТЕСТИРОВАНИЕ ПО РАЗДЕЛУ

ОБЫКНОВЕННЫЕ ДРОБИ»

Выполнил студент 2-го курса

специальности 230201.65

«Информационные системы и технологии»

гр. ИС-091

Петросян К.В.

Ставрополь 2011

Аннотация

В данном курсовом проекте описана программа, написанная на языке Visual C++ с использование библиотеки MFC.

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

Проект содержит сорок пять страниц, четырнадцать рисунков и три таблицы.

Содержание

Аннотация

ВВЕДЕНИЕ

1. Теоретические основы курсового проекта

1.1 Инструментальные средства ClassWizard и AppWizard

1.2 Класс Cobject

1.3 Модальные и немодальные диалоговые окна

1.4 Пользовательские сообщения

1.5 Стандартные диалоговые окна Windows

1.6 Доступ к элементам управления

1.7 Ресурсы и элементы управления

1.8 Стандартные элементы управления Windows

1.9 Основные характеристики обычных элементов управления

1.10 Общие черты ActiveX и обычных элементов управления

1.11 Классы-оболочки С++, генерируемые ClassWizard для Activex

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

2.1 Общие сведения

2.2 Функциональное назначение

2.3 Спецификация программы

2.4 Требования по установке

2.5 Требования к техническому обеспечению

2.6 Вызов программы. Входные и выходные данные

2.7 Тестирование программы

Заключение

Список использованной литературы

Приложение 1

Приложение 2

ВВЕДЕНИЕ

На сегодняшний день, Windows является, безусловно лидирующей операционной системой на рынке персональных компьютеров. Поэтому успех современного программиста напрямую зависит от его умения разрабатывать качественные и эффективные приложения Windows. Приложения постоянно усложняются и требуют все большего времени для их создания. Для облегчения программирования Windows-приложений фирмой Microsoft была разработана библиотека MFC (Microsoft Foundation Classes - Базовые Классы Microsoft), которая впервые была представлена на рынке в 1992 г вместе с компилятором Microsoft C/C++ 7.0. Сейчас она представляет собой мощный набор классов C++, которые позволяют программировать приложения Windows 95,98/NT на достаточно высоком уровне абстракции, и вместе с тем открывают для опытных программистов легкий доступ к функциям более низкого уровня, что позволяет писать эффективные приложения и полностью использовать все возможности операционной системы.

MFC является альтернативой системам визуального программирования, таким как Delphi или Visual Basic, предназначенной для опытных программистов. На сегодняшний день подавляющее большинство программ разрабатывается при помощи Microsoft Visual С++ и MFC. MFC - это стандарт программирования под Windows и «интернациональный язык общения». Такая ситуация объясняется многими причинами. В частности, только MFC позволяет создавать наиболее эффективные и устойчивые приложения, которые будут корректно вести себя не только в системе разработчика, но и в системах реальных пользователей. Также очень важно, что MFC поддерживает все современные технологии, реализованные в Windows, и при дополнении Windows почти сразу же дополняется и MFC. MFC - это инструмент для программирования сложных приложений, от которых требуется высокая эффективность и надежность.

Процесс разработки Windows-программы в Visual C++ начинается с создания нового проекта и подготовки набора исходных файлов. Раньше их приходилось делать вручную, теперь всю работу берет на себя «мастер» AppWizard. AppWizard - это специальный инструмент для генерации программных текстов. MFC AppWizard позволяет создавать однооконные и многооконные приложения, а также приложения, не имеющие главного окна, вместо него используется диалоговая панель. Можно также включить поддержку технологии OLE, баз данных, справочной системы.

описание программа тест дробь библиотека mfc

1. Теоретические основы курсового проекта

1.1 Инструментальные средства AppWizard и ClassWizard

AppWizard - генератор кода, создающий рабочую заготовку Windows- приложения с теми компонентами, именами классов и исходными файлами, заданными в его диалоговых окнах. AppWizard создает минимум, главное же сосредоточено внутри базовых классов каркаса приложений. Благодаря MFC AppWizard среда разработчика позволяет быстро создавать шаблоны новых приложений. При этом программисту не приходится писать ни одной строчки кода. Достаточно ответить на ряд вопросов, касающихся того, какое приложение требуется создать, и исходные тексты шаблона приложения вместе с файлами ресурсов готовы. Эти тексты можно оттранслировать и получить готовый загрузочный модуль приложения.

Class Wizard - программа, реализованная как DLL и доступная через меню View среды разработки. Она избавляет программиста от монотонной работы, связанной с кодированием классов Visual C++. В случае создания нового класса, новой виртуальной функции или нового обработчика сообщений ClassWizard создаст прототипы, тела функций и, при необходимости код, связывающий Windows-сообщение с конкретной функцией. Этот мастер способен обновлять код класса и тем самым избавляет от многих проблем, свойственных обычным генераторам кода[1].

1.2 класс Cobject

На вершине иерархии МFC-классов находится класс Cobject, который содержит различные функции, используемые во время выполнения программы и предназначенные, в частности, для предоставления информации о текущем типе во время выполнения, для диагностики, и для сериализации. Остальные классы, кроме Cstring и таких простых, как Crect и Cpoint, - производные от корневого класса Cobject. Класс, производный от Cobject, наследует ряд важных характеристик. Некоторые классы порождаются непосредственно от CObject. Наиболее широко используемыми среди них являются CCmdTarget, CFile, CDC, CGDIObject и CMenu. Класс CCmdTarget предназначен для обработки сообщений. Класс CFile предназначен для работы с файлами. Класс CDC обеспечивает поддержку контекстов устройств. В этот класс включены практически все функции графики GDI. CGDIObject является базовым классом для различных DGI-объектов, таких как перья, кисти, шрифты и другие. Класс CMenu предназначен для манипуляций с меню. От класса CCmdTarget порождается очень важный класс CWnd. Он является базовым для создания всех типов окон, включая масштабируемые ("обычные") и диалоговые, а также различные элементы управления. Наиболее широко используемым производным классом является CFrameWnd. В большинстве программ главное окно создается с помощью именно этого класса. От класса CCmdTarget, через класс CWinThread, порождается, наверное, единственный из наиболее важных классов, обращение к которому в MFC-программах происходит напрямую: CWinApp. Это один из фундаментальных классов, поскольку предназначен для создания самого приложения[2].

1.3 Модальные и немодальные диалоговые окна

Базовый класс Cdialog поддерживает как модальные, так и немодальные диалоговые окна. Пока открыто модальное диалоговое окно (например, Open File - Открытие файла), пользователь не может работать ни с каким другим окном программы (точнее, окном того же потока пользовательского интерфейса). Если же открыто немодальное диалоговое окно, работать с другим окном программы можно. Пример - диалоговое окно Find and Replace редактора Microsoft Word, которое совершенно не мешает редактировать текст. Выбор конкретного типа диалогового окна зависит от характера создаваемого приложения. Программировать модальные диалоговые окна намного проще, и это может повлиять на ваше решение[3].

В MFC-библиотеке 6.0 модальные и немодальные диалоговые окна совместно используют один и тот же базовый класс Cdialog и диалоговый ресурс, который можно создать с помощью редактора диалоговых окон. При создании модальных диалоговых окон сначала необходимо воспользоваться конструктором Cdtalog с параметром-идентификатором прикрепленного ресурса, чтобы сконструировать объект диалоговое окно, а затем вывести модальное диалоговое окно на экран, вызвав функцию-член DoModal. И как только происходит возврат из DoModal, окно прекращает свое существование. Процесс создания немодальных диалоговых окон сложнее. Начинается с вызова конструктора Cdialog по умолчанию, создавая, тем самым, объект диалоговое окно, нужное диалоговое окно создается вызовом функции-члена Cdialog::Create, а не функции DoModal. Create получает идентификатор ресурса как параметр и немедленно возвращает управление при этом диалоговое окно остается на экране[4].

1.4 Пользовательские сообщения

В случае необходимости уничтожения немодального диалогового окна, при нажатии пользователем кнопки ОК, диалоговое окно при вызове обработчика кнопки ОК отправляет объекту вид пользовательское сообщение (user-defined message). Получив это сообщение, объект вид сможет уничтожить диалоговое окно (но не сам объект).

Существует два варианта отправки Windows-сообщений: через функции CWndr.SendMessage или PostMessage. Первая немедленно вызывает функцию-обработчик сообщения, а вторая отправляет сообщение в очередь сообщений Windows. Поскольку PostMessage вносит лишь небольшую задержку, можно считать, что функция-обработчик кнопки ОК уже завершилась, когда объект вид получает сообщение[5].

1.5 Стандартные диалоговые окна Windows

Windows предоставляет набор стандартных диалоговых окон, их поддерживают и MFC-классы. Все классы стандартных диалоговых окон являются производными от одного базового класса CCommonDialog. Список классов, поддерживающих диалоговые окна из COMDLG32.DLL приведен ниже в таблице 1.5.1.

Таблица 1.5.1

Класс Назначение

CColorDtalog

Выбор или создание цвета

CFileDialog

Открытие или сохранение файла

CFindReplaceDialog

Замена в документе одного текста другим

CPageSetupDialog

Ввод параметров страницы документа

CFontDialog

Выбор шрифта из списка доступных шрифтов

CPrintDialog

Настройка принтера и печать документа

Для всех стандартных диалоговых окон характерно то, что они собирают информацию от пользователя, но её обработку не осуществляют. Диалоговое окно File Open помогает пользователю открыть файл, в действительности всего лишь сообщает программе путь и имя выбранного файла - остальную работу должна проделать сама программа[6].

1.6 Доступ к элементам управления

Размещая диалоговый ресурс в графическом редакторе, при помощи идентификаторов, таких, как IDCJSSN возможно определение элементов управления. Однако в программном коде бывает, необходим доступ к стоящему за элементом управления оконному объекту. Поэтому в MFC-библиотеке предусмотрена функция CWnd::GetDlgItem, преобразующая идентификатор в CWnd-указатель[7].

1.7 Ресурсы и элементы управления

Диалоговое окно - это настоящее окно. Диалоговое окно почти всегда связано с каким-нибудь ресурсом Windows, идентифицирующим элементы и определяющим структуру окна. Поскольку диалоговый ресурс можно создавать и модифицировать в редакторе диалоговых окон (одном из редакторов ресурсов), диалоговые окна формируются быстро, эффективно и наглядно. Диалоговое окно содержит набор элементов управления (controls); поля ввода (edit controls; их еще называют текстовыми окнами - text boxes), кнопки (buttons), списки (list boxes), комбинированные списки (combo boxes), статический текст (static text) или метки (labels), списки с древовидным отображением (tree views), индикаторы продвижения (progress indicators), ползунки (sliders) и т.д. Windows управляет этими элементами, используя специальную, значительно упрощающую труд программиста логику группирования и обхода.

На элементы управления можно ссылаться либо по указателю на CWnd (поскольку элементы сами являются окнами), либо по индексу (с сопоставленной константой define), назначенному в ресурсе.

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

MFC-библиотека и ClassWizard, тесно взаимодействуя, облегчают программирование диалоговых окон Windows. ClassWizard генерирует класс, производный от Cdialog, а затем позволяет соотнести переменные-члены класса диалоговое окно с элементами управления. Предоставляется возможность указывать такие параметры, как максимальная длина текста или границы диапазона для вводимых чисел.

После этого ClassWizard генерирует вызовы MFC-функций, отвечающих за обмен данными и проверку их достоверности. Эти функции перемещают информацию[8].

1.8 Стандартные элементы управления Windows

В числе важных стандартных элементов управления индикатор продвижения (progress indicator), ползунок (trackbar), наборный счетчик (spin button control), графический список (list control) и древовидный список (tree control). Код этих элементов управления содержится в файле Windows COMCTL32.DLL. Он включает оконные процедуры, а также код, регистрирующий оконный класс для каждого элемента. Регистрирующий код вызывается в момент загрузки DLL-модуля. Инициализируя диалоговое окно, программа использует символьное имя класса в диалоговом ресурсе для подключения к оконной процедуре в DLL. Таким образом, она завладевает окном элемента управления, код которого остается в DLL. За исключением элементов управления ActiveX, большинство элементов управления работают именно так. ClassWizard не поддерживает генерацию переменных-членов для стандартных элементов управления. Для инициализации и чтения данных, относящихся к этим элементам управления, необходимо добавить код в свои функции OnlnitDialog и ОnОК. Однако ClassWizard поможет Вам создать обработчики уведомляющих сообщений от стандартных элементов управления[9].

1.9 Основные характеристики обычных элементов управления

Обычные элементы управления Windows представляют собой дочерние окна и применяются главным образом в диалоговых окнах - для их представления в MFC служат классы типа CEdit и CTreeCtrl. За создание дочернего окна элемента управления всегда отвечает клиентская программа. Обычные элементы управления посылают диалоговому окну уведомляющие сообщения (стандартные Windows-сообщения), например, BN_CLICKED.

При необходимости обработки элемента управления, осуществляется вызов функции-члена соответствующего С++ класса, который передает этому элементу Windows-сообщение. Все элементы управления по своей природе - окна. MFC-классы для элементов управления являются производными от класса CWnd поэтому для получения текста из поля ввода, производится обращение к CWnd::GetWindowText, но работа и этой функции строится на передаче сообщения элементу управления. Элементы управления Windows - неотъемлемая часть этой операционной системы, хотя стандартные элементы управления Windows и находятся в отдельном DLL-модуле. Кроме того, существует еще одна разновидность обычных элементов управления Windows - так называемые пользовательские элементы управления (custom controls)[10].

1.10 Общие черты ActiveX и обычных элементов управления

ActiveX-элемент можно рассматривать как дочернее окно, подобно обычному элементу управления. Для включения такого элемента управления в диалоговое окно, возможна вставка с помощью редактора диалоговых окон, его идентификатор появляется в шаблоне ресурса. При динамическом создании ActiveX-элемента вызывается функция Create класса, представляющего данный элемент управления. Обычно это делается в обработчике сообщения WM_CREATE родительского окна. Если необходимо выполнить какие-либо операции с элементами управления ActiveX, вызывается функция-член C++ (так же, как и для элемента управления Windows). Окно, содержащее ActiveX-элементы, называется контейнером (contrainer).

Наиболее очевидная отличительная черта элементов управления ActiveX - наличие у них свойств и методов. Все С++ функции, которые вызываются для работы с этими элементами управления, так или иначе используют методы и свойства. Свойства имеют символические имена, которым соответствуют целочисленные индексы. Разработчик ActiveX-элемента присваивает каждому свойству определенное имя, например BackColor или GridLineWidth, и тип, например, строка, целое или вещественное двойной точности. Для растровых изображений и значков существует такой тип свойства, как картинка (picture). Клиентская программа может устанавливать отдельные свойства элемента управления, задавая их целочисленные индексы и значения. В некоторых случаях ClassWizard позволяет определить переменные-члены в классе клиентского окна, которые сопоставляются со свойствами ActiveX-элементов, имеющихся в клиентском классе. Сгенерированный DDX-код осуществляет обмен информацией между свойствами ActiveX-элемента и переменными-членами клиентского класса. Методы элементов управления ActiveX подобны функциям. У метода есть символьное имя, набор параметров и возвращаемое значение. Для вызова метода вызывается функция-членкласса C++, представляющего данный ActiveX-элемент. Разработчик элемента управления может определить любые нужные методы, например, PreviousYear, LowerControlRods и т. д. В отличие от обычных элементов управления ActiveX-элемент не посылает своему контейнеру уведомляющих сообщений WM_ - вместо этого он генерирует события. Событие носит символьное имя и может обладать произвольным набором параметров - в сущности, это функция контейнера, которую вызывает элемент управления ActiveX. Как и уведомляющие сообщения от обычных элементов управления, события не возвращают ActiveX-элементу никаких данных. В качестве примеров событий можно назвать Click, KeyDoum и NewMontb. События увязываются с клиентским классом так же, как и уведомляющие сообщения от элементов управления. В мире MFC элементы управления ActiveX ведут себя как обычные дочерние окна, однако между окном контейнера и окном элемента управления есть весьма значительная прослойка кода. Кроме того, у ActiveX-элемента окна может и не быть. При вызове Create окно элемента управления непосредственно не создается, вместо этого загружается его код и ему выдается команда для активизации на месте. После этого ActiveX-элемент формирует свое окно, доступ к которому MFC обеспечивает через указатель CWnd. Однако использование клиентской программой hWnd элемента управления ActiveX - не самый лучший вариант. ActiveX-элементы хранятся в отдельных DLL-модулях, обычно такая DLL имеет расширение OCX. Прикладная программа загружает DLL по мере необходимости, используя изощренные приемы СОМ-технологии, основанные на операциях с реестром Windows. ActiveX-элемент, указанный на этапе разработки программы, будет загружен в период ее выполнения. Естественно, при поставках приложения, требующего определенных элементов управления ActiveX, необходимо включить в комплект поставки файлы OCX и соответствующую программу установки[11].

1.11 Классы-оболочки C++, генерируемые ClassWizard для ActiveX

При добавлении в проект ActiveX-элемента ClassWizard - в соответствии с набором свойств и методов данного элемента управления - генерирует класс-обол очку C++, производный от CWnd. Сгенерированный класс содержит функции-члены для всех свойств и методов, а также конструкторы, которые можно использовать для динамического создания экземпляров данного элемента управления. (ClassWizard генерирует также класс оболочки объектов, используемых элементом управления.). Для добавления переменных к диалоговому окну для элемента управления ActiveX, нужно установить свойство элемента управления до вызова DoModal для этого диалогового окна, то можно добавить переменную, соответствующую этому свойству. При необходимости изменения свойств внутри функций-членов диалогового окна, используется другой подход с добавлением переменной-объекта класса-оболочки элемента управления ActiveX[11].

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

2.1 Общие сведения

Данная программа написана на языке C++ в среде Microsoft Visual Studio 2008 с использование библиотеки MFC, название программы test. Для функционирования программы не нужно специального программного обеспечения, так как программа представляет собой исполняемый файл формата exe.

2.2 Функциональное назначение

Данный программный продукт предназначен для тестирования знаний пользователя по разделу математики «Обыкновенные дроби». Главное диалоговое окно (Рисунок 2.2.1) содержит два текстовых поля и четыре кнопки, две из которых стандартные (OK и Cancel). Кнопка Run test запускает тест. Верхнее текстовое поле выводит знание пользователя в баллах от нуля до ста. Кнопка Mark выводит в нижнее текстовое поле оценку пользователя в словесной форме: «excellent» (отлично), «good»(хорошо), «bad» (плохо), «try again» (начать сначала), в зависимости от баллов набранных пользователем в ходе выполнения теста, также выводит на экран одно из четырех изображений в соответствии с набранными балами.

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

В каждом из четырех разделов пользователю необходимо ввести правильный ответ. Каждый из разделов отличителен способом взаимодействия пользователя с программой или интерфейсом. Рассмотрим подробнее каждый из четырех разделов.

Рисунок 2.2.1 - Главное диалоговое окно

Первый раздел включает задания, в которых пользователю предстоит произвести сложение дробей. Задание предполагает свободный ответ, который должен быть записан в текстовое поле окна. Раздел включает пять вопросов.

Ниже приведён интерфейс диалоговых окон данного раздела (Рисунок 2.2.2). Второй раздел (Рисунок 2.2.3) включает задания, в которых пользователю предстоит произвести вычитание дробей. В данном разделе у пользователя есть возможность выбора всех четырех ответов, но правильный ответ один, при выборе нескольких ответов одновременно, последний будет принят как неправильный. Раздел включает пять вопросов.

Рисунок 2.2.2 - Вид диалоговых окон первого раздела

Рисунок 2.2.3 - Вид диалоговых окон второго раздела

Третий раздел включает задания, в которых пользователю предстоит произвести умножение дробей. Задание предполагает выбор одного из четырех ответов (Рисунок 2.2.4). Раздел включает пять вопросов.

Рисунок 2.2.4 - Вид диалоговых окон третьего раздела

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

Рисунок 2.2.5 - Вид диалоговых окон четвертого раздела

Вывод результатов пользователя по окончанию тестирования (Рисунок 2.2.6).

Рисунок 2.2.6 - Вывод результатов тестирования

2.3 Описание логической структуры

Программа представляет собой диалоговое приложение MFC Application. Включает в себя двадцать одно диалоговое окно, включая главное диалоговое окно.

В основе каждого диалогового окна лежит класс CDialog (главное диалоговое окно class CtestDlg : public CDialog). На каждое для каждого дочернего диалогового окна было создано по классу (d1,d2,…d20), каждый из которых имеет свои переменные. Все классы и переменные используются в коде обработчика кнопки Run test главного диалогового окна.

В коде обработчика этой кнопки содержится алгоритм (Рисунок 2.3.1). Алгоритм содержит двадцать условий выполнение каждого из которых увеличивает значения переменной result (IDC_EDIT1) на пять. Result является переменной текстового поля (Edit control) главного диалогового окна (верхний правый угол), содержание которой в итоге выводится пользователю как сумма баллов за пройденный тест.

Переменная result может принимать целочисленные значения в диапазоне от 0 до 100 (в зависимости от количества правильных ответов пользователя).

В обработчике кнопки Run test также содержится код, обнуляющий значение переменной result перед началом тестирования. Это обеспечивает защиту от некорректных действий пользователя.

Обработчик кнопки Mark содержит условия связанные с переменной текстового поля result (правый верхний угол).

Если значение переменной result удовлетворяет условию, то в переменную второго текстового поля (над кнопкой Mark) mark записывается оценка в словесной форме, а также выводится один из четырех рисунков. Рисунки изначально невидимы (Visible=false).

В целях избегания наложения рисунков при повторном прохождении теста рисунки скрываются ShowWindow(SW_SHOW) перед каждой очередной попыткой пройти тест, при нажатии кнопки Run test.

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

Рисунок 2.3.1 - Алгоритм программы в общем виде

Условие имеет вид:

if (dl1.edit1==2)

{ result +=5;

UpdateData(false);}

if (dl6.t6==1)

{result +=5;

UpdateData(false);}

Где edit1-edit5 переменная текстового поля одного из тестовых окон, в которое пользователь вводит ответ (первая группа диалоговых окон). С помощью переменных t6-t20 осуществляется обмен данными между элементами управления отдельных диалоговых окон и главным диалоговым окном.

Теперь рассмотрим структуру дочерних диалоговых окон, их можно разделить на четыре группы. В каждой из групп представлены различные элементы управления.

В первой группе окон взаимодействия пользователя с приложением осуществляется с помощью текстового поля (Edit Control), которое связанно с соответствующими переменными (edit1, edit2,...edit5). При вводе правильного ответа переменной присваивается значение (edit1,edit2,...edit5 = a,b,…e) удовлетворяющее условию, содержащегося в коде обработчика кнопки Run test главного диалогового окна, при этом значение переменной текстового поля результатов result увеличивается на пять. В случае ввода любого другого ответа значение переменной хранящей результаты result не изменится.

Во второй группе окон взаимодействие пользователя с приложением осуществляется с помощью флажков (Check Box). От пользователя ожидается один правильный ответ. Так как можно одновременно активировать все четыре флажка, разработан алгоритм, согласно которому при выборе правильного ответа переменной (t6,t7,..t10) присваивается определенное значение, при выборе неправильного ответа это значение отнимается из переменной, таким образом, правильный ответ может быть только один, любые другие неправильны даже если активировать все четыре флажка. Значение переменной (t6,t7,…t10) полученное в результате взаимодействия пользователя с программой анализируется и в зависимости от удовлетворения условию или нет, значение переменной результатов главного диалогового окна result увеличивается на пять или остается неизменным.

В третьей группе окон взаимодействие пользователя с приложением осуществляется с помощью переключателей (Radio Button). Пользователь должен выбрать один из четырех ответов, при выборе правильного ответа переменной (t11,t12,…t15) присваивается определенное значение, при выборе иного варианта ответа значение переменной result не изменится. Далее значения анализируются программой при совпадении значения переменной тестового окна (t11,t12,…t15) со значением хранящемся в коде обработчика кнопки Run test (главное диалоговое окно), переменная result хранящая результаты тестирования увеличивается на пять, иначе значение переменной result остается без изменений. В четвертой группе окон взаимодействие пользователя с приложением осуществляется с помощью комбинированного списка (Combo box). Пользователю необходимо выбрать правильный ответ из списка. При выборе ответа переменная (t16,t17,…t20) получает индекс выбранной строки с помощью метода GetCurSel(). В коде обработчика кнопки Run test (главное диалоговое окно) задано условие, котором в записан индекс правильного ответа, при удовлетворении условия значение переменной результатов result увеличивается на пять. В случае несовпадении индекса выбранного ответа, с номером индекса записанном в условии значение переменной result не изменится.

Таблица 2.3 - Спецификация разработанных классов и функций

Имя класса

Член класса

Способа доступа

Назначение

Назначение формальных параметров

CtestDlg

m_hIcon

закрытый

Определяет единственный набор данных

CtestDlg

DoDataExchange ()

закрытый

Осуществляет обмен данными

CtestDlg

OnInitDialog();

закрытый

Определяет наличие фокуса ввода к одному из элементов управления

CtestDlg

CString mark

открытый

Содержит оценку

CtestDlg

int result

открытый

Содержит суммы баллов

CtestDlg

CStatic bitmap2

CStatic bitmap3

CStatic bitmap4

CStatic bitmap5

открытый

Содержит изображения

CtestDlg

открытый

Содержит изображение

CtestDlg

DECLARE_MESSAGE_MAP()

отрытый

таблица откликов

d1

DoDataExchange()

закрытый

Осуществляет обмен данными

d1

OnEnChangeEdit()

OnBnClickedOk()

открытый

Обработчики событий

d1

int edit

открытый

Содержит значение текстового поля

d2

int edit2

открытый

Содержит значение текстового поля

d3

int edit3

открытый

Содержит значение текстового поля

d4

int edit4

открытый

Содержит значение текстового поля

d5

int edit5

открытый

Содержит значение текстового поля

d6

OnBnClickedCheck()

открытый

Обработчик события

d6

int t6

открытый

Обмен данными с Check Box

d7

int t7

открытый

Обмен данными с Check Box

d8

int t8

открытый

Обмен данными с Check Box

d9

int t9

открытый

Обмен данными с Check Box

d10

int 10

открытый

Обмен данными с Check Box

d11

OnBnClickedRadio()

открытый

Обработчик события

d11

Int t11

открытый

Обмен данными с Radio Button

d12

Int t12

открытый

Обмен данными с Radio Button

d13

Int t13

открытый

Обмен данными с Radio Button

d14

Int t14

открытый

Обмен данными с Radio Button

d15

Int t15

открытый

Обмен данными с Radio Button

d16

OnCbnSelchangeCombo()

открытый

Обработчик события

d16

GetCurSel()

открытый

Обработчик события

d16

Int t16

открытый

Обмен данными с Combo box

d17

Int t17

открытый

Обмен данными с Combo box

d18

Int t18

открытый

Обмен данными с Combo box

d19

Int t19

открытый

Обмен данными с Combo box

d20

Int t20

открытый

Обмен данными с Combo box

2.4 Требования по установке

Для работы программы необходимо наличие файла: test.exe.

2.5 Требования к техническому обеспечению

Для корректной работы программы необходимы IBM PC совместимый компьютер, операционная система семейства Windows версии 95/98/NT/XP, оперативная память 128 Mb и выше, свободное место на диске 600 Кб под размещение приложения.

2.6 Вызов программы. Входные и выходные данные

Программа представляет собой файл-приложение text.exe, функционирующее в любой операционной системе семейства Windows.

Как уже было отмечено ранее, все диалоговые окна могут быть разделены на четыре группы по факту организации обмена данных пользователя с приложением. Рассмотрим подробнее организацию ввода и вывода данных данного приложения, таблица вопросов и ответов приведена ниже (Таблица 2.6.1).

Таблица 2.6.1 - таблица вопросов и ответов

Задание

Верный ответ

Неверный ответ

Неверный ответ

Неверный ответ

1/2 + 3/2

2

-

-

-

14/4 + 3/6

4

-

-

-

1/7 + 6/7

1

-

-

-

1/44 + 87/44

2

-

-

-

72/27 + 4/3

4

-

-

-

1/7 - 6/7

-5/7

7/7

-13/8

8/7

11/7 - 6/7

5/7

7/7

13/7

-5/7

4 - 6/7 - 3/7

19/7

42/14

13/7

-19/7

14/42 - 1/3

0

13/39

1

14/45

4/12 - 8/3

-7/3

-4/9

8/12

34/36

1/7 * 6/7

6/49

8/7

42/7

7/7

11/7 * 7/11

1

18/17

121/49

4/11

16/3 * 11/8

22/3

161/24

16/8

48/26

21/3 * 49/63

7/3

16/51

49/21

8/3

44/16 * 12/11

3

248/18

4/11

18/8

1/7 / 6/7

1/6

6/7

7/6

6

21/11 / 11/3

63/121

9

7/21

32/14

3/2 / 4/6

9/4

4/9

7/9

6/8

49/6 / 7/12

14

12

16

18

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

Выходные данные (Рисунок 2.6.2) содержатся в текстовых полях главного диалогового окна. Первое текстовое поля (правый верхний угол) выводит оценку пользователя в баллах от 0 до 100. Второе текстовое поле выводит оценку в словесной форме, в зависимости от знаний пользователя: «excellent» (отлично), «good»(хорошо), «bad» (плохо), «try again» (начать сначала). Также на форму выводится одно из четырех изображений в соответствии с набранными баллами.

Рисунок 2.6.1- Входные данные

Рисунок 2.6.2 - Выходные данные

2.7 Тестирование программы

Главное диалоговое окно приложения (рисунок 2.7.1), имеет два текстовых поля, было решено произвести тестирование на защищенность от некорректных действий пользователя. Первое поле выводит баллы (тип integer) второе текст (тип Cstring). В коде обработчика кнопки Mark содержится условие, согласно которому в зависимости от содержания переменной результатов верхнего текстового поля (result), в переменную второго текстового поля (CString) записывается оценка в словесной форме. Тестирования касательно ввода данных в текстовые поля показали, что при вводе в первое текстовое поле текстовой информации, и последующим нажатием на кнопки Mark (действие основывается на значении переменной первого текстового поля) программа выведет оценку пользователя 0 а также во втором текстовом поле сообщение «try again» (с начала) (Рисунок 2.7.1). Аналогичное тестирование было проведено относительно второго текстового поля. Тестирование показало, что пользователь не в состоянии вывести программу из рабочего состояния путем ввода некорректных данных в текстовые поля, главного диалогового окна. Это связанно с тем, что такой параметр как UpdateData текстовых полей главного диалогового окна имеет значение false, то есть обмен данных осуществляется внутри программы без вмешательства пользователя. Тестирование дочерних диалоговых окон. Проводилось тестирование входных данных первой группы диалоговых окон (ввод данных осуществляется с помощью текстового поля Edit Control). При вводе чисел выходящих из диапазона от -50 до 50, программа попросит пользователя ввести значение от -50 до 50, при вводе текста программа напомнит пользователю, что входные данные должны иметь целочисленные тип integer (Рисунок 2.7.2). После чего приложение продолжит работу в обычном режиме.

Рисунок 2.7.1 - Главное диалоговое окно

Рисунок 2.7.2 - Неверный формат ввода

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

Тестирование на корректность интерпритации программой верных и неверных ответов в соответствии с таблице вопросов и ответов, приведенной в ранее. Пользуясь таблицей был осуществлен ввод изначально всех неверных вариантов ответа, программа подтвердила корректность работы. Результат тестирования (Рисунок 2.7.4) показал что пользователь набрал ноль баллов с оценкой «try again» (с начала). Затем пользуясь указанной таблице был осуществленн ввод только правильных вариантов ответа. Программа подтвердила корректность работы и вывела соответствующий результат (Рисунок 2.7.4), сумма баллов равна нулю и оценка «excellent» (Отлично).

Рисунок 2.7.3 - Ввод неверных ответов

Рисунок 2.7.3 - Ввод правильных ответов

Тестирование показало, что программа работает без сбоев и может использоваться для тестирования школьников на знание математики.

Заключение

В ходе выполнения курсового проекта было создано Windows-приложение, позволяющее производить тестирование пользователя по разделу «Обыкновенные дроби». Данная программа была написана на Microsoft Visual C++ 6.0 с использованием библиотеки MFC.

В ходе разработки курсового проекта была освоена работа с Microsoft Visual C++. Была освоена работа с элементами управления, а также навыки сложения, вычитания, деления и умножения дробей. Был приобретен незаменимый опыт разработки Windows-приложений, благодаря которому мне стали понятны принципы объектно-ориентированного программирования.

Библиотека MFC разрабатывалась для упрощения задач, стоящих перед программистом. Как известно, традиционный метод программирования под Windows требует написания достаточно длинных и сложных программ, имеющих ряд специфических особенностей. В частности, для создания только каркаса программы таким методом понадобится около 75 строк кода. По мере же увеличения сложности программы ее код может достигать поистине невероятных размеров. Однако та же самая программа, написанная с использованием MFC, будет примерно в три раза меньше, поскольку большинство частных деталей скрыто от программиста.

Список использованной литературы

1. Грегори К. Использование Visual C++ 6. Специальное издание.- М., СПб.; К.: Издательский дом «Вильямс», 2000 г.

2. Черносвитов А.,Visual C++ и MFC. Курс MCSD для профессионалов. - СПб: Издательство «Питер», 2000.

3. Владимир Давыдов Visual C++. Разработка Windows-приложений с помощью MFC и API-функций, БХВ-Петербург, 2008.

4. Дэвид Дж. Круглински, Скотт Уингоу, Джордж Шеферд -Программирование на Microsoft Visual C++ 6.0 для профессионалов.: Питер, Русская Редакция, 2004.

5. Шилдт Г. Самоучитель С++. - BHV - Санкт-Петербург, 1998.

6. Пахомов Б. "C/C++ и MS Visual C++ 2008 для начинающих": Издательство БХВ-Петербург, 2009

7. Марк Луис. Visual C++ 6. - М.: Лаборатория базовых знаний, 1999.

8. Холзнер С. Visual C++ 6: учебный курс - СПб: Питер, 2001.

9. Гилберт Стивен, Маккарти Билл. Программирование на Visual C++ 6. Этюды профессионалов - К.: Издательство “ДиаСофт”, 1999.

10. Баженова И.Ю. Visual C++ 6. - М.: Диалог-МИФИ, 1999.

11. Буч Г.Объектно-ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд./Пер. с англ. - М.: «Издательство Бином», СПб.: «Невский диалект», 1999.

Приложение 1

Диаграмма классов

Приложение 2

Листинг программы

#include "stdafx.h"

#include "test.h"

#include "testDlg.h"

#include "d1.h"

#include "d2.h"

#include "d3.h"

#include "d4.h"

#include "d5.h"

#include "d6.h"

#include "d7.h"

#include "d8.h"

#include "d9.h"

#include "dl10.h"

#include "d11.h"

#include "d12.h"

#include "d13.h"

#include "d14.h"

#include "d15.h"

#include "d16.h"

#include "d17.h"

#include "d18.h"

#include "d19.h"

#include "d20.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

// Implementation

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

// CtestDlg dialog

CtestDlg::CtestDlg(CWnd* pParent /*=NULL*/)

: CDialog(CtestDlg::IDD, pParent)

, result(0)

, mark(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CtestDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT1, result);

DDV_MinMaxInt(pDX, result, 0, 100);

DDX_Text(pDX, IDC_EDIT2, mark);

DDX_Control(pDX, IDC_STATIC2, bitmap2);

DDX_Control(pDX, IDC_STATIC3, bitmap3);

DDX_Control(pDX, IDC_STATIC4, bitmap4);

DDX_Control(pDX, IDC_STATIC5, bitmap5);

}

BEGIN_MESSAGE_MAP(CtestDlg, CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_EN_CHANGE(IDC_EDIT1, &CtestDlg::OnEnChangeEdit1)

ON_BN_CLICKED(IDC_BUTTON1, &CtestDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2, &CtestDlg::OnBnClickedButton2)

END_MESSAGE_MAP()

// CtestDlg message handlers

void CtestDlg::OnEnChangeEdit1()

{

}

void CtestDlg::OnBnClickedButton1()

{

UpdateData(false);

bitmap2.ShowWindow(SW_HIDE);

bitmap3.ShowWindow(SW_HIDE);

bitmap4.ShowWindow(SW_HIDE);

bitmap5.ShowWindow(SW_HIDE);

result=0;

d1 dl1;

if (dl1.DoModal()==IDOK)

{

if (dl1.edit1==2)

{

result +=5;

UpdateData(false);

}

}

d2 dl2;

if (dl2.DoModal()==IDOK)

{

if(dl2.edit2==4)

{

result +=5;

UpdateData(false);

}

}

d3 dl3;

if (dl3.DoModal()==IDOK)

{

if(dl3.edit3==1)

{

result +=5;

UpdateData(false);

}

}

d4 dl4;

if (dl4.DoModal()==IDOK)

{

if(dl4.edit4==2)

{

result +=5;

UpdateData(false);

}

}

d5 dl5;

if (dl5.DoModal()==IDOK)

{

if(dl5.edit5==4)

{

result +=5;

UpdateData(false);

}

}

d6 dl6;

if (dl6.DoModal()==IDOK)

{

if (dl6.t6==1)

{

result +=5;

UpdateData(false);

}

}

d7 dl7;

if (dl7.DoModal()==IDOK)

{

if(dl7.t7==1)

{

result +=5;

UpdateData(false);

}

}

d8 dl8;

if (dl8.DoModal()==IDOK)

{

if(dl8.t8==1)

{

result +=5;

UpdateData(false);

}

}

d9 dl9;

if (dl9.DoModal()==IDOK)

{

if(dl9.t9==1)

{

result +=5;

UpdateData(false);

}

}

dl10 dlg10;

if (dlg10.DoModal()==IDOK)

{

if(dlg10.t10==1)

{

result +=5;

UpdateData(false);

}

}

d11 dl11;

if (dl11.DoModal()==IDOK)

{

if (dl11.t11==1)

{

result +=5;

UpdateData(false);

}

}

d12 dl12;

if (dl12.DoModal()==IDOK)

{

if(dl12.t12==1)

{

result +=5;

UpdateData(false);

}

}

d13 dl13;

if (dl13.DoModal()==IDOK)

{

if(dl13.t13==1)

{

result +=5;

UpdateData(false);

}

}

d14 dl14;

if (dl14.DoModal()==IDOK)

{

if(dl14.t14==1)

{

result +=5;

UpdateData(false);

}

}

d15 dl15;

if (dl15.DoModal()==IDOK)

{

if(dl15.t15==1)

{

result +=5;

UpdateData(false);

}

}

d16 dl16;

if (dl16.DoModal()==IDOK)

{

if (dl16.t16==3)

{

result +=5;

UpdateData(false);

}

}

d17 dl17;

if (dl17.DoModal()==IDOK)

{

if(dl17.t17==0)

{

result +=5;

UpdateData(false);

}

}

d18 dl18;

if (dl18.DoModal()==IDOK)

{

if(dl18.t18==1)

{

result +=5;

UpdateData(false);

}

}

d19 dl19;

if (dl19.DoModal()==IDOK)

{

if(dl19.t19==3)

{

result +=5;

UpdateData(false);

}

}

d20 dl20;

if (dl20.DoModal()==IDOK)

{

if(dl20.t20==3)

{

result +=5;

UpdateData(false);

}

}

}

void CtestDlg::OnBnClickedButton2()

{

UpdateData(false);

if (result < 50)

{mark = " try again ";bitmap5.ShowWindow(SW_SHOW);}

if (result >50 && result <70)

{mark = " bad ";bitmap2.ShowWindow(SW_SHOW);}

if (result >70 && result <85)

{mark = " good ";bitmap3.ShowWindow(SW_SHOW);}

if (result > 85)

{mark = " excellent ";bitmap4.ShowWindow(SW_SHOW);}

UpdateData(false);

/////////////////////////

void d1::OnBnClickedOk()

{

UpdateData(true);

OnOK();

}

void d2::OnBnClickedOk()

{

UpdateData(true);

OnOK();

}

void d3::OnBnClickedOk()

{

UpdateData(true);

OnOK();

}

void d4::OnBnClickedOk()

{

UpdateData(true);

OnOK();

}

void d5::OnBnClickedOk()

{

UpdateData(true);

OnOK();

}

void d6::OnBnClickedCheck1()

{

t6-=1;

}

void d6::OnBnClickedCheck2()

{

t6-=1;

}

void d6::OnBnClickedCheck3()

{

t6-=1;

}

void d6::OnBnClickedCheck4()

{

t6=1;

}

void d7::OnBnClickedCheck2()

{

t7=1;

}

void d7::OnBnClickedCheck1()

{

t7=-1;

}

void d7::OnBnClickedCheck3()

{

t7=-1;

}

void d7::OnBnClickedCheck4()

{

t7=-1;

}

void d8::OnBnClickedCheck4()

{

t8=1;

}

void d8::OnBnClickedCheck3()

{

t8-=1;

}

void d8::OnBnClickedCheck2()

{

t8-=1;

}

void d8::OnBnClickedCheck1()

{

t8-=1;

}

void d9::OnBnClickedCheck1()

{

t9 = 1;

}

void d9::OnBnClickedCheck2()

{

t9-=1;

}

void d9::OnBnClickedCheck3()

{

t9-=1;

}

void d9::OnBnClickedCheck4()

{

t9-=1;

}

void dl10::OnBnClickedCheck1()

{

t10=1;

}

void dl10::OnBnClickedCheck4()

{

t10-=1;

}

void dl10::OnBnClickedCheck2()

{

t10-=1;

}

void dl10::OnBnClickedCheck3()

{

t10-=1;

}

void d11::OnBnClickedRadio4()

{

t11=1;

}

void d11::OnBnClickedOk()

{

OnOK();

}

void d12::OnBnClickedRadio3()

{

t12=1;

}

void d13::OnBnClickedRadio1()

{

t13=1;

}

void d14::OnBnClickedRadio2()

{

t14=1;

}

void d15::OnBnClickedRadio4()

{

t15=1;

}

void d16::OnCbnSelchangeCombo1()

{

t16 = combo1.GetCurSel();

UpdateData(false);

}

void d17::OnCbnSelchangeCombo1()

{

t17 = combo2.GetCurSel();

UpdateData(false);

}

void d18::OnCbnSelchangeCombo1()

{

t18 = combo3.GetCurSel();

UpdateData(false);

}

void d19::OnCbnSelchangeCombo1()

{

t19 = combo4.GetCurSel();

UpdateData(false);

}

void d20::OnCbnSelchangeCombo1()

{

t20 = combo5.GetCurSel();

UpdateData(false);

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.