Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 Курс / Практика / metodichka_u_praktika.doc
Скачиваний:
3
Добавлен:
30.05.2020
Размер:
2.15 Mб
Скачать

Типи майстрів проектів

У середовищі Visual C++ можна будувати різних типів проектів. Такі проекти після їх створення можна компілювати і запускати на виконання. Фірма Microsoft розробила спеціальний інструментарій, що полегшує і прискорюючий створення проектів в середовищі 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 – майстер створення проекту консольного застосування. Консольна застосування – це програма, яка виконується з командного рядка вікна DOS або Windows і не має графічного інтерфейсу (вікон). Проект консольного застосування створюється порожнім, передбачаючи додавання файлів вихідного тексту в нього уручну.

Win32 Dynamic-Link Library – створення порожнього проекту бібліотеки, що динамічно підключається. Установки компілятора і компонувальника будуть налаштовані на створення DLL. Вихідні файли слід додавати уручну.

Win32 Static Library – цей засіб створює порожній проект, призначений для генерації статичної (об'єктною) бібліотеки. Файли з вихідним кодом в нього слід додавати уручну.

Робота № 1

Мета роботи:

Навчитися використовувати Microsoft Visual Studio для розробки програм на мові С++. Отримати практичні навики з середовищем візуальної розробки програм.

Створення консольного застосування

  1. Запускаємо Microsoft Visual C++ 6.0.

  2. Створюємо консольне застосування:

  • File -> New -> Project -> Win 32 Console Application.

  • У полі Project name вписуємо ім'я проекту (lab_01).

  • У полі Location встановлюємо дорогу до проекту.

  • Клацаємо кнопку ОК.

  • Створюємо порожній проект (вибираємо An empty project).

  • Клацаємо кнопку Finish, потім ОК.

  1. Додаємо файл в проект:

  • Вибираємо вкладку File View.

  • Клацаємо правою кнопкою миші по напису Lab_01 files (файли проекту).

  • Вибираємо пункт меню Add files to Project.

  • У вікні, що з'явилося, в полі File name пишемо ім'я вихідного файлу (lаЬ_01.срр) і клацаємо кнопку ОК.

  • Відповідаємо Yes на питання про додавання файлу в проект.

  1. На вкладці File View розвертаємо Lab_01 files, а потім Source Files. Двічі клацаємо по створеному нами файлу lab_01.cpp і відповідаємо Yes на питання про створення файлу.

  2. Записуємо в редакторові вихідної коди текст програми:

#include "iostream.h" //Підключити бібліотеку

void main() //Головна функція

{ //Операторні дужки

int а, b; //Об’явити змінні

cin >> а; //Прочитати а з клавіатури

b = а * 5; //Привласнити b значення а*5

cout << "Result = "; //Вивести рядок

cout << b << "\n"; //Вивести результат і перевести рядок

} //Кінець програми

  1. Компілюємо і застосування, натискує клавішу F7. Аби запустити застосування, натискуємо комбінацію клавіш Ctrl+F5 або клацаємо по відповідному значку на панелі інструментів.

  2. Тестуємо програму: вводимо ціле число і натискуємо Enter.

  3. Отримуємо правильний результат (а * число).

Результат роботи програми

Створення застосування Win32

  1. Вибираємо пункт головного меню File -> New -> Project -> Win32 Application.

  2. Встановлюємо ім'я (lab_01_win32) і дорогу так само, як і при створенні консольного застосування.

  3. Клацаємо кнопку ОК.

  4. Вибираємо An empty project (порожній проект) клацаємо кнопку Finish, потім ОК.

  5. Компілюємо і намагаємося запустити застосування.

  6. Бачимо на екрані повідомлення про неможливість виконати програму.

Не дивлячись на всі наші зусилля, програма не працює. А все тому, що ми створили порожній проект, який не містить програмного коду. Тому додаємо в проект файл, як це було зроблено в п.3 попереднього розділу. Потім прописуємо в цьому файлі наступний код:

#include "afxwin.h" //MFC Основні і стандартні компоненты

class CMainWnd : public CFrameWnd {

public : CMainWnd(); //Конструктор за умовчанням

};

CMainWnd::CMainWnd()

{

Create (NULL, "lab_01_win32", WS_OVERLAPPEDWINDOW, rectDefault

NULL, NULL); //Створити вікно програми

}

class CMyApp : public CWinApp {

public : CMyApp(); //конструктор за умовчанням

virtual BOOL InitInstance(); //стандартна ініціалізація };

CMyApp::CMyApp() //конструктор головного класу застосування

{}

BOOL CMyApp::InitInstance() //стандартнаи ініціалізація {

m pMainWnd=new CMainWnd(); //створити клас вікна ASSERT(m pMainWnd); //проверить його правильність

m pMainWnd->ShowWindow(SW SHOW); //Показати вікно m pMainWnd->UpdateWindow(); //Обновит вікно

return TRUE; //Вернути , що все нормально

};

CMyApp theApp; //запустити застосування

Але і це ще не все. Тепер потрібно набудувати проект так, щоб він використовував MFC. MFC знаходиться в DLL файлах. І якщо наш проект використовуватиме MFC, ми повинні це вказати для того, щоб компілятор міг підключити необхідні файли LIB із засланнями на функції в DLL. Якщо цього не зробити, то проект не збереться. Аби наша програма запустилася, потрібно:

  1. Вибрати пункт головного меню Project -> Settings...

  2. У полі Settings For вибрати пункт All Configurations

  3. У полі Microsoft Foundation Classes вибрати пункт Use MFC in Shared DLL.

  4. Натискувати кнопку ОК.

І лише після цього ми зможемо відкомпілювати і запустити наше застосування - порожнє вікно із заголовком "lab_01_win32". Результат на малюнку:

Створення MFC застосування

  1. Вибираємо пункт головного меню File -> New -> Project -> MFC AppWizard(exe).

  2. Встановлюємо ім'я (lab_01_mfc) і дорогу так само, як і при створенні консольного застосування.

  3. Клацаємо кнопку ОК.

  4. Вибираємо Single Document (один документ) і клацаємо кнопку Next «до перемоги». Потім клацаємо кнопку Finish, потім ОК.

  5. Компілюємо і запускаємо застосування.

  6. Бачимо на екрані вікно застосування з набором стандартних пунктів меню і стандартною ж панеллю інструментів.

  7. Тестуємо застосування: багато пунктів меню і кнопки на панелі інструментів не працюють, оскільки для них не прописані методи.

  8. Закриваємо застосування і на вкладці Class знаходимо клас вигляду (у нашому випадку це пункт Clab_01_mfcView).

  9. У цьому класі знаходимо метод OnDraw і замінюємо його наступним кодом:

void CLab 01 mfcView::OnDraw(CDC* pDC)

{

CString welcom = "Привіт, моє вікно!”; //Объявить змінну

CLab 01 mfcDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(0,0,welcom);//Вивести текст у вікно

}

Тепер це застосування виводитиме у вікно рядок "Привіт, моє вікно!”. Початок рядка виводиться в координати (0, 0) за допомогою методу TextOut. Результат на малюнку:

Робота № 2

Реалізація простої програми на VC++, з використанням графічного інтерфейсу і бібліотеки MFC (Windows Application на основі діалогового вікна).

Мета роботи:

Навчитися розробляти і реалізовувати прості програми на мові VC++. Отримати практичні навики роботи по використанню графічного інтерфейсу. Навчитися пов'язувати змінні і методи з елементами діалогового вікна.

  1. Створюємо порожній проект Console Application і реалізуємо в нім програму по обчисленню вартості поїздки на автомобілі

Для цього виконуємо ті ж дії, що і в лабораторній роботі № 1, лише при створенні проекту вибираємо Win32 Console Application.

Результат роботи програми

Потім у вихідний файл поміщаємо наступний код:

#include "iostream.h"

void main()

{

float km //Километраж

Litres, //Расход палива (л/100км)

Price; //Ціна одного літра палива

cout << "\n Way = "; //Вивести рядок

cin >> km; //Прочитати кілометраж

cout << "\n Litres = ";

cin >> Litres; //Прочитати витрата палива

cout << "\n Price = ";

cin >> Price; //Прочитати ціну одного літра

//Вивести результат

cout << "\n Result = " << (km/100)*Litres*Price << "\n";

}

  1. Створюємо застосування за допомогою MFC AppWizard(exe) з діалоговим вікном як головний і реалізуємо в нім програму з п.1

  1. Створюємо новий проект як завжди.

  2. Вибираємо MFC AppWizard(exe).

  3. У наступному діалоговому вікні вибираємо типа застосування. У нашому випадку це буде Dialog Based.

За допомогою миші і відповідної панелі інструментів створюємо на формі потрібні нам елементи: написи (Static Text), однорядкові редактори для введення-виведення даних (Edit Box) і кнопки. Аби розмістити компонент на формі (діалозі), потрібно клацнути по цьому компоненту на панелі Controls ; потім клацнути в тому місці форми, де потрібно розмістити компонент. Якщо панелі Controls на екрані чомусь немає, то дістаємо її таким чином: клацаємо правою кнопкою миші по головному меню і встановлюємо прапорець напроти пункту Controls.

Static Text

Після розміщення цього компонента на формі, клацаємо по ньому правою кнопкою і в полі Caption пишемо потрібне нам слово. Аби при виконанні програми правильно відображувалися символи російського алфавіту, потрібно на вкладці ResourceView відкрити теку Dialog і клацнути правою кнопкою по потрібному діалогу (у нашому випадку - IDD_LAB_02_2_DIALOG). Потім вибрати Properties (Властивості), в полі Language встановити російську мову і закрити діалог або натискувати клавішу Enter.

Edit Box

Для того, щоб ми могли працювати з даними, що вводяться в цей елемент, потрібно з цим елементом зв'язати змінну. А для цього викликаємо ClassWizard з меню View. Переходимо на вкладку Member Variable, виділяємо потрібний елемент і клацаємо по кнопці Add Variable.

У полі Member Variable Name вписуємо ім'я змінної, а в полі Variable Type вибираємо типа змінної. Ми працюватимемо з дійсними числами, тому вибираємо float.

Button

Поміщаємо на форму кнопку «Розрахувати», по натисненню на яку i проведений потрібний нам розрахунок. Для того, щоб програма зрозуміла, що на цю кнопку натискували, потрібно з цією кнопкою зв'язати метод (подія), яке відбувається після натиснення на кнопку. Це можна зробити: наприклад, двічі клацнувши по кнопці. Тоді відкриється редактор вихідної коди, а курсор буде встановлений на ділянку, що цікавить нас, куди ми впишемо наступний текст:

void CLab 02 2Dlg::OnButton1() //Подія для кнопки «Розрахувати»

{

UpdateData(1); //Получити дані з редакторів m_edResult = (m edWay/100)*m edLitres*m edPrice;

UpdateData(0); //Вивести дані в редактори

}

Тут функція UpdateData() або записує дані з редактор! змінні, або виводить значення змінних в редактори, залежно від отримуваного параметра: 1 - отримати дані, 0 - вивести дані.

  1. Удосконалюємо програму з п.2, додаючи підрахунок вартості декількох поїздок

Додаємо елемент для введення даних і пов'язуємо з ним змінну m_edNum. А формула буде такою:

m_edResult = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

  1. Удосконалити отриману програму, додавши кнопку, по натисненню на яку в редактори виводяться заздалегідь визначені значення (Відстань = 240 км., Витрата = 8,4 л/100км, Ціна = 16,5)

Додаємо кнопку «За умовчанням» і пов'язуємо з нею подію. Додаємо код:

void CLab 02 2Dlg::OnDefault()

{

medWay = 240; //Відстань

m_edLitres = 8.4; //Расход

m_edPrice = 16.5; //Ціна

m_edNum = 1; //Кількість поїздок

m_edResult = (m edWay/100)*m edLitres*m edPrice*m edNum; UpdateData(0); //Вивести дані в редактори

}

В результаті добросовісного виконання всіх пунктів отримаємо приблизно такий результат:

Робота № 3

Створення графічного інтерфейсу на базі діалогового вікна VC++, з використанням перемикачів, прапорців. Реалізація алгоритмів, що розгалужуються.

Мета роботи:

Навчитися розробляти і реалізовувати програми на основі алгоритмів, що розгалужуються, з використанням прапорців і перемикачів, а також операторів if і switch. Отримати практичні навики роботи по використанню різних елементів графічного інтерфейсу і операторів мови VC++.

  1. Вирішити завдання: У гаражі є 4 різних автомобіля (ВАЗ, Газель, ГАЗ-66, Мерседес), кожен автомобіль має свою витрату палива на 100 км. дороги, а також свою вартість палива. Програма повинна обчислювати вартість поїздки для заданої машини. Реалізувати, використовуючи прапорці і перемикачі, операторів if і switch

Розміщуємо на формі чотири перемикачі (Radio Button): ВАЗ, Газель, ГАЗ-6 6 і Мерседес. Для кожного з цих перемикачів нам потрібно визначити подію - в нашому випадку це буде клацання лівою кнопкою миші. Визначити подію можна, наприклад, так:

  1. Клацнути правою кнопкою по перемикачу ВАЗ.

  2. Вибрати пункт Events.

  3. У полі Class or object to handle вибрати IDC_RADI01.

  4. У полі New Windows Massages/Events вибрати BN_CLICED.

  5. Клацнути по кнопці Add and Edit.

  6. У полі Member function name вписати ім'я події (у нашому випадку хай буде ONVAZ).

  7. Клацнути кнопку ОК.

Елемент Radio Button - це залежний перемикач. Якщо на формі розмістити декілька таких елементів, то при клацанні на будь-якому з них даний елемент буде «включений», а останні автоматично «вимкнуться».

У редакторові вихідної коди впишемо наступне:

void CLab 03Dlg::OnVAZ()

{

m_edLitres = 6.5; //Расход палива

m_edPrice = 17.5; //Цена одного літра

UpdateData(0); //Вывести дані в редактори

}

Всі ці дії повторимо для кожного перемикача, замінюючи імена подій на відповідних для інших автомобілів і змінюючи значення змінних.

Розрахунок поїздки виконується так само, як і в попередній лабораторній роботі.

  1. Удосконалити отриману в першому пункті програму, додавши режим заповнення даних для кожного автомобіля

Розміщуємо на формі чотири перемикачі: ВАЗ, Газель, ГАЗ-66, Мерседес. Аби подровнять перемикачі, клацаємо на одному з них, а потім, натискує і утримуючи клавішу Ctrl, клацаємо по черзі на останніх. Вибираємо в головному меню пункт Layout -> Align -> Left. Таким чином, вирівнюємо елементи по лівому краю. Далі вибираємо Layout -> Space Evenly -> Down, встановлюючи, таким чином, однаковий інтервал між елементами.

Далі клацаємо правою кнопкою по першому перемикачу (ВАЗ) і вибираємо пункт Properties. Встановлюємо прапорець Group. Така установка означає, що перемикач ВАЗ є першим елементом групи перемикачів.

Події для перемикачів встановлюємо також як і попередньому завданню, лише у вихідний код додаємо рядок, який включає відповідний перемикач, оскільки тепер всі перемикачі належать групі:

void CLab 03Dlg::OnVAZ()

{

m_edLitres = 6.5; //Расход палива

m_edPrice = 17.5; //Цена одного літра

m_radio = 0; //Включить перший перемикач

UpdateData(0); //Вывести дані в редактори

}

Додаємо подію для кнопки РЕЗУЛЬТАТУ і пишемо код:

void CLab 03 2Dlg::OnResult()

{

UpdateData(1); //Получить дані з редакторів

M_edResult = (m edWay/100)*m_edLitres*m edPrice*m_edNum;

UpdateData(0); //Вывести дані в редактори

}

  1. Удосконалити отриману програму: додати вантажопідйомність автомобілів і можливість вказувати вагу вантажу, що перевозиться. Програма повинна розрахувати оптимальний варіант за вартістю перевезення вантажу

Додаємо ще двох редакторів для введення даних: Вантажопідйомність (m_edTonnage) і Вага вантажу (m_edWeight). Ці величини вимірюватимемо в кілограмах.

Оскільки користуватися масивами і структурами ми навчимося лише в лабораторній роботі № 4, то поступимо таким чином: аби мати можливість порівняти результати, створимо чотирьох редакторів і розташуємо їх відповідним чином напроти найменувань автомобілів. А змінні назвемо так: m_ResultVAZ, m_ResultGazel, m_ResultGAZ66 і m_ResultMers. Тоді в обробник події натиснення кнопки РЕЗУЛЬТАТУ (з врахуванням умови завдання) потрібно буде вписати такий код:

void CLab 03 3Dlg::OnResult()

{

float x; //Объявить змінну

UpdateData(1); //Получити дані з редакторів

if ( m_edTonnage != 0) //якщо вантажопідйомність більше нуля {

// Обчислити к-ть поїздок

M_edNum = int(m_edWeight / m_edTonnage); x = float(m_edWeight)/ float (m_edTonnage);

if ( m_edNum < x) m_edNum = m_edNum++;

//---Обчислити вартість поїздок

switch (m_radio)

{

case 0: m_ResultVAZ = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

case 1: m_ResultGazel = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

case 2: m_ResultGAZ66 = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

case 3: m_ResultMers = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

break;

}

}

UpdateData(0); //Вывести дані в редактори

}

