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

编程项目2020/1/2 20:23:31阅读:919

上一篇文章我们根据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 "/":
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();
}

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


好了,本篇文章就到这里,计算器程序也已经完成了。有疑问可添加QQ联系我。

最后贴上源码下载地址:计算器界面lib

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