Visual C++. Лабораторная работа № 3.
Создание графического интерфейса на базе диалогового окна VC++, с использованием
переключателей, флажков. Реализация разветвляющихся алгоритмов.
- Цель работы:
- Научиться разрабатывать и реализовывать программы на основе разветвляющихся
алгоритмов, с использованием флажков и переключателей, а также операторов if и
switch. Получить практические навыки работы по использованию различных элементов
графического интерфейса и операторов языка VC++.
1. Решить задачу: В гараже имеется 4 различных автомобиля (ВАЗ, Газель,
ГАЗ-66, Мерседес), каждый автомобиль имеет свой расход топлива на 100 км пути, а
также свою стоимость топлива. Программа должна вычислять стоимость поездки для
заданной машины. Реализовать, используя флажки и переключатели, операторы if и switch
Размещаем на форме четыре переключателя (Radio Button): ВАЗ, Газель, ГАЗ-66 и
Мерседес. Для каждого из этих переключателей нам нужно определить событие - в
нашем случае это будет щелчок левой кнопкой мыши. Определить событие можно,
например, так:
- Щелкнуть правой кнопкой по переключателю ВАЗ.
- Выбрать пункт Events.
- В поле Class or object to handle выбрать IDC_RADIO1.
- В поле 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); //Вывести данные в редакторы
}
Все эти действия повторим для каждого переключателя, заменяя имена событий на
соответствующие для других автомобилей и изменяя значения переменных.
Расчет поездки выполняется так же, как и в предыдущей лабораторной работе.
Да простит меня преподаватель, но я не увидел надобности использовать в данной
программе операторы if и switch. Разве что для тренировки…
2. Усовершенствовать полученную в первом пункте программу, добавив режим
заполнения данных для каждого автомобиля
Здесь попытаемся сделать все "по взрослому". Размещаем на форме четыре
переключателя: ВАЗ, Газель, ГАЗ-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); //Вывести данные в редакторы
}
Если я правильно понял условие задачи, то можно считать, что она решена: в
редакторы можно ввести любые данные и нажать кнопку РЕЗУЛЬТАТ.
3. Усовершенствовать полученную программу: добавить грузоподъемность
автомобилей и возможность указывать вес перевозимого груза. Программа должна
рассчитать оптимальный вариант по стоимости перевозки груза
Добавляем еще два редактора для ввода данных: Грузоподъемность (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 - переменная, связанная с группой переключателей.
О трудностях: не сразу додумался, что строку
x = float(m_edWeight) / float(m_edTonnage)
нужно писать именно в таком виде. Сначала сделал вариант
x = float(m_edWeight / m_edTonnage)
который, как ни странно, возвращал целое значение. На рисунке представлен
результат работы программы: