Лабораторная работа 13 vol 2. Построение и обоснование модели проекта
Скачать 0.61 Mb.
|
Лабораторная работа № 13-14Тема: Построение и обоснование модели проекта Цель: приобрести умение строить и формировать обоснование построения модели проекта; осуществлять постановку задач по обработке информации; проводить анализ предметной области; использовать алгоритмы обработки информации для различных приложений; решить прикладные вопросы программирования и языка сценариев для создания программ; разрабатывать графический интерфейс приложения; создавать и управлять проектом по разработке приложения; проектировать и разрабатывать систему по заданным требованиям и спецификациям. Ход работы Создадим проект графического приложения. Для этого выберите пункт «Создать проект». После этого откроется диалоговое окно создания нового проекта. Рисунок 1 – Окно создания проекта В поле «Имя проекта» вводим название ProstoCalculator, а затем нажимаем кнопку «Создать». Рисунок 2 – Настройки проекта После создания пустого проекта необходимо добавить новую форму в проекте. Для этого в окне проекта необходимо открыть контекстное меню созданного проекта и выбрать пункт «Добавить», затем выбрать пункт «Создать элемент» или нажать комбинацию клавиш Ctrl+Shift+A. Рисунок 3 – Добавление нового элемента В появившемся окне необходимо выбрать пункт «Форма Windows Forms», затем нажать кнопку «Добавить». Рисунок 4 – Добавление формы После добавления новой формы Visual Studio вывел на экран штатную ошибку, для ее устранения необходимо перезапустить Visual Studio и еще раз открыть ранее созданное решение. Рисунок 5 – Созданная форма После того, как форма загрузилась, необходимо произвести настройку вашего проекта. Для этого необходимо вызвать контекстное меню созданного проекта и выбрать пункт «Свойства» или нажать комбинацию клавиш Alt + ВВОД. Рисунок 6 – Свойства решения Так как мы готовим решение для операционной системы Windows с использованием графического интерфейса, необходимо в категории «Свойства конфигурации» выбрать категорию «Компоновщик», затем выбрать пункт «Система» и задать значение параметра «Подсистема» - «Windows (/SUBSYSTEM:WINDOWS)». Рисунок 7 – Изменение параметра «Подсистема» После внесенных изменений необходимо также определить точку входа при компиляции решения, для этого необходимо открыть категорию «Дополнить» и внести изменения в параметр «Точка входа». Рисунок 8 – Изменение параметра «Точка входа» После внесения всех изменений необходимо нажать кнопку «Применить», а затем кнопку «ОК». После сохранения всех изменений необходимо в исходный файл добавить следующий строки кода: #include "MyForm.h" using namespace System; using namespace System::Windows::Forms; [STAThreadAttribute] void Main(array { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); ProstoCalculator::MyForm form; Application::Run(% form); } На этом предварительные настройки решения завершены. Большую часть пространства Visual Studio занимает графический дизайнер, который содержит форму будущего положения. Пока она пуста и имеет только заголовок MyForm. Сбоку от формы находится окно файлов решения/проекта – SolutionExplorer (Обозреватель решений). Там и находятся все связанные с нашим приложением файлы, в том числе файлы формы MyForm.h. В противоположной стороне от обозревателя решений находится окно свойств – Properties. Так как в данный момент выбрана форма как элемент управления, то в этом поле отображаются свойства, связанные с формой. В окне свойств формы необходимо найти параметр Text и изменить его значение на «Калькулятор». Рисунок 9 – Изменение свойств формы Альтернативным методом задания свойств для формы является указание параметров формы в коде. Для этого необходимо дважды нажать на пустую форму. Visual Studio перенес в обработчик событий формы и сама задаст часть кода. В данный момент обработчик не выполняет никаких операций. Чтобы изменить название формы, используя обработчик событий, для этого необходимо добавить соответствующий код. Таким образом, код будет выглядеть следующим образом: private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { this->Text = "Калькулятор vol. 2"; } Запустим полученное решение на компиляцию и получим следующий результат. Рисунок 10 – Форма приложения Далее необходимо расположить элементы на форме: TextBox; Button: Label. После добавления элементов на форму, форма будет выглядеть следующим образом: Рисунок 11 – Обновленная форма приложения Далее через обработчик событий укажем названия кнопки, а также очистим элементы от значений по умолчанию. Для этого добавим в код следующие строки: button1->Text = "+"; label1->Text = String::Empty; textBox1->Clear(); textBox2->Clear(); Добавим параметр, который строго переместит курсор на элемент TextBox1 при запуске нашего решения: textBox1->TabIndex = 0; После компиляции решения получим следующее: Рисунок 12 – Обновленная форма приложения Добавим в код нашей программы несколько глобальных переменных Single firstNum; //Хранится первое число Single secondNum; //Хранится второе число Single result; //Хранится результат действий bool isNumber = true; //Проверка на число Создадим обработчик событий для кнопки. Для этого дважды нажмем на нее и перейдем к обработчику событий. В код добавим следующую часть кода, который проверяет данные, когда ввел пользователь. isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); После данного элемента кода необходимо добавить код, который производит математическую операцию: if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = firstNum + secondNum; label1->Text = String::Format("{0}+{1}={2}", firstNum, secondNum, result); } После добавления кода для операции сложения добавим операцию вычитания: для начала необходимо добавить Button, прописать в обработчике событий следующую строку. button2->Text = "-"; Таким образом, форма будет теперь выглядеть следующим образом: Рисунок 13 – Обновленная форма приложения После необходимо добавить код для операции вычитания: label1->ForeColor = Color::Black; isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = firstNum - secondNum; label1->Text = String::Format("{0}-{1}={2}", firstNum, secondNum, result); } После добавления кода для операции вычитания добавим операцию умножения: для начала необходимо добавить Button, прописать в обработчике событий следующую строку. button3->Text = "*"; Таким образом, форма будет теперь выглядеть следующим образом: Рисунок 14 – Обновленная форма приложения После необходимо добавить код для операции умножения: label1->ForeColor = Color::Black; isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = firstNum * secondNum; label1->Text = String::Format("{0}*{1}={2}", firstNum, secondNum, result); } После добавления кода для операции умножения добавим операцию деления: для начала необходимо добавить Button, прописать в обработчике событий следующую строку. button4->Text = "/"; Таким образом, форма будет теперь выглядеть следующим образом: Рисунок 15 – Обновленная форма приложения После необходимо добавить код для операции деления: label1->ForeColor = Color::Black; isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = firstNum / secondNum; label1->Text = String::Format("{0}/{1}={2}", firstNum, secondNum, result); } После добавления кода для операции деления добавим операцию функции cos(): для начала необходимо добавить Button, прописать в обработчике событий следующую строку. Button5->Text = "cos()"; Таким образом, форма будет теперь выглядеть следующим образом: Рисунок 16 – Обновленная форма приложения После необходимо добавить код для операции нахождения cos(): label1->ForeColor = Color::Black; isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = cos(firstNum*M_PI/180); result2 = cos(secondNum*M_PI/180); label1->Text = String::Format("cos({0})={1} cos({2})={3}", firstNum, result, secondNum, result2); } После добавления кода для операции функции cos() добавим операцию функции sin(): для начала необходимо добавить Button, прописать в обработчике событий следующую строку. button6->Text = "sin()"; Таким образом, форма будет теперь выглядеть следующим образом: Рисунок 17 – Обновленная форма приложения После необходимо добавить код для операции нахождения sin(): label1->ForeColor = Color::Black; isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = sin(firstNum*M_PI/180); result2 = sin(secondNum*M_PI/180); label1->Text = String::Format("sin({0})={1} sin({2})={3}", firstNum, result, secondNum, result2); } После добавления кода для операции функции sin() добавим операцию функции нахождения квадратного корня: для начала необходимо добавить Button, прописать в обработчике событий следующую строку. Button7->Text = "Кв. корень"; Таким образом, форма будет теперь выглядеть следующим образом: Рисунок 18 – Обновленная форма приложения После необходимо добавить код для операции нахождения квадратного корня: label1->ForeColor = Color::Black; isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = sqrt(firstNum); result2 = sqrt(secondNum); label1->Text = String::Format("Кв.корень({0})={1} Кв.корень({2})={3}", firstNum, result, secondNum, result2); } После добавления кода для операции функции квадратного корня добавим операцию функции нахождения возведения в степень: для начала необходимо добавить Button, прописать в обработчике событий следующую строку. Button8->Text = "x^y"; Таким образом, форма будет теперь выглядеть следующим образом: Рисунок 19 – Обновленная форма приложения После необходимо добавить код для операции возведения в степень: label1->ForeColor = Color::Black; isNumber = (Single::TryParse( textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, firstNum) && (Single::TryParse( textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, secondNum))); if (isNumber == false) { label1->Text = "Введены некорректные данные"; //Выводим сообщение на экран label1->ForeColor = Color::Red; return; } else { result = pow(firstNum, secondNum); label1->Text = String::Format("{0}^{1}={2}", firstNum, secondNum, result); } Далее изменим интерфейс таким образом, чтобы цифры не вводились в строку, а нажимались кнопки: добавим на форму цифры, а также кнопку ввода числа, удаление символа. Добавим соответствующий код для кнопок: button9->Text = "1"; button10->Text = "2"; button11->Text = "3"; button12->Text = "4"; button13->Text = "5"; button14->Text = "6"; button15->Text = "7"; button16->Text = "8"; button17->Text = "9"; button18->Text = "0"; button19->Text = "ВВОД"; button20->Text = "<-"; Для того, чтобы исключить возможность ввода добавим следующие строки textBox1->ReadOnly = true; textBox2->ReadOnly = true; Для переключения между TextBox добавим также переменную vvod vvod = true; Интерфейс теперь выглядит следующим образом: |