Как написать калькулятор windows form

Как написать калькулятор 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 task pane changer

Результат: Следующий урок >>

Как написать калькулятор windows form

Одна из задач, задаваемых студентам по программированию, это создание калькулятора. Раскрою вам небольшой секрет: немало практических, курсовых и лабораторных работ на C++, C# и Java можно и не делать самостоятельно – есть готовые решения в сети. Однако, я был несколько удивлен, что для такого распространенного задания, как визуальный калькулятор на C++ нет такого готового решения. Ну что ж, нет, так нет, давайте напишем его сами.

Итак, как в большинстве проектов, все начинается с создания приложения Windows Forms, а уже в нем – с редактирования формы. У нас получилась вот такая:


Проект для VS2015

В чем будем считать и хранить числа? Я выбрал тип double – точности его нам вполне хватит; это все же студенческая работа, а не для точных инженерных расчетов. Дальше определимся с тем, сколько чисел и операций будем хранить в памяти. Предположим, штук двадцать: тогда надо создать два массива – один для чисел, а другой для операций между ними.

Почему мы воспользовались указателями, а не просто создали глобальные переменные за пределами windows forms? Дело в том, что, использование глобальных переменных – это плохой тон при программировании, и очень часто преподаватели против данной практики студентов.

В нашей программе будут три основных метода: vvod — принимает цифру (нажатую кнопку) в качестве аргумента и добавляет её к числу. ravno — нажатие на кнопку равно — все считает, ravno2 — это нажатие на кнопку знака. Факториал, деление единицы на число и корень квадратные — там реализуются методы сразу при нажатии все обрабатывается.

Добавим также флаг для памяти:

Читайте также:  При установке windows отключается usb порты

И еще систему флагов:

Вот, например, как у нас будет выглядеть метод vvod():

Здесь мы проверяем, какая клавиша в нашем калькуляторе была нажата перед этим – цифра, арифметическая операция или знак равно. Далее получаем из текстбокса значение, конвертируем предыдущее из массива, конкатенируем строки, потом обратно в double и обновляем значение массива. Также в этом методе мы проверяем длину числа – мы поставили ограничение на 10 знаков.

Обработка кнопки равно – то есть метод вычисления – также не представляет сложности. Пользуясь оператором ветвления switch перебираем все варианты.

Также реализуем собственный класс для обработки ошибок. Зачем это надо? Дело в том, что мы оперируем с числами типа double, а они не выбрасывают некоторые стандартные исключения, например – деление на ноль. Также мы предусмотрим обработку переполнения и вычисления квадратного корня из отрицательного числа. На вход конструкторов этого класса будем принимать пару чисел. Выводятся ошибки при:

  1. взятии корня четной степени из отрицательного числа
  2. логарифмировании отрицательного числа и нуля
  3. делении на нуль.
  4. переполнении (калькулятор все же не бесконечный)

Также не забудем и обработку клавиши запятой. Для этого проверяем, есть ли она уже во введённом числе:

Вот такие основные моменты надо знать для написания данной программы. Ну а если вы не можете самостоятельно написать визуальный калькулятор на C++, то обратитесь ко мне. Актуальную цену за архив с готовой программой и исходниками с подробными комментариями в настоящий моент 500 рублей. Это будет проект в Visual Studio C++ 2010 — он откроется в любой другой версии студии не ниже 2010. Также есть проект для Visual Studio 2015.

Мой калькулятор реализует все основные функции: сложение, вычитание, деление, умножение, факториал, возведение в степень, извлечение квадратного корня, вычисление 1/x, функции памяти (занести в память, вывести содержимое памяти, очистить память).

Читайте также:  Oracle apex для windows

Добавились новые функции в калькуляторе. А именно:

  • Извлечение корня четной и нечетной степени из числа
  • Вычисление логарифма по любому основанию
  • Вычисление экспоненты

Если вам требуется реализация других функций, то это делается за отдельную плату. Пишите на почту 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, предусмотреть.

Оцените статью