티스토리 뷰

SW/C#

[ 초보자를 위한 C# 200제 ] C#_004

김아진 2018. 3. 21. 20:55

[ 초보자를 위한 C# 200제 ] C#_004


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Project_004
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //-------------------이곳에 초기화 -------------------//
            this.Clear(); // 메서드 호출
        }

        private void Clear()
        {
            this.txtNum1.Text = ""; // 텍스트박스 청소
            this.txtNum2.Text = "";
            this.txtResult.Text = "";
            this.IbResult.Text = "Ready"; // 라벨 초기화
        }

        // 숫자 타입 문자열을 숫자로 형변환, 메서드 선언
        private double Calculator(string sx, string sy)
        {
            //sx와 sy 중 하나라도 공백이거나 null이면 참을 리턴하고,
            //if의 조건을 충족하여 아래 바디를 실행한다. 

            // string.IsNullOrEmpty(문자열)는 공백이거나 널(null)이면 true(참)를, 
            // 아니면 false(거짓)를 리턴한다. 

            // ||은 논리 연산자(OR)로 false || false일때만 false이고, 그 외는 모두 true이다. 
            if (string.IsNullOrEmpty(sx) || string.IsNullOrEmpty(sy))
            {
                // MessageBox.Show(문자열)은 입력된 문자열을 메지시박스로 보여준다. 
                MessageBox.Show("공백이 입력되었습니다. 다시 입력하세요.");
                this.Clear(); // 다른 수를 입력할 수 있도록 청소한다. 

                // 적어도 하나가 공백이면 throw를 이용하여 예외를 발생시킨다. 
                // 원하는 조건에서 예외를 발생시키는 방법! 
                // throw 예외 발생은 new를 이용하여 Exception을 발생(생성)시킨다. 
                // throw가 발생하는 Calculator()은 아랫 줄에서 바디가 끝난다. 
                throw new Exception("공백이 입력되었습니다. 다시 입력하세요. ");
            }

            // 잘못된 요구가 발생할 수 있는 경우에는 try{}에서 작업을 하고,
            // 잘못된 요구를 실행하지 않도록 예외를 잡을 때(예외 처리)는 catch{}를 이용한다. 
            try
            {
                // 숫자 타입 문자열이 아닐 때 double.Parse()는 예외를 발생시킬 수 있으므로 
                // try{} 안에서 실행한다. 
                double x = double.Parse(sx.Trim());
                double y = double.Parse(sy.Trim());
                return (x + y);
            }

            catch
            {
                // try{}에서 실행하다가 숫자 타입 문자열이 아닌 일반 문자가 들어오면
                // 예외가 발생되고, 잘못된 요구가 실행되지 않도록
                //try{} 안의 실행을 멈추고 catch{}로 자동 이동한다. 

                // 메시지박스를 띄워 요구가 잘못되었다는 것을 알리고, 텍스트박스를 청소한다. 
                MessageBox.Show("숫자를 입력하세요. 다시 입력하세요. ");
                this.Clear();
                // Calculator()를 호출할 때 
                // 예외를 알려주면서 강제로 실행을 멈추기 위해 예외를 다시 던질 수 있다. 
                throw new Exception("숫자를 입력하세요. 다시 입력하세요. ");
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            try
            {
                // Calculator()를 호출할 때, 발생할 수 있는 예외가 있기 때무에 try{}로 감싼다. 
                // 공백이나 null 또는 숫자 타입 이외의 문자열이 들어오면 잘못된 요구를 실행하지 않도록
                // catch로 예외를 던지면서 try{}를 끝낸다. 
                double num = Calculator(this.txtNum1.Text, this.txtNum2.Text);
                this.txtResult.Text = num.ToString();
                this.IbResult.Text = "+";
            }
            // 앞에서 메시지박스도 띄워주고 예외도 발생시켰으므로 더 이상 처리할 것이 없어 비웠다. 
            catch { }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            this.Clear(); // 텍스트박스, 라벨 청소와 초기화
        }
    }
}

[ 결과 ]




댓글