zoukankan      html  css  js  c++  java
  • 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;
                }
            }
  • 相关阅读:
    R获取指定GO term和KEGG pathway的gene list基因集
    统计和数学中常见的定理汇总 | 大数定律 | 中心极限定理
    Genome Aggregation Database (gnomAD) 简介 | 参考人群等位基因频率数据库
    SC3聚类 | 拉普拉斯矩阵 | Laplacian matrix | 图论 | R代码
    Bayesian Statistics for Genetics | 贝叶斯与遗传学
    似然函数 | 最大似然估计 | likelihood | maximum likelihood estimation | R代码
    如何选题?| 什么样的科学问题 | 研究项目才是有意义的?| scientific method
    响应面分析 | response surface analysis | R代码
    乌龙茶生产过程中挥发性成分吲哚的形成 | Formation of Volatile Tea Constituent Indole During the Oolong Tea Manufacturing Process
    PPI | protein-protein interaction | 蛋白互作分析 | gene interaction | 基因互作
  • 原文地址:https://www.cnblogs.com/wllhq/p/4322416.html
Copyright © 2011-2022 走看看