Тут m_radio - змінна, пов'язана з групою перемикачів.

На малюнку представлений результат роботи програми:

Робота № 4

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

Мета роботи:

Навчитися користуватися списками і комбінованими полями, а також використовувати структури і масиви мови VC++. Отримати практичні навики по використанню різних елементів графічного інтерфейсу і операторів мови VC++.

  1. Створіть застосування за допомогою MFС AppWizard (exe), з діалоговим вікном як головне. Вирішити на основі даного застосування завдання з лабораторної роботи №3 У гаражі є декілька різних автомобілів (наприклад: Ваз, Газель, Газ-66, Мерседес), кожен автомобіль має свою витрату палива на 100 км. дороги, а також свою вартість палива. Програма повинна обчислювати вартість поїздки для заданої машини. Використовувати списки і комбіновані поля. Для зберігання даних використовувати масиви або структуру даних

  2. Удосконалити отриману в першому пункті програму, додавши режим заповнення даних для кожного автомобіля. При створенні програми мати на увазі, що кількість автомобілів заздалегідь не відома, заповнювати список марок автомобілів в ході виконання програми. Передбачити можливість видалення марок авто із списку

  3. Удосконалити отриману програму додати вантажопідйомність автомобілів, і можливість вказувати вагу вантажу, що перевозиться. Програма повинна розрахувати оптимальний варіант за вартістю перевезення вантажу

  4. Удосконалити отриману програму. Програма повинна виконувати розрахунок і виводити результати і вихідні дані по клацанню на елемент списку або комбінованого поля

