winform项目_winform项目——计算器程序02:计算逻辑实现

上一篇文章我们根据VS文档上的教程搭建了计算器的界面,本篇文章就介绍如何实现它的计算逻辑。

逻辑分析

首先,我们要明白,实现计算逻辑,实际上就是在界面上按钮的点击事件中进行一些操作。我们可以将界面上的按钮分为两大类,一类是用于输入的数字按钮,一类是用于计算的运算按钮。这两类按钮要做的事情都是类似的,因此我们可以在编码时做一个公共的方法即可。

其次,计算器的本质是两个操作数A、B进行某种方式的操作。不管是加减乘除,它们都只是两个操作数,那么我们在类中就需要定义两个变量用于保存这两个操作数即可。

6135d68e9ee93f544aba254a1df4bb7a.png

其次,计算器有一个连续计算的功能,我们需要实现1+2-3+4这样的连续操作,这也是必须要考虑的。

代码实现

首先,我们需要在类中定义四个字段:

bool iscalced = false;//计算标志符        string calcSign = "+";//计算符        string firstNum = null;        //两个变量为两个计算的数        //设置为string类型更方便检测是否已经赋值        string secondNum = null;

第一个字段用于标识是否已经点击了计算按钮。第二个字段是计算符,用于计算方法中识别怎样计算,后面两个是用于保存两个计算操作数的。把它定义为string类型是为了方便检测它的值是否已经被赋值过,可以检测其是否为null实现。

其次,数字按钮的点击事件:

private void twoButton_Click(object sender, EventArgs e)        {            NumKeyDown("2");        }

我们写了一个公用的方法用于数字按钮的点击事件,参数意思为被点击的数,这里被点击的是数字2,下面是函数的实现:

private void NumKeyDown(string num)        {            if (iscalced)            {                //如果已经点击了计算符                iscalced = false;                //清除输入框                inputBox.Clear();                //再追加内容                inputBox.AppendText(num);            }            else            {                //没有点击计算符就继续追加数字                inputBox.AppendText(num);            }        }

加了个判断就是区分用户点击这个数字按钮之前,有没有点击过运算符,比如我们点击1,输入框显示1,之后点击+号,再点击1的时候就要把输入框清空,然后显示1,因此这就是iscalced字段的作用。

其次是运算符按钮的点击事件,这里是减号按钮的点击事件:

private void subtractionButton_Click(object sender, EventArgs e)        {            label1.Text += " " + inputBox.Text + " " + "-";            calcToInputBox("-");        }

忽略掉那个label1,这是我用来记录的,我们只看calcToInputBox()这个函数,四个运算符按钮的点击事件都调用这个方法,参数是运算符的符号,下面是方法的实现:

private void calcToInputBox(string sign)        {            //判断第一个操作数是否为空            if (firstNum != null)            {                //不为空的话,说明这次点击要计算两个操作数的运算结果                secondNum = inputBox.Text;                inputBox.Text = calclate(Convert.ToDouble(firstNum), Convert.ToDouble(secondNum), calcSign);            }            //保存计算符            calcSign = sign;            //将计算标志符置为true            iscalced = true;            //在firstNum中保存当前输入框中的数字            firstNum = inputBox.Text;        }

意思都已经注释了,如果还不理解的话可以看随后发布的配套视频。

方法中涉及到一个计算方法:calclate()下面是该方法的实现:

private string calclate(double firstNum, double secondNum, string calcSign)        {            string result = null;            switch (calcSign)            {                case "+":                    result = (firstNum + secondNum).ToString();                    break;                case "-":                    result = (firstNum - secondNum).ToString();                    break;                case "*":                    result = (firstNum * secondNum).ToString();                    break;                case "/":                    result = (firstNum / secondNum).ToString();                    break;            }            return result;        }

该方法很简单,就是根据两个操作数和一个计算符计算出结果。

最后,是一个比较特殊的等于号按钮的点击事件:

private void equalsButton_Click(object sender, EventArgs e)        {            if(inputBox.Text != "")            {                if (firstNum != null)                {                    secondNum = inputBox.Text;                    label1.Text += " " + inputBox.Text + " " + "=";                    inputBox.Text = calclate(Convert.ToDouble(firstNum), Convert.ToDouble(secondNum), calcSign);                    //运算结束将两个变量置为null                    firstNum = null;                    secondNum = null;                }                iscalced = true;                listView1.Items.Add(label1.Text + " " + inputBox.Text);            }        }

和之前的方法差不多,就是运算之后将两个操作数置空,那个listview是添加历史记录用的。

还有一个清空按钮的点击事件:

private void clearButton_Click(object sender, EventArgs e)        {            label1.Text = "";            iscalced = false;            firstNum = null;            secondNum = null;            calcSign = "+";            inputBox.Clear();        }

就是对所有变量的初始化。

01bf8f1c4e412bc8ba0b7e1d77388c44.png

好了,本篇文章就到这里,计算器程序也已经完成了。不明白的地方可以看配套视频。

本文系小博客网站原创,转载请注明文章链接地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值