Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

A Simple Calculator in Windows Forms

4.86/5 (6 votes)
14 Dec 2014CPOL1 min read 130.9K   6.4K  
A demonstation of accumulators and operators

Introduction

I created this application in response to this question about how to implement a simple calculator.

Using the Code

C#
using System;
using System.Windows.Forms;

namespace RedCell.App.Calculator.Example
{
    public partial class Form1 : Form
    {
        private double accumulator = 0;
        private char lastOperation;

        public Form1()
        {
            InitializeComponent();
        }

        private void Operator_Pressed(object sender, EventArgs e)
        {
            // An operator was pressed; perform the last operation and store the new operator.
            char operation = (sender as Button).Text[0];
            if (operation == 'C')
            {
                accumulator = 0;
            }
            else
            {
                double currentValue = double.Parse(Display.Text);
                switch (lastOperation)
                {
                    case '+': accumulator += currentValue; break;
                    case '-': accumulator -= currentValue; break;
                    case '×': accumulator *= currentValue; break;
                    case '÷': accumulator /= currentValue; break;
                    default: accumulator = currentValue; break;
                }
            }

            lastOperation = operation;
            Display.Text = operation == '=' ? accumulator.ToString() : "0";
        }

        private void Number_Pressed(object sender, EventArgs e)
        {
            // Add it to the display.
            string number = (sender as Button).Text;
            Display.Text = Display.Text == "0" ? number : Display.Text + number;
        }
    }
}

The way it works is simple.

  1. There are two kinds of buttons, numbers and operators.
  2. There is a display that shows entries and results.
  3. There is an accumulator variable to store the accumulated value.
  4. There is a lastOperation variable to store the last operator, because we won't evaluate until another operator is pressed.

When a number is pressed, it is added to the end of the number currently on the display. If a 0 was on the display we replace it, just to look nicer.

If the C operator is pressed, we reset the accumulator to 0.

Otherwise we perform the last operation against the accumulator and the currently entered number. If there wasn't a lastOperation, then we must be starting a new calculation, so we set the accumulator to the currentValue as the first operation.

Points of Interest

Trying to emulate a basic calculator can be a good exercise for a new programmer. I created this application in 15 minutes to demonstrate that it does not need to be complicated.

C# is somewhat verbose. What could you do to use less code? Calculators these days are pretty smart, but back in the olden days when I started programming for embedded systems it would be common to only have 100 bytes or less of memory in which the program was stored, so writing the code (in machine language) to be as small as possible was important.

Back to work...

History

  • December 14, 2014 - Wrote this

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)