АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Методические указания. Цель лабораторной работы – познакомится с основными принципами архитектуры документ/представление

Читайте также:
  1. I. ГИМНАСТИКА, ЕЕ ЗАДАЧИ И МЕТОДИЧЕСКИЕ ОСОБЕННОСТИ
  2. I. Методические основы
  3. I. Методические основы оценки эффективности инвестиционных проектов
  4. I. ОБЩИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ
  5. I. ОБЩИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ
  6. II. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ ВЫПОЛНЕНИЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
  7. II. Методические указания для студентов по выполнению индивидуальных заданий
  8. II. Организационно-методические указания.
  9. II. УКАЗАНИЯ ПО ТЕХНОЛОГИИ ПРОИЗВОДСТВЕННОГО ПРОЦЕССА
  10. II. УКАЗАНИЯ ПО ТЕХНОЛОГИИ ПРОИЗВОДСТВЕННОГО ПРОЦЕССА
  11. II. УКАЗАНИЯ ПО ТЕХНОЛОГИИ ПРОИЗВОДСТВЕННОГО ПРОЦЕССА
  12. II. УКАЗАНИЯ ПО ТЕХНОЛОГИИ ПРОИЗВОДСТВЕННОГО ПРОЦЕССА

Лабораторная работа №3

АРХИТЕКТУРА ДОКУМЕНТ/ПРЕДСТАВЛЕНИЕ

Цель лабораторной работы – познакомится с основными принципами архитектуры документ/представление.

 

Задание

 

1. Изучить основные составные части приложения, написанного с использованием библиотеки классов MFC.

2. Следуя методическим указаниям создать простое приложение и научиться выводить данные в окно приложения.

3. Выполнить задание согласно варианту.

Методические указания

 

Для создания стандартного шаблона будущей программы для Windows на Visual C++выполнить:

  1. После запуска Visual C++, необходимо выполнить команду File > New; откроется окно диалога New (рис. 1).

Рис. 1. Начало создания программы с помощью AppWizard

 

2. Выбрать из списка строку MFC AppWizard (exe).

3. Ввести в текстовом поле Project Name имя проекта (например welcome).

4. Нажать кнопку ОК, чтобы запустить мастер Visual C++ AppWizard (рис. 2).

Рис. 2. MFC AppWizard упрощает создание программы на Visual C++

 

5. AppWizard напишет основную часть программного кода.

6. На экране появиться окно первого из шести этапов работы с AppWizard (рис. 2).

7. Следует оставить без изменения все стандартные параметры AppWizard, кроме одного – по умолчанию AppWizard создает программы с несколькими окнами, а нам нужна программы с одним окном.

8. Установить переключатель Single Document (рис. 2) и нажать кнопку Finish. Откроется окно New Project Information (рис. 3).

Рис. 3

9. В указанном вами каталоге будут созданы следующие файлы:

welcome.clw Файл ClassWizard
welcome.dsw Основной файл рабочей области
welcome.h Заголовочный файл приложения
welcome.cpp Исходный текст приложения
StdAfx.h Заголовочный файл для стандартного «каркаса» приложения»
StdAfx.cpp Исходный текст стандартного «каркаса» приложения
Mainfrm.h Заголовочный файл главного окна
MainFrm.cpp Исходный текст главного окна
welcomeDoc.h Заголовочный файл документа
welcomeDoc.cpp Исходный текст документа
welcomeView.h Заголовочный файл вида
welcomeView.cpp Исходный текст вида
Resource.h Файл с ресурсными константами
welcome.rc Файл с ресурсами
welcome.ncb Файл с информацией о представлении и взаимных связях
welcome.dsp Файл проекта
res Каталог для ресурсов

 

После запуска сгенерированной автоматически программы получиться окно как на рис. 4.

Рис. 4

 

Программы, созданная AppWizard, состоит из четырех основных частей:

 

1. Объекта приложения

