실행 이미지

 

 

계산기의 디자인

 

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;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace calculator
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = "계산기";
            txtBox.ReadOnly = true; // 읽기 전용
            txtBox.Text = "";



        }

        private void button15_Click(object sender, EventArgs e) //  1
        {
            txtBox.Text = txtBox.Text + "1";
        }

        private void button14_Click(object sender, EventArgs e) //  2
        {
            txtBox.Text = txtBox.Text + "2";
        }

        private void button13_Click(object sender, EventArgs e) //  3
        {
            txtBox.Text = txtBox.Text + "3";
        }

        private void button10_Click(object sender, EventArgs e) //  4
        {
            txtBox.Text = txtBox.Text + "4";
        }

        private void button9_Click(object sender, EventArgs e)  //  5
        {
            txtBox.Text = txtBox.Text + "5";
        }

        private void button8_Click(object sender, EventArgs e)  //  6
        {
            txtBox.Text = txtBox.Text + "6";
        }

        private void button23_Click(object sender, EventArgs e) //  7
        {
            txtBox.Text = txtBox.Text + "7";
        }

        private void button22_Click(object sender, EventArgs e) //  8
        {
            txtBox.Text = txtBox.Text + "8";
        }

        private void button21_Click(object sender, EventArgs e) //  9
        {
            txtBox.Text = txtBox.Text + "9";
        }

        private void button20_Click(object sender, EventArgs e) //  0
        {
            txtBox.Text = txtBox.Text + "0";
        }

        private void button18_Click(object sender, EventArgs e) //  .
        {
            txtBox.Text = txtBox.Text + ".";
        }

        private void button17_Click(object sender, EventArgs e) //  +
        {
            txtBox.Text = txtBox.Text + "+";

        }

        private void button12_Click(object sender, EventArgs e) //  -
        {
            txtBox.Text = txtBox.Text + "-";
        }

        private void button7_Click(object sender, EventArgs e)  //  *
        {
            txtBox.Text = txtBox.Text + "*";
        }

        private void button19_Click(object sender, EventArgs e) //  /
        {
            txtBox.Text = txtBox.Text + "/";
        }

        private void button11_Click(object sender, EventArgs e) //  ←
        {
            if (txtBox.Text.Length > 0)
            {
                txtBox.Text = txtBox.Text.Substring(0, txtBox.Text.Length - 1);
            }
            else
            {
                txtBox.Text = "";
            }
        }

        private void button26_Click(object sender, EventArgs e) //  C
        {
            txtBox.Text = "";
        }

        private void button16_Click(object sender, EventArgs e) //  =
        {
            if (txtBox.Text.Length == 0)
            {
                return; // 텍스트 박스가 비어있다면 아무것도 하지 않음
            }

            // 끝 문자가 연산자라면 동작 x
            if (txtBox.Text[txtBox.Text.Length - 1] == '+' ||
                txtBox.Text[txtBox.Text.Length - 1] == '-' ||
                txtBox.Text[txtBox.Text.Length - 1] == '*' ||
                txtBox.Text[txtBox.Text.Length - 1] == '/' ||
                txtBox.Text[txtBox.Text.Length - 1] == '.')
            {
                return;
            }


            // 연산자를 기준으로 문자열 분리
            string[] num_order = txtBox.Text.Split(new char[] { '+', '-', '*', '/' }, StringSplitOptions.RemoveEmptyEntries);
            // 숫자를 기준으로 문자열 분리
            List<char> op_order = new List<char>();
            foreach (char c in txtBox.Text)
            {
                if (c == '+' || c == '-' || c == '*' || c == '/')
                {
                    op_order.Add(c);
                }
            }

            List<double> nums = new List<double>();
            foreach (string num in num_order)
            {
                nums.Add(double.Parse(num));
            }

            if (nums.Count == 0 || op_order.Count == 0)
            {
                return;
            }

            // 우선순위 연산 처리 (*, /)
            for (int i = 0; i < op_order.Count; i++)
            {
                if (op_order[i] == '*' || op_order[i] == '/')
                {
                    double result = 0;
                    switch (op_order[i])
                    {
                        case '*':
                            result = nums[i] * nums[i + 1];
                            break;
                        case '/':
                            result = nums[i] / nums[i + 1];
                            break;
                    }
                    nums[i] = result;
                    nums.RemoveAt(i + 1);
                    op_order.RemoveAt(i);
                    i--; // 현재 위치에서 다시 체크
                }
            }

            // 나머지 연산 처리 (+, -)
            double finalResult = nums[0];
            for (int i = 0; i < op_order.Count; i++)
            {
                switch (op_order[i])
                {
                    case '+':
                        finalResult += nums[i + 1];
                        break;
                    case '-':
                        finalResult -= nums[i + 1];
                        break;
                }
            }

            // 결과를 txtBox에 출력
            txtBox.Text = finalResult.ToString();

        }

    }
}

계산기의 코드

 

 

+ Recent posts