Приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу "Законы механики Ньютона"
Создание приложения на языке программирования Visual C++ с использованием библиотеки MFC на тему "Тестирование по разделу "Законы механики Ньютона". Описание логической структуры программы, тестовых прогонов. Требования к техническому обеспечению.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 29.06.2011 |
Размер файла | 2,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
"СЕВЕРО-КАВКАЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ"
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К КУРСОВОМУ ПРОЕКТУ
ДО ДИСЦИПЛИНЕ "Технология программирования"
НА ТЕМУ: "Приложение написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу "Законы механики Ньютона"
Выполнил студент II курса
Специальность 230201.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 - Содержание вопроса и ответы
№ |
Вопрос |
Варианты ответа |
Правильный ответ |
|
1 |
Если Дr есть перемещение тела за интервал времени Дt, то какая величина определяется отношением Дr/Дt? |
1) путь 2) перемещение 3) средняя скорость 4) ускорение 5) затрудняюсь ответить |
3 |
|
2 |
Основная задача кинематики… |
1). установить причины движения тел .2). изучить условия равновесия тел 3). определить положение тела в пространстве в любой момент времени 4). определить скорость движения 5) затрудняюсь ответить |
3 |
|
3 |
Какие из уравнений описывают движение тела по прямой? |
1) x = voxt + axt2/2 2) x = xo + vxt 3) vx = vox + axt 4) x = xo + voxt + axt2/2 5) затрудняюсь ответить |
2,4 |
|
4 |
Два поезда идут навстречу друг другу со скоростями 36 и 54 км/ч. Пассажир, находящийся в первом поезде, замечает, что второй поезд проходит мимо него в течение 6 с. Какова длина второго поезда? |
Пользователь должен ввести ответ в текстовое поле |
150 |
|
5 |
По какой из представленных формул можно определить силу упругости? |
1) F = GMm/ (R+H) 2 2) F = mg 3) F = мN 4) F = kДl 5) затрудняюсь ответить |
4 |
|
6 |
За промежуток времени ф = 10,0 с точка прошла половину окружности радиуса R = 160 см. Вычислить за это время: a) среднюю скорость <v>; б) модуль среднего вектора скорости |<v>|; в) модуль среднего вектора полного ускорения |<a>|, если точка двигалась с постоянным тангенциальным ускорением |
Пользователь должен ввести ответ в текстовые поля |
<v>= (0,5) |<v>|= (0,32) |<a>|= (0,1) |
|
7 |
По какой из формул определяется реактивная сила? |
1) F = мmg 2) F = am 3) F = u|dm/dt| 4) F = kДl 5) затрудняюсь ответить |
3 |
|
8 |
Мощностью называется скалярная физическая величина, равная. |
1). отношению работы ко времени, за которое эта работа совершена 2). произведению совершенной работы на время работы 3). произведению силы на путь, пройденный в направлении действия силы 4) Точная формулировка не приведена 5) затрудняюсь ответить |
1 |
|
9 |
По какой формуле следует рассчитывать работу силы F, направленной под углом б к перемещению? |
1) A = (F/Дr) cos б 2) A = FДrsin б 3) A = FДrcos б 4) A = (F/Дr) sin б 5) затрудняюсь ответить |
3 |
|
10 |
Что называется моментом силы? |
1) Кратчайшее расстояние от оси вращения до линии действия силы 2) Произведение модуля силы на плечо 3) Отношение модуля силы к плечу 4) Среди ответов нет правильного 5) затрудняюсь ответить |
2 |
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 - Тестовые прогоны
№ |
Входные данные |
Ожидаемый результат |
Замечания |
|
1 |
Не выбираю не одного значения |
Программа выдаст результат тестирования 0-правильных ответов из 10, 10 из 10 не правильных ответов и ошибки во всех вопросах |
Проверка работы программы без ввода данных. |
|
Рисунок 7.1 - Проверка работы программы без ввода данных. |
||||
2 |
Последовательный выбор неправильных ответов |
Программа выдаст результат тестирования 0-правильных ответов из 10, 10 из 10 не правильных ответов и ошибки во всех вопросах |
Проверка работы программы с неправильными ответами |
|
Рисунок 7.2 - Проверка работы программы с неправильными ответами |
||||
3 |
Последовательный выбор правильных ответов |
Программа выдаст результат 10 правильных ответов из 10, 0 из 10 не правильных ответов. |
Проверка работы программы с правильными ответами |
|
Рисунок 7.3 - Проверка работы программы с правильными ответами |
||||
4 |
Выбор неправильных ответов в вопросах 2,4,6,8,10 |
Результат тестирования 4 правильных ответов из 10, 5 из 10 не правильных ответов |
Проверка работы программы с правильными и неправильными ответами |
|
Рисунок 7.4 - Проверка работы программы с правильными и неправильными ответами |
||||
5 |
Ввел буквы в текстовые поля в 4 и 6 вопросах |
Программа выдала предупреждение от том что нужно ввести число |
Проверка работы при вводе букв в поля где должны быть цифры |
|
Рисунок 7.5 - Проверка работы при вводе букв в поля где должны быть цифры |
||||
6 |
Ввел очень большое число в вопросе 4 |
Программа выдала предупреждение ввести число от 0 до 400 |
Проверка на ввод больших чисел |
|
Рисунок 7.6 - Проверка на ввод больших чисел в вопросе 4 |
||||
7 |
Ввел отрицательное число в вопросе 4 |
Программа выдала предупреждение ввести число от 0 до 400 |
Проверка на ввод отрицательных чисел |
|
Рисунок 7.7 - Проверка на ввод отрицательных чисел в вопросе 4 |
||||
8 |
Ввел очень большое число в вопросе 6 |
Программа выдала предупреждение ввести число от 0 до 5 |
Проверка на ввод больших чисел |
|
Рисунок 7.8 - Проверка на ввод больших чисел в вопросе 6 |
||||
9 |
Ввел отрицательное число в вопросе 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<WPARAM> (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<HCURSOR> (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. Диаграмма классов
Размещено на Allbest.ru
Подобные документы
Теоретические основы написания Windows-приложений с использованием библиотеки MFC. Основы программирования под Windows. Проектирование приложений в среде Microsoft Visual C++. Описание логической структуры приложения, его функциональное назначение.
курсовая работа [1,3 M], добавлен 12.12.2011Теоретические основы разработки Windows-приложений с использованием библиотеки MFC. Создание приложения с помощью Visual C++. Описание логической структуры приложения. Установка и запуск программы. Входные и выходные данные. Преимущество MFC библиотек.
курсовая работа [563,2 K], добавлен 21.06.2011Разработка программного продукта, предназначенного для тестирования знаний пользователя по теме "Тепловые двигатели" нa языкe C++ в среде Micrоsоft Visual Studio с использовaниeм библиотeки MFC. Функциональное назначение созданного Windows-приложения.
курсовая работа [954,4 K], добавлен 25.06.2011Глoбальныe фyнкции AFX и API. Сoзданиe пpилoжeния с пoмoщью Visual C++. Фyнкциoнальнoe назначeниe, описание логической структуры разрабатываемой программы "Десятичные дроби". Тpeбoвания к тexничeскoмy oбeспeчeнию, листинг и тестирование данной программы.
курсовая работа [2,7 M], добавлен 21.06.2011Разработка программы, проверяющей уровень знаний по разделу стереометрии и позволяющей выбор один из нескольких вариантов и ввод ответа. Характеристика библиотеки MFC, тела, классов и файлов приложения, цикла сообщений и текстовых запусков программы.
курсовая работа [1,5 M], добавлен 28.06.2011Разработка Windows-приложений с использованием библиотеки MFC. Базовый набор классов, написанных на языке С++ и предназначенных для упрощения процесса программирования под Windows. Фундаментальные идеи объектно-ориентированного программирования.
курсовая работа [348,1 K], добавлен 02.07.2011Создание программы на языке Visual C++ с использованием библиотеки MFC для тестирования знаний пользователя в области геометрии. Генерирование тестовых заданий, введение ответа, оценка результата; логическая структура приложения; техническое обеспечение.
курсовая работа [2,1 M], добавлен 26.06.2011Составление и описание программы для тестирования знаний пользователя по разделу математики "Обыкновенные дроби", написанной на языке Visual C++ с использование библиотеки MFC. Основные характеристики элементов управления разрабатываемой программы.
курсовая работа [776,9 K], добавлен 29.06.2011Порядок составления программы, тестирующей знания пользователя по разделу физики "Электрическое поле", написанной на языке Visual C++ с использование библиотеки MFC. Листинг программы и ее практическое значение, принципы работы, структура и элементы.
курсовая работа [172,5 K], добавлен 22.06.2011Проектирование Windows-приложения, которое позволяет проводить тестирование знаний по разделу математики "Логарифмы". Создание дополнительного класса диалоговых окон, нового пользовательского интерфейса программы. Требования к техническому обеспечению.
курсовая работа [1,9 M], добавлен 02.07.2011