Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООПиП (часть 3). Пример контрольной работы

..pdf
Скачиваний:
10
Добавлен:
01.04.2014
Размер:
533.34 Кб
Скачать

БГУИР: Дистанционное обучение (неофициальный сайт)

Министерство образования Республики Беларусь Учреждение образования

«Белорусский государственный университет информатики и радиоэлектроники»

Инженерно-экономический факультет Кафедра экономической информатики

Контрольная работа по курсу: «Объектно-ориентированное проектирование и программирование (часть 3)»

Тема: «Использование контекстно-зависимой справки»

Проверил: Огневая Татьяна Анатольевна

Выполнил: студент группы (дистанционная форма обучения) Wasja

Минск 2009

http://do.ucoz.net

БГУИР: Дистанционное обучение (неофициальный сайт)

1 Краткие теоретические сведения

1.1 Общие сведения о контекстно-зависимой справочной системе

На данный момент существуют два вида технологии интерактивной справки для Windows – классический формат Win Help и более современный HTML Help. Библиотека MFC обеспечивает поддержку обоих видов справочных системами, реализуя программный интерфейс доступа и управления. Справка формата Win Help создается на основе RTF-файлов (текст с форматированием), а HTML Help – на основе HTML-файлов, что позволяет расширить способы предоставления информации и повысить качество справочной системы.

В классической системе Win Help доступ к разделам последовательный – доступ к разделам-темам осуществляется через предметный указатель или оглавление, в результате чего выбранный раздел Win Help открывает в отдельном окне. Стандартное же окно справочной системы HTML Help обеспечивает одновременный просмотр перечня разделов (в виде предметного указателя, оглавления или поиска) и содержимое раздела.

Создание контекстно-зависимой справки любого из формата предполагает выполнение трех последовательных шагов:

создание справочного файла (файлов);

создание оглавления справки;

интеграция в MFC-приложение.

1.2 Справка формата Win Help

1.2.1 Создание справочного файла

Процесс создания собственных справочных файлов включает в себя:

Создание RTF-файла, содержащего основной текст справки.

RTF-файл справки содержит темы, связанные между собой гипертексто-

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

Каждая страница, к которой осуществляется переход, должна быть оформлена как отдельная страница. Для связи страницы с соответствующей ей меткой используется пользовательский символ концевой сноски #. Можно также использовать еще два пользовательских символа концевой сноски. Символ $ позволяет поместить ссылку на страницу перехода в списке вкладки поиска окна справочной системы. Для задания ключевого слова, по которому производится поиск, используется прописная буква K. Для поиска страницы перехода может быть задано несколько ключевых слов, разделяемых точкой с запятой.

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

http://do.ucoz.net

2

БГУИР: Дистанционное обучение (неофициальный сайт)

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

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

Создание файла проекта справки.

Файл проекта справочной системы представляет собой простой текстовый файл формата ASCII с расширением .HPJ и форматируется как INI-файл. Наиболее часто используемые разделы этого файла приведены в таблице 1.1.

Таблица 1.1 – Разделы файла проекта справочной системы

Раздел

Описание

OPTIONS

Определяет режим компиляции файла справки

FILES

Определяет файлы формата RTF, используемые при создании файла HLP

WINDOWS

Определяет первичное окно справочной системы. Требуется при реализации

 

контекстной справки

ALIAS

Сопоставляет один контекстный идентификатор другому

Компиляция файла справки – осуществляется либо из системы Visual Stu-

dio, либо из приложения Microsoft Help Workshop.

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

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

:Base Example.hlp - подключение файла справки Example.hlp 1 Topics - объявление раздела справки

2 Topic 1=HID_TOPIC1 - объявление названия контекста и указание его идентификатора HID_TOPIC1 (соответствует содержимому файла справки)

1.2.3 Интеграция справки в MFC-приложение

