Помощь в написании студенческих работ
Антистрессовый сервис

Приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC. 
Тестирование по разделу «Законы механики Ньютона»

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

C++ — универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям… Читать ещё >

Приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу «Законы механики Ньютона» (реферат, курсовая, диплом, контрольная)

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

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

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

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

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

НА ТЕМУ: " Приложение написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу " Законы механики Ньютона"

Выполнил студент II курса Специальность 230 201.65

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

гр. ИС-091 С.A. Гриневич Ставрополь 2011

Аннотация

В данном курсовом проекте была поставлена задача создать приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC на тему «Тестирование по разделу «Законы механики Ньютона» «.

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

Данная пояснительная записка содержит:

1) Теоретическую часть.

2) Описание программы Test

3) 15 Рисунков

4) 6 Таблиц

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

6) Диаграмму классов

  • Введение
  • 1. Основы программирования на Visual C++
  • 1.1 Библиотеки в C++
  • 1.2 Библиотека MFC
  • 1.3 Классы в C++
  • 1.4 Имена, используемые MFC
  • 1.5 ClassWizard
  • 2. Описание программы Test
  • 2.1 Общие сведения
  • 2.2 Функциональное назначение
  • 2.3 Описание логической структуры программы
  • 2.4 Требования к техническому обеспечению
  • 2.5 Вызов программы
  • 2.6 Входные и выходные данные
  • 2.7 Описание тестовых прогонов
  • Заключение
  • Список используемой литературы
  • Приложения

C++ - это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, С++ помимо ООР поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. С++ уже стал универсальным языком для программистов всего мира.

С++ был разработан сотрудником научно-исследовательского центра AT&T Bell Laboratories (Нью-Джерси, США) Бьярном Страуструпом в 1979 году. Первоначальное название «С с классами» было изменено на С++ в 1983 году. Начиная с 1980 года С++ претерпел две существенные модернизации: в 1985 и 1990 годах. Последняя третья модель связана с процессом стандартизации С++. Несколько лет назад началась работа по созданию единого международного стандарта по С++. Для этой цели был сформирован объединенный комитет по стандартизации ANSI (American National Standards Institute, Американский национальный институт стандартов) и ISO (International Standards Organization, Международная организация по стандартам) для языка С++. Первый рабочий проект указанного стандарта был предложен 25 января1994 года. Комитет ANSI/ISO по С++ фактически сохранил все основные черты языка, заложенные туда еще Страуструпом и добавил несколько новых инструментов.

C++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. [3]

Ключевым понятием C++ является класс. Класс — это тип, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. C++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline — подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В C++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т. п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

C++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из C++ программ можно использовать C библиотеки, и с C++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C. [4]

1. Основы программирования на Visual C++

1.1 Библиотеки в C++

Библиотеки предоставляют программисту возможность использовать при разработке программы готовые фрагменты кода. В библиотеки могут быть включены подпрограммы, структуры данных, классы, макросы. Для языка C++ разработано много библиотек различного назначения. Некоторые библиотеки используются по умолчанию, их подключение к проекту осуществляется автоматически (библиотека времени выполнения — RTL, Runtime Library). Другие библиотеки можно использовать по требованию (в консольном приложении VC++ - библиотека MFC), для этого следует подключить директивой include их заголовки и/или сделать соответствующие настройки проекта. Файлы, содержащие библиотеки, имеют расширение *. lib (статическая) и *. dll (динамическая).

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

1.2 Библиотека MFC

Библиотека MFC (Microsoft Foundation Classes) — фундаментальная библиотека классов фирмы Microsoft. MFC используется для создания объектно-ориентированных приложений под Windows в среде Visual C++, Borland C++ 5.0, C++ Builder. Предшественницей MFC была библиотека Application Framework (AFX), выпущенная в виде отдельного программного продукта (1992). MFC создает готовый каркас приложения, который дополняется в соответствии с поставленной задачей. Библиотека содержит определения классов C++, реализующих интерфейс с Windows, на основе которых могут быть определены классы пользователя. Для большинства классов MFC базовым определен класс CObject. Производные от него классы представляют собой различного вида окна (например, CFrameWnd — класс окна с рамкой), диалоговые панели (класс CDialog), контексты устройств (класс CDC), графические компоненты (класс CPen — перо). Также в состав библиотеки MFC включены средства для работы со строками, файлами. [1]