2. Объекта главного окна

3. Объекта документа

4. Объекта вида

 

Объект приложения содержит определения констант, а также определения переменных и методов класса. Все его содержимое – это то, что запускается при старте программы. Когда объект начинает работу, он размещает на экране главное окно.

 

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

 

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

 

В объекте документа хранятся данные программы.

 

Теперь попробуем изменить нашу программу так, чтобы она выводила сообщение «Добро пожаловать в Visual C++!». Для этого необходимо добавить небольшой фрагмент кода в метод OnDraw() класса CWelcomeView. Программа вызывает метод OnDraw(), когда ей требуется вывести что-либо в клиентской области программы. В данный момент метод OnDraw() выглядит так:

 

void CWelcome1View::OnDraw(CDC* pDC)

{

CWelcome1Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

}

 

Для вывода сообщения необходимо выполнить следующее:

1. Приступить к редактированию метода. Для этого перейти в окне просмотра Visual C++ на вкладку ClassView.

2. Найти в иерархическом списке название класса CWelcomeView (Рис. 5). Щелкните на знаке «плюс» рядом с элементом. На экране появиться список методов данного класса.

Рис. 5

 

3. Найдите в списке метод OnDraw() и дважды щелкните на нем – метод откроется в текстовом редакторе.

4. Чтобы изменить поведение программы, следует добавьте в OnDraw() две строки:

void CWelcome1View::OnDraw(CDC* pDC)

{

CString welcome_string = «Добро пожаловать в Visual C++!»;

CWelcome1Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(0, 0, welcome_string);

// TODO: add draw code for native data here

}

5. Программа готова. Для ее запуска нажмите Ctrl+F5. Результат ее работы показан на рис. 6

 

Рассмотрим более подробно созданные две строки. В первой строке создается объект welcome_string, принадлежащий классу MFC CString. Далее в этот объект заноситься текст. Класс CString содержит все операции со строками. Затем в методе Ondraw() выводится строка через переданный методу указатель pDC, который ссылается на объект класса MFC с именем CDC. Далее вызывается метод TextOut() этого объекта:

pDC->TextOut(0, 0, welcome_string);

Класс CDC предназначен для работы с контекстами устройств. Весь графический и текстовый вывод, выполняемый в Visual C++, осуществляется через контексты устройств. pDC – это указатель, ссылающийся на контекст устройства для нашего вида, который передается методу OnDraw().

Методу TextOut() передаются координаты левого верхнего угла той области окна, где должна располагаться наша строка. Затем метод получает саму строку welcome_string.

В объекте документа хранятся данные программы. В примере welcome потребовался только объект welcome_string. Для простоты он был размещен в объекте вида, но на самом деле ему следовало бы находиться в объекте документа. Теперь разместим объект welcome_string в объекте документа. Объявим welcome_string в заголовочном файле документа welcomeDoc.h:

// welcome1Doc.h: interface of the CWelcome1Doc class

//

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

 

#if!defined(AFX_WELCOME1DOC_H__52A15FAA_040A_44F3_A665_A420D1376444__INCLUDED_)

#define AFX_WELCOME1DOC_H__52A15FAA_040A_44F3_A665_A420D1376444__INCLUDED_

 

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

 

 

class CWelcome1Doc: public CDocument

{

protected: // create from serialization only

CWelcome1Doc();

DECLARE_DYNCREATE(CWelcome1Doc)

CString welcome_string;

.

.

.

}

 

Затем инициализируем объект welcome_string в конструкторе класса документа, расположенном в файле welcomeDoc.cpp:

 

CWelcome1Doc::CWelcome1Doc()

{

welcome_string = "Добро пожаловать в Visual C++”

}

 

Теперь данные хранятся в объекте документа, но как обратиться к ним из объекта вида? Если взглянуть на код, сгенерированный AppWizard для класса вида, можно заметить, что в нем есть фрагмент для получения указателя на объект документа с помощью метода GetDocument() класса вида. AppWizard присвоил этому указателю имя pDoc:

 

