처음으로 만들어본 C# 프로그램이다.
뭐 별건 없고 그냥 간단한 사칙 연산이 되는 계산기를 만들어 봤다.
일단 소스
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace Calculator
{
class Program : Form
{
const int BTNSIZE = 40;
const int CLRBTN = 10;
const int ANSBTN = 11;
const int BLK = 0;
const int PLUS = 1;
const int MIN = 2;
const int MUL = 3;
const int DIV = 4;
int result = 0;
int op = 0;
bool answered = false;
Button[] btn = new Button[16];
Label lbl_display;
int iButtonSize = 50;
public Program()
{
int i = 0;
int zero_x = 0;
int zero_y = 0;
char []name = new char[4]{'+','-','*','/'};
this.Text = "간단한 계산기";
this.SetBounds(0, 0, BTNSIZE * 4 + 40, BTNSIZE * 5 + 50);
lbl_display = new Label();
lbl_display.Text = "0";
lbl_display.BackColor = Color.White;
lbl_display.SetBounds(15,10,160,20);
this.Controls.Add(lbl_display);
zero_y = 0;
//'1~9'버튼
for (i = 1; i <= 9; i++)
{
if (i % 3 == 1)
{
zero_x = 15;
zero_y += BTNSIZE;
}
else
{
zero_x += BTNSIZE;
}
btn[i] = new Button();
btn[i].Text = i.ToString();
btn[i].SetBounds(zero_x, zero_y, BTNSIZE, BTNSIZE);
btn[i].Click += new EventHandler(BtnNumber_OnClick);
this.Controls.Add(btn[i]);
}
//0버튼
zero_x = 15;
zero_y += BTNSIZE;
btn[0] = new Button();
btn[0].Text = "0";
btn[0].SetBounds(zero_x, zero_y, BTNSIZE, BTNSIZE);
btn[0].Click += new EventHandler(BtnNumber_OnClick);
this.Controls.Add(btn[0]);
//'Clear'버튼
zero_x += BTNSIZE;
btn[CLRBTN] = new Button();
btn[CLRBTN].Text = "CLR";
btn[CLRBTN].SetBounds(zero_x, zero_y, BTNSIZE, BTNSIZE);
btn[CLRBTN].Click += new EventHandler(BtnCLR_OnClick);
this.Controls.Add(btn[CLRBTN]);
//'Answer'버튼
zero_x += BTNSIZE;
btn[ANSBTN] = new Button();
btn[ANSBTN].Text = "=";
btn[ANSBTN].SetBounds(zero_x, zero_y, BTNSIZE, BTNSIZE);
btn[ANSBTN].Click += new EventHandler(BtnANS_OnClick);
this.Controls.Add(btn[ANSBTN]);
//연산자 버튼
zero_x += BTNSIZE;
zero_y = 0;
for (i = 12; i < 16; i++)
{
zero_y += BTNSIZE;
btn[i] = new Button();
btn[i].Text = name[i - 12].ToString();
btn[i].SetBounds(zero_x, zero_y, BTNSIZE, BTNSIZE);
btn[i].Click += new EventHandler(BtnOp_OnClick);
this.Controls.Add(btn[i]);
}
}
private void BtnNumber_OnClick(object sender, EventArgs arg)
{
Button obj = (Button)sender;
if (answered == true)
{
lbl_display.Text = "0";
answered = false;
}
if (lbl_display.Text != "0")
{
lbl_display.Text += obj.Text;
}
else
{
lbl_display.Text = obj.Text;
}
}
private void BtnCLR_OnClick(object sender, EventArgs arg)
{
result = 0;
op = BLK;
lbl_display.Text = "0";
}
private void BtnANS_OnClick(object sender, EventArgs arg)
{
switch (op)
{
case BLK:
return;
break;
case PLUS:
result += Int32.Parse(lbl_display.Text);
break;
case MIN:
result -= Int32.Parse(lbl_display.Text);
break;
case MUL:
result *= Int32.Parse(lbl_display.Text);
break;
case DIV:
if (result != 0)
result /= Int32.Parse(lbl_display.Text);
else
{
lbl_display.Text = "Error!";
}
break;
}
answered = true;
lbl_display.Text = result.ToString();
}
private void BtnOp_OnClick(object sender, EventArgs arg)
{
Button obj = (Button)sender;
switch (obj.Text)
{
case "+":
op = PLUS;
break;
case "-":
op = MIN;
break;
case "*":
op = MUL;
break;
case "/":
op = DIV;
break;
}
result = Int32.Parse(lbl_display.Text);
Console.WriteLine(op);
lbl_display.Text = "0";
}
static void Main(string[] args)
{
Application.Run(new Program());
}
}
}
생각해 보니까 이벤트 관련 함수 안에 모든 내용을 다 넣어 버렸다. 그리 좋지 않은 방식인데.. 윈도우 프로그래밍쪽만 신경쓰다 보니 계산기의 클래스화도 제대로 신경 못쓰고 그러다보니 어떤 오류가 날지도 제대로 모르겠다. 다음에는 신경써서 만들어 보아야 겠다.