1.3 Классы в C++

Поскольку C++ - объектно-ориентированный язык, он позволяет использовать при разработке программ как готовые классы, доступные через соответствующие библиотеки, так и классы, разработанные пользователем.

Объявление класса начинается с ключевого слова class. Переменные, константы, функции, включенные в класс, называются членами класса. Члены класса объявляются в одном из трех разделов класса: public, private, protected. Включение члена класса в тот или иной раздел влияет на доступность этого члена для объектов других классов.

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

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

visual программирование приложение Раздел protected позволяет, используя механизм наследования, передавать включенные в него члены класса по наследству.

Рассмотрим в качестве примера класс принтеров. Включим в его состав следующие свойства: модель, год выпуска и состояние принтера; спрячем эти свойства от постороннего воздействия, поместив в раздел private. Ограничимся двумя возможными состояниями принтера: 0 — принтер готов к работе, 1 — принтер печатает. Методы сделаем доступными для других объектов. Метод init_printer () позволит установить начальные значения свойствам принтера. Метод set_print () переведет принтер в состояние печати, если принтер до того находился в состоянии готовности, и не изменит его состояния, если принтер уже печатал. Метод stop_print () приводит к остановке печати. Метод show () отображает состояние принтера на экране:

Замечание. Если раздел private включен в объявлении класса первым, ключевое слово private можно опустить:

В главную часть программы — функцию main () — включим следующие действия: создание объекта, инициализация свойств объекта, изменение состояния объекта и вывод его текущего состояния на экран. [1]

1.4 Имена, используемые MFC

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

Названия всех классов и шаблонов классов библиотеки MFC начинаются с заглавной буквы C. Например, CWnd, CMenu, CArray — это классы. Когда вы наследуете собственные классы от классов MFC, вы можете давать им любые имена. Рекомендуется называть их как и классы MFC с заглавной буквы C. Это сделает исходный текст приложения более ясным для понимания.

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

Библиотека MFC включает помимо классов, набор служебных функций. Названия этих функций начинаются с символов Afx, например AfxGetApp, AfxGetAppName, AfxGetMainWnd. Символы AFX являются сокращением от словосочетания Application FrameworkX, означающего основу приложения, его внутреннее устройство.

Символы AFX встречаются не только в названии функций MFC. Многие константы, макрокоманды и другие символы начинаются с этих символов. В общем случае Afx является признаком, по которому вы можете определить принадлежность того или иного объекта (функции, переменной, ключевого слова или символа) к библиотеке MFC.

В процессе создания приложения MFC AppWizard и ClassWizard могут определять идентификаторы ресурсов, идентификаторы для справочной системы и т. д. При этом, для идентификаторов различного типа используются разные префиксы. [4]

Таблица 1 — Префиксы

Префикс

Представляет идентификаторы

HID_

Контекстной подсказки для команд

HIDD_

Контекстной подсказки для диалоговых панелей

ID_

Строк меню и кнопок панелей управления

IDB_

Растровых изображений bitmap

IDC_

Курсоров

IDC_

Органов управления диалоговых панелей

IDD_

Шаблонов диалоговых панелей

IDI_

Пиктограмм

IDP_

Строковых ресурсов, используемые в диалоговых панелях message box для отображения приглашения

IDR_

Приложение может иметь несколько ресурсов различного типа с одинаковыми идентификаторами. Для таких идентификаторов используют префикс IDR_

IDS_

Строковых ресурсов.

IDOK, IDCANCEL

Стандартные идентификаторы для кнопок OK и Cancel диалоговых панелей.

