Programming
C# WinForm으로 계산기 만들어보기
khj1999
2025. 2. 17. 18:57
요즘 MES관련 직무에 관심이 생겨서 Spring을 공부하면서 C#도 한번 해보려고한다 왜냐하면 MES/ERP에서
레거시 시스템이나 대부분이 C#으로 진행되어 있고 스프링으로 진행 하는 곳들도 있어서 일단 둘다 배워놓으면
쓸모는 있겠다 싶어서 한번 간단하게 공부를 해보고 계산기 프로그램을 만들어봤다.
코드
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
{
private string operand1 = ""; // 첫 번째 피연산자
private string operand2 = ""; // 두 번째 피연산자
private char operation = '\0'; // 연산자
private bool isOperatorPressed = false; // 연산자 입력 여부
public Form1()
{
InitializeComponent();
}
private void Number_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
if (isOperatorPressed)
{
// 두 번째 피연산자 입력 중
operand2 += btn.Text;
display.Text = operand2;
}
else
{
// 첫 번째 피연산자 입력 중
operand1 += btn.Text;
display.Text = operand1;
}
}
private void Operator_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
if (!string.IsNullOrEmpty(operand1))
{
operation = btn.Text[0]; // 연산자 저장
isOperatorPressed = true; // 연산자 입력됨
}
}
private void Result_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(operand1) && !string.IsNullOrEmpty(operand2))
{
double num1 = double.Parse(operand1);
double num2 = double.Parse(operand2);
double result = 0;
switch (operation)
{
case '+': result = num1 + num2; break;
case '-': result = num1 - num2; break;
case '*': result = num1 * num2; break;
case '/':
if (num2 != 0)
result = num1 / num2;
else
{
MessageBox.Show("0으로 나눌 수 없습니다.");
return;
}
break;
}
// 결과 표시 및 첫 번째 피연산자로 저장하여 연속 연산 가능
display.Text = result.ToString();
operand1 = result.ToString();
operand2 = "";
isOperatorPressed = false; // 다시 숫자 입력 모드
}
}
private void Point_Click(object sender, EventArgs e)
{
if (isOperatorPressed)
{
// 두 번째 피연산자에 소수점 추가
if (!operand2.Contains("."))
{
if (operand2 == "")
operand2 = "0.";
else
operand2 += ".";
display.Text = operand2;
}
}
else
{
// 첫 번째 피연산자에 소수점 추가
if (!operand1.Contains("."))
{
if (operand1 == "")
operand1 = "0.";
else
operand1 += ".";
display.Text = operand1;
}
}
}
private void Clear_Click(object sender, EventArgs e)
{
display.Text = "0";
operand1 = operand2 = "";
operation = '\0';
isOperatorPressed = false;
}
private void NUM_1_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_2_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_3_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_4_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_5_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_6_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_7_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_8_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_9_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void NUM_0_Click(object sender, EventArgs e) => Number_Click(sender, e);
private void Dot_Click(object sender, EventArgs e) => Point_Click(sender, e);
private void AC_Click(object sender, EventArgs e) => Clear_Click(sender, e);
private void Plus_Click(object sender, EventArgs e) => Operator_Click(sender, e);
private void Minus_Click(object sender, EventArgs e) => Operator_Click(sender, e);
private void Multi_Click(object sender, EventArgs e) => Operator_Click(sender, e);
private void div_Click(object sender, EventArgs e) => Operator_Click(sender, e);
}
}
사실 완벽하지는 않다 아이폰 계산기는 3 + 3 + 3 = 을 입력했을때 2번째 + 를 입력할때 6이 출력되고 + 3을 입력한 뒤 = 를 입력하면 9가 출력되는데 지금은 3 + 3까진 입력이 잘되는데 +3을 하면 33이 되어 버리는 문제가 있다.
완벽하게 하려면 할 수는 있겠지만, 한도 끝도 없다고 생각이들어서 학습 중이니 일단 여기까지만 진행하고 넘어 가야겠다.
결과