c#实现计算器

原文件和代码需要的话私聊留邮箱我看见会发给你!,做到力所能及 这里是旧版计算器
优化 改过bug的 请移步至
新版计算器

c#计算器

c#实现计算器_第1张图片visual studio 2019
这是我的样式
–接下来是代码

变量 声明开始

 //--------------------------------------------------------------------------------
        //变量声明and变量的作用开始

		 //记录程序第一次1启动
        Boolean system_one = false;


        //判断用过小数点后,是否有输入数字如果没有输入数字就不能使用四则运算符
        Boolean dian_number;
        //ji 计算 用过多少次等于号
        int ji = 0;
        //sum 用来记录每一次的新值
        double sum = 0;

        //value 是最后的结果
        double value;


        //fh 是用来记录我们正在使用的符号
        String fh;

        //eco 用来记录 用户摁过多少次等于号, eco = 0 就是还没用过, 如果用过的话  就++
        int eco = 0;

        //temp 用来记录  一直被处理的数字
        double temp = 0.0;

        //record 用来判断使用四则运算符后,是否输入数字,输入了就是true没有就是false
        Boolean record = true;

        //number 是用来判断数字键是否使用过,number = 0 就是没用过 等于 number =1 就是使用过;
        byte number = 0;

        //符号的次数  0就按原来的样式不等0就是其他样式
        byte numberOfSymbols = 0;

        //用来装记忆的盒子
        double memory = 0.0;
        //等号执行多次的 num1 
        double num1 = 0.0;

        //记录符号中的变化之前的值
        double temp_symbols;
        //变量声明和变量使用的介绍结束
        //-------------------------------------------------------------------------------------

退格键的方法


        //退格键方法
        private void Backpace_Click(object sender, EventArgs e)
        {   //当删完了之后,就给它补个零
            if (enter.Text == "")
            {
                enter.Text = "0";
            }
            else //否则就继续删
            {
                string old = enter.Text;
                char o = old[0];
                if (old.Length == 2 && o=='-')
                {
                    enter.Text = old.Remove(0);
                    enter.Text = "0";
                }
                else {
                    enter.Text = old.Remove(old.Length - 1);
                }
            }
        }
        //-----------------------------------

数字键的方法


        //数字键入
        private void Number_Click(object sender, EventArgs e)
        {
            dian_number = true;
            if (ji == 1) {
                Empty_Click(C, null);
                ji = 0;
            }
            if (number == 0 )
            {
                
                enter.Clear();
            }
            record = true;
            int leng = enter.TextLength;
            Button num = (Button)sender;

            if (leng < 16)
            {
                if (enter.Text == "0")
                {
                    enter.Text = num.Text;
                }
                else
                {
                    enter.Text += num.Text;
                }
            }
            else
            {
                enter.Text = enter.Text;
            }

            number = 1;//用过就记录一下
        }
        //----------------------------------------------

##符号键


        //符号键入方法
        private void Symbol_Click(object sender, EventArgs e)
        {

          
            if (dian_number == true)
            {
                //刷新用户摁过的等号次数
                eco = 0;
                ji = 0;
                Button f = (Button)sender;

                fh = f.Text;
                /*
                 * 如果enter.Text  是空值的话  人enter.Text 等于 原来的值
                 */
                if (enter.Text == "")
                {
                    enter.Text = sum.ToString();
                }
                //第一次使用从这里
                if (numberOfSymbols == 0)
                {
                    CalculationSteps.Text = "";
                    //record 记录数字键是否有用过   有用过就是true  没用过就是false
                    if (record == true)
                    {
                        sum = double.Parse(enter.Text);
                        //判断CalculationSteps 的内容是不是0 如果是就直接覆盖  如果不是就加等
                        if (CalculationSteps.Text == "0" && ji != 0)
                        {
                            
                            CalculationSteps.Text = enter.Text + fh;
                        }
                        else
                        {
                            CalculationSteps.Text += enter.Text + fh;
                        }


                        value = sum;

                        //用完符号键 就需要在等待数字键的输入所以此时数字键是没用过的所以是false
                        record = false;
                    }
                    else
                    {
                        enter.Text = "0";
                    }

                    //用一次
                    numberOfSymbols = 1;

                }
                else
                {

                    if (record == true)
                    {
                        temp = double.Parse(enter.Text);
                        temp_symbols = value;
                        switch (fh)
                        {
                            case "+":
                                value += temp;

                                break;
                            case "-":
                                value -= temp;

                                break;
                            case "x":
                                value *= temp;

                                break;
                            case "÷":

                                if (enter.Text == "0")
                                {
                                    enter.Text = "除数不能为零";
                                }
                                else
                                {
                                    value /= temp;
                                }

                                break;

                        }
                        enter.Text = value.ToString();
                        /*CalculationSteps.Text = enter.Text + f.Text;*/
                        //该之后
                        CalculationSteps.Text = temp_symbols.ToString() + f.Text + temp.ToString() + "=";


                    }
                    else
                    {
                        CalculationSteps.Text = enter.Text + f.Text;
                        record = false;
                    }
                }


                number = 0;//符号键入后需要继续输入数字所以就把数字的使用记录清空后,在等待数字键入,以防出现两次符号
            }
            else {
                     //如果输入小数点后不输入数字,就不做任何操作 
            }

        }
        //-------------------------------------------------------

%求百分的符号键

  //百分比

        private void Bai_Click(object sender, EventArgs e)
        {   
            int B = 100;

            enter.Text = (double.Parse(enter.Text) / B).ToString();
        }
        //--------------------------------------------