void CWelcome1View::OnDraw(CDC* pDC)

{

 

CWelcome1Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

}

 

Обращение к welcome_string в объекте документа может выглядеть так: pDoc->welcome_string; поэтому в итоге содержимое welcome_string будет отображаться следующим образом:

void CWelcome1View::OnDraw(CDC* pDC)

{

 

CWelcome1Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(0, 0, pDoc->welcome_string);}

 

Программа готова.


 

Варианты заданий

 

Вариант 1. В объекте документ создать неупорядоченный массив, состоящий из названий штатов США: Virginia, Texas, Oregon, Alabama, Dakota, California, Utah, Florida, Georgia, Pennsylvania, New Mexico, Nevada, Montana. В объекте вид создать функцию сортировки массива по алфавиту. Вывести в окне приложения сначала неупорядоченный массив, а затем упорядоченный.

 

Вариант 2. В объекте документ создать неупорядоченный массив, состоящий из названий фирм-производителей компьютерной техники: Intel, HP, Canon, Epson, IBM, WD, Seagate, Gigabyte. В объекте вид создать функцию сортировки массива по алфавиту. Вывести в окне приложения неупорядоченный массив, а затем упорядоченный.

 

Вариант 3. В объекте документ создать неупорядоченный массив, состоящий из названий частей света: Europe, Australia, Asia, Africa, America, Antarctica. В объекте вид создать функцию сортировки массива в обратном алфавиту порядке. Вывести в окне приложения неупорядоченный массив, а затем упорядоченный.

 

Вариант 4. В объекте документ создать неупорядоченный массив чисел: 56, 76, 1, 34, 543, 32, 98, 46, 18, 4. В объекте вид создать функцию сортировки массива по возрастанию. Вывести в окне приложения неупорядоченный массив, а затем упорядоченный.

 

Вариант 5. В объекте документ создать неупорядоченный массив чисел: 22, 15, 43, 55, 928, 314, 1098, 5, 218, 100. В объекте вид создать функцию сортировки массива по убыванию. Вывести в окне приложения неупорядоченный массив, а затем упорядоченный.

 

Вариант 6. В объекте документ создать матрицу (4х4):

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

 

Вариант 7. В объекте документ создать матрицу (4х4):

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


Вариант 8. В объекте документ создать определитель:

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

 

Вариант 9.

Указания к выполнению лабораторной работы:

 

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

Цифра некоторого разряда числа называется правильной в узком смысле, если абсолютная ошибка числа не превышает половины (0.5) этого разряда.

 

Задание:

 

В объекте документ задать приближенное число а* = 85,267. В объекте вид создать функцию, которая бы определяла какие правильные цифры заданного числа в узком смысле и в широком, если а* = 85,267 ± 0,0084. Вывести в окне приложения заданное число и результаты созданной функции, т.е. перечисление правильных цифр в узком смысле и в широком.

 

Вариант 10.

Указания к выполнению лабораторной работы:

 

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

Цифра некоторого разряда числа называется правильной в узком смысле, если абсолютная ошибка числа не превышает половины (0.5) этого разряда.

 

Задание:

 

В объекте документ задать два приближенных числа а* = 96,387 и b* = 9,32. В объекте вид создать функцию для нахождения граничных абсолютных ошибок заданных чисел, если известно, что а* и b* содержат только правильные цифры в узком и широком смысле соответственно. Вывести в окне приложения заданные числа и результаты вычислений созданной функции.

 

Вариант 11. В объекте документ задать матрицу значений коэффициентов (a b):

В объекте вид создать функцию для вычисления выражения sin(b). Вывести в окне приложения заданную матрицу и результаты вычисления.


 

Вариант 12. В объекте документ задать матрицу значений коэффициентов (a b):

