【问题标题】:Simple Calculator in C# Forms with Running TotalC# 表单中的简单计算器,运行总计
【发布时间】:2020-04-27 04:39:59
【问题描述】:

我正在网上攻读通用学位,我们的任务是使用 .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";
                }

            }
        }




    }
}

【问题讨论】:

  • [visual-studio] 标记只能用于有关 Visual Studio 应用程序的问题。
  • 如果你要编程,你应该研究很多东西,比如“input += 0;”这一行这意味着什么。但要回答您的问题,当前代码中最简单的方法是在运行操作后在 cmdEqual_Click 处理程序中设置operand1 = result。

标签: c# calculator cumulative-sum


【解决方案1】:

由于这是一项作业,我希望您的代码包含更多的 cmets,详细说明您的算法

我认为您需要考虑一下真正的计算器是如何工作的。我假设您正在做一个简单的操作,如果设置了两个操作数,则任何操作都可以触发计算 - 如果您将结果放入操作数 1 并取消设置操作数 2,则在计算之后:

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

  • 将操作数 1 设置为 1
  • 将操作设置为 +
  • 将操作数 2 设置为 2
  • 两个操作数均已设置,因此计算,将操作数 1 设置为 4 并取消设置操作数 2 和运算符
  • 将操作设置为 +
  • 计算是因为按下了 = 但不要取消设置操作数 2(因为用户可以敲击 = 并每次加 4)

考虑有一个Calculate 方法,该方法接受一个布尔值,指示它是否应该取消设置operand2/operator。计算应始终将运算结果传输到操作数 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: 
    }

每个按钮都使用相同的处理程序


如果您要制作的计算器能够在加减法之前完成乘法和除法运算,那么您将不得不将所有操作数和运算符存储在一个列表中,然后在按下等于时首先通过列表执行某些操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多