Система Visual Studio позволяет создавать приложения с поддержкой кон- текстно-зависимой справки в автоматическом режиме для чего необходимо при создании проекта установить флаг «Context-sensitive Help» (для версий старше 6.0 также необходимо установить переключатель в положение «Win Help»). После этого мастер сформирует дополнительный раздел меню «Help» приложения, создает один или несколько RTF-файлов, HPJ-файл, командный файл для запуска компилятора справки, определяет F1 как «быструю клавишу» и задает необходимый обработчик.

Для вызова приложения WinHelp в программах MFC используется функция CWinApp::WinHelp(), первый параметр которой задает справочную тему, а второй (необязательный) – тип запроса:

http://do.ucoz.net

3

БГУИР: Дистанционное обучение (неофициальный сайт)

Таблица 1.2 – Часто используемые типы запросов

Аргумент

Описание

HELP_CONTEXT

Выводит информацию по теме, определяемой значением аргумента

 

dwData (по умолчанию)

HELP_QUIT

Завершает работу справочной системы

HELP_INDEX

Выводит индекс

HELP_FINDER

Выводит оглавление (требуется наличие файла .CNT)

HELP_HELPONHELP

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

HELP_KEY

Выводит информацию по ключевому слову, определяемому аргумен-

 

том dwData

Имя файла справки, как правило, совпадает с именем приложения, но его можно изменить на необходимое в переменной CWinApp:: m_pszHelpFilePath.

Кроме вызова справки из команд меню «Help» в MFC-программу встраиваются еще два способа доступа к контекстно-зависимой справке:

1)Нажатие клавиши F1 для получения контекстной информации по объекту (окну, элементу управления, команде меню и т.д.), имеющему фокус ввода.

2)Нажатие сочетания клавиш Shift-F1, что позволяет различить дополнительные контексты справки: элементы меню, кнопки на панели инструментов, ок- но-рамку, окно представления, графические элементы в окне представления, строку состояния, неклиентские элементы (команды системного меню и т.п.). Данный способ не работает с модальными диалоговыми и информационными окнами.

Идентификаторы контекстных ссылок определяются в разделе [MAP] файла HPJ. В раздел [MAP] помещаются инструкции #define и #include, а также инструкция присваивания. Во многих случаях в качестве идентификаторов контекстных ссылок используются идентификаторы ресурсов программы, что не обязательно – главное, чтобы совпадали их численные значения.

По умолчанию контекст справки определяется как набор #define-констант справки производных от идентификаторов программных элементов. Эти константы представляют собой сумму идентификаторов программных элементов и определенных базовых значений:

Таблица 1.3 – Базовые значения для констант справки

 

Префикс иден-

Префикс эле-

Базовое значе-

Элемент программы

тификатора

мента контекста

ние (шестна-

 

элемента

справки

дцатеричное)

Элемент меню или кнопка панели инст-

ID_, IDM_

HID_, HIDM_

10000

рументов

 

 

 

Окно-рамка или диалоговое окно

IDR_, IDD_

HIDR_, HIDD_

20000

Окно сообщений об ошибках

IDР_

HIDP_

30000

Неклиентская область

 

H_

40000

Элемент управления

IDW_

HIDW_

50000

Сообщения об ошибках диспетчеризации

 

 

60000

Имена меток перехода в RTF-файле должны совпадать с именами идентификаторов ресурсов. Другой подход основан на использовании раздела [ALIAS], в котором идентификаторы ресурсов связываются с именами меток перехода, имеющихся в файле формата RTF.

http://do.ucoz.net

4

БГУИР: Дистанционное обучение (неофициальный сайт)

1.3 Справка формата HTML Help

Использование справочной системы HTML позволяет расширить диапазон способов предоставления информации и повысить качество справочной системы. Справочная система HTML поддерживает гиперссылки, элементы управления ActiveX, сценарии и динамический язык HTML. Как и Win Help, HTML Help использует файлы проектов для объединения файлов тем, контекста, индексов и других файлов в одном компилированном файле справочной системы.

Таблица 1.4 – Часто встречающиеся файлы HTML Help

Имя

Тип

Описание

 

 

Используется для работы с файлами описания тем, оглав-

Проект

HPP

ления, индексов и других исходных файлов. Определяет

 

 

также внешний вид справочной системы

Описание разде-

 

Содержит текст, появляющийся на экране, и коды форма-

лов справочной

HTM, HTML

тирования (теги), сообщающие браузеру, как выводить

системы

 

каждую страницу

Изображения

JPEG, GIF, PNG

Файлы изображений HTML

Оглавление

HHC

Содержит заголовки тем для вывода их в оглавлении

Индекс

HHK

Содержит ключевые слова индекса

Альтернативные

ALI

Устанавливает соответствие идентификаторов темам

имена

справки

 

Скомпилиро-

CHM

Файл, содержащий все элементы справочной системы.

ванный файл

 

 

В последних версиях Visual Studio (старше 6.0) добавлена поддержка автоматического создания контекстно-зависимой справки в формате HTML Help. Для этого при создании проекта необходимо установить флаг «Context-sensitive Help» и переключатель в положение «HTML Help». После этого в файлы проекта будет добавлена поддержка контекстной справки и созданы следующие файлы:

Таблица 1.5 – Файлы HTML Help

Файл

Описание

HTMLDefines.h

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

<имя_проекта>.hhp

Файл HTML Help для компилятора. Содержит директивы для компи-

 

ляции содержимого справки HTML Help.

<имя_проекта>.hhc

Файл для компилятора HTML Help. Задает содержание справки.

<имя_проекта>.hhc

Файл для компилятора HTML Help. Задает индекс (ключевые слова)

 

файла справки.

Main_index.htm

HTML-файл верхнего уровня. Здесь добавляются тематические разде-

 

лы справочной системы.

Документы справки

HTML-файлы с текстом справки - обычно один на тематический раз-

HTML Help

дел.

В MFC-приложениях обращение к HTML Help выполняется также, как и к файлу Win Help. Приложение предоставляет контекстно-зависимой справочной системе идентификаторы справки, и она отображает окно с соответствующим разделом справки.

http://do.ucoz.net

5

БГУИР: Дистанционное обучение (неофициальный сайт)

Альтернативными способами создания справки формата являются: 1) создание проекта справки в специализированном приложении «HTML Help Workshop», позволяющем, кроме непосредственного создания, преобразовать проект справки из формата Win Help; 2) копирование проекта справки из другого проекта Visual Studio. Для подключения проекта справки необходимо подключить в программе соответствующие файлы заголовков и добавить вызов в конструкторе программы вызов функции EnableHtmlHelp, обеспечивающих непосредственную поддержку HTML Help.

Несмотря на то, что файлы содержания и индекса являются текстовыми, для их редактирования уместно использовать приложение «HTML Help Workshop».

2 Задание

1)Разработать приложение управления базой данных учета прибыли от выполнения ремонтно-строительных работ. В разрабатываемом приложении обеспечить добавление, редактирование, удаление, поиск записей, а также просмотр всех записей из базы данных. В качестве СУБД необходимо использовать MS SQL Server 2005, количество полей в таблице не менее 4-х, типы полей разные. Доступ к данным осуществлять с использованием ODBC.

2)Написать для разработанного приложения руководство пользователя в форме контекстно-зависимой справки, обеспечив ее поддержку в программе.

3 Выполнение работы

3.1 Разработка алгоритма программы

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

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

Поле «Name»: строка (30 символов). Предназначено для хранения ФИО заказчика.

Поле «Address»: строка (30 символов). Предназначено для хранения адреса проведения ремонтно-строительных работ.

Поле «Phone»: строка (15 символов). Предназначено для хранения номера телефона заказчика.

Поле «Price»: число с плавающей запятой. Предназначено для хранения

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

приведенных в теории, формируется приложение, поддерживающее редактирование данных из БД. Исходя из задания, полученное приложение необходимо дополнить возможностью добавления, удаления, поиска записей, а также возможностью просмотра всех записей из базы данных. Реализация данных функций удоб-

http://do.ucoz.net

6

БГУИР: Дистанционное обучение (неофициальный сайт)

но осуществить с помощью стандартных функций классов MFC для работы с

ODBC.

Блок-схемы алгоритмов функций добавления новой записи и удаления текущей записи приведены на рисунке 3.1.

Рисунок 3.1 – Блок-схемы алгоритмов: а) функции добавления новой записи; б) функции удаления текущей записи

Для реализации поиска записей удобно применить средство фильтрации данных, используя возможности языка SQL для формирования требуемых запросов, благодаря чему обеспечивается возможность одновременного поиска по нескольким полям (вплоть до поиска по всем полям). Блок-схема алгоритма функции фильтрации (поиска) данных приведена на рисунке 3.2.

Рисунок 3.2 – Блок-схемы алгоритма функции фильтрации (поиска) данных

http://do.ucoz.net

7

БГУИР: Дистанционное обучение (неофициальный сайт)

Для реализации возможности просмотра всех записей таблицы удобно использовать стандартные возможности печати и предварительного просмотра, предоставляемые мастером создания приложений Visual Studio. С учетом этого, блоксхема алгоритма функции печати (просмотра) всех записей БД примет вид, представленный на рисунке 3.2.

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получение

 

 

 

 

Получение высоты

 

 

 

Вычисление

 

 

 

Перемещение на

 

 

 

информации о

 

 

 

 

 

 

 

параметров вывода

 

 

 

 

 

 

 

 

 

 

текста

 

 

 

 

 

 

первую запись БД

 

 

 

принтере

 

 

 

 

 

 

 

таблицы БД

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Перемещение на

Вывод строки

нет

следующую запись

Последняя

таблицы БД

запись?

БД

 

 

да

 

Загрузка данных из

 

 

 

 

Перемещение на

 

 

 

 

Вызов функции

 

 

переменных на

 

 

 

 

первую запись в

 

 

 

 

родительского

 

 

 

 

 

 

 

 

 

 

 

 

форму

 

 

 

 

БД

 

 

 

 

класса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод заголовка таблицы БД

Вычисление кол-ва строк на странице

Конец

Рисунок 3.3 – Блок-схемы алгоритма функции печати (просмотра) всех записей

3.2 Исходные тексты программы

3.2.1Заголовок класса CLab3_2Set (CLab3_2Set.h)

//Заголовок класса CLab3_2Set

#pragma once

class CLab3_2Set : public CRecordset

{

public:

CLab3_2Set( CDatabase* pDatabase = NULL ); // Стандартный конструктор

virtual CString GetDefaultConnect(); // Соединение с БД

virtual CString GetDefaultSQL(); // SQL-запрос выборки данных

virtual void DoFieldExchange(CFieldExchange* pFX); // Поддержка RFX

DECLARE_DYNAMIC( CLab3_2Set )

// Динамическое создание объекта

/* =================== */ /* Поля выборки данных */ long m_ID; CStringm_Name; CStringm_Address; CStringm_Phone;

double m_Price;

/* =================== */

};

3.2.2Реализация класса CLab3_2Set (CLab3_2Set.cpp)

//Реализация класса CLab3_2Set

#include "stdafx.h"

http://do.ucoz.net

8

БГУИР: Дистанционное обучение (неофициальный сайт)

#include "Lab3_2.h" #include "Lab3_2Set.h"

#ifdef _DEBUG

#define new DEBUG_NEW #endif

IMPLEMENT_DYNAMIC(CLab3_2Set, CRecordset) // Динамическое создание объекта

CLab3_2Set::CLab3_2Set( CDatabase* pdb )

