-
初步想法:
1.只进行两个数和三个数之间的运算,降低难度,用两个字符类型变量存储数字之间的运算符,用double类型数组存储数字,长度可设为3。
2.然后就要考虑四个数字以上的运算,可以在写表达式时进行部分运算,让最后的运算始终是两个数字或者三个数字之间的运算。
3.用label控件做计算器的显示屏,其余全部为button控件,控件的背景图,字体大小,格式,位置等可以自行调整。 -
代码实现:
1.全局变量
public double result; //存储计算结果
public char operation_1='0'; //记录输入的第一个运算符
public char operation_2='0'; //记录输入的第二个运算符
bool b = true;//判断是第几次点击等于按钮
2.菜单输入举例
private void button1_Click(object sender, EventArgs e)
{
label1.Text += "1";
}
3.清空,删除,显示屏字体显示
private void button18_Click(object sender, EventArgs e)//清空按钮
{
b = true;
operation_1 = '0';
label1.Text = "";
}
private void button19_Click(object sender, EventArgs e)//删除按钮
{
string str = label1.Text;
label1.Text = "";
char[] ch = new char[str.Length];
for(int i=0;i<str.Length-1;i++)
{
ch[i] = str[i];
label1.Text += ch[i].ToString();
}
}
private void label1_TextChanged(object sender, EventArgs e)
{//根据输入字符的长度改变字体的大小
string str = label1.Text;
if (str.Length > 13 && str.Length<18)
label1.Font = new Font(label1.Font.FontFamily,25);
else if(str.Length>=18)
label1.Font = new Font(label1.Font.FontFamily, 20);
else
label1.Font = new Font(label1.Font.FontFamily, 36);
}
4.运算符按钮举例
//运算符按钮:保证不能同时输入两个运算符号,最开头不能是运算符
private void button13_Click(object sender, EventArgs e)//加法按钮
{
string str = label1.Text;
int i = str.Length - 1;
if(str.Length != 0 && str[i] != '+' && str[i] != '-' && str[i] != 'x' && str[i] != '÷')
{
if (operation_1 == '0')
{
operation_1 = '+';
label1.Text += "+";
}
else if (operation_1 != '0' && operation_2 == '0')
{
operation_2 = '+';
label1.Text += "+";
}
else
{
string[] str1 = str.Split(new char[] { '+', '-', 'x', '÷' });
double[] number = new double[str1.Length]; //记录输入的数
for (int j = 0; j < str1.Length; j++)
number[j] = Convert.ToDouble(str1[j]);
if ((operation_1 == '+' || operation_1 == '-') && (operation_2 == 'x' || operation_2 == '÷'))
{
switch (operation_2)
{
case 'x': result = number[1] * number[2]; break;
case '÷': result = number[1] / number[2]; break;
}
switch (operation_1)
{
case '+': label1.Text = number[0] + "+" + result; break;
case '-': label1.Text = number[0] + "-" + result; break;
case 'x': label1.Text = number[0] + "x" + result; break;
case '÷': label1.Text = number[0] + "÷" + result; break;
}
operation_2 = '0';
b = true;
}
else
{
switch (operation_1)
{
case '+': result = number[0] + number[1]; break;
case '-': result = number[0] - number[1]; break;
case 'x': result = number[0] * number[1]; break;
case '÷': result = number[0] / number[1]; break;
}
switch (operation_2)
{
case '+': label1.Text = result + "+" + number[2]; break;
case '-': label1.Text = result + "-" + number[2]; break;
case 'x': label1.Text = result + "x" + number[2]; break;
case '÷': label1.Text = result + "÷" + number[2]; break;
}
operation_1 = operation_2;
operation_2 = '0';
b = true;
}
}
}
}
5.等于按钮
private void button17_Click(object sender, EventArgs e)//等于按钮
{
if (b)
{
if (label1.Text.Length != 0)
{
string str = label1.Text;
string[] str1 = str.Split(new char[] { '+', '-', 'x', '÷' });
double[] number = new double[str1.Length]; //记录输入的数
for (int i = 0; i < str1.Length; i++)
number[i] = Convert.ToDouble(str1[i]);
if (number.Length == 2)
{
switch (operation_1)
{
case '+': result = number[0] + number[1]; label1.Text += "=" + result; break;
case '-': result = number[0] - number[1]; label1.Text += "=" + result; break;
case 'x': result = number[0] * number[1]; label1.Text += "=" + result; break;
case '÷': result = number[0] / number[1]; label1.Text += "=" + result; break;
}
}
else if (number.Length == 3)
{
if ((operation_1 == '+' || operation_1 == '-') && (operation_2 == 'x' || operation_2 == '÷'))
{
switch (operation_2)
{
case 'x': result = number[1] * number[2]; break;
case '÷': result = number[1] / number[2]; break;
}
switch (operation_1)
{
case '+': result += number[0]; break;
case '-': result = number[0] - result; break;
}
label1.Text += "=" + result;
}
else
{
switch (operation_1)
{
case '+': result = number[0] + number[1]; break;
case '-': result = number[0] - number[1]; break;
case 'x': result = number[0] * number[1]; break;
case '÷': result = number[0] / number[1]; break;
}
switch (operation_2)
{
case '+': result += number[2]; break;
case '-': result -= number[2]; break;
case 'x': result *= number[2]; break;
case '÷': result /= number[2]; break;
}
label1.Text += "=" + result;
}
}
else if (number.Length > 3)
label1.Text = "";
}
b = false;
}
else
{
operation_1 = operation_2 = '0';
label1.Text = result.ToString();
b = true;
}
}
- 效果展示