[C#] WinForm(윈폼)으로 계산기 만들기

Sadie·2022년 9월 12일
0

디자인

Visual Studio 2022에서 Windows Forms 앱(.Net Framework) 템플릿을 이용해서 만들었다
버튼과 텍스트박스를 사용했고 이벤트와 연결했다



코드

마크다운에서 c#은 cs로 표기함

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 ClaculatorForDBClass
{
    public partial class Form1 : Form
    {
        // 새로운 연산이면 clear가 true
        bool clear = true;
        // 연산된 값
        double result = 0;
        // 현재 진행중인 연산을 나타내기 위해
        char op = '0'; // +, -, *, /
        // 메모리
        double memory = 0;

        public Form1()
        {
           InitializeComponent();
            textBox1.Text = "0";
        }
        
        // MC memory clear 저장된 메모리 지움
        private void button1_Click(object sender, EventArgs e)
        {
            memory = 0;
            clear = true;
        }

        // MR memory recall 저장된 메모리 읽어옴
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = Convert.ToString(memory);
            clear = true;
        }

        // MS memory save 메모리 저장
        private void button3_Click(object sender, EventArgs e)
        {
            memory = Convert.ToDouble(textBox1.Text);
            clear = true;
        }

        // M+ memory + 메모리에 저장된 수에서 현재 화면에 있는 수 더함
        private void button4_Click(object sender, EventArgs e)
        {
            double num = Convert.ToDouble(textBox1.Text);
            memory += num;
            clear = true;
        }

        //M- memory - 메모리에 저장된 수에서 현재 화면에 있는 수 뺌
        private void button5_Click(object sender, EventArgs e)
        {
            double num = Convert.ToDouble(textBox1.Text);
            memory -= num;
            clear = true;
        }

        // <-- backspace
        private void button6_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
        }
        
        // CE clear entry 마지막 입력을 지운다 (계산 후 결과값에서 누르면 C나 AC와 같은 결과)
        private void button7_Click(object sender, EventArgs e)
        {
            textBox1.Text = "0";
            if (op == '0')
            {
                clear = true;
            }
        }

        // C clear 모든 계산을 지운다
        private void button8_Click(object sender, EventArgs e)
        {
            textBox1.Text = "0";
            result = 0;
            clear = true;
        }

        // ±
        private void button9_Click(object sender, EventArgs e)
        {
            textBox1.Text = Convert.ToString(Convert.ToDouble(textBox1.Text) * -1);
        }

        // √
        private void button10_Click(object sender, EventArgs e)
        {
            textBox1.Text = Convert.ToString(Math.Pow(Convert.ToDouble(textBox1.Text), 0.5));
        }

        // %
        private void button15_Click(object sender, EventArgs e)
        {
            textBox1.Text = Convert.ToString(Convert.ToDouble(textBox1.Text) / 100);
        }

        // 1/x
        private void button20_Click(object sender, EventArgs e)
        {
            double num = Convert.ToDouble(textBox1.Text);
            num = 1 / num;
            textBox1.Text = Convert.ToString(num);
        }

        // /
        private void button14_Click(object sender, EventArgs e)
        {
            // 텍스트를 double형의 숫자로 변환
            double num = Convert.ToDouble(textBox1.Text);
            // 이전에 기록된 연산이 있다면 수행
            if (op == '0')
            {
                result = num;
                textBox1.Text = Convert.ToString(result);
                clear = true;
            }
            else
            {
                button28_Click(sender, e); // = 수행
            }
            op = '/';
        }

        // *
        private void button19_Click(object sender, EventArgs e)
        {
            // 텍스트를 double형의 숫자로 변환
            double num = Convert.ToDouble(textBox1.Text);
            // 이전에 기록된 연산이 있다면 수행
            if (op == '0')
            {
                result = num;
                textBox1.Text = Convert.ToString(result);
                clear = true;
            }
            else
            {
                button28_Click(sender, e); // = 수행
            }
            op = '*';
        }

        // -
        private void button24_Click(object sender, EventArgs e)
        {
            // 텍스트를 double형의 숫자로 변환
            double num = Convert.ToDouble(textBox1.Text);
            // 이전에 기록된 연산이 있다면 수행
            if (op == '0')
            {
                result = num;
                textBox1.Text = Convert.ToString(result);
                clear = true;
            }
            else
            {
                button28_Click(sender, e); // = 수행
            }
            op = '-';
        }

        // +
        private void button26_Click(object sender, EventArgs e)
        {
            // 텍스트를 double형의 숫자로 변환
            double num = Convert.ToDouble(textBox1.Text);
            // 이전에 기록된 연산이 있다면 수행
            if (op == '0')
            {
                result = num;
                textBox1.Text = Convert.ToString(result);
                clear = true;
            }
            else
            {
                button28_Click(sender, e); // = 수행
            }
            op = '+';
        }

        // =
        private void button28_Click(object sender, EventArgs e)
        {
            // 텍스트를 double형의 숫자로 변환
            double num = Convert.ToDouble(textBox1.Text);
            // 연산을 수행
            switch (op)
            {
                case '+':
                    result += num;
                    break;
                case '-':
                    result -= num;
                    break;
                case '*':
                    result *= num;
                    break;
                case '/':
                    result /= num;
                    break;
            }
            textBox1.Text = Convert.ToString(result);
            clear = true;
            op = '0';
        }

        // .
        private void button25_Click(object sender, EventArgs e)
        {
            // 아무것도 입력이 되지 않은 상태에서 소수점 버튼을 누르면
            if (clear == true)
            {
                textBox1.Text = "0.";
                clear = false;
            }
            else if (textBox1.Text.Contains(".") == false) // 이전에 소수점이 한 번도 사용되지 않았을 경우
            {
                textBox1.Text += ".";
            }
        }

        // 0~9
        private void btnNumClick(object sender, EventArgs e)
        {
            Button btn = sender as Button;

            // 처음 입력받는 숫자라면
            if (clear == true)
            {
                textBox1.Text = btn.Text;
                clear = false;
            }
            else
            {
                textBox1.Text += btn.Text;
            }
        }
    }
}


참고

https://kuduz.tistory.com/1153
https://m.post.naver.com/viewer/postView.nhn?volumeNo=16403459&memberNo=11439725
작년에 배운 C# 강의자료

0개의 댓글