- •О.С. Зеленський
- •Розділ 9. Структура створення додатків
- •9.1. Загальна структура додатків
- •9.2. Додатки без використання архітектури «Документ-вид»
- •9.2.1. Приклад додатку реєстрації wnd-класу вікна
- •9.2.2. Створення та видалення дочірніх вікон без використання архітектури «Документ-Вид»
- •9.2.3. Створення дочірніх вікон без використання архітектури «Документ-Вид» (переключення вікон з використанням функції ShowWindow)
- •9.3. Архітектура «Документ-Вид»
- •Idr_mainframe формат строкового ресурсу.
- •9.3.1. Приклад додатку з використанням архітектури «Документ-Вид»
- •9.3.2. Види у архітектурі «Документ-Вид»
- •9.3.3. Створення видів у архітектурі «Документ-Вид» (переключення видів з використанням функції ShowWindow)
- •9.3.4. Робота з документами та видами на прикладі додатку SingleTemplate
- •9.4. Додатки mdi, робота з шаблонами
- •9.4.1. Приклад додатку mdi з одним шаблоном
- •9.4.2. Приклад додатку mdi з декількома шаблонами
- •Контрольні питання
- •Розділ 10. Робота з базами даних з використанням об'єктів ado
- •10.1.1. Ініціалізація об'єктів com з використанням директиви #import
- •10.1.2. Підтримка класів сом
- •10.2. Об'єкт Connection
- •10.3. Об'єкт Command
- •10.4. Об'єкт Recordset
- •10.5. Об'єкт Field і колекція Fields
- •10.6. Об'єкт Error і колекція Errors
- •10.8. Коротка характеристика структури мови sql
- •10.9. Синтаксис оператора вибору Select
- •10.10. Приклад програмування об'єктів ado
- •10.11. Опис розробленого навчального пакету ado6 для роботи з базами даних access та MySql
- •Int tip_bd; // тип бд 1- ms access, 2- MySql, 3 - xml
- •Void Connect_Baza(cString str);
- •Void ErrMessage(_com_error &ce);
- •If(pConn.CreateInstance("adodb.Connection"))
- •If(pRecordset.CreateInstance("adodb.RecordSet"))
- •Void cAdo6Doc::ErrMessage(_com_error &ce)
- •Void cAdo6Doc::OnMsaccess()
- •Void cAdo6Doc::OnMysql()
- •Void cAdo6Doc::OnXmlRead()
- •Void cAdo6Doc::Connect_Baza(cString str)
- •Virtual void DoDataExchange(cDataExchange* pDx);
- •Void cAdo6Dlg::DoDataExchange(cDataExchange* pDx)
- •Void cAdo6Dlg::Struct_MySql()
- •Void cAdo6Dlg::OnSelchangeListBaza()
- •Void cAdo6Dlg::OnVibor_bd()
- •Void cAdo6Dlg::AccessOpen()
- •Void cAdo6Dlg::xmlOpen()
- •Void cAdo6Dlg::Structura_bd()
- •Void cAdo6Dlg::OnSelchangeListTab()
- •Void cAdo6Dlg::show(int kod, int kod_bd)
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cAdo6Dlg::OnClose()
- •10.11.2. Формування списку бд (MySql), відкриття бази даних (ms access), відкриття xml-файлу, формування списку таблиць (MySql і ms access) та полів (MySql, ms access, xml)
- •Void cAdo6Dlg::OnSelchangeListTab()
- •1. Обрану таблицю необхідно брати в зворотні лапки "`", щоб виключити помилку в тому випадку, якщо в імені таблиці будуть зустрічатися пробіли.
- •10.11.3. Робота з sql-запитами
- •Void cAdo6Dlg::OnZapros_Select()
- •If (str_query.Mid(0,6).Compare("select"))
- •If(!baza.Left(3).Compare("otl") &&
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cado6Dlg::OnZapros_Make()
- •Vr_zap.Format(" Запрос выполнен за %f сек ",conec - nach);
- •10.11.4. Видалення, сортування, пошук, фільтрація, оновлення набору записів
- •Void cado6Dlg::OnZapis_Delete()
- •Void cado6Dlg::OnCheck_Sort()
- •Void cado6Dlg::OnFind()
- •0L,adSearchForward,bb);
- •Void cado6Dlg::OnFilter()
- •Void cado6Dlg::OnVozvrat()
- •10.11.5. Переходи по записах
- •Void cado6Dlg::OnButtonFirst()
- •Void cado6Dlg::OnButtonLast()
- •Void cado6Dlg::OnButtonLeft()
- •Void cado6Dlg::OnButtonRight()
- •Void cado6Dlg::OnButtonRecno()
- •Void cado6Dlg::OnButtonPgup()
- •Void cado6Dlg::OnButtonPgdn()
- •Void cado6Dlg::OnButtonBookmark()
- •10.11.6. Запис даних до xml-файлу
- •Void cAdo6Dlg::OnButtonSave()
- •10.11.7. Кнопки, призначені тільки для роботи з otl_tab
- •Void cado6Dlg::OnZapis_Add1()
- •Void cado6Dlg::OnZapis_Add2()
- •Void cado6Dlg::OnZapis_Update1()
- •Void cado6Dlg::OnZapis_Update2()
- •Void cado6Dlg::OnFormir_bd()
- •Void cAdo6Dlg::OnValues_Fields()
- •10.12. Використання у якості джерела даних електронної таблиці Excel
- •Контрольні питання
- •Завдання
- •Розділ 11. Програмування для інтернет
- •11.1. Створення броузера
- •11.3. Використання протоколу http
- •If ((pInternetSession)
- •11.4. Використання протоколу ftp
- •Контрольні питання
- •Розділ 12. Створення елементів activex
- •12.1. Створення елементів ActiveX
- •Invalidate();
- •12.2. Тестування елемента ActiveX
- •12.4. Створення елемента ActiveX на базі стандартних елементів
- •12.5. Відображення елементів ActiveX
- •Контрольні питання
- •Розділ 13. Налагодження програм
- •Int data[5];
- •Invalidate();
- •13.3. Установка точки переривання
- •13.2. Покрокове виконання програми
- •13.4. Перевірка значень змінних під час виконання програми
- •Контрольні питання
- •Список літератури
- •Додатки
Контрольні питання
1. Призначення програми ActiveX Control Test Container.
2. Яким чином створюються елементи ActiveX?
3. Розкрийте методику тестування елементу ActiveX.
4. Яким чином відобразити елементи ActiveX?
5. Розкрийте сутність створення елементу ActiveX на базі стандартних елементів.
6. Який клас є базовим для створення елементу ActiveX?
Розділ 13. Налагодження програм
Налагодження програм є одним з важливих питань при розробці програмного забезпечення на Visual C++.
Приклад знаходиться у папці DISK\Naladka\buggy.
Створимо програму, яка містить кілька помилок (вона буде назватися buggy), а потім подивимося, як за допомогою відладчика знайти і виправити ці помилки. Зокрема, ми навчимося встановлювати у програмі точки переривання і виконувати її до заданої точки. Коли під час виконання зустрічається точка переривання, програма зупиняється, а на екрані з'являється програмний код із налаштуванням. Це дає можливість детально з'ясувати, що відбувається у програмі.
Крім того, програму можна виконувати послідовно, рядок за рядком – такий процес називається покроковим виконанням. Цей режим дозволяє стежити за тим, як змінюються значення різних змінних, іноді він допомагає зрозуміти, в чому полягає проблема, – якщо змінна отримує несподіване значення, швидше за все, у програмі допущена помилка. Після того як помилки будуть виявлені, їх можна виправити і заново налагодити програму.
Створимо програму buggy та налагодимо її.
13.1. Робота у відладчику Visual C++
Програма buggy, яку ми розглядаємо в цьому уроці, визначає середнє арифметичне перших п'яти додатних цілих чисел: 1-5. Як неважко здогадатися, відповідь має бути 3, однак до повного завершення налагодження ми отримаємо кілька інших варіантів.
За допомогою АррWizard створимо однодокументну (SDI) програму:
1. Для зберігання п'яти цілих чисел ми скористаємося масивом data. Почнемо зі включення цього масиву в заголовний файл документа:
// buggyDoc.h : інтерфейс класа CBuggyDoc
.............................................................
public:
Int data[5];
.............................................................
2. Вихідні числа будуть заноситися в масив у конструкторі документа:
CBuggyDoc::CBuggyDoc()
{
data[0] = 1;
data[1] = 2;
data[2] = 3;
data[3] = 4;
data[4] = 5;
}
3. Можна приступати до обчислень. За допомогою редактора меню додайте нове меню Calculate (вставте його між File і Edit) з єдиною командою – Calculate Average.
4. Скористайтеся Class Wizard і створіть у програмі обробник для цієї команди:
void CBuggyView::OnCalculateCalculateaverage()
{
}
5. Наша програма повинна обчислювати середнє арифметичне і виводити його у вікні. Перш за все необхідно отримати вказівку на об'єкт документа, оскільки вихідні дані зберігаються саме в ньому:
void CBuggyView::OnCalculateCalculateaverage()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
.............................................................
}
6. Далі ми створимо робочі змінні. Щоб знайти середнє арифметичне, слід підсумовувати числа і розділити суму на кількість чисел. Нам знадобляться дві змінні, Sum та Average:
void CBuggyView::OnCalculateCalculateaverage()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
float Sum;
float Average;
.............................................................
}
7. Обчислення суми п'яти чисел буде відбуватися в наступному циклі:
void CBuggyView::OnCalculateCalculateaverage()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
float Sum;
float Average;
for(int loop_index = 1; loop_index < 5; loop_index++)
{
Sum += pDoc->data[loop_index];
}
.............................................................
}
8. Щоб обчислити середнє арифметичне, розділимо суму на 5:
void CBuggyView::OnCalculateCalculateaverage()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
float Sum;
float Average;
for(int loop_index = 1; loop_index < 5; loop_index++)
{
Sum += pDoc->data[loop_index];
}
Average = Sum / (float) 5.0;
.............................................................
}
9. Нарешті, ми поміщаємо результат в рядок OutputString і виводимо його на екран:
void CBuggyView::OnCalculateCalculateaverage()
{
CBuggyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
float Sum;
float Average;
for(int loop_index = 1; loop_index < 5; loop_index++)
{
Sum += pDoc->data[loop_index];
}
Average = Sum / (float) 5.0;
OutputString.Format(
"Среднее арифметическое пяти чисел равно: %.3f",
Average);