Когда приложение разрабатывается средствами MFC AppWizard и ClassWizard, они размещают в исходном тексте приложения комментарии следующего вида:

// {{AFX_

.

// }}AFX_

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

Чтобы подчеркнуть особое положение программного кода, заключенного в комментарии // {{AFX_, он отображается серым цветом. Это еще раз напоминает пользователю, о том, что он не должен вручную вносить изменения в этот код. В следующей таблице представлено краткое описание некоторых блоков // {{AFX_. XE «AFX_.» [6]

Таблица 2 — Комментарии особых положений

Блок

Включает

// {{AFX_DATA XE «AFX_DATA»

// }}AFX_DATA

Объявление элементов данных класса. Используется в описании классов диалоговых панелей

// {{AFX_DATA_INIT XE «AFX_DATA_INIT»

// }}AFX_DATA_INIT

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

// {{AFX_DATA_MAP XE «AFX_DATA_MAP»

// }}AFX_DATA_MAP

Макрокоманды DDX, предназначенные для связывания элементов данных класса и органов управления диалоговых панелей. Используется в файле реализации классов диалоговых панелей

// {{AFX_MSG XE «AFX_MSG»

// }}AFX_MSG

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

// {{AFX_MSG_MAP XE «AFX_MSG_MAP»

// }}AFX_MSG_MAP

Макрокоманды таблицы сообщений класса. Используются совместно с AFX_MSG

// {{AFX_VIRTUAL XE «AFX_VIRTUAL»

// }}AFX_VIRTUAL

Описание переопределенных виртуальных методов класса. Блок AFX_VIRTUAL используется при описании класса

Мы перечислили далеко не все блоки // {{AFX_. Существует еще целый ряд блоков, относящихся к реализации технологии OLE и использованию баз данных.

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

Таблица 3 — Описание комментариев

Комментарий

После комментария размещаются

// Constructors

Конструкторы класса и методы, используемые для инициализации объектов класса. Как правило, элементы класса размещенные в этой секции определены с ключевым словом public

// Attributes

Элементы данных класса, и методы для доступа к ним (свойства класса). Как правило, элементы класса размещенные в этой секции определены с ключевым словом public

// Operations

Виртуальные и не виртуальные методы, используемые для выполнения операций над объектами класса. Как правило элементы класса размещенные в этой секции определены с ключевым словом public

// Overridables

Здесь расположены виртуальные методы, которые вы можете переопределить в порожденных классах. Как правило, элементы класса размещенные в этой секции определены с ключевым словом protected. В большинстве случаев, названия виртуальных методов класса начинается с символов On

// Implementation

Методы и элементы данных, относящиеся к внутреннему устройству класса — реализации класса. Как правило, элементы класса размещенные в этой секции определены с ключевым словом protected или private

// Dialog Data

Элементы данных, класса диалоговой панели, связанные с органами управления

Для некоторых классов, используются и другие комментарии, например, // Advanced Overridables и т. д. MFC AppWizard и ClassWizard помогают вам разрабатывать приложение. Они создают все классы и методы, необходимые для его работы. Вам остается дописать к ним свой код. В тех местах, где вы можете вставить этот код, MFC AppWizard и ClassWizard, как правило, помещают комментарий // TODO:. [2]

1.5 ClassWizard

Средство ClassWizard предоставляет широкий спектр услуг. Он позволяет не только добавлять к существующему классу новые методы и данные.

Создание нового класса. При помощи ClassWizard можно добавить новый класс, созданный на основе базовых классов. В качестве базового класса можно использовать классы, наследованные от класса CCmdTarget или класса CRecordset. Для наследования классов от других базовых классов использовать средства ClassWizard нельзя. Такие классы надо создавать вручную, непосредственно в текстовом редакторе.

Объекты, порожденные от класса CCmdTarget, могут обрабатывать сообщения Windows и команды, поступающие от меню, кнопок, акселераторов. Класс CCmdTarget и другие наследованные от него классы имеют таблицу сообщений (Message Map) — набор макрокоманд, позволяющий сопоставить сообщения Windows и команды метода класса.

