功能设计
1、计算器中,添加 0-9 共十个数字键和小数点键。
2、计算器中,增添 加、减、乘、除、等于 五个功能键。
设计思路
1、数字计算有优先级,因此将操作符放入栈内,先进行乘除操作、后进行加减操作。
2、可以显示当前数字计算内容,因此将每一次属于本次运算的数字放入运算信息中进行显示。
实现代码
using System;
using System.Collections;
using System.Windows.Forms;
namespace Calculator
{
public partial class Form1 : Form
{
// 存储写入数字
Stack numbers = new Stack();
// 存储运算符
Stack operations = new Stack();
// 判断计算信息是否需要重新显示
bool show = false;
// 判断是否需要重新写入
bool write = false;
bool exist = false;
/*
* 初始化
*/
public Form1()
{
numbers.Push(0);
InitializeComponent();
textBox1.Text = "0";
textBox2.Text = "";
}
/*
* 数字键触发事件实现
*/
private void One_Click(object sender, EventArgs e)
{
if(textBox1.Text == "0" || write)
textBox1.Text = "1";
else
textBox1.Text += "1";
write = false;
}
private void Two_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "2";
else
textBox1.Text += "2";
write = false;
}
private void Three_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "3";
else
textBox1.Text += "3";
write = false;
}
private void Four_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "4";
else
textBox1.Text += "4";
write = false;
}
private void Five_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "5";
else
textBox1.Text += "5";
write = false;
}
private void Six_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "6";
else
textBox1.Text += "6";
write = false;
}
private void Seven_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "7";
else
textBox1.Text += "7";
write = false;
}
private void Eight_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "8";
else
textBox1.Text += "8";
write = false;
}
private void Nine_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "9";
else
textBox1.Text += "9";
write = false;
}
private void Zero_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "0";
else
textBox1.Text += "0";
write = false;
}
private void Point_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0" || write)
textBox1.Text = "0.";
else if(!exist)
textBox1.Text += ".";
write = false;
exist = true;
}
/*
* 功能键触发事件
*/
private void Del_Click(object sender, EventArgs e)
{
string text = textBox1.Text;
// 删除最后一个字符,若数字长度为1,则将显示置零。
if (text.Length > 1)
{
textBox1.Text = text.Substring(0, text.Length - 1);
if(text.Substring(text.Length-1, 1) == ".")
{
exist = false;
}
}
else
textBox1.Text = "0";
}
private void Add_Click(object sender, EventArgs e)
{
if(show == false)
textBox2.Text += textBox1.Text + "+";
else
textBox2.Text = textBox1.Text + "+";
// 将写入的数字入栈
numbers.Push(double.Parse(textBox1.Text));
// 输入显示置零
textBox1.Text = "0";
// 将运算符入栈
operations.Push("+");
show = false;
// 允许重新写入
write = true;
exist = false;
}
private void Sub_Click(object sender, EventArgs e)
{
if (show == false)
textBox2.Text += textBox1.Text + "-";
else
textBox2.Text = textBox1.Text + "-";
// 将写入的数字入栈
numbers.Push(double.Parse(textBox1.Text));
// 输入显示置零
textBox1.Text = "0";
// 将运算符入栈
operations.Push