Калькулятор на C#

В данном уроке мы разработаем с вами калькулятор на C#. Программа будет написана согласно принципам объектно-ориентированного программирования (ООП): будет определен интерфейс для методов, реализующих функционал клавиш математических операций калькулятора, от интерфейса выполним наследование и напишем соответствующий класс и методы. Калькулятор, помимо базовых операций сложения, вычитания, умножения и деления, будет предоставлять возможность выполнять операции: извлечения квадратного корня, извлечения корня произвольной степени, возведения в квадрат, возведения в произвольную степень, вычисления факториала, а также работу с регистром памяти (MRC).

Создание пользовательского интерфейса калькулятора

Создадим в Visual Studio проект на Visual C# Windows Forms. Добавим на форму элемент GroupBox, в который поместим Label. В свойстве Dock, элемента Label, необходимо указать Right, чтобы Label был привязан к правому краю. Связка данных элементов управления будет реализовывать дисплей калькулятора.

Калькулятор также содержит кнопки. Всего их 28 штук. Пользовательский интерфейс представлен на рисунке 1.

Калькулятор на C#

Рисунок 1. Интерфейс калькулятора

Кнопка “+/-” меняет знак операнда на противоположный.

Кнопка MRC, а также кнопки M+, M-, M×, M÷, реализуют отдельный регистр памяти калькулятора и команды для управления им. Что такое MRC можно прочитать – здесь.

Программирование калькулятора на C#

Реализация интерфейса класса

Поскольку наш калькулятор будет написан в рамках парадигмы ООП (объектно-ориентированного программирования), то начнем кодирование с описания структуры интерфейса для класса, реализующего математические операции программы.

Добавим в проект класс InterfaceCalc.cs и определим в созданном файле интерфейс InterfaceCalc.

Для выполнения математических операций понадобится два операнда: a и b (например, a + b). Операнд a придется хранить в памяти калькулятора, пока пользователь будет вводить второй аргумент операции. Для сохранения числа a объявим прототип метода void Put_A(double a), для очистки – void Clear_A(). Для умножения, деления, сложения и вычитания чисел a и b соответственно понадобятся методы: double Multiplication(double b), double Division(double b), double Sum(double b), double Subtraction(double b). Вычисление корня степени b из a: double SqrtX(double b). Возведение числа a в степень b: double DegreeY(double b). Вычисление квадратного корня: double Sqrt(). Возведение числа a в квадрат: double Square(). Вычисление факториала a!: double Factorial(). Теперь объявления методов для работы с регистром памяти (MRC) калькулятора. Показать содержимое памяти и очистить его: double MemoryShow(), void Memory_Clear(). M×, M÷, M+ и M- к регистру соответственно: void M_Multiplication(double b), void M_Division(double b), void M_Sum(double b), void M_Subtraction(double b).

Создание класса, реализующего интерфейс InterfaceCalc

Теперь добавим в калькулятор класс, который будет реализовывать написанный ранее интерфейс. Для этого в проекте создадим класс Calc : InterfaceCalc. Как вы видите, здесь используется наследование (оператор “двоеточие”). В данном классе напишем реализацию всех методов, требуемых спецификацией нашего интерфейса.

Поле private double memory – будет содержать регистр памяти (MRC).

Реализация работы калькулятора

Перейдем к написанию кода в классе Form1.

Объявим два поля:

Это классовая переменная C для класса Calc и целое число k. С помощью k будем считать количество нажатий кнопки MRC, чтобы при первом нажатии выводить значение регистра памяти на экран, а при последующем повторном – стирать значение регистра.

Далее. Нам понадобится ряд методов, которые будут обеспечивать правильное функционирование калькулятора.

Дисплеем в нашем калькуляторе является Label. Его содержимое – это строка текста. Нажатие на цифровые клавиши – это конкатенация текущего значения строки с символом клавиши. Необходимо исключить дублирование нулей в левой части строки (это делают 2-й и 3-й if в коде ниже), а также не допустить написание цифр, если в Label находится знак “бесконечность” (он появляется, например, при делении на ноль; 1-й if). Для решения данных проблем напишем метод CorrectNumber():

Еще необходим метод, проверяющий: не нажата ли какая-нибудь кнопка калькулятора из математических операций, требующих два операнда. Данная проверка необходима для недопущения нажатия других мат. операций, если какая-либо уже нажата. Код метода CanPress():

Также, напишем вспомогательный метод FreeButtons(), который снимает нажатия со всех кнопок математических операций калькулятора, требующих два операнда (умножение, деление, сложение, вычитание, вычисление корня произвольной степени и возведение числа в произвольную степень):

Со вспомогательными методами закончили. Идем дальше.

В конструкторе Form1 создадим экземпляр класса Calc, а также в “дисплей” калькулятора занесем значение ноль.

Теперь перейдем к кодированию обработчиков нажатий кнопок калькулятора. Кнопка “Очистка” (CE):

В “дисплей” записывается ноль, переменная a стирается, нажатия с кнопок математических операций снимаются и k обнуляется.

Кнопка изменения знака у числа “+/-“:

Кнопка “запятая” (будет добавлена, если ее еще нет и на “дисплее” нет знака бесконечность):

Теперь цифровые клавиши 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:

Кнопка “Равно”:

В зависимости от того, какая из кнопок математических операций нажата, будет вызван соответствующий метод из класса Calc, вычисляющий данную функцию, и результат выведется в Label.

Далее кнопки математических операций. Сработают только в том случае, если другие в данный момент не нажаты (CanPress() вернет true):

Калькулятор вычислит факториал только в том случае, если текущее введенное число целое и больше, либо равно нулю.

Кнопки математических операций над регистром памяти (MRC):

И последняя кнопка – “MRC”. Она показывает содержимое регистра памяти на экран, а при повторном нажатии стирает его:

На этом написание калькулятора на C# закончено. Спасибо за прочтение статьи! Если есть какие-либо вопросы, задавайте их в комментариях. Исходник программы доступен по ссылке ниже.

Скачать исходник

 

 

Ссылки по теме

Калькулятор Windows Forms на языке C#

Калькулятор процентных ставок на C#

Простенький калькулятор Windows Forms на C#

Обратная польская запись. Калькулятор на C#

Калькулятор C# в консоли

 

 

Калькулятор на C#
4.6 (92%) 10 votes

Поделиться в соц. сетях:

2 комментария(ев) к статье “Калькулятор на C#

  1. Алексей

    Не понятно для чего нужно было писать интерфейс InterfaceCalc, если в дальнейшем создается объект класса Calc. Объясните пожалуйста, в каком месте идет обращение к объекту класса через интерфейс?

    1. admin Автор статьи

      Интерфейс в ООП – это ни что иное, как спецификация для класса: он описывает тот набор методов, который класс, использующий интерфейс, должен реализовывать.
      В данной программе InterfaceCalc как раз описывает все методы, реализованные в Calc.

Добавить комментарий для admin Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">