Полученная заготовка класса полностью работоспособна. Ее можно дополнить по своему усмотрению новыми методами и данными. Эту работу можно выполнить вручную, но гораздо лучше и проще воспользоваться услугами ClassWizard. За счет использования ClassWizard процедура создания собственного класса значительно ускоряется и уменьшается вероятность совершить ошибку во время объявления методов.

Включение в класс новых методов. Очень удобно использовать ClassWizard для включения в состав класса новых методов. Можно добавлять к классу методы, служащие для обработки сообщений Windows и команд от объектов, a также методы, переопределяющие виртуальные методы базовых классов.

ClassWizard не только позволяет добавить в класс новые методы, но и удалить их. ClassWizard самостоятельно удалит объявление метода из класса.

Включение в класс новых элементов данных. ClassWizard позволяет включать в класс не только новые методы, но и элементы данных, связанные с полями диалоговых панелей, форм просмотра и форм для просмотра записей баз данных и полей наборов записей. ClassWizard использует специальные процедуры, чтобы привязать созданные им элементы данных к класса к полям диалоговых панелей. Эти процедуры носят названия «обмен данными диалоговой панели» и «проверка данных диалоговой панели» (Dialog Data Exchange and Dialog Data Validation — DDX/DDV). Чтобы привязать поля из наборов записей к переменным, используется процедура обмена данными с полями записей (Record Field Exchange — RFX).

Процедуры DDX/DDV и RFX значительно упрощают программисту работу с диалоговыми панелями. Они позволяют связать поля диалоговых панелей и переменные. Когда пользователь редактирует поля диалоговых панелей, процедуры DDV проверяют введенные значения и блокируют ввод запрещенных значений. Затем процедуры DDX автоматически копируют содержимое полей диалоговых панелей в привязанные к ним элементы данных класса. И наоборот, когда приложение изменяет элементы данных класса, привязанные к полям диалоговой панели, процедуры DDX могут сразу отобразить новые значения полей на экране компьютера.

2. Описание программы Test

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

Программа называется Test. Написана на языке C++ в среде разработки Visual studio 2008. К необходимому программному обеспечению для запуска Test, относятся операционная система семейства Windows версии 95/98/NT/XP, Набор компонент, позволяющих запускать приложения стандарта.net Framework 2.0. Для того чтобы просмотреть текст программы или запустить её на выполнение — необходимо, чтобы на компьютере был установлена среда Microsoft Visual C++.

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

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

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

Таблица 4 — Содержание вопроса и ответы

Вопрос

Варианты ответа

Правильный ответ

Если Дr есть перемещение тела за интервал времени Дt, то какая величина определяется отношением Дr/Дt?

1) путь

2) перемещение

3) средняя скорость

4) ускорение

5) затрудняюсь ответить

Основная задача кинематики…

1). установить причины движения тел

.2). изучить условия равновесия тел

3). определить положение тела в пространстве в любой момент времени

4). определить скорость движения

5) затрудняюсь ответить

Какие из уравнений описывают движение тела по прямой?

1) x = voxt + axt2/2

2) x = xo + vxt

3) vx = vox + axt

4) x = xo + voxt + axt2/2

5) затрудняюсь ответить

2,4

Два поезда идут навстречу друг другу со скоростями 36 и 54 км/ч. Пассажир, находящийся в первом поезде, замечает, что второй поезд проходит мимо него в течение 6 с.

Какова длина второго поезда?

Пользователь должен ввести ответ в текстовое поле

По какой из представленных формул можно определить силу упругости?

1) F = GMm/ (R+H) 2

2) F = mg

3) F = мN

4) F = kДl

5) затрудняюсь ответить

За промежуток времени ф = 10,0 с точка прошла половину окружности радиуса R = 160 см. Вычислить за это время:

a) среднюю скорость ;

б) модуль среднего вектора скорости ||;