Виконаємо всі завдання в одній програмі.

Створюємо редактор (EditBox) і пов'язуємо з ним змінну m_edAdd типа CString. Створюємо список ListBox, з яким зв'язуємо змінну m_lbGarage. Додаючи змінну для списку в полі Category потрібно вибрати значення Control. Створимо ще один список і пов'яжемо його із змінною m_lbResult. У цей список заноситимемо результати обчислень. Створимо також кнопки ДОДАТИ і ВИДАЛИТИ, за допомогою яких будемо добавлять/удалять елементи, і кнопку ЗАПАМ'ЯТАТИ, за допомогою якої записуватимемо дані в масиви.

На вкладці ClassView розкриваний Clab_04_1Dlg і двічі клацаємо OnInitDialog(). Переходимо в початок файлу і після директиви #e оголошуємо структуру і змінні:

struct Garage {

float Litres; //Витрата палива

float Price; //Цена одного літра

float Way; //Відстань

int Tonnage; //Вантажопідйомність

int Weight; //Вага вантажу

};

Garage car[10]; //Оголосити масив

float Result; //Оголосити змінну

int NumCars; //Кількість автомобілів в списку

Слід звернути увагу на крапку з комою після останньої фігурної дужки. При оголошенні структур і класів вона обов'язкова (на відміну від оголошення функцій).