В объекте вид создать функцию для вычисления выражения cos(a). Вывести в окне приложения заданную матрицу и результаты вычисления.

 

Вариант 13. В объекте документ задать матрицу значений коэффициентов (a b):

В объекте вид создать функцию для вычисления выражения tan(a*b). Вывести в окне приложения заданную матрицу и результаты вычисления.

 

Вариант 14. В объекте документ создать массив чисел: 3, 67, 85, -9, -54, 41, 22, 3427, -76, 0, 45, 88, 100, 54. В объекте вид создать функцию, которая бы меняла местами соседние элементы. Вывести в окне приложения изначально заданный массив, а затем массив, который получился в результате работы созданной функции.

 

Вариант 15. В объекте документ создать массив чисел: 77, -98, 54, 31, 11, 100, 145, 8765, -8734. 18. В объекте вид создать функцию, которая бы переставила элементы в обратном порядке, т.е. от 18 до 77. Вывести в окне приложения изначально заданный массив, а затем массив, который получился в результате работы созданной функции.

 

Вариант 16. В объекте документ создать матрицу (4х4):

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

 

Вариант 17. В объекте документ создать матрицу (4х4):

В объекте вид создать функцию, которая бы умножала столбцы матрицы следующим образом: первый столбец на 1, второй столбец на 2, третий столбец на три и четвертый на 4. Вывести в окне приложения изначально заданную матрицу, а затем матрицу, полученную в результате работы созданной функции.


 

Вариант 18. В объекте документ создать матрицу (4х4):

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

 

Вариант 19. В объекте документ создать неупорядоченный массив, состоящий из названий штатов США: New Hampshire, Virginia, New Jersey, Texas, Oregon, Alabama, Dakota, New York, California, Utah, Florida, Georgia, Pennsylvania, New Mexico, Nevada, Montana. В объекте вид создать функцию, которая бы из данного массива сформировала новый, состоящий только из тех штатов, который начинаются на букву N и отсортировала новый массив по алфавиту. Вывести в окне приложения первоначальный массив, а затем массив, полученный в результате работы созданной функции.

 

Вариант 20. В объекте документ создать неупорядоченный массив, состоящий из дат: 01.09, 01.01, 23.02, 07.01, 01.05, 08.03, 24.08. В объекте вид создать функцию, которая бы отсортировала даты в порядке следования, начиная с 01.01. Вывести в окне приложения первоначальный массив, а затем массив, полученный в результате работы созданной функции.

 

Вариант 21. В объекте документ создать двухмерный массив для хранения координат вершин четырехугольника:

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

 

Вариант 22. В объекте документ создать неупорядоченный массив, состоящий из дат: 01.01, 23.02, 01.09, 07.01, 01.05, 08.03, 24.08. В объекте вид создать функцию, которая бы отсортировала даты в порядке следования, начиная с 24.08. Вывести в окне приложения первоначальный массив, а затем массив, полученный в результате работы созданной функции.

 

Вариант 23. В объекте документ создать массив, состоящий из названий фирм-производителей компьютерной техники: Intel, HP, Canon, Epson, IBM, WD, Seagate, Gigabyte. В объекте вид создать функцию, которая бы меняла местами два блока по четыре элемента. Вывести в окне приложения неупорядоченный массив, а затем упорядоченный.


Контрольные вопросы

1. Объяснить взаимосвязь между фреймом, документом и представлением.

2. Объяснить назначения классов CDocTemplate, CSingleDocTemplate, CMultiDocTemplate.

3. Объяснить роль фреймов в архитектуре «документ/представление».

4. Назвать и объяснить назначение методов класса CDocument.

5. Перечислить все классы представления.

 

Литература:

А. Мешков, Ю. Тихомиров. Visual C++ и MFC.

Часть 9. Глава 19 Стр. 513 – 535; Глава 20 Стр. 544 – 558.


Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.02 сек.)