Площадь треугольника
Площадь — часть поверхности, ограниченная замкнутым контуром, одна из количественных характеристик плоских геометрических фигур и поверхностей.
Периметр треугольника
Периметр (др.-греч. περίμετρον — окружность, др.-греч. περιμετρέο — измеряю вокруг) — общая длина границы фигуры (чаще всего на плоскости). Имеет ту же размерность величин, что и длина. Иногда периметром называют границу геометрической фигуры.
Треугольник
Треугольник — простейший многоугольник, имеющий 3 вершины (угла) и 3 стороны; часть плоскости, ограниченная тремя точками, и тремя отрезками, попарно соединяющими эти точки.
Если все три точки треугольника лежат на одной прямой, он называется вырожденным.
Цель работы
Овладеть практическими навыками программирования с использованием мастера классов. Освоить принцип работы диалоговых окон.
Задача программы
В меню программы создать 3 пункта: ввод, результаты, выход. При выборе пункта меню ввод открывать диалоговое окно с 3-мя полями для ввода соответствующим 3-м сторонам треугольника. При выборе пункта меню «результаты» открывать диалоговое окно с результатами вычислений площади и периметра заданного треугольника. При выборе пункта меню «выход» производить выход из программы.
Cкриншот работы программы
Ход выполнения задачи программы
Создаем пункты меню по выбору которых будут открываться различные диалоговые окна. Для этого изменяем ресурс Menu
Создаем диалоговые окна которые будут открыты при выборе пунктов меню. Так как любым диалоговым окном проще управлять через класс, то следует создать класс на основе классаCDialog из библиотеки MFC. Для этого в окне “Class View” добавляем новый класс
Создаем MFC Class и мастеру создания классов указываем имя нашего класса и имя базового класса. Мастер автоматически создаст несколько файлов и в ресурсы добавит диалоговое окно. Созданный заголовочный файл в дальнейшем придется подключать к основному вручную.
Проделав это действие 2 раза получаем 2 диалоговых окна, отредактировать которые можно в ресурсах. Первое диалоговое окно будет играть роль формы для ввода данных.
Для того что бы получить информацию из элементов “Edit Control”, которые во время работы программы пользователю нужно будет заполнить, нам необходимо связать каждый из них с переменными в классе этого диалогового окна. В окне мастера следует только заполнить поле“Variable name”.
Завершив с визуальным редактированием диалоговых окон их необходимо связать с пунктами в меню, сделать так что бы при выборе пункта меню открывался нужный нам диалог. Для этого необходимо добавить обработчик события выбора соответствующего пункта меню.
В окне мастера следует только указать главный класс приложения (обычно он называется CпроектApp, где “проект” это название вашего проекта).
К сожалению описывать процедуру открытия диалогового окна следует вручную.
Для того что бы открыть диалоговое окно следует создать объект класса диалогового окна и вызвать метод DoModal(). Получается следующий код:
1 | void Claba3App::OnFileEnter() |
В таком виде компилятор будет жаловаться на тип CMyDialog, поэтому следует подключить заголовочный файл описывающий этот класс.
#include “MyDialog.h”
Теперь для того что бы данные введенные пользователем сохранялись следует описать событие“Нажатие на кнопку ОК”.
01 | void CMyDialog::OnBnClickedOk() |
06 | Aedit.GetWindowText(tmp); |
08 | BEdit.GetWindowText(tmp); |
10 | CEdit.GetWindowText(tmp); |
12 | theApp.SetPerimiter(a+b+c); |
14 | theApp.SetSquare( sqrt (p*(p-a)*(p-b)*(p-c))); |
Введенные пользователем данные не хранятся в чистом виде, они сразу обрабатываются и записывается только результат обработки, для того что бы не производить вычисления каждый раз при запросе результатов (запрос исходных данных не был предусмотрен заданием). Приведенная функция использует методы объекта theApp SetPerimiter и SetSquare. Они были добавленны в класс приложения для сохранения результатов вычислений.
Для реализации работы дилогового окна показывающего результаты вычислений необходимо изменять содержимое этого диалогового окна при его открытии, создании. Проще всего это сделать перегрузив виртуальную вункцию базового класса OnInitDialog().
В обьявлении класса CCalcDlg:
afx_msg BOOL OnInitDialog();
В определении класса CCalcDlg:
01 | void CMyDialog::OnBnClickedOk() |
03 | BOOL CClacDlg::OnInitDialog() |
06 | CDialog::OnInitDialog(); |
09 | double tt = theApp.GetPerimiter(); |
10 | tmp.Format(L "%f" , tt); |
11 | perimiter.SetWindowText(tmp); |
13 | tmp.Format(L "%f" , theApp.GetSquare()); |
14 | square.SetWindowText(tmp); |
Следует обратить внимание на то что в первую очередь необходимо вызвать этот метод в базовом классе, иначе во время работы произойдет ошибка в функции SetWindowText из библиотеки MFC, потому как она будет вызвана для еще непроинициализированного обьекта.
Выводы из проделанной задачи программы
Проделав данную работу, мы отметили для себя основные преимущества и недостатки использования мастеров для генерации кода в Microsoft Visual Studio 2008.
К недостаткам можно отнести: если допустить описку в форме мастера, то получив неправильный результат его сложно исправить; код, полученный в результате работы мастера нельзя назвать чистым; с разными версиями MVS мастера очень сильно меняются. К достоинствам лишь то, что их использование может немного сократить время создания базовой архитектуры программы, описывать работу всех элементов и созданных классов придется исключительно вручную.
Содержание архива:
- .cpp файл
- отчет в формате .doc
- .exe файл в папке debug
Проект разработан в: Visual Studio 2008