:CRecordset(pdb)

//Стандартный конструктор

{

m_ID = 0;

m_Name = _T(""); m_Address = _T(""); m_Phone = _T(""); m_Price = 0.0; m_nFields = 5;

m_nDefaultType = dynaset;

}

CString CLab3_2Set::GetDefaultConnect() // Соединение с БД

{

return _T("ODBC;DSN=Lab3_2");

}

CString CLab3_2Set::GetDefaultSQL() // SQL-запрос выборки данных

{

return _T("[Works]");

}

void CLab3_2Set::DoFieldExchange( CFieldExchange* pFX ) // Поддержка RFX

{

pFX->SetFieldType( CFieldExchange::outputColumn );

// Указание, что все вызовы функций RFX являются полями

/* ============================================= */ /* Ассоциация полей выборки данных с переменными */ RFX_Long( pFX, _T("[ID]"), m_ID );

RFX_Text( pFX, _T("[Name]"), m_Name ); RFX_Text( pFX, _T("[Address]"), m_Address ); RFX_Text( pFX, _T("[Phone]"), m_Phone ); RFX_Double( pFX, _T("[Price]"), m_Price );

/* ============================================= */

}

3.2.3Заголовок класса CLab3_2Doc (CLab3_2Doc.h)

//Заголовок класса CLab3_2Doc

#pragma once

// Защита от повторных подключений заголовка

#include "Lab3_2Set.h"

class CLab3_2Doc : public CDocument

{

protected:

DECLARE_DYNCREATE( CLab3_2Doc ) // Динамическое создание объекта

DECLARE_MESSAGE_MAP()

http://do.ucoz.net

9

БГУИР: Дистанционное обучение (неофициальный сайт)

// Функция генерации карты сообщений

public:

CLab3_2Set m_lab3_2Set;

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

};

3.2.4Реализация класса CLab3_2Doc (CLab3_2Doc.cpp)

//Реализация класса CLab3_2Doc

#include "stdafx.h" #include "Lab3_2.h" #include "Lab3_2Set.h" #include "Lab3_2Doc.h"

#ifdef _DEBUG

#define new DEBUG_NEW #endif

IMPLEMENT_DYNCREATE( CLab3_2Doc, CDocument ) // Динамическое создание объекта

BEGIN_MESSAGE_MAP( CLab3_2Doc, CDocument )

//Функция генерации карты сообщений

END_MESSAGE_MAP()

3.2.5Заголовок класса CLab3_2View (CLab3_2View.h)

//Заголовок класса CLab3_2View

#pragma once #include "afxwin.h"

class CLab3_2Set;

class CLab3_2View : public CRecordView

{

protected: CLab3_2View();

//Стандартный конструктор

DECLARE_DYNCREATE( CLab3_2View )

//Динамическое создание объекта

virtual void DoDataExchange( CDataExchange* pDX ); // Поддержка DDX/DDV

virtual void OnInitialUpdate(); // Инициализация

virtual BOOL OnPreparePrinting( CPrintInfo* pInfo );

//Обработчик запуска предварительного просмотра или печати virtual void OnBeginPrinting( CDC* pDC, CPrintInfo* pInfo );

//Обработчик начала печати (задание количества страниц) void OnPrepareDC( CDC* pDC, CPrintInfo* pInfo );

//Обаботчик подготовки к печати

void OnPrint( CDC* pDC, CPrintInfo* pInfo ); // Обработчик печати

afx_msg void OnRecordNew();

//Обработчик команды создания новой записи afx_msg void OnRecordDel();

//Обработчик команды удаления записи

afx_msg void OnBnClickedButtonFilter(); // Обработчик кнопки "Применить фильтр"

afx_msg void OnUpdateRecordDel( CCmdUI *pCmdUI );

//Обработчик обновления пользовательского интерфейса для кнопки

//удаления записи

http://do.ucoz.net

10