Как написать калькулятор windows form
Уроки Windows Forms C++/C#
Калькулятор в Windovs Forms MVS C++
В этом уроке представлена реализация, пожалуй, одной из самых популярных программ, которой каждый день пользуется огромное количество людей. В одном из «уроков C++» рассматривался калькулятор на примере элемента выбора «switch: case». В этом проекте будут кнопки, обозначающие отдельные вычисления, так же, по мимо этого, будет присутствовать форма, на которой будут расположены кнопки, обозначающие какие-либо действия, которые мы опишем в коде. Для этого нам понадобятся: 9 “button”, 1 «label», 1 «PictureBox» и 3 «textbox» – в 1-ый и 2-й “textBox”ы пользователь будет записывать числа, затем нажимать кнопку действия, после чего в 3-ем «textBox» будет показан результат вычислений. Калькулятор будет выполнять все стандартные действия: сложение, вычитание, умножение, деление, возведение в степень, которую надо ввести самому, тем сам можно извлекать корень числа, написав во втором «textBox», например, 0,333 (кубический корень). Помимо этого калькулятор будет вычислять синус, косинус, тангенс и катангенс, если вы хотите чтобы он ещё вычислял арккосинус, арксинус и т.д, можете так же описать их – эти действия рассматриваются в «уроках C++». Теперь приступим к оформлению программы:
В «PictureBox» можно вставить, вот такую картинку:
О том как вставлять картинку в “PictureBox”, рассказывается в “’этом уроке”. Но картинка будет большой и не помещаться! Оставьте размер “PictureBox”,как и был, а в “Form1_Load” напишите: this->pictureBox1->SizeMode = PictureBoxSizeMode::StretchImage; После этого размер, загружаемой, картинки будет равен размеру “PictureBox”. По мимо этого нужно будет подключить библиотеку — #include «math.h» в самом верху кода, если не знаете как, то вы можете посмотреть это в предыдущем уроке. Так же картинку можно загружать программно – кодом, это подробно рассматривается в этом уроке. И здесь так же вызываем событие «KeyPress» у всех “textBox”ов по очереди. Если не знаете, как вызвать событие у элемента, то посмотрите “этот урок”. Что бы размер формы был фиксирован – нажмите на неё и выберите свойство: «FormBorderStyles»->»Fixed3D». Теперь приступим к коду программы, вот он:
#pragma endregion String^ TorZ; private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) < this->Text = «Калькулятор»; pictureBox1->Image=Image::FromFile(«d:\\12.0.jpeg»); this->pictureBox1->SizeMode = PictureBoxSizeMode::StretchImage; label1->Text = «Равно:»; button1->Text = «+»; button2->Text = «-«; button3->Text = «*»; button4->Text = «/»; button5->Text = «pow»; button6->Text = «sin»; button7->Text = «cos»; button8->Text = «tan»; button9->Text = «ctan»; TorZ = Globalization::NumberFormatInfo::CurrentInfo->NumberDecimalSeparator; > private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) < bool TZFound = false; if (Char::IsDigit(e->KeyChar) == true) return; if (e->KeyChar == (char)Keys::Back) return; if (textBox1->Text->IndexOf(TorZ) != -1) TZFound = true; if (TZFound == true) < e->Handled = true; return; > if (e->KeyChar.ToString() == TorZ) return; e->Handled = true; > private: System::Void textBox2_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) < bool TZFound = false; if (Char::IsDigit(e->KeyChar) == true) return; if (e->KeyChar == (char)Keys::Back) return; if (textBox2->Text->IndexOf(TorZ) != -1) TZFound = true; if (TZFound == true) < e->Handled = true; return; > if (e->KeyChar.ToString() == TorZ) return; e->Handled = true; > private: System::Void textBox3_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) < bool TZFound = false; if (Char::IsDigit(e->KeyChar) == true) return; if (e->KeyChar == (char)Keys::Back) return; if (textBox3->Text->IndexOf(TorZ) != -1) TZFound = true; if (TZFound == true) < e->Handled = true; return; > if (e->KeyChar.ToString() == TorZ) return; e->Handled = true; > private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = a + b; textBox3->Text = String::Format(«<0:f4>«, c); > private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = a — b; textBox3->Text = String::Format(«<0:f4>«, c); > private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = a * b; textBox3->Text = String::Format(«<0:f4>«, c); > private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = a / b; textBox3->Text = String::Format(«<0:f4>«, c); > private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = pow(a,b); // возвести a в степень b textBox3->Text = String::Format(«<0:f4>«, c); > private: System::Void button6_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0, d = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = sin(a*3.14/180); d = sin(b*3.14/180); // Если поле textBox пусто, то результатом будет 1 textBox3->Text = String::Format(» <0:f2>| <1:f2>«, c, d); > private: System::Void button7_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0, d = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = cos(a*3.14/180); d = cos(b*3.14/180); // Если поле textBox пусто, то результатом будет 1 textBox3->Text = String::Format(» <0:f2>| <1:f2>«, c, d); > private: System::Void button8_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0, d = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = tan(a*3.14/180); d = tan(b*3.14/180); // Если поле textBox пусто, то результатом будет 1 textBox3->Text = String::Format(» <0:f2>| <1:f2>«, c, d); > private: System::Void button9_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b, c = 0, d = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); c = 1/tan(a*3.14/180); d = 1/tan(b*3.14/180); // Если поле textBox пусто, то результатом будет 1 textBox3->Text = String::Format(» <0:f2>| <1:f2>«, c, d); > >; >
Результат:
Следующий урок >>
Как написать калькулятор windows form
Одна из задач, задаваемых студентам по программированию, это создание калькулятора. Раскрою вам небольшой секрет: немало практических, курсовых и лабораторных работ на C++, C# и Java можно и не делать самостоятельно – есть готовые решения в сети. Однако, я был несколько удивлен, что для такого распространенного задания, как визуальный калькулятор на C++ нет такого готового решения. Ну что ж, нет, так нет, давайте напишем его сами.
Итак, как в большинстве проектов, все начинается с создания приложения Windows Forms, а уже в нем – с редактирования формы. У нас получилась вот такая:
Проект для VS2015
В чем будем считать и хранить числа? Я выбрал тип double – точности его нам вполне хватит; это все же студенческая работа, а не для точных инженерных расчетов. Дальше определимся с тем, сколько чисел и операций будем хранить в памяти. Предположим, штук двадцать: тогда надо создать два массива – один для чисел, а другой для операций между ними.
Почему мы воспользовались указателями, а не просто создали глобальные переменные за пределами windows forms? Дело в том, что, использование глобальных переменных – это плохой тон при программировании, и очень часто преподаватели против данной практики студентов.
В нашей программе будут три основных метода: vvod — принимает цифру (нажатую кнопку) в качестве аргумента и добавляет её к числу. ravno — нажатие на кнопку равно — все считает, ravno2 — это нажатие на кнопку знака. Факториал, деление единицы на число и корень квадратные — там реализуются методы сразу при нажатии все обрабатывается.
Добавим также флаг для памяти:
И еще систему флагов:
Вот, например, как у нас будет выглядеть метод vvod():
Здесь мы проверяем, какая клавиша в нашем калькуляторе была нажата перед этим – цифра, арифметическая операция или знак равно. Далее получаем из текстбокса значение, конвертируем предыдущее из массива, конкатенируем строки, потом обратно в double и обновляем значение массива. Также в этом методе мы проверяем длину числа – мы поставили ограничение на 10 знаков.
Обработка кнопки равно – то есть метод вычисления – также не представляет сложности. Пользуясь оператором ветвления switch перебираем все варианты.
Также реализуем собственный класс для обработки ошибок. Зачем это надо? Дело в том, что мы оперируем с числами типа double, а они не выбрасывают некоторые стандартные исключения, например – деление на ноль. Также мы предусмотрим обработку переполнения и вычисления квадратного корня из отрицательного числа. На вход конструкторов этого класса будем принимать пару чисел. Выводятся ошибки при:
- взятии корня четной степени из отрицательного числа
- логарифмировании отрицательного числа и нуля
- делении на нуль.
- переполнении (калькулятор все же не бесконечный)
Также не забудем и обработку клавиши запятой. Для этого проверяем, есть ли она уже во введённом числе:
Вот такие основные моменты надо знать для написания данной программы. Ну а если вы не можете самостоятельно написать визуальный калькулятор на C++, то обратитесь ко мне. Актуальную цену за архив с готовой программой и исходниками с подробными комментариями в настоящий моент 500 рублей. Это будет проект в Visual Studio C++ 2010 — он откроется в любой другой версии студии не ниже 2010. Также есть проект для Visual Studio 2015.
Мой калькулятор реализует все основные функции: сложение, вычитание, деление, умножение, факториал, возведение в степень, извлечение квадратного корня, вычисление 1/x, функции памяти (занести в память, вывести содержимое памяти, очистить память).
Добавились новые функции в калькуляторе. А именно:
- Извлечение корня четной и нечетной степени из числа
- Вычисление логарифма по любому основанию
- Вычисление экспоненты
Если вам требуется реализация других функций, то это делается за отдельную плату. Пишите на почту up777up@yandex.ru, стучитесь vk.com/idup7, @upreadru или по другим контактам.
Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
статьи IT, си плюс плюс, visual studio, калькулятор
Калькулятор
Реализовать на базе Windows Forms программу “Калькулятор”, в которой должны быть реализованы следующие функции (и соответствующие им кнопки):
Ввод цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. Ввод разделительной точки.
Стирание последней введенной цифры.
Стирание всех цифр.
Арифметические операции +, -, /, *.
Операции с памятью (записать текущее число в память, вывести текущее число из памяти, очистить память).
Обработку ошибок в программе реализовать с помощью блока try catch.
помогите доработать код(а именно как реализовать операции с памятью и обработку ошибок?)
Калькулятор
Нужно написать программу обычного калькулятора в C#.
Калькулятор
Добрый день, скажите пожалуйста, как можно сделать в калькуляторе подсчёт выражений, например.
Калькулятор СИ
На платной основе ищу человека, который сможет срочно доделать калькулятор в си исправив несколько.
Калькулятор
Вот моя реализация калькулятора , может кому понадобиться using System; using.
Вложения
SimpleCalc.zip (59.1 Кб, 121 просмотров) |
Тематические курсы и обучение профессиям онлайн Профессия С#-разработчик (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |
три кнопки: MS (запись в память), MR (чтение из памяти), MC (очищение)
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
калькулятор
в C# плохо пишу, но мне надо написать калькулятор. есть несколько вопросов. знаю, что это самая.
Калькулятор
Доброго времени суток, делаю калькулятор програмиста но столкнулся с проблемой как мне добавлять.
А-ля калькулятор
Спасайте, программисты! Как сделать так, чтобы в калькуляторе при получении результата, с ним.
Калькулятор
Ребят, помогите, плиз. Нужно написать калькулятор типа стандартного в Windows, предусмотреть.