
- •Insert Project Into Workspace..
- •VisualComponentManager
- •Типи майстрів проектів
- •Void cLab_04 1Dlg::OnDel()
- •Void cLab 04 1Dlg::OnOptimum()
- •Int NumCars; //Количество автомобілів
- •Void cLab 04 1Dlg::OnOpen()
- •Void cLab_06Dlg::OnReplace(nmhdr* pNmhdr, lresult* pResult)
- •Робота №1 Програмування лінійних алгоритмів
- •1.2. Функції бібліотеки math.Lib
- •1.4. Індивідуальні завдання
- •Работа №2 Програмування алгоритмів, що розгалужуються
- •2.1. Логічні операції і операції порівняння
- •3.5. Приклад виконання роботи
- •4.3. Індивідуальні завдання
- •5.2. Операції над покажчиками
- •5.5. Індивідуальні завдання
- •Int strlen(st) – повертає довжину рядка st.
- •Int atoi(st) – перетворить рядок st в число цілого типа (int).
- •Return вираження;
- •8.2. Передача параметрів
- •8.3. Перевантаження функцій і покажчик на функцію
- •Hanr(n-1,s1,s3,s2);
- •Hanr(n-1,s3,s2,s1);
- •9.3. Індивідуальні завдання
- •Робота №10 Програмування з використанням файлів
- •10.1. Організація роботи з файлами
- •I або I ( десяткове, вісімкове або шістнадцятиричне ціле;
- •Void s_qs(tStudent st[], int n)
- •11.3. Індивідуальні завдання
- •Робота №15 Програмування з використанням двусвязанных списків
- •15.1. Черги на основі двусвязанных списків
- •Методика оцінювання робіт студентів
- •Литература
Типи майстрів проектів
У середовищі 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 для розробки програм на мові С++. Отримати практичні навики з середовищем візуальної розробки програм.
Створення консольного застосування
-
Запускаємо Microsoft Visual C++ 6.0.
-
Створюємо консольне застосування:
-
File -> New -> Project -> Win 32 Console Application.
-
У полі Project name вписуємо ім'я проекту (lab_01).
-
У полі Location встановлюємо дорогу до проекту.
-
Клацаємо кнопку ОК.
-
Створюємо порожній проект (вибираємо An empty project).
-
Клацаємо кнопку Finish, потім ОК.
-
Додаємо файл в проект:
-
Вибираємо вкладку File View.
-
Клацаємо правою кнопкою миші по напису Lab_01 files (файли проекту).
-
Вибираємо пункт меню Add files to Project.
-
У вікні, що з'явилося, в полі File name пишемо ім'я вихідного файлу (lаЬ_01.срр) і клацаємо кнопку ОК.
-
Відповідаємо Yes на питання про додавання файлу в проект.
-
На вкладці File View розвертаємо Lab_01 files, а потім Source Files. Двічі клацаємо по створеному нами файлу lab_01.cpp і відповідаємо Yes на питання про створення файлу.
-
Записуємо в редакторові вихідної коди текст програми:
#include "iostream.h" //Підключити бібліотеку
void main() //Головна функція
{ //Операторні дужки
int а, b; //Об’явити змінні
cin >> а; //Прочитати а з клавіатури
b = а * 5; //Привласнити b значення а*5
cout << "Result = "; //Вивести рядок
cout << b << "\n"; //Вивести результат і перевести рядок
} //Кінець програми
-
Компілюємо і застосування, натискує клавішу F7. Аби запустити застосування, натискуємо комбінацію клавіш Ctrl+F5 або клацаємо по відповідному значку на панелі інструментів.
-
Тестуємо програму: вводимо ціле число і натискуємо Enter.
-
Отримуємо правильний результат (а * число).
Результат роботи програми
Створення застосування Win32
-
Вибираємо пункт головного меню File -> New -> Project -> Win32 Application.
-
Встановлюємо ім'я (lab_01_win32) і дорогу так само, як і при створенні консольного застосування.
-
Клацаємо кнопку ОК.
-
Вибираємо An empty project (порожній проект) клацаємо кнопку Finish, потім ОК.
-
Компілюємо і намагаємося запустити застосування.
-
Бачимо на екрані повідомлення про неможливість виконати програму.
Не дивлячись на всі наші зусилля, програма не працює. А все тому, що ми створили порожній проект, який не містить програмного коду. Тому додаємо в проект файл, як це було зроблено в п.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. Якщо цього не зробити, то проект не збереться. Аби наша програма запустилася, потрібно:
-
Вибрати пункт головного меню Project -> Settings...
-
У полі Settings For вибрати пункт All Configurations
-
У полі Microsoft Foundation Classes вибрати пункт Use MFC in Shared DLL.
-
Натискувати кнопку ОК.
І лише після цього ми зможемо відкомпілювати і запустити наше застосування - порожнє вікно із заголовком "lab_01_win32". Результат на малюнку:
Створення MFC застосування
-
Вибираємо пункт головного меню File -> New -> Project -> MFC AppWizard(exe).
-
Встановлюємо ім'я (lab_01_mfc) і дорогу так само, як і при створенні консольного застосування.
-
Клацаємо кнопку ОК.
-
Вибираємо Single Document (один документ) і клацаємо кнопку Next «до перемоги». Потім клацаємо кнопку Finish, потім ОК.
-
Компілюємо і запускаємо застосування.
-
Бачимо на екрані вікно застосування з набором стандартних пунктів меню і стандартною ж панеллю інструментів.
-
Тестуємо застосування: багато пунктів меню і кнопки на панелі інструментів не працюють, оскільки для них не прописані методи.
-
Закриваємо застосування і на вкладці Class знаходимо клас вигляду (у нашому випадку це пункт Clab_01_mfcView).
-
У цьому класі знаходимо метод 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++. Отримати практичні навики роботи по використанню графічного інтерфейсу. Навчитися пов'язувати змінні і методи з елементами діалогового вікна.
-
Створюємо порожній проект 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";
}
-
Створюємо застосування за допомогою MFC AppWizard(exe) з діалоговим вікном як головний і реалізуємо в нім програму з п.1
-
Створюємо новий проект як завжди.
-
Вибираємо MFC AppWizard(exe).
-
У наступному діалоговому вікні вибираємо типа застосування. У нашому випадку це буде 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 - вивести дані.
-
Удосконалюємо програму з п.2, додаючи підрахунок вартості декількох поїздок
Додаємо елемент для введення даних і пов'язуємо з ним змінну m_edNum. А формула буде такою:
m_edResult = (m_edWay/100)*m_edLitres*m_edPrice*m_edNum;
-
Удосконалити отриману програму, додавши кнопку, по натисненню на яку в редактори виводяться заздалегідь визначені значення (Відстань = 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++.
-
Вирішити завдання: У гаражі є 4 різних автомобіля (ВАЗ, Газель, ГАЗ-66, Мерседес), кожен автомобіль має свою витрату палива на 100 км. дороги, а також свою вартість палива. Програма повинна обчислювати вартість поїздки для заданої машини. Реалізувати, використовуючи прапорці і перемикачі, операторів if і switch
Розміщуємо на формі чотири перемикачі (Radio Button): ВАЗ, Газель, ГАЗ-6 6 і Мерседес. Для кожного з цих перемикачів нам потрібно визначити подію - в нашому випадку це буде клацання лівою кнопкою миші. Визначити подію можна, наприклад, так:
-
Клацнути правою кнопкою по перемикачу ВАЗ.
-
Вибрати пункт Events.
-
У полі Class or object to handle вибрати IDC_RADI01.
-
У полі New Windows Massages/Events вибрати BN_CLICED.
-
Клацнути по кнопці Add and Edit.
-
У полі Member function name вписати ім'я події (у нашому випадку хай буде ONVAZ).
-
Клацнути кнопку ОК.
Елемент Radio Button - це залежний перемикач. Якщо на формі розмістити декілька таких елементів, то при клацанні на будь-якому з них даний елемент буде «включений», а останні автоматично «вимкнуться».
У редакторові вихідної коди впишемо наступне:
void CLab 03Dlg::OnVAZ()
{
m_edLitres = 6.5; //Расход палива
m_edPrice = 17.5; //Цена одного літра
UpdateData(0); //Вывести дані в редактори
}
Всі ці дії повторимо для кожного перемикача, замінюючи імена подій на відповідних для інших автомобілів і змінюючи значення змінних.
Розрахунок поїздки виконується так само, як і в попередній лабораторній роботі.
-
Удосконалити отриману в першому пункті програму, додавши режим заповнення даних для кожного автомобіля
Розміщуємо на формі чотири перемикачі: ВАЗ, Газель, ГАЗ-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); //Вывести дані в редактори
}
-
Удосконалити отриману програму: додати вантажопідйомність автомобілів і можливість вказувати вагу вантажу, що перевозиться. Програма повинна розрахувати оптимальний варіант за вартістю перевезення вантажу
Додаємо ще двох редакторів для введення даних: Вантажопідйомність (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++.
-
Створіть застосування за допомогою MFС AppWizard (exe), з діалоговим вікном як головне. Вирішити на основі даного застосування завдання з лабораторної роботи №3 У гаражі є декілька різних автомобілів (наприклад: Ваз, Газель, Газ-66, Мерседес), кожен автомобіль має свою витрату палива на 100 км. дороги, а також свою вартість палива. Програма повинна обчислювати вартість поїздки для заданої машини. Використовувати списки і комбіновані поля. Для зберігання даних використовувати масиви або структуру даних
-
Удосконалити отриману в першому пункті програму, додавши режим заповнення даних для кожного автомобіля. При створенні програми мати на увазі, що кількість автомобілів заздалегідь не відома, заповнювати список марок автомобілів в ході виконання програми. Передбачити можливість видалення марок авто із списку
-
Удосконалити отриману програму додати вантажопідйомність автомобілів, і можливість вказувати вагу вантажу, що перевозиться. Програма повинна розрахувати оптимальний варіант за вартістю перевезення вантажу
-
Удосконалити отриману програму. Програма повинна виконувати розрахунок і виводити результати і вихідні дані по клацанню на елемент списку або комбінованого поля
Виконаємо всі завдання в одній програмі.
Створюємо редактор (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);
}
}
А тепер для кнопки ВИДАЛИТИ: