Skip to content

Alice-Maeng/Calculator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

40 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

C# WinForms 계산기 ν”„λ‘œμ νŠΈ

πŸ“Œ ν”„λ‘œμ νŠΈ μ†Œκ°œ

C#κ³Ό Windows Formsλ₯Ό μ΄μš©ν•œ κΈ°λ³Έ 계산기 ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
사칙연산, μ†Œμˆ˜μ , λΆ€ν˜Έ μ „ν™˜, 백슀페이슀, νΌμ„ΌνŠΈ 계산, 배경색 λ³€κ²½ λ“±μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


🧩 κ΅¬ν˜„ν•œ κΈ°λŠ₯ μ†Œκ°œ

κΈ°λŠ₯ μ„€λͺ…
숫자 μž…λ ₯ 0~9 λ²„νŠΌμ„ 톡해 숫자λ₯Ό μž…λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
사칙연산 +, -, Γ—, Γ· λ²„νŠΌμ„ 톡해 κΈ°λ³Έ μ—°μ‚° μˆ˜ν–‰
μ†Œμˆ˜μ  처리 μ†Œμˆ˜μ (.) μž…λ ₯ 및 쀑볡 λ°©μ§€
Β± λΆ€ν˜Έ μ „ν™˜ ν˜„μž¬ 수의 λΆ€ν˜Έλ₯Ό λ³€κ²½
% νΌμ„ΌνŠΈ ν˜„μž¬ 수λ₯Ό 100으둜 λ‚˜λˆˆ κ°’ 계산
μ΄ˆκΈ°ν™” (C) λͺ¨λ“  μž…λ ₯ κ°’ μ΄ˆκΈ°ν™”
μ‚­μ œ λ§ˆμ§€λ§‰ μž…λ ₯ 문자 μ‚­μ œ (Backspace)
색상 λ³€κ²½ λ©”λ‰΄μ—μ„œ Red, Blue, Gray, Pink 배경색 μ„€μ • κ°€λŠ₯
μ˜ˆμ™Έμ²˜λ¦¬ 잘λͺ»λœ μž…λ ₯(μ—°μ‚°μž 쀑볡, μ†Œμˆ˜μ  였λ₯˜ λ“±)에 λŒ€ν•΄ MessageBox둜 μ•ˆλ‚΄

πŸ›  섀계 방법 및 μ‚¬μš©ν•œ 기술

  • 개발 ν™˜κ²½: Visual Studio / .NET Framework
  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄: C#
  • GUI ν”„λ ˆμž„μ›Œν¬: Windows Forms (WinForms)

섀계 ꡬ쑰 μš”μ•½

  • Form1.cs: 전체 λ‘œμ§μ„ κ΄€λ¦¬ν•˜λŠ” 메인 폼
    • 이벀트 쀑심 섀계: λ²„νŠΌ 클릭 μ΄λ²€νŠΈλ§ˆλ‹€ λŒ€μ‘ ν•¨μˆ˜ 호좜
    • 둜직 뢄리: 숫자 μž…λ ₯, μ—°μ‚° 처리, 였λ₯˜ 처리 λ“±μœΌλ‘œ κΈ°λŠ₯ λͺ¨λ“ˆν™”
  • Enum μ‚¬μš©: operation μ—΄κ±°ν˜•μ„ 톡해 μ—°μ‚°μž μƒνƒœ 관리
  • μ˜ˆμ™Έ 처리 κ°•ν™”: μž…λ ₯κ°’ 끝이 μ—°μ‚°μžμ΄κ±°λ‚˜ μ†Œμˆ˜μ  쀑볡 λ“± λ‹€μ–‘ν•œ μ˜ˆμ™Έ 상황 처리

πŸ” μ½”λ“œμ˜ μ£Όμš” λΆ€λΆ„ μ„€λͺ…

1. μ—°μ‚° 처리 (핡심 둜직)

enum operation
{
    plus,
    minus,
    divide,
    multiple,
    equal
}
private void HandleOperation(operation selectedOp, char symbol)
{
     if (double.TryParse(text, out a)) // 3+κ³Ό 같은 숫자+μ—°μ‚°μž ν‘œμ‹œλ₯Ό μœ„ν•΄ ν•„μš”
     {
         op = selectedOp; //μ—°μ‚°μž 선택
         textBox_result.Text += symbol; // μ—°μ‚°μž μΆ”κ°€
         result_Num = false;
     }
}
  • HandleOperation()은 +, -, Γ—, Γ· 클릭 μ‹œ μ‹€ν–‰λ˜λ©° ν˜„μž¬ μž…λ ₯κ°’ 검증 ν›„ μ—°μ‚°μžμ™€ ν”Όμ—°μ‚°μžλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

2. 숫자 λ²„νŠΌ 처리 (AppendNumber)

AppendNumber λ©”μ„œλ“œλŠ” 숫자 λ²„νŠΌμ„ 클릭할 λ•Œλ§ˆλ‹€ ν•΄λ‹Ή 숫자λ₯Ό RichTextBox에 μΆ”κ°€ν•©λ‹ˆλ‹€.
결과값을 ν‘œμ‹œν•œ ν›„ μƒˆλ‘œμš΄ 숫자λ₯Ό μž…λ ₯ν•˜λ €λŠ” 경우 화면을 μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

private void AppendNumber(string num)
{
    if (result_Num)
    {
        richTextBox1.Text = "";
        result_Num = false; 
    }
    richTextBox1.Font = new Font("Arial", 14);
    richTextBox1.Text += num;
}

3. μ—°μ‚°μž 처리 (HandleOperation)

