[C#프로그래밍] 계산기만들기 #01

728x90
https://m.post.naver.com/viewer/postView.naver?volumeNo=31984375&memberNo=6255089

 

위 네이버 포스팅을 참고해서 계산기 폼을 만들었다.

 

2탄까지 따라 만들어서 간단한 계산이 되는 계산기를 완성하기는 했는데
. (point) 코드가 올라와있지 않아서 소수점 계산이 불가능했다.
그래서 int형으로 선언된 변수들과 int형으로 형변환을 해주는 Int32를 double로 형변환 할 수 있도록 double.Parse(strNum); 으로 수정하니 소수점 계산이 가능했다.

  • 변수명은.. 귀찮아서 int가 붙은 그대로 뒀다..

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Calculator
{
    public partial class Form1 : Form
    {

        enum Operators
        {
            None,
            Add,
            Subtract,
            Multiply,
            Divide,
            Result

        }

        Operators currentOpperator = Operators.None;
        Boolean operatorChangeFlag = false;
        double firstOperand = 0;
        double secondOperand = 0;


        public Form1()
        {
            InitializeComponent();
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void display_Click(object sender, EventArgs e)
        {

        }

        private void ButtonResult_Click(object sender, EventArgs e)
        {
            secondOperand = double.Parse(display.Text);

            if(currentOpperator == Operators.Add)
            {
                firstOperand += secondOperand;
                display.Text = firstOperand.ToString();
            } else if (currentOpperator == Operators.Subtract)
            {
                firstOperand -= secondOperand;
                display.Text = firstOperand.ToString();
            }else if (currentOpperator == Operators.Multiply)
            {
                firstOperand *= secondOperand;
                display.Text = firstOperand.ToString();
            }else if (currentOpperator == Operators.Divide)
            {

                if(secondOperand == 0)
                {
                    display.Text = "0으로 나눌 수 없습니다.";
                }else
                {
                firstOperand /= secondOperand;
                display.Text = firstOperand.ToString();
                }
            }
        }

        private void ButtonServen_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "7";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonEighth_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "8";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonNine_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "9";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonDivide_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            firstOperand = double.Parse(display.Text);
            currentOpperator = Operators.Divide;
            operatorChangeFlag = true;
        }

        private void ButtonFour_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "4";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonFive_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "5";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonSix_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "6";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonMultiply_Click(object sender, EventArgs e)
        {
            firstOperand = double.Parse(display.Text);
            currentOpperator = Operators.Multiply;
            operatorChangeFlag = true;
        }

        private void ButtonOne_Click(object sender, EventArgs e)
        {
           
            if(operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "1";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();

        }

        private void ButtonTwo_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "2";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonThree_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "3";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonSubtract_Click(object sender, EventArgs e)
        {
            
            firstOperand = double.Parse(display.Text);
            currentOpperator = Operators.Subtract;
            operatorChangeFlag = true;
        }

        private void BuuttonAllClear_Click(object sender, EventArgs e)
        {
            firstOperand = 0;
            secondOperand = 0;
            currentOpperator = Operators.None;
            display.Text = "0";
        }

        private void ButtonZero_Click(object sender, EventArgs e)
        {
            if (operatorChangeFlag == true)
            {
                display.Text = "";
                operatorChangeFlag = false;
            }
            string strNumber = display.Text += "0";
            double intNumber = double.Parse(strNumber);
            display.Text = intNumber.ToString();
        }

        private void ButtonPoint_Click(object sender, EventArgs e)
        {

            string strNumber = display.Text += ".";
            double intNumber = double.Parse(strNumber);
            display.Text = strNumber.ToString();
        }

        private void ButtonAdd_Click(object sender, EventArgs e)
        {
            firstOperand = double.Parse(display.Text);
            currentOpperator = Operators.Add;
            operatorChangeFlag = true;
        }
    }
}

문제는 0.0을 입력하거나 2.0과 같이 소수점 첫 번째 자리가 0이 오는 숫자가 입력이 안 된다.
이 부분 수정해서 다시 포스팅할 생각이다.

728x90