• C#计算器的制作


    事件函数的两个参数的定义:private void button21_Click(object sender, EventArgs e)

    {

    button a=(button)sender;

    }

    sender:事件主体(事件的触发对象)

    EvenArgs:事件数据(参数)

    例如:可以通过a访问button21的其他属性;


    开发计算器过程:
    先分析最简单的现实情况:两个数

    目标清晰;

    成果展示:

    SNAGHTMLcf1651

    思路:

    1:从最简单的两个数运算出发,找出问题中的两个主要对象:两个数字型字符串,五个运算符。

    2.找出各个对象需要在问题中体现的特点,

    数字型字符串:通过11个按钮赋值;本身及运算结果在文本框的显示设定与实现;

    运算符:主要通过成员函数解决运算问题;

    不同对象的功能相似的函数可通过触发事件,通过一个函数来实现,比如各个按钮的赋值功能。(本例题未体现)

    private string preOperaror;//用来存储前面的运算符
            private string firstNum;//用来存储运算结果
            private string secondNum;//用来存储当前输入的
            private bool a = false;//标记是否重复输入了运算符
            private double result;
    
    
    //通过按钮给数字型字符串赋值
     private void twobutton_Click(object sender, EventArgs e)
            {
                //若前面有过计算结果,清空状态框、表达式框
                if (preOperaror == "=")
                {
                    expressionBox1.Clear();
                    resultBox2.Clear();
                    preOperaror = null;
                }
                //如果刚刚输入运算符,清空结果框
                if (a)
                {
                    resultBox2.Clear();
                    a = false;
                }
                //存入当前数字串secondNum
                secondNum += "2";
                //显示当前数字串
                resultBox2.Text += "2";
    
            }
    //小数点的输入
     private void dotBtn_Click(object sender, EventArgs e)
            {
    
                if (secondNum.Length > 0 && secondNum.ToString().Contains(".") == false)
                {
                    secondNum += ".";
                    resultBox2.Text += ".";
                }
            }
    
    //加法运算,其他运算类似写法
    private void plusButton_Click(object sender, EventArgs e)
            {
                //如果前面没有运算符
                if (preOperaror == null && secondNum != null)
                {
                    firstNum = secondNum;
                    preOperaror = "+";
                    resultBox2.Clear();
                    resultBox2.Text = firstNum;
                    //保存表达式
                    expressionBox1.Text += secondNum+"+";
                    //清空secondNum,准备接收新值
                    secondNum = null;
                    a = true;//标记当前状态框最后一个字符是运算符,如果a=true,后面不能继续输入运算符
                }
    
                    //如果前面有一个运算符,使用前面这个运算符运算,运算结果在状态框显示,更新表达式框,保存刚输入的运算符
                else
                {
                    if (a == false||preOperaror=="=")//确保前面运算符后有数字,“=”是特殊情况
                    {
                        //保存表达式
                        expressionBox1.Text +=secondNum+"+";
    
                        //根据preOperator,执行对应运算    
                        #region
                        if (preOperaror == "+")
                        {
                            //相加
                            result = double.Parse(firstNum) + double.Parse(secondNum);
    
                        }
                        if (preOperaror == "-")
                        {
                            //相减
                            result = double.Parse(firstNum) - double.Parse(secondNum);
                        }
                        if (preOperaror == "*")
                        {
                            //相乘
                            result = double.Parse(firstNum) * double.Parse(secondNum);
                        }
                        if (preOperaror == "/")
                        {
                            //除法
                            result = double.Parse(firstNum) / double.Parse(secondNum);
                        }
                        if (preOperaror == "=")
                        {
                            expressionBox1.Text = firstNum + "+";
                        }
                        #endregion
    
                        //清空secondNum,准备接收新值
                        secondNum = null;
                        a = true;
                        //显示计算结果
                        firstNum = result.ToString();
                        resultBox2.Clear();
                        resultBox2.Text = firstNum ;
                        //将当前按钮运算符存入
                        preOperaror = "+";
                    }
                }
            }
    //等号运算符
      private void resultBtn_Click(object sender, EventArgs e)
            {       
                #region
                if (a == false && secondNum != null)//保证前面有数字串、运算符
                {
                    //根据preOperator,执行对应运算 (重复代码)   
                    #region
                    if (preOperaror == "+")
                    {
                        //相加
                        result = double.Parse(firstNum) + double.Parse(secondNum);
                    }
                    if (preOperaror == "-")
                    {
                        //相减
                        result = double.Parse(firstNum) - double.Parse(secondNum);
                    }
                    if (preOperaror == "*")
                    {
                        //相乘
                        result = double.Parse(firstNum) * double.Parse(secondNum);
                    }
                    if (preOperaror == "/")
                    {
                        //除法
                        result = double.Parse(firstNum) / double.Parse(secondNum);
                    }
                    #endregion
                    //显示计算结果
                    firstNum = result.ToString();
                    resultBox2.Clear();
                    resultBox2.Text = firstNum;
                    //清空表达式框
                    expressionBox1.Clear();
                    //清空secondNum,准备接收新值
                    secondNum = null;
                    //用“=”运算符标记preOperaror,继续输入数字可以清空前面状态框
                    preOperaror = "=";
                    a = true;
                }
    
                #endregion
            }
    
    //删除按钮:删除一个当前正在输入的数字字符串的末尾字符
       private void revokeButton_Click(object sender, EventArgs e)
            {
                if (a == false && secondNum.Length > 0)//确定当前输入数据不为空
                {
                    secondNum = secondNum.Substring(0, secondNum.Length - 1);//删除当前数据最后一个字符
                    resultBox2.Text = resultBox2.Text.Substring(0, resultBox2.Text.Length - 1);//状态框删除最后一个字符
                }
            }
    
    //清除状态框中当前字符串的按钮
     private void clearReBtn_Click(object sender, EventArgs e)
            {
                //清空当前数字串、状态框
                if (!a)//避免删除运算结果
                {
                    secondNum = null;
                    resultBox2.Text = null;
                }
            }
  • 相关阅读:
    网络编程-进程-1、什么叫进程?
    Python做性能测试-1、Locust基础篇
    网络编程-线程-6、互斥锁解决线程中数据安全问题
    网络编程-线程-5、多个线程共享全局变量造成资源争抢,数据混乱
    网络编程-线程-4、多个线程之间共享全局变量
    网络编程-线程-3、通过继承Thread类创建线程
    网络编程-线程-2、如何查看有多少个线程在运行
    网络编程-线程-1、一张图让你看懂多线程工作原理
    网络编程-多任务,并发,并行--从底层工作原理解释,让你不再傻傻分不清这些到底什么意思
    二、网络编程-socket之TCP协议开发客户端和服务端通信
  • 原文地址:https://www.cnblogs.com/wllhq/p/4322416.html
Copyright © 2020-2023  润新知