Потім знову клацаємо двічі по OnInitDialog() і в тіло функції CLab_04_1Dlg::OnInitDialog() додаємо наступний код:

CDialog::OnInitDialog(); //Це додавати не треба (вже є)

// Додамо в список автомобілі

m_lbGarage.AddString("ВАЗ"); m_lbGarage.AddString("Газель"); m_lbGarage.AddString("ГАЗ-66"); m_lbGarage.AddString("Мерседес");

// Заповнюємо масив даних: ВАЗ

car[0].Litres = 8.5; car[0].Price = 15; car[0].Way = 100;

car[0].Tonnage = 400; car[0].Weight = 500;

//---Газель

car[1].Litres = 15; car[1].Price = 12; car[1].Way = 100;

car[1].Tonnage = 1500; car[1].Weight = 500;

// ГАЗ-66

car[2].Litres = 30; car[2].Price = 10; car[2].Way = 100;

car[2].Tonnage = 3500; car[2].Weight = 500;

// Мерседес

car[3].Litres = 10; car[3].Price = 17; car[3].Way = 100;

car[3].Tonnage = 500; car[3].Weight = 500;

NumCars = 4; //У нас доки чотири автомобілі

m_lbGarage.SetCurSel(0); //Вибрати 1-й елемент списку (ВАЗ)

