簡體   English   中英

C# Forms 中的簡單計算器,運行總計

[英]Simple Calculator in C# Forms with Running Total

我正在在線學習通用學位,我們的任務是使用.Forms 開發一個簡單的計算器

我能夠非常簡單地創建 GUI,但在開發跟蹤運行總數並允許用戶執行多個操作的變量時遇到了困難。

目前,我的代碼允許兩個輸入和 1 個操作。 合計后,如果用戶選擇另一個數字進行運算,代碼只需刪除第一個輸入並將其替換為第二個原始輸入,然后獲取第三個輸入並替換第二個輸入以進行新的計算。

例如,如果我想加 3 + 6,我的計算器會給我 9,但是如果我然后按 + 4,而不是得到 13(3+6+4,或者更好的是 9+4)我得到 10( 6+4)

我希望有人能指出正確的方向,為運行總計創建一個變量,該變量在執行操作后跟蹤總計,然后允許用戶繼續執行操作,而無需清除僅兩個輸入的結果。

謝謝

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

namespace IT232M2_McCarver_Par1
{
    public partial class Calculator : Form
    {
        string input = string.Empty;
        string operand1 = string.Empty;
        string operand2 = string.Empty;
        char operation;
        double result = 0.0;

        public Calculator()
        {
            InitializeComponent();
        }


        private void button11_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 6;
            this.lblDisplay.Text += input;
        }

        private void button10_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 1;
            this.lblDisplay.Text += input; 
        }

        private void cmdZero_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 0;
            this.lblDisplay.Text += input;
        }

        private void cmdTwo_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 2;
            this.lblDisplay.Text += input;
        }

        private void cmdThree_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 3;
            this.lblDisplay.Text += input;
        }

        private void cmdFour_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 4;
            this.lblDisplay.Text += input;
        }

        private void cmdFive_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 5;
            this.lblDisplay.Text += input;
        }

        private void cmdSeven_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 7;
            this.lblDisplay.Text += input;
        }

        private void cmdEight_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 8;
            this.lblDisplay.Text += input;
        }

        private void cmdNine_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            input += 9;
            this.lblDisplay.Text += input;
        }
        private void cmdClear_Click(object sender, EventArgs e)
        {
            this.lblDisplay.Text = "";
            this.input = string.Empty;
            this.operand1 = string.Empty;
            this.operand2 = string.Empty;

        }

        private void cmdAdd_Click(object sender, EventArgs e)
        {
            operand1 = input;
            operation = '+';
            input = string.Empty;
        }

        private void cmdSubtract_Click(object sender, EventArgs e)
        {
            operand1 = input;
            operation = '-';
            input = string.Empty;
        }

        private void cmdMultiply_Click(object sender, EventArgs e)
        {
            operand1 = input;
            operation = '*';
            input = string.Empty;
        }

        private void cmdDivide_Click(object sender, EventArgs e)
        {
            operand1 = input;
            operation = '/';
            input = string.Empty;
        }

        private void cmdEqual_Click(object sender, EventArgs e)
        {
            string runningTotal = result.ToString();

            operand2 = input;
            double num1, num2;
            double.TryParse(operand1, out num1);
            double.TryParse(operand2, out num2);

            if (operation == '+')
            {
                result = num1 + num2;
                lblDisplay.Text = result.ToString();
            }
            else if (operation == '-')
            {
                result = num1 - num2;
                lblDisplay.Text = result.ToString();
            }
            else if (operation == '*')
            {
                result = num1 * num2;
                lblDisplay.Text = result.ToString();
            }
            else if (operation == '/')
            {
                if (num2 != 0)
                {
                    result = num1 / num2;
                    lblDisplay.Text = result.ToString();
                }
                else
                {
                   lblDisplay.Text = "Cant /Zero";
                }

            }
        }




    }
}

由於這是一項作業,我希望您的代碼包含更多注釋,詳細說明您的算法

我認為你需要考慮一個真正的計算器是如何工作的。 我假設您正在做一個簡單的操作,如果設置了兩個操作數,則任何操作都可以觸發計算 - 如果您將結果放入操作數 1 和未設置的操作數 2,則在計算之后:

想象一下用戶按下1+2+4=

  • 將操作數 1 設置為 1
  • 將操作設置為 +
  • 將操作數 2 設置為 2
  • 兩個操作數都已設置,因此計算,將操作數 1 設置為 4 並取消設置操作數 2 和運算符
  • 將操作設置為 +
  • 計算是因為 = 被按下但不要取消設置操作數 2(因為用戶可以敲擊 = 並每次加 4)

考慮使用一個計算方法,該方法采用 Boolean 指示它是否應該取消設置操作數 2/操作符。 計算應始終將運算結果傳輸到操作數 1。 是否設置了操作符應該用於確定用戶正在輸入的是操作數 1 還是操作數 2。 就我個人而言,我會取消輸入並直接連接操作數 1 和 2。 我會決定在點擊處理程序中擴展哪個。 我有一個專門的變量來表示最近何時按下等號,如果用戶在按下等號后按下數字按鈕,它將取消設置所有內容,或者保留操作數 1 並設置新操作並插入操作數 2,如果這是用戶在等號后按下的操作

我們可以在您的代碼中清理其他內容。 這個片段讓我困惑了一陣子:

    private void cmdEight_Click(object sender, EventArgs e)
    {
        this.lblDisplay.Text = "";
        input += 8;
        this.lblDisplay.Text += input;
    }

這將更合乎邏輯:

    private void cmdEight_Click(object sender, EventArgs e)
    {
        input += 8;
        lblDisplay.Text = input: 
    }

但實際上,如果您的按鈕只有 8 作為其文本,您可以這樣做:

    private void cmdAny_Click(object sender, EventArgs e)
    {
        input += (sender as Button).Text;
        lblDisplay.Text = input: 
    }

每個按鈕都使用相同的處理程序


如果您正在制作一個了解乘法和除法的計算器,則在加法和減法之前完成,您將必須將所有操作數和運算符存儲在一個列表中,然后 go 通過列表執行某些操作,首先按下等於

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM