Приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу 'Квадратные уравнения'

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    980,83 kb
  • Опубликовано:
    2011-12-12
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу 'Квадратные уравнения'

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение

Высшего профессионального образования

"Северо-Кавказский государственный технический университет"

Курсовой проект

по дисциплине: технология программирования

на тему: "Приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу "Квадратные уравнения"



Выполнил:

студент 2-го курса ФИТТ,

группы ИС - 091

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

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

и технологии"

Савченко Михаил


Проверила: Мезенцева О. С.

Содержание

Введение

1. Теоретические основы написания Windows - приложений с использованием библиотеки MFC

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

1.2 Основы программирования под Windows

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

1.4 Проектирование приложений в среде Microsoft Visual C++

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

2.1 Описание программы

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

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

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

2.5 Установка и запуск программы

2.6 Работа с приложением

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

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

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

Заключение

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

Введение

Microsoft Visual Studio 2008 является мощным инструментом для создания приложений под Windows. Среда разработки позволяет создавать разного рода программы. От консольных до DirectX, от простой DLL до ActiveX. Язык C++, который является базовым в Microsoft Visual C++, имеет большие возможности. В принципе программу любой сложности можно написать на любом языке программирования и с использованием любой среды программирования. Это, конечно, так, но хорошая среда программирования отличается от плохой тем, что в ней на программирование той же самой задачи будет затрачено меньше времени, а получившаяся в результате программа будет работать быстрее и надежнее. Для создания подобной среды программирования необходимо досконально изучить окружение, в котором будет работать скомпилированная программа, а кто изучил ОС Windows лучше ее разработчиков? Кроме того, фирма Microsoft не опубликовала подробного описания своего творения. Поэтому пользователь, скорее всего, оценит возможности, предоставляемые библиотекой базовых классов (Microsoft Foundation Classes, MFC) Visual C++.

1. Теоретические основы написания Windows - приложений с использованием библиотеки MFC


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


В связи с тем, что сегодня уровень сложности программного обеспечения очень высок, разработка приложений Windows с использованием только какого-либо языка программирования (например, языка C) значительно затрудняется. Программист должен затратить массу времени на решение стандартных задач по созданию многооконного интерфейса. Реализация технологии связывания и встраивания объектов - OLE - потребует от программиста еще более сложной работы.

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

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

приложение windows программирование visual

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

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

Нужно отметить, что MFC AppWizard создает тексты приложений только с использованием библиотеки классов MFC (Microsoft Foundation Class library). Поэтому только изучив язык C++ и библиотеку MFC, можно пользоваться средствами автоматизированной разработки и создавать свои приложения в кратчайшие сроки.

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

Благодаря интерфейсу вызовов функций в Windows доступ к системным ресурсам осуществляется через целый рад системных функций. Совокупность таких функций называется прикладным программным интерфейсом, или API (Application Programming Interfase). Для взаимодействия с Windows приложение запрашивает функции API, с помощью которых реализуются все необходимые системные действия, такие как выделение памяти, вывод на экран, создание окон и т.п.

Библиотека MFC инкапсулирует многие функции API. Хотя программам и разрешено обращаться к ним напрямую, все же чаще это будет выполняться через соответствующие функции-члены. Как правило, функции-члены либо аналогичны функциям API, либо непосредственно обращаются к нужной части интерфейса.

Поскольку API состоит из большого числа функций, может сложиться впечатление, что при компиляции каждой программы, написанной для Windows, к ней подключается код довольно значительного объема. В действительности это не так. Функции API содержатся в библиотеках динамической загрузки (Dynamic Link Libraries, или DLL), которые загружаются в память только в тот момент, когда к ним происходит обращение, т.е. при выполнении программы. Рассмотрим, как осуществляется механизм динамической загрузки.

Динамическая загрузка обеспечивает ряд существенных преимуществ. Во-первых, поскольку практически все программы используют API-функции, то благодаря DLL-библиотекам существенно экономится дисковое пространство, которое в противном случае занималось бы большим количеством повторяющегося кода, содержащегося в каждом из исполняемых файлов. Во-вторых, изменения и улучшения в Windows-приложениях сводятся к обновлению только содержимого DLL-библиотек. Уже существующие тексты программ не требуют перекомпиляции.

В настоящее время широко распространены две версии API. Первая называется Win16 и представляет собой 16-разрядную версию, используемую в Windows 3.1 Вторая, 32-разрядная версия, называется Win32 и используется в Windows 95 и Windows NT. Win32 является надмножеством для Win16 (т.е. фактически включает в себя этот интерфейс), так как большинство функций имеет то же название и применяется аналогичным образом. Однако, будучи в принципе похожими, оба интерфейса все же отличаются друг от друга. Win32 поддерживает 32-разрядную линейную адресацию, тогда как Win16 работает только с 16-разрядной сегментированной моделью памяти. Это привело к тому, что некоторые функции были модифицированы таким образом, чтобы принимать 32-разрядные аргументы и возвращать 32-разрядные значения. Часть из них пришлось изменить с учетом 32-разрядной архитектуры. Была реализована поддержка потоковой многозадачности, новых элементов интерфейса и прочих нововведений Windows.

