简单版计算器,加减乘除功能。
具体怎么做出来的呢,嗯,我先说一说布局。显示框用两个label控件,label1显示操作运算,label2显示运算值。设置其AutoSize属性为false,就可以把label控件延伸扩大了。
操作运算符和数字都是button控件,外观设置就不说了,最基础的,小白不会的就去查资料。
然后现在就说一下操作
代码了,添加一个操作运算基类Oper
public class Oper{private double _numberA = 0;private double _numberB = 0;public double NumberA{get { return _numberA; }set { _numberA = value; }}public double NumnberB{get { return _numberB; }set { _numberB = value; }}public virtual double GetResult(){double result = 0d;return result;}}
添加四个加减乘除类继承Oper类,
//加法类
public class OperAdd : Oper {/// <summary>/// 重写父方法:GetResult/// </summary>/// <returns></returns>public override double GetResult(){double result = 0;result = NumberA + NumnberB;return result;}}//减法类public class OperSub : Oper {public override double GetResult(){double result = 0;result = NumberA - NumnberB;return result;}}//乘法类
public class OperMul : Oper {public override double GetResult(){double result = 0;result = NumberA * NumnberB;return result;}}//除法类
public class OperationDiv : Oper {public override double GetResult(){double result = 0;if (NumnberB == 0)throw new Exception("除数不能为0.");result = NumberA * 1.0 / NumnberB;return result;}}
再添加个运算工厂类OperFactory作为中转站,输入运算符,工厂就能实例化出合适的对象,通过多态,返回父类的方式实现计算器的结果。
public class OperFactory{/// <summary>/// 只需输入运算符,工厂就能实例化出合适的对象,通过多态,返回父类的方式实现了计算器的结果/// </summary>/// <param name="operate">运算符</param>/// <returns></returns>public static Oper createOpeate(EnumOperator op){Oper oper = null;switch (op){case EnumOperator.Add:oper = new OperationAdd();break;case EnumOperator.Minus:oper = new OperationSub();break;case EnumOperator.Multiply:oper = new OperationMul();break;case EnumOperator.Divide:oper = new OperationDiv();break;default:break;}return oper;}}
首先按数字的时候,添加一个函数NumberClick


double currentValue = 0; //第1个数 double numSum = 0; //第2个数private EnumOperator currentOperator; //当前操作符 /// <summary>/// 按数字的时候/// </summary>/// <param name="strNumber"></param>private void NumberClick(string strNumber){label1.Text = label1.Text + strNumber;currentValue = Convert.ToDouble(label1.Text);label2.Text += strNumber;}
然后给每个数字按钮弄一个点击事件,调用数字函数。


private void button7_Click(object sender, EventArgs e){NumberClick(button7.Text);}
定义一个函数DisOperator,实现显示框中输入的数字和运算符


private void DisplayOperator(EnumOperator op){switch (op){case EnumOperator.None:label2.Text = label1.Text;label2.Text += "";break;case EnumOperator.Add:if (label1.Text != ""){label2.Text = label1.Text;}label2.Text += "+";break;case EnumOperator.Minus:if (label1.Text != ""){label2.Text = label1.Text;}label2.Text += "-";break;case EnumOperator.Multiply:label2.Text = label1.Text;label2.Text += "x";break;case EnumOperator.Divide:label2.Text = label1.Text;label2.Text += "➗";break;default:break;}}
根据运算符和两个数字的计算结果
调用简单工厂模式生成的类
Evaluate


private void Evaluate(){Oper oper;//根据不同的对象生成不同的类,多态!switch (currentOperator){case EnumOperator.None:break;case EnumOperator.Add:oper = OperationFactory.createOpeate(EnumOperator.Add);oper.NumberA = numSum;oper.NumnberB = currentValue;numSum = oper.GetResult();break;case EnumOperator.Minus:oper = OperationFactory.createOpeate(EnumOperator.Minus);oper.NumberA = numSum;oper.NumnberB = currentValue;numSum = oper.GetResult();break;case EnumOperator.Multiply:oper = OperationFactory.createOpeate(EnumOperator.Multiply);oper.NumberA = numSum;oper.NumnberB = currentValue;numSum = oper.GetResult();break;case EnumOperator.Divide:if (currentValue != 0){oper = OperationFactory.createOpeate(EnumOperator.Divide);oper.NumberA = numSum;oper.NumnberB = currentValue;numSum = oper.GetResult();}else{MessageBox.Show("除数不能为0哦,亲~", "出错了~");}break;}currentValue = 0;currentOperator = EnumOperator.None;}
再定义一个函数OperatorClick,调用DisOperator函数和Evaluate函数


private void OperatorClick(EnumOperator op){if (currentOperator != EnumOperator.None){//计算 Evaluate();}else{//numSum = double.Parse(lblResult.Text);double.TryParse(label1.Text, out numSum);}DisplayOperator(op);label1.Text = "";currentOperator = op;}
在加减乘除按钮上双击,进入后台,调用OperatorClick()函数


private void button12_Click(object sender, EventArgs e){OperatorClick(EnumOperator.Add);}private void button13_Click(object sender, EventArgs e){OperatorClick(EnumOperator.Minus);}private void button14_Click(object sender, EventArgs e){OperatorClick(EnumOperator.Multiply);}private void button15_Click(object sender, EventArgs e){OperatorClick(EnumOperator.Divide);}
在=按钮上双击,进入后台,编辑


private void button10_Click(object sender, EventArgs e){Evaluate();label1.Text = numSum.ToString();//防止重复按 = if (label1.Text.Length > 1 && label1.Text.Substring(label1.Text.Length - 1) != "="){label1.Text += "=";}}
在C按钮上双击,进入后台编辑


private void button16_Click(object sender, EventArgs e){currentOperator = EnumOperator.None;label1.Text = "";label2.Text = "";numSum = 0;}
ok,这就是简单版计算器的全部讲解以及代码了。
根据一个大佬的源码改进的,编程语言勉强入门,有不足的地方请大佬们指点。