в) модуль среднего вектора полного ускорения ||, если точка двигалась с постоянным тангенциальным ускорением

Пользователь должен ввести ответ в текстовые поля

= (0,5)

||= (0,32)

||= (0,1)

По какой из формул определяется реактивная сила?

1) F = мmg

2) F = am

3) F = u|dm/dt|

4) F = kДl

5) затрудняюсь ответить

Мощностью называется скалярная физическая величина, равная.

1). отношению работы ко времени, за которое эта работа совершена

2). произведению совершенной работы на время работы

3). произведению силы на путь, пройденный в направлении действия силы

4) Точная формулировка не приведена

5) затрудняюсь ответить

По какой формуле следует рассчитывать работу силы F, направленной под углом б к перемещению?

1) A = (F/Дr) cos б

2) A = FДrsin б

3) A = FДrcos б

4) A = (F/Дr) sin б

5) затрудняюсь ответить

Что называется моментом силы?

1) Кратчайшее расстояние от оси вращения до линии действия силы

2) Произведение модуля силы на плечо

3) Отношение модуля силы к плечу

4) Среди ответов нет правильного

5) затрудняюсь ответить

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

Таблица 5 — Спецификация разработанных классов

Имя класса

Член класса

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

Назначение

CTestDlg

OnBnClickedButton1 ()

Открытый

Обработчик события BN_CLICKED кнопки «начать тест»

CTestDlg

OnBnClickedCancel ()

Открытый

Закрывает приложение

CTestDlg

OnBnClickedButton2 ()

Открытый

Вызов окна

" О программе"

Cvopros1

Cvopros2

Cvopros7

Cvopros10

OnBnClickedRadio1 ()

OnBnClickedRadio2 ()

OnBnClickedRadio3 ()

OnBnClickedRadio4 ()

OnBnClickedRadio5 ()

Открытый

Выбор одного из вариантов ответа

Cvopros1

Cvopros2

Cvopros3

Cvopros4

Cvopros5

Cvopros6

Cvopros7

Cvopros8

Cvopros9

Cvopros10

OnBnClickedOk ()

Открытый

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

" Следующий вопрос"

CAboutDlg

CАboutDlg ()

Открытый

Конструктор окна содержащего справку

Класс CTestDlg содержит переменные содержит переменные типа Int:

· m_verno;

· m_neverno;

· m_resultat;

Эти переменные связаны с элементом Static Text.

Классы Cvopros1, Cvopros2, Cvopros7, Cvopros10 содержат переменную типа Int:

· m_variant

Эта переменная связына с элементом Radio Button.

Классы Cvopros3 и Cvopros8 содержат переменные типа BOOL:

· m_check1

· m_check2

· m_check3

· m_check4

· m_check5

Эти переменный связаны с элементами Check Box.

Класс Cvopros4 содержит переменную типа Int:

· m_variant

Эта переменная связана с элементом Edit Control.

Классы Cvopros5, Cvopros9 содержит переменную типа Int:

· m_variant

Эта переменная связана с элементом Combo Box.

Класс Cvopros6 содержит переменные типа Int:

· m_variant1

· m_variant2

· m_variant3

Эти переменные связаны с элементом Edit Control.

При нажатии на кнопку «Начать тестирование» переменные m_verno, m_neverno, m_resultat принимают значение 0. С этой кнопкой связана функция OnBnClickedButton1 (). В новом модальном окне запускается тестирования. В этом окне пользователь выбирает вариант ответа через элементы управления.

Для перехода к следующему окну нужно нажать кнопку «Следующий вопрос», с которой связана функция OnOK. При нажатии на эту кнопку происходит сначала проверка выбранного ответа, и соответственные изменения в переменных m_verno, m_neverno, m_resultat. Ответ фиксируется и открывается следующее окно.

Когда пользователь отвечает на последний вопрос и нажимает кнопку «Завершить тестирование», с которой связана функция OnBnClickedButton1 (), то текущее окно закрывается, возвращаясь к главному окну, a в статические поля, которым соответствуют переменные m_verno, m_neverno, m_resultat, записываются соответствующие значения.

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

