zoukankan      html  css  js  c++  java
  • winfrom 计算器

    namespace 计算器_新
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private bool Isok = true;//记录刚刚是否点过运算符,或是否第一次进入界面
            private string Biaodashi; //记录运算符之前的表达式(在第一栏)
            private decimal Sum;//记录之前计算的结果(在第二栏)
            private string Preyunsuanfu;//记录之前的运算符
    
    
            private void button27_Click(object sender, EventArgs e)//1按钮
            {
                Button btn = (Button)sender;
                if (Isok)//刚刚点过运算符
                {
                    textBox2.Text = btn.Text;
                    Isok = false;//累加的意思,不加的话他就不往后累加。
                }
                else
                {
                    textBox2.Text = textBox2.Text + btn.Text;//后面的数不会消失而是会往后累加。
                }
              
            }
    
            private void textBox2_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void button25_Click(object sender, EventArgs e)//0建
            {
                  Button btn = (Button)sender; //sender为各自对应的类,这里为对应每个按钮
                if (Isok) 
                {
                    textBox2.Text = btn.Text; //0按钮后面不能叠加0,所以没有isok=falst.
                    
                }
                else
                {
                    textBox2.Text = textBox2.Text + btn.Text;//如果不是刚进入,之后的数字便一直加上刚才所点的按钮的内容
                }
            
            }
    
            private void button8_Click(object sender, EventArgs e)//C按钮
            {
                //初始化所有状态
                textBox1.Text = "";
                textBox2.Text = "0";
                Isok = true;
                Preyunsuanfu = null;
                Sum = 0;
                Biaodashi = "";
            }
    
            private void button33_Click(object sender, EventArgs e)//加法按钮
            {
                 Button btn = (Button)sender;//sender为各自对应的类,这里为对应每个按钮
                string yunsuanfu = btn.Text; //将按钮上的内容赋值给yunsuanfu;
                if (Preyunsuanfu == null)
                {
                    Biaodashi = Biaodashi + textBox2.Text;
                    Sum = decimal.Parse(textBox2.Text);
                }
                else
                {
                    if (!Isok) //如果刚刚点过运算符,这一块也就不需要运算了.反之则需要运算.
                    {   // !Isok 代表的是刚刚没点过运算符,这样才会运算下面的代码.
                        if (Preyunsuanfu == "+") //如果刚才的运算符是加号
                        {
                            Sum = Sum + decimal.Parse(textBox2.Text);//算出的结果就为之前算出来的加上刚点上去的
                        }
                        if (Preyunsuanfu == "-")
                        {
                            Sum = Sum - decimal.Parse(textBox2.Text);
                        }
                        if (Preyunsuanfu == "*")
                        {
                            Sum = Sum * decimal.Parse(textBox2.Text);
                        }
                        if (Preyunsuanfu == "/")
                        {
                            Sum = Sum / decimal.Parse(textBox2.Text);
                        }
                        if (Preyunsuanfu == "%")
                        {
                            Sum = Sum % decimal.Parse(textBox2.Text);
                        }
                        Biaodashi = Biaodashi + Preyunsuanfu + textBox2.Text;//之前有运算符的话  第一栏的值变为  之前的表达式+刚才点进去的运算符+刚才输入的值
                        textBox2.Text = Sum.ToString(); //第二栏的值变为结果
                    }
    
                }
                textBox1.Text = Biaodashi + yunsuanfu;//第一栏显示的文本为表达式+当前输入的运算符
                Preyunsuanfu = yunsuanfu;//将yunsuanfu的值赋给   记录上一次的运算符;
                Isok = true; //只要Isok是ture,就会把刚才的值清空重新输入现在按钮上的值
    
            }
    
            private void button9_Click(object sender, EventArgs e)//撤退
            {
                if (!Isok) //如果刚刚没点过运算符才能执行下面这一步
                {
                    if (textBox2.Text.Length == 1)//如果第二栏的文本长度为1
                    {
                        textBox2.Text = "0"; //点击撤销就会变成0
                        Isok = true;//如果不加的话前面就一直有个零。
                    }
                    else
                    {
                        textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length - 1);//如果是两位的话就撤销后面一位。
                    }
                }
            }
    
            private void button34_Click(object sender, EventArgs e)//等号
            {
                textBox1.Text = ""; //第一栏为空
                //计算之前的结果
                if (Preyunsuanfu == "+") //如果刚才的运算符是加号
                {
                    Sum = Sum + decimal.Parse(textBox2.Text);//算出的结果就为之前算出来的加上刚点上去的
                }
                if (Preyunsuanfu == "-")
                {
                    Sum = Sum - decimal.Parse(textBox2.Text);
                }
                if (Preyunsuanfu == "*")
                {
                    Sum = Sum * decimal.Parse(textBox2.Text);
                }
                if (Preyunsuanfu == "/")
                {
                    Sum = Sum / decimal.Parse(textBox2.Text);
                }
                if (Preyunsuanfu == "%")
                {
                    Sum = Sum % decimal.Parse(textBox2.Text);
                }
                textBox2.Text = Sum.ToString();//第二栏显示为之前的结果
    
                //初始化对象
                Isok = true;
                Biaodashi = "";
                Preyunsuanfu = null;
                Sum = 0;
    
                //还没有继续点等号出现的情况
            }
    
            private void button7_Click(object sender, EventArgs e)
            {
                if (!Isok) //不是刚点过运算符也不是刚进入界面,即如果是结果的话就不会执行下面的代码
                {
                    if (decimal.Parse(textBox2.Text) > 0)
                    {
                        textBox2.Text = "-" + textBox2.Text;//如果大于零就添加负号
                    }
                    else
                    {
                        textBox2.Text = textBox2.Text.Substring(1);//如果小于零就把负号去掉
                    }
                }
            }
    
            private void button32_Click(object sender, EventArgs e)//小数点
            {
                if (textBox2.Text == "0")//如果是零的话
                {
                    textBox2.Text = "0.";//就变成0.
                    Isok = false;//将Isok改成false是为了本来是0的话点了小数点之后还可以再继续在小数点后面输入别的数字,而不是清空
                }
                if (!Isok && !textBox2.Text.Contains("."))//如果显示的是结果框(即刚点过运算符便不让点),便不会执行下一步;并且刚刚点过. ,也不会执行
                {
                    textBox2.Text = textBox2.Text + ".";
                }
    
            }
  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/w-wz/p/4541284.html
Copyright © 2011-2022 走看看