Так как Win32 поддерживает полностью 32-разрядную адресацию, то логично, что целые типы данных (intergers) также объявлены 32-разрядными. Это означает, что переменные типа int и unsignerd будут иметь длину 32 бита, а не 16, как в Windows 3.1 Если же необходимо использовать переменную или константу длиной 16 бит, они должны быть объявлены как short. (дальше будет показано, что для этих типов определены независимые typedef-имена.) Следовательно, при переносе программного кода из 16-разрядной среды необходимо убедиться в правильности использования целочисленных элементов, которые автоматически будут расширены до 32 битов, что целочисленных элементов, которые автоматически будут расширены до 32 битов, что может привести к появлению побочных эффектов.

Другим следствием 32-разрядной адресации является то, что указатели больше не нужно объявлять как near и far. Любой указатель может получить доступ к любому участку памяти. В Windows 95 и Windows NT константы near и far объявлены (с помощью директивы #define) пустыми.

Одним из подмножеств API является GDI (Graphics Device Interfase - интерфейс графического устройства). GDI - это та часть Windows, которая обеспечивает поддержку аппаратно-независимой графики. Благодаря функциям GDI Windows-приложение может выполняться на самых различных компьютерах.

Как известно, все версии Windows поддерживают многозадачность. В Windows 3.1 имеется только один тип многозадачности - основанный на процессах. В более передовых системах, таких как Windows 95 и Windows NT, поддерживается два типа многозадачности: основанный на процессах и основанный на потоках. Давайте рассмотрим их чуть подробнее.

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

Поток - это отдельная часть исполняемого кода. Название произошло от понятия “направление протекания процесса”. В многозадачности данного типа отдельные потоки внутри одного процесса также могут выполняться одновременно. Все процессы имеют по крайней мере один поток, но в Windows 95 и Windows NT их может быть несколько.

Отсюда можно сделать вывод, что в Windows 95 и Windows NT допускается существование процессов, две или более частей которых выполняются одновременно. Оказывается, такое предположение верно. Следовательно, при работе в этих операционных системах возможно параллельное выполнение, как программ, так и отдельных частей самих программ. Это позволяет писать очень эффективные программы.

Есть и другое существенное различие между многозадачностями Windows 3.1 и Windows 95/NT. В Windows 3.1 используется неприоритетная многозадачность. Это означает, что процесс, выполняющийся в данный момент, получает доступ к ресурсам центрального процессора и удерживает их в течение необходимого ему времени. Таким образом, неправильно выполняющаяся программа может захватить все ресурсы процессора и не давать выполняться другим процессам. В отличие от этого в Windows 95 и Windows NT используется приоритетная многозадачность. В этом случае каждому активному потоку предоставляется определенный промежуток времени работы процессора. По истечению данного промежутка управление автоматически передается следующему потоку. Это не дает возможность программам полностью захватывать ресурсы процессора. Интуитивно должно быть понятно, что такой способ более предпочтителен.

Во многих операционных системах взаимодействие между системой и программой инициализирует программа. Например, в DOS программа запрашивает разрешение на ввод и вывод данных. Говоря другими словами, не - Windows-программы сами вызывают операционную систему. Обратного процесса не происходит. В Windows все совершенно наоборот: именно система вызывает программу. Это осуществляется следующим образом: программа ожидает получения сообщения от Windows. Когда это происходит, то выполняется некоторое действие. После его завершения программа ожидает следующего сообщения.

Windows может посылать программе сообщения множества различных типов. Например, каждый раз при щелчке мышью в окне активной программы посылается соответствующее сообщение. Другой тип сообщений посылается, когда необходимо обновить содержимое активного окна. Сообщения посылаются также при нажатии клавиши, если программа ожидает ввода с клавиатуры. Необходимо запомнить одно: по отношению к программе сообщения появляются случайным образом. Вот почему Windows-программы похожи на программы обработки прерываний: невозможно предсказать, какое сообщение появиться в следующий момент.

 

1.2 Основы программирования под Windows

 

Поскольку архитектура Windows-программ основана на принципе сообщений, все эти программы содержат некоторые общие компоненты. Обычно их приходится в явном виде включать в исходный код. Но, к счастью, при использовании библиотеки MFC это происходит автоматически; нет необходимости тратить время и усилия на их написание. Тем не менее, чтобы до конца разобраться, как работает Windows-программа, написанная с использованием MFC, и почему она работает именно так, необходимо в общих чертах понять назначение этих компонентов. Все Windows-программы начинают выполнение с вызова функции WinMain (). При традиционном методе программирования это нужно делать явно. С использованием библиотеки MFC такая необходимость отпадает, но функция все-таки существует. Все Windows-программы должны содержать специальную функцию, которая не используется в самой программе, но вызывается самой операционной системой. Эту функцию обычно называют функцией окна, или процедурой окна. Она вызывается Windows, когда системе необходимо передать сообщение в программу. Именно через нее осуществляется взаимодействие между программой и системой. Функция окна передает сообщение в своих аргументах. Согласно терминологии Windows, функции, вызываемые системой, называются функциями обратного вызова. Таким образом, функция окна является функцией обратного вызова. Помимо принятия сообщения от Windows, функция окна должна вызывать выполнение действия, указанного в сообщении. Конечно, программа не обязана отвечать на все сообщения, посылаемые Windows. Поскольку их могут быть сотни, то большинство сообщений обычно обрабатывается самой системой, а программе достаточно поручить Windows выполнить действия, предусмотренные по умолчанию. В большинстве Windows-программ задача создания функции окна лежит на программисте. При использовании библиотеки MFC такая функция создается автоматически. В этом заключается одно из преимуществ библиотеки. Но в любом случае, если сообщение получено, то программа должна выполнить некоторое действие. Хотя она может вызывать для этого одну или несколько API-функций, само действие было инициировано Windows. Поэтому именно способ взаимодействия с операционной системой через сообщения диктует общий принцип построения всех программ для Windows, написанных как с использованием MFC, так и без нее. Как объяснялось выше, Windows взаимодействует с программой, посылая ей сообщения. Все приложения Windows должны организовать так называемый цикл сообщений (обычно внутри функции WinMain ()). В этом цикле каждое необработанное сообщение должно быть извлечено из очереди сообщений данного приложения и передано назад в Windows, которая затем вызывает функцию окна программы с данным сообщением в качестве аргумента. В традиционных Windows-программах необходимо самостоятельно создавать и активизировать такой цикл. При использовании MFC это также выполняется автоматически. Однако важно помнить, что цикл сообщений все же существует. Он является неотъемлемой частью любого приложения Windows. Процесс получения и обработки сообщений может показаться чересчур сложным, но тем не менее ему должны следовать все Windows-программы. К счастью, при использовании библиотеки MFC большинство частных деталей скрыты от программиста, хотя и продолжают неявно присутствовать в программе. Как будет показано дальше, каждое окно в Windows-приложении характеризуется определенными атрибутами, называемыми классом окна. (Здесь понятие “класс” не идентично используемому в С++. Оно, скорее, означает стиль или тип.) В традиционной программе класс окна должен быть определен и зарегистрирован прежде, чем будет создано окно. При регистрации необходимо сообщить Windows, какой вид должно иметь окно и какую функцию оно выполняет. В то же время регистрация класса окна еще не означает создание самого окна. Для этого требуется выполнить дополнительные действия. При использовании библиотеки MFC создавать собственный класс окна нет необходимости. Вместо этого можно работать с одним из заранее определенных классов, описанных в библиотеке. В этом еще одно ее преимущество. Структура Windows-программ отличается от структуры программ других типов. Это вызвано двумя обстоятельствами: во-первых, способом взаимодействия между программой и Windows, описанным выше; во-вторых, правилами, которым следует подчиняться для создания стандартного интерфейса Windows-приложения (т.е. чтобы сделать программу “похожей “ на Windows-приложение). Цель Windows - дать человеку, который хотя бы немного знаком с системой, возможность сесть за компьютер и запустить любое приложение без предварительной подготовки. Для этого Windows предоставляет дружественный интерфейс пользователя. Теоретически, если пользователь сумел запустить одно Windows-приложение, то он сумеет запустить и любое другое. Конечно, на практике придется немного потренироваться, чтобы научиться использовать большинство программ с максимальной эффективностью. Однако это связано исключительно с тем, что программа делает, а не с тем, как ею пользоваться. Ведь, фактически, значительная часть кода Windows-приложения предназначена именно для организации интерфейса с пользователем. Хотя создание удобного интерфейса “под Windows" является основной задачей при написании любой Windows-программы, такой интерфейс не создается автоматически. То есть вполне можно написать программу, в которой элементы интерфейса используются неэффективно. Чтобы отойти от философии создания традиционного Windows-интерфейса, должны быть достаточно веские основания. Иначе пользователи этой программы будут разочарованы. В общем, если программист собирается писать приложения для Windows, то он должен дать пользователям возможность работать с обычным интерфейсом и руководствоваться стандартной методикой разработки. В Windows-программах вообще (и в использующих библиотеку MFC в частности) не слишком широко применяются стандартные типы данных из С или С++, такие как int или char*. Вместо них используются типы данных, определенные в различных библиотечных (header) файлах. Наиболее часто используемыми типами являются HANDLE, HWND, BYTE, WORD, DWORD, UNIT, LONG, BOOL, LPSTR и LPCSTR. Тип HANDLE обозначает 32-разрядное целое, используемое в качестве дескриптора. Есть несколько похожих типов данных, но все они имеют ту же длину, что и HANDLE, и начинаются с литеры Н. Дескриптор - это просто число, определяющее некоторый ресурс. Например, тип HWND обозначает 32-разрядное целое - дескриптор окна. В программах, использующих библиотеку MFC, дескрипторы применяются не столь широко, как это имеет место в традиционных программах. Тип BYTE обозначает 8-разрядное беззнаковое символьное значение, тип WORD - 16-разрядное беззнаковое короткое целое, тип DWORD - беззнаковое длинное целое, тип UNIT - беззнаковое 32-разрядное целое. Тип LONG эквивалентен типу long. Тип BOOL обозначает целое и используется, когда значение может быть либо истинным, либо ложным. Тип LPSTR определяет указатель на строку, а LPCSTR - константный (const) указатель на строку.

 

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


Это набор классов, охватывающих большую часть функциональных возможностей операционных систем Microsoft Windows, а также предоставляющих разработчику значительное количество не только очень мощных дополнительных классов, но и целые механизмы, которые, не нарушая идеологию операционной системы, существенно ее расширяют и. упрощают. Перед создателями библиотеки стояла задача создания объектно-ориентированного интерфейса для Windows, удовлетворяющего следующим основным целям проектирования программных продуктов:

сокращение усилий по программированию приложений для Windows;

скорость выполнения программ, написанных с использованием библиотеки, должна быть сопоставима с программами, написанными на языке С с использованием Win32 API; минимальный размер вспомогательного кода;

способность напрямую вызывать любую С-функцию Win32 API; легкость использования Win32 API в C++ должна быть такая же, как и при использовании традиционного С. Надо сказать, что поставленная задача была решена на очень высоком уровне. Созданная библиотека классов охватывает все компоненты Windows - окна, блоки диалога, контексты устройств, общие объекты GDI (битовые образы и кисти), элементы управления и многие другие стандартные элементы. Суть программирования под Windows - обработка событий - предоставлена программистам в удобном и привычном виде. Классы библиотеки полностью вобрали в себя многочисленные операторы switch, которые так загромождают программы, написанные на языке С. Наряду с этим вы можете совершенно свободно смешивать вызовы библиотеки классов с прямыми вызовами Win32 API. Кроме того, за сравнительно небольшой промежуток времени корпорацией Microsoft было разработано несколько версий библиотеки MFC, которые становились все мощнее и удобнее. Вместе с Visual C++ 6.0 поставляется версия 4.23 библиотеки, и есть все основания считать, что ее развитие будет продолжено. К тому же поддержка библиотеки MFC компиляторами и средствами разработки ПО, созданными другими компаниями, позволяет сконцентрироваться именно на ней. Но давайте рассмотрим все по порядку. Начнем с макросов, глобальных функций и переменных, которые, хотя и не входят непосредственно в библиотеку, очень тесно с ней связаны и значительно облегчают программирование, а затем перейдем к общему обзору библиотеки. Знакомство с библиотекой будет неполным и не даст существенных преимуществ при работе с ней, если мы не рассмотрим включенные в нее макросы, глобальные функции и переменные. Все макросы, глобальные функции и переменные можно разбить на несколько категорий: основные, работа с базами данных, работа в Internet, OLE и элементы управления OLE. Поскольку в данной книге мы не будем подробно рассматривать работу с базами данных, в сети и с использованием OLE (этим вопросам будут посвящены следующие книги), то ограничимся изучением только основных макросов, глобальных функций и переменных. Начнем, естественно, с начала. Практически все глобальные функции начинаются с префикса "Afx". Исключение составляют большинство функций для работы с базами данных и функции, обеспечивающие обмен данными. Для всех без исключения глобальных переменных применяется префикс "Afx", а все макросы записываются заглавными буквами.

Соглашения об именах библиотеки MFC

В качестве префикса, обозначающего имя класса, библиотека MFC использует заглавную букву С от слова "class" (класс), за которым идет имя, характеризующее его назначение. Например, CWinApp - класс, определяющий приложение, CWnd - базовый класс всех оконных объектов, CDialog - класс окон диалога и т.д. Мы также будем придерживаться этого соглашения в приводимых примерах. Например, программа FrameWork содержит определения трех классов: CFrameWorkApp, CMainFrame и CChildWnd. Для имен методов классов используется три способа. При первом способе имя объединяет глагол и существительное, например, Loadlcon (Загрузить пиктограмму) или DrawText (Нарисовать текст). При втором, имя метода состоит только из существительного, например, DialogBox (Блок диалога). Для функций, предназначенных для преобразования одного типа в другой, обычными являются такие имена, как XtoY (из X в Y). Для членов классов библиотеки MFC принят следующий способ назначения имен: обязательный префикс m_ (от class member - член класса), затем идет префикс, характеризующий тип данных, и завершается все содержательным именем переменной, например, m_pMainWnd, где р - префикс, описывающий указатель (для переменных не членов класса префикс m_ не используется, чтобы можно было отличить обычные переменные от элементов любых классов, а не только классов библиотеки MFC). В своих примерах я придерживаюсь аналогичного способа формирования имен, и вам рекомендую поступать также.

 

1.4 Проектирование приложений в среде Microsoft Visual C++


В среде Visual C++ можно строить различные типы проектов. Такие проекты после их создания можно компилировать и запускать на исполнение. Фирма Microsoft разработала специальный инструментарий, облегчающий и ускоряющий создание проектов в среде Visual C++. Например, мастер MFC AppWizard (exe) позволяет создать проект Windows-приложения которое имеет однодокументный, многодокументный или диалоговый интерфейс и использует библиотеку MFC.

Создаваемый остов приложения составлен так, что в дальнейшей работе с проектом можно использовать другое инструментальное средство - ClassWizard (мастер классов), предназначенное для создания остовов новых производных классов. Еще одно основное назначение ClassWizard в том, что он создает остовы для переопределяемых методов. Он позволяет показать все сообщения, приходящие классу, и создать остов обработчика любого из этих сообщений. Это только две основные функции ClassWizard.

В состав компилятора Microsoft Developer Studio встроены средства, позволяющие программисту облегчить разработку приложений. В первую очередь к ним относятся MFC AppWisard, ClassWizard и редактор ресурсов.

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

Для создания ресурсов приложения предназначен редактор ресурсов. Он позволяет быстро создавать новые меню, диалоговые панели, добавлять кнопки к панели управления toolbar и т.д.

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

В среде Visual C++ можно строить различные типы проектов. Такие проекты после их создания можно компилировать и запускать на исполнение. Фирма Microsoft разработала специальный инструментарий, облегчающий и ускоряющий создание проектов в среде Visual C++.

MFC AppWizard (exe) - при помощи мастера приложений можно создать проект Windows-приложения которое имеет однодокументный, многодокументный или диалоговый интерфейс. Однодокументное приложение может предоставлять пользователю в любой момент времени работать только с одним файлом. Многодокументное приложение, напротив, может одновременно представлять несколько документов, каждый в собственном окне. Пользовательский интерфейс диалогового приложения представляет собой единственное диалоговое окно.

MFC AppWizard (dll) - этот мастер приложений позволяет создать структуру DLL, основанную на MFC. При помощи него можно определить характеристики будующей DLL.

AppWizard ATL COM - это средство позволяет создать элемент управления ActiveX или сервер автоматизации, используя новую библиотеку шаблонов ActiveX (ActiveX Template Library - ATL). Опции этого мастера дают возможность выбрать активный сервер (DLL) или исполняемый внешний сервер (exe-файл).

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

DevStudio Add-in Wizard - мастер дополнений позволяет создавать дополнения к Visual Studio. Библиотека DLL расширений может поддерживать панели инструментов и реагировать на события Visual Studio.

MFC ActiveX ControlWizard - мастер элементов управления реализует процесс создания проекта, содержащего один или несколько элементов управления ActiveX, основанных на элементах управления MFC.

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

Win32 Console Application - мастер создания проекта консольного приложения. Консольная приложение - это программа, которая выполняется из командной cтроки окна DOS или Windows и не имеет графического интерфейса (окон). Проект консольного приложения создается пустым, предполагая добавление файлов исходного текста в него вручную.

Win32 Dynamic-Link Library - создание пустого проекта динамически подключаемой библиотеки. Установки компилятора и компоновщика будут настроены на создание DLL. Исходные файлы следует добавлять вручную.

Win32 Static Library - это средство создает пустой проект, предназначенный для генерации статической (объектной) библиотеки. Файлы с исходным кодом в него следует добавлять вручную.

Все Windows-приложения имеют достаточно общую структуру, и, следовательно, можно построить некоторые шаблонные заготовки, подходящие для того или иного типа проектов. Построению таких заготовок способствует то, что приложения, создаваемые на основе MFC, строятся из элементов фиксированных классов. Логическим развитием этой идеи было введение специальных классов и специальной архитектуры построения приложения, которая подходила бы широкому классу приложений. О такой архитектуре уже упоминалось, когда речь шла о библиотеке MFC, - это архитектура Document-View. Она является основной, но не единственной при построении проектов в среде Visual C++.

Суть этой архитектуры в том, что работу многих приложений можно рассматривать как обработку документов. При этом можно отделить сам документ, отвечающий за представление и хранение данных, от образа этого документа, видимого на экране и допускающего взаимодействие с пользователем, который просматривает и (или) редактирует документ. В соответствии с этой архитектурой библиотека MFC содержит два семейства классов, производных от базовых классов CDocument и CView.

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

Начальная заготовка - остов приложения - создается в диалоге с пользователем инструментальным средством AppWizard. В процессе диалога пользователь определяет тип и характеристики проекта, который он хочет построить. Определив, какие классы из MFC необходимы для этого проекта, AppWizard строит остовы всех нужных производных классов. Построенный AppWizard остов приложения содержит все необходимые файлы для создания стартового приложения, которое является законченным приложением и обладает разумными функциональными свойствами, общими для целого класса приложений. Естественно, никаких специфических для данного приложения свойств остов не содержит. Они появятся на следующем этапе, когда программист начнет работать с остовом, создавая из заготовки свое собственное приложение. Тем не менее стартовое приложение можно транслировать и запускать на исполнение.

Термин остов (приложения, класса, функции) применяется для заготовок, создаваемых инструментальными средствами AppWizard и ClassWizard. Нужно подчеркнуть - остов приложения и каркас приложения - разные понятия.

Создаваемый остов приложения составлен так, что в дальнейшей работе с проектом можно использовать другое инструментальное средство - ClassWizard (мастер классов).

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

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

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

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

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

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

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

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


2.1 Описание программы


Windows-приложение, разработанное в среде программирования Microsoft Visual Studio 2008 на языке программирования C++ с использованием библиотеки MFC. Программа протестирует знания пользователя по разделу математики "квадратные уравнения". Программа задает 20 вопросов и оценивает знания по 100 бальной шкале. Так же приложение содержит справку о задаче программы.

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


При запуске программы открывается главное окно программы (рис.2.1), в котором расположены кнопка начала тестирования, выхода из программы, кнопка справки, описание программы. После прохождения тестирования в главном окне отображается сумма набранных баллов.

Рисунок 2.1 - Главное окно

После нажатия на кнопку "Начать тест" открывается окно вопроса (рис.2.2), имеющее номер вопроса, текст вопроса, кнопка "Следующий", кнопка "Пропустить".

Рисунок 2.2 - Окно вопроса

Так же в программе содержатся вопросы предполагающий 2 ответа (рис.2.3)

Рисунок 2.3 - Вопрос, предполагающий 2 ответа

После ответа на 20 вопросов в главном окне выводится сумма набранных баллов (рис.2.4)

Рисунок 2.4 - вывод суммы балов

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


Приложение разработано в среде Microsoft Visual Studio 2008 и отвечает всем принципам объектно-ориентированного программирования. Оно создано на базе диалогового приложения.

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

Таблица 2.1 - Спецификация классов

Класс

Защищенность

Назначение

OnPaint ()

Protected

Отвечает за перерисовку окна и вывод результатов.

OnBnClickedButton1 ()

Protected

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

OnBnClickedButton3 ()

Protected

Выводит окно справки программы

OnBnClickedCancel ()

Protected

Пропускает вопрос, баллы не зачитываются


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


Для работы с программой необходим персональный компьютер обладающий характеристиками: процессор Intel с частотой не менее 1000 МГц, оперативная память не менее 512 Мбайт, свободное дисковое пространство не менее 100 Мбайт, CD\DVD - привод, монитор, мышь, клавиатура. Операционная система Windows XP, Vista, Seven.

2.5 Установка и запуск программы


Для работы с программой необходимо скопировать на жесткий диск файл Testirivanie. exe. Запустить программу двойным щелчком левой кнопкой мыши.

2.6 Работа с приложением


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

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


В качестве входных данных приложение принимает ответы пользователя с помощью элементов управления

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


Выходными данными является сумма баллов выводимая после завершения тестирования в главном окне программы.

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


При запуске программы открывается главное окно программы (рис.2.5), в котором расположены кнопка начала тестирования, выхода из программы, кнопка справки, описание программы. После прохождения тестирования в главном окне отображается сумма набранных баллов.

Рисунок 2.5 - Главное окно программы

По нажатию на кнопку начать тестирование открывается окно вопроса 1 (рис.2.6).

Рисунок 2.6 - Окно первого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 2 (рис.2.7).


По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 3 (рис.2.8)

Рисунок 2.8 - Окно третьего вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 4 (рис.2.9)

Рисунок 2.9 - Окно четвертого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 5 (рис.2.10)

Рисунок 2.10 - Окно пятого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 6 (рис.2.11)

Рисунок 2.11 - Окно шестого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 7 (рис.2.12)

Рисунок 2.12 - Окно седьмого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 8 (рис.2.13)

Рисунок 2.13 - Окно восьмого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 9 (рис.2.14)

Рисунок 2.14 - Окно девятого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 10 (рис.2.15)

Рисунок 2.15 - Окно десятого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 11 (рис.2.16)

Рисунок 2.16 - Окно одиннадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 12 (рис.2.17)

Рисунок 2.17 - Окно двенадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 13 (рис.2.18)

Рисунок 2.18 - Окно тринадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 14 (рис.2.19)

Рисунок 2.19 - Окно четырнадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 15 (рис.2.20)

Рисунок 2.20 - Окно пятнадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 16 (рис.2.21)

Рисунок 2.21 - Окно шестнадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 17 (рис.2.22)

Рисунок 2.22 - Окно семнадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 18 (рис.2.23)

Рисунок 2.23 - Окно восемнадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 19 (рис.2.24)

Рисунок 2.24 - Окно девятнадцатого вопроса

По нажатию кнопки "Следующий" или "Пропустить" открывается окно вопроса 20 (рис.2.25)

Рисунок 2.25 - Окно двадцатого вопроса

После нажатия кнопки "Завершить" или "Пропустить" открывается главное окно программы в котором указывается набранная сумма баллов (рис.2.26).

Рисунок 2.26 - Главное окно приложения после окончания тестирования и вывод результата.

Во время тестирования ошибок не обнаружено.

Заключение


При выполнении данной курсового проекта было разработано Windows-приложение, которое позволяет проводить тестирование знаний по разделу математики "Квадратные уравнения". Было создан дополнительный класс диалоговых окон. Изучена работа с ClassWizard, визуальным оформлением проекта.

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


1.       Кэйт Грегори Использование Visual С++6. Специальное издание.: СПб.; "Вильямс", 2003 - 864стр.

2.       О.С. Мезенцева, В.В. Кушнарев. Методические указания по курсовому проектированию по дисциплине "Высокоуровневые методы информатики и программирования". Ставрополь, 2002

.        А. Мешков, Ю. Тихомиров. Visual C++ и MFC.2-е изд. перераб. и доп. - СПб.: БХВ-Петербург, 2003. - 1040стр.

.        Ю. Олафсен MFC и Visual C++6. Диа-Софт, Киев, 2003

.        Г. Шилдт Программирование на BORLAND C++ для профессионалов/Пер. англ.А.И. Филимонов; - Мн.: ООО "Попурри", 1999. - 800 с.

.        С. Холзнер Microsoft Visual C++ 6 с самого начала - СПб: Питер, 2000 г.

Приложения

Приложение 1. Иерархия классов

 


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

// TestirovanieDlg. cpp: implementation file

//

#include "stdafx. h" \\ подключение классов в библиотеки

#include "Testirovanie. h"

#include "TestirovanieDlg. h"

#include "v1. h"

#include "v2. h"

#include "v3. h"

#include "v4. h"

#include "v5. h"

#include "v6. h"

#include "v7. h"

#include "v8. h"

#include "v9. h"

#include "v10. h"

#include "v11. h"

#include "v12. h"

#include "v13. h"

#include "v14. h"

#include "v15. h"

#include "v16. h"

#include "v17. h"

#include "v18. h"

#include "v19. h"

#include "v20. h"

#include "help. h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CAboutDlg dialog used for App AboutCAboutDlg: public CDialog

{:();

// Dialog Data{ IDD = IDD_ABOUTBOX };:void DoDataExchange (CDataExchange* pDX); // DDX/DDV support

// Implementation:_MESSAGE_MAP ()

};:: CAboutDlg (): CDialog (CAboutDlg:: IDD)

{

}CAboutDlg:: DoDataExchange (CDataExchange* pDX)

{:: DoDataExchange (pDX);

}_MESSAGE_MAP (CAboutDlg, CDialog)_MESSAGE_MAP ()

// CTestirovanieDlg dialog:: CTestirovanieDlg (CWnd* pParent /*=NULL*/)

: CDialog (CTestirovanieDlg:: IDD, pParent)

, tekst (_T (""))

, r (0)

{_hIcon = AfxGetApp () - >LoadIcon (IDR_MAINFRAME);

}CTestirovanieDlg:: DoDataExchange (CDataExchange* pDX)

{:: DoDataExchange (pDX);_Text (pDX, IDC_EDIT1, tekst);

}_MESSAGE_MAP (CTestirovanieDlg, CDialog)_WM_SYSCOMMAND ()_WM_PAINT ()_WM_QUERYDRAGICON ()

// }}AFX_MSG_MAP_BN_CLICKED (IDC_BUTTON1, &CTestirovanieDlg:: OnBnClickedButton1)_BN_CLICKED (IDC_BUTTON3, &CTestirovanieDlg:: OnBnClickedButton3)_MESSAGE_MAP ()

// CTestirovanieDlg message handlersCTestirovanieDlg:: OnInitDialog ()

{:: OnInitDialog ();

// Add "About." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.( (IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);(IDM_ABOUTBOX < 0xF000);* pSysMenu = GetSystemMenu (FALSE);(pSysMenu! = NULL)

{strAboutMenu;. LoadString (IDS_ABOUTBOX);(! strAboutMenu. IsEmpty ())

{>AppendMenu (MF_SEPARATOR);>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(m_hIcon, TRUE); // Set big icon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization hereTRUE; // return TRUE unless you set the focus to a control

}CTestirovanieDlg:: OnSysCommand (UINT nID, LPARAM lParam)

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

{dlgAbout;. DoModal ();

}

{:: 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.CTestirovanieDlg:: OnPaint ()

{(IsIconic ())

{dc (this); // device context for painting(WM_ICONERASEBKGND, reinterpret_cast<WPARAM> (dc. GetSafeHdc ()), 0);

// Draw the icon. DrawIcon (x, y, m_hIcon);

}

{:: OnPaint ();

}

}

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

// the minimized window.CTestirovanieDlg:: OnQueryDragIcon ()

{static_cast<HCURSOR> (m_hIcon);

}CTestirovanieDlg:: OnBnClickedButton1 ()

{=0;dlg1;(dlg1. DoModal () ==IDOK)

{+=dlg1. o1;

}dlg2;(dlg2. DoModal () ==IDOK)

{

{(dlg2. c1==TRUE)

{+=0;

}(dlg2. c2==TRUE)

{+=3;

}(dlg2. c3==TRUE)

{+=0;

}(dlg2. c4==TRUE)

{+=3;

}

}

}dlg3;(dlg3. DoModal () ==IDOK)

{+=dlg3. o1;

}dlg4;(dlg4. DoModal () ==IDOK)

{+=dlg4. o1;

}dlg5;(dlg5. DoModal () ==IDOK)

{+=dlg5. o1;

}dlg6;(dlg6. DoModal () ==IDOK)

{+=dlg6. o1;

}dlg7;(dlg7. DoModal () ==IDOK)

{+=dlg7. o1;

}dlg8;(dlg8. DoModal () ==IDOK)

{+=dlg8. o1;

}dlg9;(dlg9. DoModal () ==IDOK)

{+=dlg9. o1;

}dlg10;(dlg10. DoModal () ==IDOK)

{

{(dlg10. c1==TRUE)

{+=3;

}(dlg10. c2==TRUE)

{+=0;

}(dlg10. c3==TRUE)

{+=0;

}(dlg10. c4==TRUE)

{+=3;

}

}

}dlg11;(dlg11. DoModal () ==IDOK)

{+=dlg11. o1;

}dlg12;(dlg12. DoModal () ==IDOK)

{+=dlg12. o1;

}dlg13;(dlg13. DoModal () ==IDOK)

{+=dlg13. o1;

}dlg14;(dlg14. DoModal () ==IDOK)

{+=dlg14. o1;

}dl15;(dl15. DoModal () ==IDOK)

{

{(dl15. c1==TRUE)

{+=0;

}(dl15. c2==TRUE)

{+=3;

}(dl15. c3==TRUE)

{+=3;

}(dl15. c4==TRUE)

{+=0;

}

}

}dlg16;(dlg16. DoModal () ==IDOK)

}dl17;(dl17. DoModal () ==IDOK)

{+=dl17. o1;

}dl18;(dl18. DoModal () ==IDOK)

{+=dl18. o1;

}dlg19;(dlg19. DoModal () ==IDOK)

{+=dlg19. o1;

}d20;(d20. DoModal () ==IDOK)

{+=d20. o1;

}. Format (L" набранно баллов: %d",r);(false);

// TODO: Add your control notification handler code here

}CTestirovanieDlg:: OnBnClickedButton3 ()

{dlghelp;(dlghelp. DoModal () ==IDOK);

// TODO: Add your control notification handler code here

}

Похожие работы на - Приложение, написанное на Microsoft Visual C++ с использованием библиотеки MFC. Тестирование по разделу 'Квадратные уравнения'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!