上一篇文章我们根据VS文档上的教程搭建了计算器的界面,本篇文章就介绍如何实现它的计算逻辑。
逻辑分析
首先,我们要明白,实现计算逻辑,实际上就是在界面上按钮的点击事件中进行一些操作。我们可以将界面上的按钮分为两大类,一类是用于输入的数字按钮,一类是用于计算的运算按钮。这两类按钮要做的事情都是类似的,因此我们可以在编码时做一个公共的方法即可。
其次,计算器的本质是两个操作数A、B进行某种方式的操作。不管是加减乘除,它们都只是两个操作数,那么我们在类中就需要定义两个变量用于保存这两个操作数即可。
其次,计算器有一个连续计算的功能,我们需要实现1+2-3+4这样的连续操作,这也是必须要考虑的。
代码实现
首先,我们需要在类中定义四个字段:
bool iscalced = false;//计算标志符
string calcSign = "+";//计算符
string firstNum = null;
//两个变量为两个计算的数
//设置为string类型更方便检测是否已经赋值
string secondNum = null;
第一个字段用于标识是否已经点击了计算按钮。第二个字段是计算符,用于计算方法中识别怎样计算,后面两个是用于保存两个计算操作数的。把它定义为string类型是为了方便检测它的值是否已经被赋值过,可以检测其是否为null实现。
其次,数字按钮的点击事件:
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 "/":