// Вивести дані про Вазу в редактори

m_edLitres = car[0].Litres; m_edPrice = car[0].Price; m_edWay = car[0].Way;

m_edTonnage = car[0].Tonnage; m_edWeight = car[0].Weight; m_edNum = 2;

UpdateData(0);

Result = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

CString s; //Сформувати об'єкт класу CString

s.Format("%0.2f", Result); //Преобразовать число в рядок m_lbResult.AddString(s); m_lbResult.AddString("?"); m_lbResult.AddString("?"); m_lbResult.AddString("?");

Тут ми додали чотири автомобілі в список і записали інформацію про них в масив car. Потім виділили перший елемент списку і вивели відповідні дані в редактори, які були заздалегідь створені аналогічно попередньому завданню. Далі обчислили вартість поїздки для Ваза і заповнили другий список.

Обчислення результату проводитимемо безпосередньо в обробнику події, яка відповідає клацанню за списком автомобілів. Вибираємо подію LBN_SELCHANGE і пишемо там:

void CLab 04 1Dlg::OnGarage()

{

int x = m lbGarage.GetCurSel(); //Отримати позицію в списку m_edLitres = car[x].Litres; m_edPrice = car[x].Price; m_edWay = car[x].Way;

m_edTonnage = car[x].Tonnage; m_edWeight = car[x].Weight;

float z; //Объявить змінну

if (m edTonnage > 0) //Якщо вантажопідйомність більше нуля {

//---Обчислити к-ть поїздок

m_edNum = int(m_edWeight / m_edTonnage);

z = float(m_edWeight)/ float(m_edTonnage);

if (m_edNum < z) m_edNum = m_edNum++;

}