HandleOperation λ©”μ„œλ“œλŠ” μ‚¬μš©μžκ°€ μ—°μ‚°μž λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ, μž…λ ₯된 ν…μŠ€νŠΈκ°€ μœ νš¨ν•œμ§€ ν™•μΈν•œ ν›„, μ—°μ‚°μžλ₯Ό μ²˜λ¦¬ν•˜κ³  ν…μŠ€νŠΈμ— ν•΄λ‹Ή μ—°μ‚°μžλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
μ—°μ‚°μž μž…λ ₯이 잘λͺ»λœ μœ„μΉ˜μ— μžˆμ„ 경우 μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

private void HandleOperation(operation selectedOp, char symbol)
{
    string text = richTextBox1.Text;

    // 빈칸 / μ—°μ‚°μžλ‘œ λλ‚˜λŠ” 경우 였λ₯˜ 처리
    if (string.IsNullOrEmpty(text) || operators.Any(op => text.EndsWith(op.ToString())) || text.EndsWith("."))
    {
        ShowError("μ—°μ‚°μžλ₯Ό μž…λ ₯ν•  수 μ—†λŠ” μœ„μΉ˜μž…λ‹ˆλ‹€.");
        return;
    }

    if (double.TryParse(text, out a))
    {
        op = selectedOp;
        richTextBox1.Text += symbol; 
        result_Num = false;
    }
    else
    {
        ShowError("숫자λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μž…λ ₯ν•΄μ£Όμ„Έμš”.");
    }
}

4. = λ²„νŠΌ 클릭 μ‹œ μ—°μ‚° μˆ˜ν–‰ (button_eq_Click)

button_eq_Click λ©”μ„œλ“œλŠ” μ‚¬μš©μžκ°€ = λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ, μž…λ ₯된 μˆ˜μ‹μ— λŒ€ν•΄ 연산을 μˆ˜ν–‰ν•˜κ³  κ²°κ³Όλ₯Ό 화면에 ν‘œμ‹œν•©λ‹ˆλ‹€.
μ—°μ‚°μžλŠ” op λ³€μˆ˜μ— μ €μž₯된 값에 따라 λ‹€λ₯΄κ²Œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

private void button_eq_Click(object sender, EventArgs e)
{
    string text = richTextBox1.Text;
    result_Num = true;

    // 잘λͺ»λœ μž…λ ₯ 체크
    if (string.IsNullOrEmpty(text) || operators.Any(op => text.EndsWith(op.ToString())))
    {
        ShowError("μ—°μ‚°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.");
        return;
    }

    string[] parts = null;
    char operatorSymbol = ' '; 

    switch (op)
    {
        case operation.plus:
            parts = text.Split('+');
            operatorSymbol = '+';  
            break;
        case operation.minus:
            parts = text.Split('-');
            operatorSymbol = '-';  
            break;
        case operation.multiple:
            parts = text.Split('*');
            operatorSymbol = '*';  
            break;
        case operation.divide:
            parts = text.Split('/');
            operatorSymbol = '/';  
            break;
    }

    if (parts == null || parts.Length != 2 || !double.TryParse(parts[0], out a) || !double.TryParse(parts[1], out b))
    {
        ShowError("μ˜¬λ°”λ₯Έ 계산식이 μ•„λ‹™λ‹ˆλ‹€.");
        return;
    }

    switch (op)
    {
        case operation.plus:
            result = a + b; 
            break;
        case operation.minus:
            result = a - b; 
            break;
        case operation.multiple:
            result = a * b; 
            break;
        case operation.divide:
            if (b == 0)
            {
                MessageBox.Show("0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€.");
                return;
            }
            result = a / b; 
            break;
    }

    richTextBox1.Clear();
    richTextBox1.AppendText($"{a} {operatorSymbol} {b} = {result}");
    a = result;
}

5. λΆ€ν˜Έ μ „ν™˜ 처리 (button_pm_Click)

button_pm_Click λ©”μ„œλ“œλŠ” λΆ€ν˜Έ μ „ν™˜ λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ, ν˜„μž¬ μž…λ ₯된 숫자의 λΆ€ν˜Έλ₯Ό λ°˜μ „μ‹œν‚΅λ‹ˆλ‹€.

private void button_pm_Click(object sender, EventArgs e)
{
    string text = richTextBox1.Text;
    if (string.IsNullOrEmpty(text) || operators.Any(op => text.LastIndexOf(op) > 0) || text.EndsWith("."))
    {
        ShowError("λΆ€ν˜Έλ₯Ό λ°”κΏ€ 수 μ—†μŠ΅λ‹ˆλ‹€.");
        return;
    }

    if (double.TryParse(text, out double value))
    {
        richTextBox1.Text = (-value).ToString();
    }
}

πŸ“· UI 미리보기

image image


πŸš€ μ‹€ν–‰ 방법

  1. Visual Studioμ—μ„œ ν”„λ‘œμ νŠΈ μ—΄κΈ°
  2. Form1.csμ—μ„œ λ””μžμΈ 및 둜직 확인
  3. μ‹€ν–‰(F5) ν›„ WinForms 기반 계산기 μ‚¬μš©

✨ ν–₯ν›„ κ°œμ„  아이디어

  • μ—°μ‚° μš°μ„ μˆœμœ„ 처리 (예: 2 + 3 Γ— 4)
  • 연속 계산 처리 (예: 2 + 3 = + 4 =)
  • 계산 λ‚΄μ—­ μ €μž₯ κΈ°λŠ₯
  • κ΄„ν˜Έ μ—°μ‚° κ΅¬ν˜„
  • ν‚€λ³΄λ“œ μž…λ ₯ λŒ€μ‘

πŸ§‘β€πŸ’» 개발자

  • 이름: λ§ΉμŠΉμ—°

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages