안녕하세요?


 11개월만에 블로그에 글을 올립니다(너무 게을러 졌습니다 ㅠㅠ). 그동안 올린 몇 안되는 글이지만 많은 사람들이 방문해 주셔서 고마울 다름입니다.


 이번에는 Visual Studio에서 C#으로 계산기 만들기 연재? 를 올리겠습니다. 난이도는 중초급 정도를 생각 하시면 될 것 같습니다. 어느 정도 Visual Studio에 익숙하고 C#에 기본 문법은 익히신 분들 대상으로 하겠습니다.

 (갑자기 계산기를 만들겠다고;; 그것도 연재로? 계산기 만들기를 쉽게 생각하시면 안됩니다 !!)


 학업 중에 계산기를 만들어 보라는 과제를 한번쯤은 해보셨을 껍니다. 입력한 순서를 지켜서 사칙연산을 수행하는 정도 였을껍니다. 사용자가 잘못 된 입력을 하거나 순서를 지키지 않으면 오류가 계속 발생했습니다.


 대부분 여기까지 계산기를 만들어 보고 실습을 종료하게 됩니다. 네이버, 다음에서 계산기 만들기를 검색해 보시면 대부분 초급 수준의 계산기를 만드는 내용을 볼 수 있습니다. 그래서 제가 연재를 통해서 완성도 높은 계산기를 만들어 볼 생각 입니다.


 제가 작성한 코드가 절대 적인 거는 아니며 더 좋은 코드가 많습니다. 하지만 제가 가진 능력을? 최대한 발하여 보여 드리겠습니다(설명이 부족한 부분은 제가 작성한 코드에서 찾으시기 바랍니다).


▶ 개발 환경

 - Visual Studio Community 2015

 - .Net Framework 4.5.2

 - C#


Visual Studio에서 새 프로젝트를 생성합니다. .Net Framework 버전은 .Net Framework 4.5.2로 선택 했습니다(고급 기술을 요구하지 않기 때문에 Visual Studio 2008 이상, .Net Framework 3.5로 선택을 해도 문제가 없습니다.). Windows Forms 응용 프로그램 선택하고 이름을 MyCalc로 이름을 정했습니다.




 아래 사진과 같이 디자인을 했습니다. 저는 TableLayoutPanel을 이용해서 동적으로 크기가 변화 되도록 하였습니다. 그리드 형태에 컨트롤을 올리고 사용하시면 됩니다. 디테일한 적용은 직접 해보시면 금방 적응하실 수 있습니다. 윈도우 앱 개발 같은 경우에는 XMAL을 사용할 수 있기 때문에 다양한 디바이스의 화면 크기에 맞게 개발 할 수 있습니다. Windows Forms에서는 TableLayoutPanel를 응용해서 비슷한 동작을 할 수 있도록 개발이 가능 합니다.


 각 버튼에 Text값을 입력 했습니다. 입력한 Text 값이 중요한 역할을 하게 됩니다.




 다음으로는 버튼에 이벤트를 연결 하겠습니다. 0버튼에 Click 이벤트를 생성하시고 해당 이벤트에 2~9까지 버튼에서도 사용하도록 적용합니다. 하나의 이벤트 메서드에서 0~9 버튼의 Click 이벤트를 동작 시킬 생각 입니다. 




 아래 그림은 0~9버튼의 이벤트 처리 코드입니다. 매우 단순하게 처리를 하였습니다. 하지만 잘 작동합니다. 0~9버튼의 Text 값을 가져와 결과 TextBox의 Text에 값을 연결하도록 하였습니다(직관적이고 짧은 코드를 만들수 있도록 노력하시기 바랍니다).




 이번에는 소수점 버튼에 이벤트를 생성합니다.





소수점 버튼 클릭 이벤트 코드입니다. 결과 TextBox에 소수점이 입력이 되어 있는지 확인하고 없으면 결과 TextBox의 Text에 값을 연결하도록 하였습니다. C# 관련 책을 열어보면 +=, -=, *=, /= 연산에 대해서 대부분 설명을 하고 있습니다. 배웠으면 사용하시기 바랍니다. 코드가 심플하게 보입니다.




 이번에는 +, -, *, / 사칙연산에 대해서도 하나의 이벤트를 만들어 각버튼의 Click 이벤트에 연결하였습니다.




 사칙연산 이벤트 처리 내용입니다. 결과 TextBox에 값이 있는 경우에만 사칙연산 기호에 대해서 작업을 할 수 있도록 하였습니다(좌변 + 사칙연산 + 우변 = 결과). 맴버 Operation에 사칙연산 Text를 저장 하였습니다. 그리고 좌변의 값을 맴버 FirstValue에 저장 하였습니다. 그리고 결과 TextBox에 Text를 초기화 하였습니다. ""를 사용하는 것보다 string.Empty를 사용하시기 바랍니다(string.Empty는 객체를 생성하지 않습니다).




 이번에는 Equal 버튼의 Click 이벤트를 생성합니다.




 사칙 연산 이벤트에서는 맵버 FirstValue의 값이 decimal.MinValue 값이 아닌 경우에 처리 되도록 되어 있습니다. FirstValue의 초기 값이 decimal.MinValue로 설정이 되었있을 것 같습니다. 우변의 값이 입력되어 있는지 확인하고 switch case로 사칙연산을 처리 합니다. 나누기 연산인 경우 분모의 값이 0이 들어면 안됩니다.


this.txt_Result.Text = (this.FirstValue + decimal.Parse(this.txt_Result.Text)).ToString();




 다음은 C버튼의 Click 이벤트를 생성하고 코드를 작성 하였습니다. C버튼은 Clear을 의미 합니다. 맴버 FirstValue를 decimal.MinValue로 초기화 합니다. 결과 TextBox의 Text를 string.Empty로 초기화 했습니다.




 생성자에서 C버튼의 메서드를 호출 하도록 하여 초기화를 하였습니다. 최대한 중복 처리되는 부분을 줄이기 위해서 입니다.




 ← 버튼도 이벤트를 생성하였습니다. 결과 TextBox에 Text가 있는지 확인하고 결과 TextBox의 문자열을 하나씩 지워지도록 하였습니다. 여기까지 작성하고 실행을 하시면 사칙연산을 수행하는 계산기가 잘 작동합니다. 아직 여러 상황에 대해서 에러가 발생합니다.



 여기까지만 작성하더라고 과제에 충분한 결과가 나온것 같습니다. 전체 소스는 첨부파일에 있습니다. 다음 강좌?에서는 좀더 다듬어 보겠습니다. 최종 계산기 소스는 공개를 할지 아직 미정입니다. 지금까지 작성한 코드의 라인은 디자인 부분을 제외 하면 135줄 입니다 !! 놀랍습니다 !!



MyCalc.zip


 

 

※ 쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.