Для корректной работы программы необходимы IBM PC совместимый компьютер, оперативная память 128 Mb и выше, свободное место на диске 330 Кбайт под размещение приложения, наличие монитора.

2.5 Вызов программы

Программа представляет собой единственный файл-приложение Test. exe, запускаемое в любой операционной системе семейства Windows. Чтобы просмотреть текст программы или запустить её на выполнение — надо скопировать с носителя папку с проектом на жёсткий диск компьютера. Если необходимо просмотреть текст программы, шаблоны диалоговых окон и др., то следует открыть файл с расширением *. dsw, являющийся файлом проекта.

Для Запуска программы необходимо запустить Test. exe. Появится главное окно нашего приложения (рис1.)

Рисунок 1 — Главное окно приложения Test.

Кнопка «О программе» откроет окно, в котором содержатся сведения о приложении (рис.2)

Рисунок 2 — окно «О программе»

Происходит фиксация ответа и открывается следующее окно. Когда пользователь отвечает на все вопросы, происходит построение окна с результатами тестирования. Кнопка «Выход их программы» закроет наше приложение.

Кнопка «Начать тестирование» запустит тестирование. Запускается окно тестирования (рис.3). В этом окне пользователь выбирает вариант ответа через элементы управления.

Рисунок 3 — Запуск тестирования.

При нажатии на кнопку «Следующий вопрос «пользователь переходит к следующему вопросу (рис.4)

Рисунок 4 — Переход к следующему вопросу.

Кнопка «Завершить тестирование» завершает тестирование и возвращает нас в главное окно с вводом результатов (рис. 5 и рис.6)

Рисунок 5 — Завершение тестирования

Рисунок 6 — Главное окно приложения Test. Вывод результатов.

2.6 Входные и выходные данные

В вопросах 1,2,5,7,9,10 пользователю предоставляются варианты ответов из которых он должен выбрать один.

В вопросах 4,6 пользователю необходимо решить задачу и ввести ответ в текстовое поле.

В вопросах 3,8 пользователь должен выбрать один или несколько вариантов ответа.

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

2.7 Описание тестовых прогонов

Таблица 6 — Тестовые прогоны

Входные данные

Ожидаемый результат

Замечания

Не выбираю не одного значения

Программа выдаст результат тестирования 0-правильных ответов из 10, 10 из 10 не правильных ответов и ошибки во всех вопросах

Проверка работы программы без ввода данных.

Рисунок 7.1 — Проверка работы программы без ввода данных.

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

Программа выдаст результат тестирования 0-правильных ответов из 10, 10 из 10 не правильных ответов и ошибки во всех вопросах

Проверка работы программы с неправильными ответами

Рисунок 7.2 — Проверка работы программы с неправильными ответами

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

Программа выдаст результат 10 правильных ответов из 10, 0 из 10 не правильных ответов.

Проверка работы программы с правильными ответами

Рисунок 7.3 — Проверка работы программы с правильными ответами

Выбор неправильных ответов в вопросах 2,4,6,8,10

Результат тестирования 4 правильных ответов из 10, 5 из 10 не правильных ответов

Проверка работы программы с правильными и неправильными ответами

Рисунок 7.4 — Проверка работы программы с правильными и неправильными ответами

Ввел буквы в текстовые поля в 4 и 6 вопросах

Программа выдала предупреждение от том что нужно ввести число

Проверка работы при вводе букв в поля где должны быть цифры

Рисунок 7.5 — Проверка работы при вводе букв в поля где должны быть цифры

Ввел очень большое число в вопросе 4

Программа выдала предупреждение ввести число от 0 до 400

Проверка на ввод больших чисел

Рисунок 7.6 — Проверка на ввод больших чисел в вопросе 4

Ввел отрицательное число в вопросе 4

Программа выдала предупреждение ввести число от 0 до 400

Проверка на ввод отрицательных чисел