等于号键功能实现


            //等于号
            /*
             * 处理点了等号之后的操作
             * 比如如果我们没有输入值,然后点了等号  之后的处理
             */
            private void Equal_Click(object sender, EventArgs e)
        {

       

            //读取等于号
            Button nu = (Button)sender;

            
            if (number == 0)
            {
                enter.Text = value.ToString();
            }

            //如果enter.Text  是空值的话  人enter.Text 等于 "0"
            if (enter.Text == "")
            {
                enter.Text = "0";
            }
            else//不是的话就,正常执行操作
            {
									//第一次进入系统和没用过符号
                if (numberOfSymbols == 0 & system_one == false )
                {
                  
                    value =  Convert.ToDouble(enter.Text);
                    CalculationSteps.Text = enter.Text;
                    
                }
                else
                {
                    //第一次点等号执行这个操作
                    if (eco == 0)
                    {



                        Boolean WhetherTheNumbers = double.TryParse(enter.Text, out double Now);

                      
                        if (WhetherTheNumbers == true )
                        {
                            if (fh == null)
                            {
                                CalculationSteps.Text = enter.Text;
                                numberOfSymbols = 0;
                                enter.Text = value.ToString();
                                ji = 1;
                                return;
                            }
                            CalculationSteps.Text = value.ToString() + fh.ToString() + enter.Text + nu.Text;

                            switch (fh)
                            {
                                case "+":
                                    value += Now;

                                    break;
                                case "-":
                                    value -= Now;
                                    break;
                                case "x":
                                    value *= Now;

                                    break;
                                case "÷":

                                    if (enter.Text == "0")
                                    {
                                        enter.Text = "除数不能为零";
                                        return;
                                    }
                                    else
                                    {
                                        value /= Now;
                                    }
                                    break;

                            }
                            eco++;
                            temp = Now;
                        }
                        else
                        {
                            enter.Clear();
                            CalculationSteps.Text = "0";
                            temp = 0;
                            return;
                        }
                    }//点击1~n次的等号后的操作
                    else
                    {

                        switch (fh)
                        {
                            case "+":
                                value += temp;
                                num1 = value - temp;
                                break;
                            case "-":
                                value -= temp;
                                num1 = value + temp;
                                break;
                            case "x":
                                value *= temp;
                                num1 = value / temp;
                                break;
                            case "÷":

                                if (enter.Text == "0")
                                {
                                    enter.Text = "除数不能为零";
                                }
                                else
                                {
                                    value /= temp;
                                }
                                num1 = value * temp;
                                break;

                        }

                        CalculationSteps.Text = num1.ToString() + fh.ToString() + temp + nu.Text;
                    }

                }
                
                enter.Text = value.ToString();
                ji=1;
            }

            system_one = true;
            numberOfSymbols = 0;
            
        }

enter 显示界面的一些方法

   //动态显示
        /*
         该方法的作用是控制enter.Text  
        也就是用户能够输入几个数
        超过十个数之后就缩小字体大小
         
         */
        private void Enter_TextChanged(object sender, EventArgs e)
        {
            TextBox temp = (TextBox)sender;
            int leng = temp.TextLength;
            if (leng == 10)
            {
                //设置enter 超过10位时 字体变小
                enter.Font = new Font("Microsoft YaHei UI", 22);
            }
        }

清空 C or CE 操作

        //清空操作
        private void Empty_Click(object sender, EventArgs e)
        {
            Button en = (Button)sender;

            switch (en.Text)
            {   //让一切回到最初的样式
                case "C":
                    ji = 0;
                    sum = 0;
                    eco = 0;
                    temp = 0.0;
                    number = 0;
                    value = 0.0;
                    record = true;
                    enter.Text = "0";
                    dian_number = true;
                    CalculationSteps.Text = "";
                    break;
                // 只清空enter.Text的记录
                case "CE":
                    enter.Text = "0";
                    break;

            }

        }

小数点的使用规范

   //小数点
        private void Dian_Click(object sender, EventArgs e)
        {
            //判断该字符串中是否有 "." 如果没有就可以使用 "."  如果有就不能使用
            if (enter.Text.Contains(".") == false)
            {
                enter.Text += ".";

            }
            dian_number = false;

        }

##记忆键使用


        //记忆存
        private void MS_Click(object sender, EventArgs e)
        {
            MR_label.Enabled = true;
            MC_Label.Enabled = true;
            Mv_label.Enabled = true;
            memory = double.Parse(enter.Text);

        }
        //记忆清楚
        private void MC_Click(object sender, EventArgs e)
        {
            
            memory = 0.00;
            MC_Label.Enabled = false;
            Mv_label.Enabled = false;
            MR_label.Enabled = false;
        }
        //记忆读取
        private void MR_Click(object sender, EventArgs e)
        {
            enter.Text = memory.ToString();
        }
        //记忆加
        private void MJ_Click(object sender, EventArgs e)
        {
            memory += double.Parse(enter.Text);
        }
        //记忆存
        private void Ms_Click(object sender, EventArgs e)
        {
            memory -= double.Parse(enter.Text);
        }
        //查看当前的记忆数字
        private void Mv_Click(object sender, EventArgs e)
        {
            MessageBox.Show("当前记忆数字是"+memory.ToString(),"当前记忆数字");
        }

负数的实现

  //正负号添加
        private void JiaOrJian_Click(object sender, EventArgs e)
        {
            
                string tempStr = enter.Text;
                char t = tempStr[0];
                if (enter.Text == "0")
                {
                    enter.Text = enter.Text;
                }
                else
                {
                    if (t == '-')
                    {
                        enter.Text = tempStr.Remove(0, 1);

                    }
                    else
                    {

                        enter.Text = tempStr.Insert(0, "-");

                    }

                }
            }

对应使用功能

c#实现计算器_第2张图片> 如果云知道是一个lable 就是我的想写的一个标签吧,好看而已

你可能感兴趣的:(C#小工具,c#)