Study - Programming/C#2007. 12. 21. 13:52

처음으로 만들어본 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());
        }
    }
}

사용자 삽입 이미지


생각해 보니까 이벤트 관련 함수 안에 모든 내용을 다 넣어 버렸다. 그리 좋지 않은 방식인데.. 윈도우 프로그래밍쪽만 신경쓰다 보니 계산기의 클래스화도 제대로 신경 못쓰고 그러다보니 어떤 오류가 날지도 제대로 모르겠다. 다음에는 신경써서 만들어 보아야 겠다.

Posted by 머리