Рисунок 7.7 — Проверка на ввод отрицательных чисел в вопросе 4

Ввел очень большое число в вопросе 6

Программа выдала предупреждение ввести число от 0 до 5

Проверка на ввод больших чисел

Рисунок 7.8 — Проверка на ввод больших чисел в вопросе 6

Ввел отрицательное число в вопросе 6

Программа выдала предупреждение ввести число от 0 до 5

Проверка на ввод отрицательных чисел

Рисунок 7.9 — Проверка на ввод отрицательных чисел в вопросе 6

Заключение

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

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

Такие простые приложения и ему подобные, могут широко внедряться в различных сферах человеческой деятельности. Можно написать подобные программы на языке программирования Microsoft Visual C++ с использованием библиотеки MFC для создания других приложений.

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

1. Современные методы программирования на языках C и C++: учебное пособие / Л. Б. Бузюков, О. Б. Петрова. — СПб.: Линk, 2008. — 288 с.

2. Microsoft Visual C++ и MFC© A. Фролов, Г. Фролов Том 24, М.: Диалог-МИФИ, 1993.

3. «Основы программирования на Visual C++», методические указания по курсу «Технология программирования»

4. «Полное руководство по Visual C++», К. Паппас, У. Мюррей, Минск: ООО «Поппури», 1999

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

6. «Visual C++ MFC, курс MCSD для профессионалов», A. Черносвитов, СПб.: Питер, 2000

7. «Microsoft Visual C++ b MFC. Программирования для Windows 95 и Windows NT» в 2-х ч. (часть 1)" A. Фролов, Г. Фролов Том 24, М.: Диалог-МИФИ, 1997.

8. «Microsoft Visual C++ b MFC. Программирования для Windows 95 и Windows NT» в 2-х ч. (часть 2)" A. Фролов, Г. Фролов Том 28, М.: Диалог-МИФИ, 1997.Х. A.

9. Цвиринько, В. Д, Коровина «Методические рекомендации по оформлению дипломных и курсовых проектов (работ)», Ставрополь: из-во Сев-Кав ГТУ, 2000

Приложения

Приложение 1. Листинг программы

// TestDlg. cpp: implementation file

#include «stdafx. h»

#include «Test. h»

#include «TestDlg. h»

#include «vopros1. h»

#include «vopros2. h»

#include «vopros3. h»

#include «vopros4. h»

#include «vopros5. h»

#include «vopros6. h»

#include «vopros7. h»

#include «vopros8. h»

#include «vopros9. h»

#include «vopros10. h»

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CAboutDlg dialog used for App About

сlass 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)

m_verno (0)

m_neverno (0)

m_resultat (0)

{

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

}

void CTestDlg: DoDataExchange (CDataExchange* pDX)

{

CDialog: DoDataExchange (pDX);

DDX_Text (pDX, IDC_STATIC1, m_verno);

DDV_MinMaxInt (pDX, m_verno, 0,10);

DDX_Text (pDX, IDC_STATIC2, m_neverno);

DDV_MinMaxInt (pDX, m_neverno, 0,10);

DDX_Text (pDX, IDC_STATIC3, m_resultat);

DDV_MinMaxInt (pDX, m_resultat, 0, 100);

}

BEGIN_MESSAGE_MAP (CTestDlg, CDialog)

ON_WM_SYSCOMMAND ()

ON_WM_PAINT ()

ON_WM_QUERYDRAGICON ()

// }}AFX_MSG_MAP

ON_BN_CLICKED (IDC_BUTTON1, &CTestDlg: OnBnClickedButton1)

END_MESSAGE_MAP ()

// CTestDlg message handlers

BOOL CTestDlg: OnInitDialog ()

