본문 바로가기
개발하는 '정'/C# (.NET)

[C# .NET] 윈도우폼 계산기 예제 : 2. 기초 기능 구현

by 주앤정_블로그 2019. 7. 9.

[ C# .NET ] 윈도우 폼 계산기 예제

C# 닷넷 개인 공부를 위한 예제로, 정확하지 않거나 효율적이지 않을 수 있음★

 

현재 구현된 이미지

※ 예외 처리할 목록 
 1. 최초 출력 숫자가 0인 경우 (완료) 
 2. 계산 버튼 두번 클릭 시 (완료) 
 3. 변수의 크기 
 4. 숫자 -> 계산 -> 숫자 -> enter  (완료)
 5. 0 나누기 (완료) 
 6. 숫자 맨 앞자리가 0인 경우나 계산버튼을 연속으로 클릭 시 ProcessBox에 알맞게 출력하기 
 7. equal 버튼(=) 클릭 후 바로 계산버튼 클릭 시

 

※ 추가 기능 구현할 목록 
 1. 키보드 입력 
 2. 기본 계산 외 추가 계산 기능 (Clear, 소숫점, 지우기 ...)


<전체 코드>

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public double resultVal = 0; 
        public double num = 0; 
        public bool isNewNum = true; 
        public string recentCal = "+"; 

        public void NumBtn_Click (object sender, EventArgs e) 
        {
            Button btnNum = sender as Button; 
            num = double.Parse(btnNum.Text); 

            if (isNewNum) 
            {
                ResultBox.Text = num.ToString(); 
                isNewNum = false;
            }
            else if (ResultBox.Text == "0") 
            {
                ResultBox.Text = num.ToString(); 
            }
            else 
            {
                ResultBox.Text += num.ToString(); 
            }
            ProcessBox.Text += num.ToString(); 

        } //NumBtn_Click() end

        private void BtnCal_Click(object sender, EventArgs e)
        {
            Button btnCal = (Button)sender;

            if (!isNewNum) 
            {
                num = double.Parse(ResultBox.Text); 
                switch (recentCal)
                {
                    case "+":
                        resultVal = resultVal + num; 
                        break;
                    case "-":
                        resultVal = resultVal - num; 
                        break;
                    case "*":
                        resultVal = resultVal * num; 
                        break;
                    case "/":
                        resultVal = resultVal / num; 
                    	break;
                }
                
                ResultBox.Text = resultVal.ToString(); 
            }

            recentCal = btnCal.Text;
            ProcessBox.Text += recentCal; 
            isNewNum = true; 

        }

    }
}

 


<코드 분석>

1. 변수 선언


2. 숫자 버튼 클릭 이벤트

숫자 버튼은 모두 같은 이벤트를 사용한다.


3. 연산 버튼 클릭 이벤트

연산 버튼은 모두 같은 이벤트를 사용한다.


 

<문제점>

 1. 입력 및 계산된 값이 너무 클 경우 출력이나 계산의 오류가 있을 수 있음.

Window 기본 계산기 출력 방식

 

 2. 0으로 나누기 시 오류 메세지가 출력되지 않고 0으로 고정됨.

Window 기본 계산기 출력 방식

 

 3. 숫자 맨 앞자리가 0인 경우나 연산 버튼을 연속으로 클릭 시 ProcessBox에 알맞게 출력되지 않음.

현재 출력 방식 (ProcessBox에 0과 연산 버튼 연속 클릭이 처리 안 된 모습)

 

 4. equal 버튼(=) 클릭 후 바로 연산 버튼 클릭 시 연산이 안 됨.

반응형

댓글