else m_edNum = 1;

Result = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

CString s; //Сформировать об'єкт класу CString s.Format("%0.2f", Result); //Перетворити число в рядок

m_lbResult.DeleteString(x); //Видалити рядок із списку m_lbResult.InsertString(x, s); //Вставити в сп. стор. з результатом m_lbResult.SetCurSel(x); //Виділити рядок

UpdateData(0);

Тепер по клацанню на списку програма обчислюватиме вартість поїздки для вибраного автомобіля і вставлятиме результат в другий список у відповідну позицію.

Далі додамо обробник для кнопки ДОДАТИ:

void CLab 0 4 1Dlg::OnAdd()

{

UpdateData(1); //Отримати дані if (m_edAdd != "" && NumCars < 10)

{

m_lbGarage.AddString(m edAdd); //Додати рядок в список

car[NumCars].Litres = m_edLitres;

car[NumCars].Price = m_edPrice;

car[NumCars].Way = m_edWay;

car[NumCars].Tonnage = m_edTonnage;

car[NumCars].Weight = m_edWeight;

float z; //Объявить змінну

if (m_edTonnage > 0) //Якщо вантажопідйомність більше нуля {

//---Обчислити к-ть поїздок

m_edNum = int(m_edWeight / m_edTonnage); z = float(m_edWeight)/ float(m_edTonnage); if ( m_edNum < z) m_edNum = m_edNum++;

}

else m_edNum = 1; car[NumCars].Num = m_edNum;

Result = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;

CString s; //Сформировать об'єкт класу CString

s.Format("%0.2f", Result); //Перетворити число в рядок m_lbResult.AddString(s); //Додати рядок в 2-й список m_lbGarage.SetCurSel(NumCars); //Виділити рядок m_lbResult.SetCurSel(NumCars); //Виділити рядок

NumCars++; //Збільшити к-ть автомобілів в списку

UpdateData(0);

}

}