{

CDialog: OnInitDialog ();

// Add «About.» menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT ((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT (IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu (FALSE);

if (pSysMenu! = NULL)

{

CString strAboutMenu;

strAboutMenu. LoadString (IDS_ABOUTBOX);

if (! strAboutMenu. IsEmpty ())

{

pSysMenu->AppendMenu (MF_SEPARATOR);

pSysMenu->AppendMenu (MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application’s main window is not a dialog

SetIcon (m_hIcon, TRUE); // Set big icon

SetIcon (m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control

}

void CTestDlg: OnSysCommand (UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout. DoModal ();

}

else

{

CDialog: OnSysCommand (nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CTestDlg: OnPaint ()

{

if (IsIconic ())

{

CPaintDC dc (this); // device context for painting

SendMessage (WM_ICONERASEBKGND, reinterpret_cast (dc. GetSafeHdc ()), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics (SM_CXICON);

int cyIcon = GetSystemMetrics (SM_CYICON);

CRect rect;

GetClientRect (&rect);

int x = (rect. Width () — cxIcon + 1) / 2;

int y = (rect. Height () — cyIcon + 1) / 2;

// Draw the icon

dc. DrawIcon (x, y, m_hIcon);

}

else

{

CDialog: OnPaint ();

}

}

// The system calls this function to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CTestDlg: OnQueryDragIcon ()

{

return static_cast (m_hIcon);

}

void CTestDlg: OnBnClickedButton1 ()

{

m_verno=0;

m_neverno=0;

m_resultat=0;

// Вопрос 1

Cvopros1 vopr1;

if (vopr1. DoModal () ==IDOK)

{

if (vopr1. m_variant==1)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

// Вопрос 2

Cvopros2 vopr2;

if (vopr2. DoModal () ==IDOK)

{

if (vopr2. m_variant==1)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

// Вопрос 3

Cvopros3 vopr3;

if (vopr3. DoModal () ==IDOK)

{

if ((vopr3. m_check2==TRUE) && (vopr3. m_check4==TRUE))

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

if ((vopr3. m_check2==TRUE) || (vopr3. m_check4==TRUE))

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+5;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

}

// Вопрос 4

Cvopros4 vopr4;

if (vopr4. DoModal () ==IDOK)

{

if (vopr4. m_variant==150)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

// Вопрос 5

Cvopros5 vopr5;

if (vopr5. DoModal () ==IDOK)

{

if (vopr5. m_variant==4)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

// Вопрос 6

Cvopros6 vopr6;

if (vopr6. DoModal () ==IDOK)

{

if ((vopr6. m_variant1==0.5) && (vopr6. m_variant2==0.32) && (vopr6. m_variant3==0.1))

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

if (((vopr6. m_variant1==0.5) && (vopr6. m_variant2==0.32))

|| ((vopr6. m_variant1==0.5) && (vopr6. m_variant3==0.1))

|| ((vopr6. m_variant2==0.32) && (vopr6. m_variant3==0.1)))

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+7;

}

else

{

if ((vopr6. m_variant1==0.5) || (vopr6. m_variant2==0.32) || (vopr6. m_variant3==0.1))

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+3;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

}

}

// Вопрос 7

Cvopros7 vopr7;

if (vopr7. DoModal () ==IDOK)

{

if (vopr7. m_variant==1)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

// Вопрос 8

Cvopros8 vopr8;

if (vopr8. DoModal () ==IDOK)

{

if (vopr8. m_check1==TRUE)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

// Вопрос 9

Cvopros9 vopr9;

if (vopr9. DoModal () ==IDOK)

{

if (vopr9. m_variable==3)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

// Вопрос 10

Cvopros10 vopr10;

if (vopr10. DoModal () ==IDOK)

{

if (vopr10. m_variant==1)

{

m_verno=m_verno+1;

m_neverno=m_neverno+0;

m_resultat=m_resultat+10;

}

else

{

m_verno=m_verno+0;

m_neverno=m_neverno+1;

if (m_resultat>=1)

{

m_resultat=m_resultat-1;

}

else

{

m_resultat=m_resultat;

}

}

}

UpdateData (false);

}

Приложение 2. Диаграмма классов

Показать весь текст
Заполнить форму текущей работой