C# 一步一步完成一个简单的计算器 第三步---实现双目运算

来源:互联网 发布:淘宝如何找人刷销量 编辑:程序博客网 时间:2024/04/30 13:02

实现双目运算是这个系列中难道较大的,基本都是在写代码,在一些函数中相互调用,修改变量,可能比较绕,

1.首先打开代码文本,在类的里面 声明几个变量

        private bool isFirstInput = true;   //是否第一次输入        private string lastVal= "";         //双目运算的前一个数        private string symbol = "";         //保存 当前运算符合,只有双目        private bool isCanCalc = false;     //判断在按下双目运算符后 是进行计算 还是修改已有的Symbol        private bool isClr = false;         //是否在CText有数字的情况下,重新输入;
( 我的窗口类没有修改,是默认的Form1 )

isFirstInput 就是你运行这个计算器输入的第一个用于运算的数字,按下双目运算符,表示第一次输入结束; 当然按下 C 键可以重置 isFirstInput

lastVal        就是储存双目运算的前一个数(比如 A+B ,就保存 A) 在 加减乘除 这些双目运算的按钮按下的事件中 进行更新;

symbol       保存当前正要执行的 双目运算的符合(+ - * /)            更新,赋值的函数 同上

isCanCalc  判断在按下双目运算符后 是进行计算 还是修改已有的Symbol在数字按钮按下和双目运算的按钮按下的事件中更新

isClr           用于按下 = 按钮,后重新输入时进入数字按钮事件激活清空       在数字按钮按下和 Res_Btn按下 中修改


2. 编写 双目运算按钮按下进行的代码

任意一个双目运算的按钮的 Click 中写入 Symbol_Btn_Clic ,创建这个事件,并写入如下代码

           string NowSymbol = (sender as Button).Text;            double result;            //如是第一次输入            if (isFirstInput == true)            {                lastVal = CText.Text;   //将当前的值赋给 lastVal                symbol = NowSymbol;     //将取得计算符合传进symbol                CText.Text = "0";       //刷新输入 为输入下一个数做准备                isFirstInput = false;   //已经完成 第一次输入                 //添加到 RText                Rtext.Text = lastVal + symbol; //显示第一个数和运算符合                isCanCalc = false;      //没有输入第二个数 不能进行计算            }            else if(isCanCalc==true)    //如果允许计算            {                result = Calc(double.Parse(lastVal), double.Parse(CText.Text), symbol); //计算函数                Rtext.Text = Rtext.Text + CText.Text + NowSymbol;   //更新 Rtext 的显示                lastVal=CText.Text = result.ToString();             //更新 lastVal 和 CText 的值                symbol = NowSymbol;                                 //更新 新的待执行的双目运算的符合                isClr = true;                                       //允许清空 当前CText的显示                isCanCalc = false;                                  //没有输入输入下一个数,再次按下双目运算按钮,只能修改当前symbol的值            }            else            {                symbol = NowSymbol;     //不允许计算, 只能修改当前symbol的值                CText.Text = CText.Text.Substring(0, CText.Text.Length - 1)+symbol; //更新 Rext 的显示            }


3. 编写 Calc 函数,这个没有什么多解释的

        private double Calc(double v1, double v2, string symbol)        {            double result = 0.0;            switch (symbol)            {                case "+":                    result = v1 + v2; break;                case "-":                    result = v1 - v2; break;                case "*":                    result = v1 * v2; break;                case "/":                    result = v1 / v2; break;            }            return result;        }

  我没有对 除法 是否除以0 进行判断处理,请自行修改,添加


4. 对 NumBtn_Click 进行修改

            string numStr= (sender as Button).Text;     //sender 是触发这个事件的成员 ,                                                        //我们是一个按钮按下这个事件触发,所以要 将其转换为 Button 类型,                                                        //再看按钮的Test值 是我们要添加并显示的数字,我们就直接取出来            if (isClr == true) {                        //进行 这步操作, 接下了的if就会运行 < CText.Text == "0" > 下的,                CText.Text = "0";                       //以此到达重新输入的目的                isClr = false;            }            if (CText.Text == "0")                // 如果为零的话,说明这是初始值 overload                CText.Text = numStr;            else                CText.Text += numStr;            if (isFirstInput == false)                  //排除了 第一次输入后, 按下数字键,都表明可以进行计算                isCanCalc = true;                       //自己想


5.两函数一起上;

第一个是 按下 "="按钮的

        private void Res_Btn_Click(object sender, EventArgs e)        {            Rtext.Text = "";            //清空Text            if(isFirstInput==false)     //判断是不是 第一次输入,不是就计算一次 , 是的话 就直接不用修改                CText.Text = Calc(double.Parse(lastVal), double.Parse(CText.Text), symbol).ToString();            isFirstInput = true;        //            isClr = true;               //        }

第二个是 按下 "C" 按钮的

        private void C_Btn_Click(object sender, EventArgs e)        {            //初始化            Form1_Load(sender, e);              isFirstInput = true;            lastVal = "";            symbol = "";            isCanCalc = false;            isClr = false;        }


代码贴完了, 我表述能力差,不知道怎么更详细的叙述代码的作用, 可以 尝试 注释某些代码,看看有什么 变化问题, 尝试自己分析下代码. 就当作联系吧.

这个计算器 是模仿 win7 只带计算器的标准型 .


到当前的项目文件 下载链接:http://pan.baidu.com/s/1eQx21gQ 密码:f82x

0 0
原创粉丝点击