Тепер по клацанню на списку програма обчислюватиме вартість поїздки для вибраного автомобіля, і вставляти результат в другий список у відповідну позицію.

Далі додамо обробник для кнопки ДОДАТИ:

void CLab 0 4 1Dlg::OnAdd()

{

UpdateData(1); //Получить дані if (m_edAdd != "" && NumCars < 10)

{

m_lbGarage.AddString(m edAdd); // Додати ь рядок в список

car[NumCars].Litres = m_edLitres;

car[NumCars].Price = m_edPrice;

car[NumCars].Way = m_edWay;

car[NumCars].Tonnage = m_edTonnage;

car[NumCars].Weight = m_edWeight;

float z; //Объявить змінну

if (m edTonnage > 0) //Если вантажопідйомність більше нуля {

//---Обчислити к-ть поїздок

m_edNum = int(m edWeight / m_edTonnage);

z = float(m_edWeight)/ float(m_edTonnage); if ( m edNum < z) m_edNum = m_edNum++;

}

else m_edNum = 1; car[NumCars].Num = m_edNum;

Result = (m edWay/100)*m_edLitres*m_edPrice*m_edNum;

CString s; //Сформировать об'єкт класу CString

s.Format("%0.2f", Result); //Перетворити число в рядок m_lbResult.AddString(s); //Додати рядок в 2-й список m_lbGarage.SetCurSel(NumCars); //Виділити рядок m_lbResult.SetCurSel(NumCars); //Виділити рядок

NumCars++; //Збільшити к-ть автомобілів в списку

UpdateData(0);

}

}

А тепер для кнопки ВИДАЛИТИ: