- •Кафедра вычислительных систем и программирования высокоуровневые методы информатики и программирования
- •Санкт-Петербург
- •1.Общие положения по организации
- •2. Программирование информационной мини-системы управления методом процедурно-ориентированного программирования (тема 2).
- •2.1. Постановка задачи и проектирование программы
- •2.2. Реализация программы
- •Vyvod(cout, client);
- •Vyvod(outprintf, client);
- •Void dobzap(fstream &dobf)
- •Int tabn;
- •Int operator!(); //элемент-функция класса
- •Int akt::operator!()
- •4. Блоки лабораторных работ по разделу «Объектно-
- •4.1. Блок по теме «Создание Windows-приложений»
- •4.2. Блоки по теме «Управление многооконными
- •4.2.1. Блок «Ввод/вывод информации»
- •Int k;//номер текущей вводимой строки
- •Invalidate();
- •If (!cursor)//если курсор еще не создан, надо создать.
- •Int X,y;//объявить переменные для хранения координат мыши
- •4.2.2. Меню, акселераторы, кнопки
- •Invalidate();
- •Invalidate(); }
- •4.2.3. Диалоговые окна
- •Invalidate();
- •4.2.4. Управление файловой обработкой
- •Invalidate(); //при вводе символа вид объявл. Не действительным
- •Void AddText(uint text) {data.AppendChar(text);} //доб. В конец стр.
- •Invalidate(); //при вводе символа вид объявл. Не действительным
- •Void Serialize(cArchive& archive);//прототип переопред. Функции
- •Void cData::Serialize(cArchive& archive)
- •If (archive.IsStoring())
- •Implement_serial(cData, cObject, 0)//класс,баз. Класс,номер
- •Invalidate();
- •Invalidate();
- •5.2. Блок по теме «Поддержка баз данных»
- •If (m_Add) //если true, то добавление записи
- •5.3. Блок по теме «Программирование для Internet»
- •If (!pIs) //2 проверка подключения компъютера к Internet
- •If (!pIs) //3 проверка подключения
- •If (!pFc) //5 проверка соединения с ftp-узлом
- •6. Рекомендуемая литература
- •7. Содержание
Invalidate();
}
}
- Вывести строку :
void ClabServView :: OnDraw (CDC* pDC)
{
ClabServDoc* pDoc = GetDocument();
ASSERT_VALID (pDoc);
if(!pDoc)
return;
pDC -> TextOut(0, 0, pDoc->StringData);
}
В приложении имеются две функции OnDraw(): функция ClabServView::OnDraw() выводит объект на экран при редактировании на месте и при автономном приложении labServ; функция ClabServSrvrItem::OnDraw() выводит на экран неактивный объект.
Компиляция, запуск и тестирование приложения
- Скомпилировать приложение и запустить его на выполнение.
- Проверить алгоритм работы приложения-сервера ActiveX: работу диалогового окна с кнопкой и текстовым полем с выводом строки.
- Вставить в контейнер Contain сервер. Для этого выполнить следующие действия:
Запустить приложение labCont.
Выбрать команду Edit->Insert New Object. Появится диалоговое окно для внедрения или связывания объектов.
Выбрать новый объект labServ и нажать OK. Сервер будет вставлен в контейнер.
Для отмены редактирования на месте нажать Esc.
5.2. Блок по теме «Поддержка баз данных»
labDb «Создание приложения для работы
с базой данных»
Создание приложения для работы с базой данных на основе технологий ODBC или DAO требует выполнения следующих этапов:
- Установление доступа к базе данных. Этап заключается в регистрации заданной базы данных, как источника данных.
- Создание заготовки приложения. Этап выполняется автоматически с помощью мастера AppWizard при выполнении этапов настройки приложения с выбором технологии доступа к источнику данных ODBC или DAO.
- Реализация операций с базой данных. Этап выполняется с использованием классов MFC соответствующей технологии доступа к данным.
Цель работы - создание приложения, выполняющего операции с базой данных: просмотр, добавление, удаление.
Воспользуемся файлом db.mdb, который представляет собой базу данных, созданную в СУБД Access. Файл содержит сведения о студентах: Name (Имя), Grade (Курс). Файл можно скачать по адресу ftp://ftp.sybex.com/2120/vcpp.exe. Можно создать собственный файл в любой программе для работы с базами данных.
Пусть экранная форма отображения содержимого базы данных будет выглядеть следующим образом:
Untitled – labDb |
File Edit Record View Help |
[ ] [ ] [ ] [ ] [|<] [<] [>] [>|] |
Студенты: Имя Ann Группа B__ |
Установление доступа к базе данных
Для установления доступа к базе данных, как к источнику данных, выполнить следующие действия:
- Скопировать на диск файл db.mdb. Если создан собственный файл данных, то скопировать его.
- Щелкнуть последовательно Пуск->Панель управления-> Производительность и обслуживание ->Администрирование->Источники данных (ODBC). Последовательность вызовов зависит от версии Windows. Открывается окно Администратор источников данных ODBC.
- Выбрать вкладку Системный DSN и щелкнуть на кнопке Добавить. Появляется окно Создание нового источника данных. Выбрать из списка драйверов Microsoft Access Driver (*.mdb) и щелкнуть на кнопке Готово. Открывается окно Установка драйвера ODBC для Microsoft Access.
- Ввести имя источника данных Stud, а в описание – Im_Gr. Затем щелкнуть на кнопке Выбрать. Появляется окно Выбор базы данных.
- Выбрать файл базы данных db.mdb и щелкнуть на OK. Снова появляется окно Установка драйвера ODBC для Microsoft Access. Щелкнуть на OK. Появляется окно Администратор источников данных ODBC. Щелкнуть на OK и закрыть панель управления.
Итак, установлен доступ к файлу базы данных db.mdb (или к собстенному файлу) с помощью ODBC-драйвера Microsoft Access Driver (.mdb) с использованием имени источника данных Stud.
Создание проекта
Для создания проекта выполнить следующие этапы:
- Запустить Visual Studio 200
53 и в появившейся стартовой странице Start Page щелкнуть на кнопке Create Project. Появится диалоговое окно New Project.
- Выбрать в списке Project Types папку Visual C++ Project MFC, а в списке Templates – MFC Application. Ввести имя проекта labDb и проверить в поле Location имя папки для хранения проекта (labDb). Щелкнуть на кнопке OK. Появляется диалоговое окно MFC Application Wizard - labDb. Генератор приложений AppWizard потребует от пользователя выполнения 7 этапов (шагов) настройки создаваемого приложения.
- На вкладке Application Type выбрать Single Document, язык - английский (США) и Use MFC in static library.
- На вкладке Advanced Features снять флажки Printing and print preview, ActiveX controls, Common Control Manifest.
- На вкладке Database Support выбрать Database view with file support – генерирование базы данных с поддержкой файловых операций. Затем выбрать тип клиента ODBC и щелкнуть на кнопке Data Source. Появится окно Выбор источника данных (Select Data Source). В появившемся окне установить вкладку Источник данных компьютера, выбрать источник данных Stud и щелкнуть на OK. Откроется окно Вход для ввода имени и пароля, которое не заполнять. Щелкнуть на OK. Появится окно Select Database Object (Выбор объекта базы данных). Раскрыть узел Tables (Таблицы), выбрать students и щелкнуть на OK.
- Оставить по умолчанию остальные вкладки (шаги настройки), перейти на вкладку Overview и щелкнуть на кнопке Finish.
- Установить язык Русский. Для этого в окне Resource View открыть папку Dialog и щелкнуть на идентификаторе IDD_LABDb_FORM. В появившемся окне свойств Properties щелкнуть на свойстве Language и в списке справа выбрать значение Русский.
Реализация операции просмотра базы данных
Для реализации операции просмотра базы данных требуется выполнить этапы создания формы документа для отображения содержимого записей базы данных:
- Выбрать вкладку Resource View, открыть папку labDb.rc, затем, - Dialog. Щелкнуть дважды на идентификаторе диалогового окна IDD_LABDB_FORM. Открывается диалоговое окно в редакторе ресурсов. Выделить строку «TODO: ...» и удалить ее, нажав <Delete>.
- Добавить в диалоговое окно два текстовых поля (поля записи) со статическими надписями Name и Grade, а также надпись-заголовок Students согласно спроектированной экранной форме документа. Поля имеют идентификаторы IDC_EDIT1 и IDC_EDIT2.
- Изменить надписи элементов управления. Для этого открыть окно Properties, щелкнув правой кнопкой в свободной области окна. Щелкнуть на надписи поля 1 и ввести в Caption текст Имя. Аналогично ввести надписи Группа и Студенты:.
- Теперь необходимо связать текстовые поля (идентификаторы IDC_EDIT1 и IDC_EDIT2) с элементами- данными m_Name и m_Grade класса ClabDbSet, производного от класса CRecordSet, для организации обмена данными между текстовыми полями и источником данных. Для этого требуется внести следующие изменения.
-- Закомментировать в файле labDbSet.cpp сообщение об ошибке, связанной с использованием пароля, так как файл Microsoft Access не применяет доступ с использованием пароля:
//labDbSet.cpp
//#error Security Issue: …
-- Изменить типы элементов-данных m_Name и m_Grade с CStringW на CString из-за недостаточной надежности работы с типом CStringW:
//labDbSet.h
CString m_Name;
CString m_Grade;
-- Отредактировать функцию обмена данными DoDataExchange() класса представления ClabDbView:
//labDbView.cpp
void ClabDbView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
// you can insert DDX_Field* functions here to 'connect' your controls
// to the database fields, ex.
DDX_FieldText(pDX, IDC_EDIT1, m_pSet->m_Name, m_pSet);
DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_Grade, m_pSet);
// See MSDN and ODBC samples for more information
}
- Скомпилировать и запустить приложение. Выполнить операцию просмотра базы данных с помощью пиктограмм на панели инструментов или опций меню Record First Record, Previous Record, Next Record, Last Record. Можно изменить содержимое любого из двух полей базы данных, набрав новые данные и перейдя к другой записи.
Реализация операций добавления и удаления записей
Для реализации операций добавления и удаления записей базы данных необходимо сначала добавить в приложение команды Add Record и Delete Record:
- Выбрать вкладку Resource View, открыть папку Menu и щелкнуть дважды на меню IDR_MAINFRAME. Появится окно редактора меню.
- Открыть меню Record и щелкнуть на нижней пустой команде. Затем ввести Add Record и нажать Enter. Проверить в свойстве Caption значение Add Record, а в свойстве ID – значение ID_RECORD_ ADDRECORD.
- Аналогично ввести в следующую пустую позицию меню команду удаления Delete Record. Проверить в свойстве Caption значение Delete Record, а в свойстве ID – значение ID_RECORD_DELETERECORD.
Затем, необходимо создать заготовки функций-обработчиков для выполнения команд добавления и удаления записей:
- Открыть окно Class View и щелкнуть правой кнопкой мыши на классе ClabDbView. В появившемся контекстном меню выбрать команду Properties. Появляется окно Properties.
- Щелкнуть на кнопке Events и в появившемся списке идентификаторов раскрыть ID_RECORD_ADDRECORD (щелкнуть на +). Выбрать элемент COMMAND, затем раскрыть список справа и выбрать <Add> OnRecordAddrecord. Заготовка функции OnRecordAddrecord() добавляется в класс ClabDbView.
- Аналогично создать заготовку функции-обработчика OnRecordDeleterecord() для команды удаления.
Теперь необходимо написать тексты функций-обработчиков команд добавления и удаления записей:
- Объявить булевскую переменную-флажок для фиксации добавления записи (TRUE) или перемещения к следующей записи (FALSE). Для этого в окне Class View щелкнуть дважды на ClabDbView и в открывшемся файле labDbView.h добавить в класс переменную:
protected:
BOOL m_Add;
- Инициализировать переменную. Для этого в окне Class View щелкнуть дважды на конструкторе класса ClabDbView и вставить в конец конструктора:
m_Add=FALSE;
- Добавить текст функции OnRecordAddrecord():
void ClabDbView::OnRecordAddrecord()
{
m_pSet->AddNew(); //формирование пустой записи
m_Add=TRUE; //признак добавления записи
UpdateData(FALSE); //отображение пустой записи
}
- Переопределить функцию OnMove() в классе ClabDbView. Необходимо, чтобы функция кроме показа следующей записи сохраняла добавленную запись. В окне ClassView щелкнуть правой кнопкой мыши на ClabDbView и выбрать в контекстном меню команду Properties. В появившемся окне Properties щелкнуть на кнопке Override (Перегрузка), выбрать функцию OnMove() и в списке справа – элемент <Add> OnMove. Появляется заготовка функции OnMove().
- Добавить текст функции OnMove():
BOOL ClabDbView::OnMove(UNIT nIDMoveCommand)
{ //вызывается при переходе к другой записи