C#windows窗体,,计算器

废话不多说直接上代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MyPersonalComputer
{
    public partial class Form1 : Form
    {
        private static double ans = 0;//计算结果
        private static String div_zero_fu = "+";//r_text.text最后一位,既上升运算符
        private static int sign = 0;//清除c_text.text标记,在点击运算符后
        private static int count = 0;//运算次数
        private static int advance = 0;//提前运算标记,用于sqrt和1/x
        private static int advandnum = 0;//如果输入sqrt和1/x后按数字r_text.text会清零
        private static int numandfu = 1;//不允许连续输入运算符
        public Form1()
        {
            InitializeComponent();
        }
        //字符串转化成double
        private static double ch(String s)
        {   
            return Convert.ToDouble(s);
        }
        
        //操作中心
        private static void doCal(String suf, String fu)
        {
            Console.WriteLine("操作中心.....开始—————" + "ans=" + ans + "      fu=" + fu + "         suf=" + suf);
            switch (div_zero_fu)
            {
                case "+": ans = count == 0 ? ch(suf) : ans + ch(suf); break;
                case "-": ans = count == 0 ? ch(suf) : ans - ch(suf); break;
                case "*": ans = count == 0 ? ch(suf) : ans * ch(suf); break;
                case "/": ans = count == 0 ? ch(suf) : ans / ch(suf); break;
                case "%": ans = count == 0 ? ch(suf) : ans % ch(suf); break;
            }
            count++;
            sign = 1;
            div_zero_fu = fu;
            Console.WriteLine("操作中心.....结束—————" + "ans=" + ans + "      fu=" + fu + "         suf=" + suf);
        }
        /********************************************基础运算**************************8************/
        //加法
        private void add_btn_Click(object sender, EventArgs e)
        {
            //c_text.Text是空字符串,但不为null
            //没有数字输入时,无法使用运算
            if (numandfu == 1)
            {
                return;
            }
            //判断前一个上升操作是否为'/',并且数字是否为零
            if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
            {
                c_text.Text = "除数不能为零";
                r_text.Text = null;
                ans = 0;
                count = 0;
                sign = 1;
                return;
            }
            doCal(c_text.Text, "+");
            numandfu = 1;
            advandnum = 0;
            //去重复0
            if (ch(c_text.Text) == 0)
            {
                c_text.Text = "0";
            }
            //提前处理则结果不上升
           if (advance == 1)
            {
                r_text.Text += "+";
                c_text.Text = ans + "";
                advance = 0;
            }
            else
            {
                r_text.Text += c_text.Text + "+";
                c_text.Text = ans + "";
            }
            

        }
        //减法
        private void sub_btn_Click(object sender, EventArgs e)
        {
            //没有数字输入时,无法使用运算
            if (numandfu == 1)
            {
                return;
            }
            //判断前一个上升操作是否为'/',并且数字是否为零
            if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
            {
                c_text.Text = "除数不能为零";
                r_text.Text = null;
                ans = 0;
                count = 0;
                sign = 1;
                return;
            }
            
            doCal(c_text.Text, "-");
            numandfu = 1;
            advandnum = 0;
            //去重复0
            if (ch(c_text.Text) == 0)
            {
                c_text.Text = "0";
            }
            //提前处理则结果不上升
            if (advance == 1)
            {
                r_text.Text += "-";
                c_text.Text = ans + "";
                advance = 0;
            }
            else
            {
                r_text.Text += c_text.Text + "-";
                c_text.Text = ans + "";
            }
        }
        //乘法
        private void mul_btn_Click(object sender, EventArgs e)
        {
           //没有数字输入时,无法使用运算
            if (numandfu == 1)
            {
                return;
            }
            //判断前一个上升操作是否为'/',并且数字是否为零
            if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
            {
                c_text.Text = "除数不能为零";
                r_text.Text = null;
                ans = 0;
                count = 0;
                sign = 1;
                return;
            }
            
            doCal(c_text.Text, "*");
            numandfu = 1;
            advandnum = 0;
            //去重复0
            if (ch(c_text.Text) == 0)
            {
                c_text.Text = "0";
            }
            //提前处理则结果不上升
            if (advance == 1)
            {
                r_text.Text += "*";
                c_text.Text = ans + "";
                advance = 0;
            }
            else
            {
                r_text.Text += c_text.Text + "*";
                c_text.Text = ans + "";
            }
            //r_text.Text += c_text.Text + "*";
           // c_text.Text = ans + "";
        }
        //除法
        private void div_btn_Click(object sender, EventArgs e)
        {
           //没有数字输入时,无法使用运算
            if (numandfu == 1)
            {
                return;
            }
            //判断前一个上升操作是否为'/',并且数字是否为零
            if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
            {
                c_text.Text = "除数不能为零";
                r_text.Text = null;
                ans = 0;
                count = 0;
                sign = 1;
                return;
            }
             
            doCal(c_text.Text, "/");
            numandfu = 1;
            advandnum = 0;
            //提前处理则结果不上升
            if (advance == 1)
            {
                r_text.Text += "/";
                c_text.Text = ans + "";
                advance = 0;
            }
            else
            {
                r_text.Text += c_text.Text + "/";
                c_text.Text = ans + "";
            }  
        }
        //求余
        private void mod_btn_Click(object sender, EventArgs e)
        {
           //没有数字输入时,无法使用运算
            if (numandfu == 1)
            {
                return;
            }
            //判断前一个上升操作是否为'/',并且数字是否为零
            if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
            {
                c_text.Text = "除数不能为零";
                r_text.Text = null;
                ans = 0;
                count = 0;
                sign = 1;
                return;
            }
            
            doCal(c_text.Text, "%");
            numandfu = 1;
            advandnum = 0;
            //去重复0
            if (ch(c_text.Text) == 0)
            {
                c_text.Text = "0";
            }
            //提前处理则结果不上升
            if (advance == 1)
            {
                r_text.Text += "%";
                c_text.Text = ans + "";
                advance = 0;
            }
            else
            {
                r_text.Text += c_text.Text + "%";
                c_text.Text = ans + "";
            }
        }
        /********************************************功能部分**************************8************/
        //退格
        private void back_btn_Click(object sender, EventArgs e)
        {
            if (c_text.Text.Length > 0)
            {
                c_text.Text = c_text.Text.Remove(c_text.Text.Length - 1, 1);
            }
        }
        //CE清除当前行
        private void CE_btn_Click(object sender, EventArgs e)
        {
            c_text.Text = "";
        }
        //清出所有,C
        private void C_btn_Click(object sender, EventArgs e)
        {
            c_text.Text = "";
            r_text.Text = "";
            ans = 0;
            count = 0;
        }
        //负号,转换正负
        private void opp_btn_Click(object sender, EventArgs e)
        {
            //防止开始时,空值触发异常
            if ("".Equals(c_text.Text))
            {
                return;
            }
            if (c_text.Text.Substring(0, 1).Equals("-"))
            {
                c_text.Text = c_text.Text.Remove(0, 1);
            }
            else
            {
                String s = "-" + c_text.Text;
                c_text.Text = s;
            }
        }
        //开平方
        private void sqrt_btn_Click(object sender, EventArgs e)
        {
            if (advandnum == 1 || numandfu == 1) 
            {
                return;
            }
            r_text.Text += "sqrt("+c_text.Text+")";
            c_text.Text = Math.Sqrt(ch(c_text.Text)) + "";
            sign = 1;
            advance = 1;
            advandnum = 1;
            
        }
        //分数
        private void rec_btn_Click(object sender, EventArgs e)
        {
            if (advandnum == 1 || numandfu == 1)
            {
                return;
            }
            r_text.Text += "reciproc(" + c_text.Text + ")";
            c_text.Text = 1.000000/ch(c_text.Text) + "";
            sign = 1;
            advance = 1;
            advandnum = 1;
        }


        //小数点
        private void spot_btn_Click(object sender, EventArgs e)
        {
            //空值则在前面补零
            if (c_text.Text == "")
            {
                c_text.Text = "0.";
            }
            //非空,加点
            else
            {
                //一个数字中只能有一个小数点
                if (c_text.Text.Contains('.'))
                {
                    return;
                }
                c_text.Text += ".";
            }  
        }

        //等于
        private void res_btn_Click(object sender, EventArgs e)
        {
            
            switch (div_zero_fu)
            {
                case "+": ans += ch(c_text.Text); c_text.Text = ans + ""; break;
                case "-": ans -= ch(c_text.Text); c_text.Text = ans + ""; break;
                case "*": ans *= ch(c_text.Text); c_text.Text = ans + ""; break;
                case "/":
                    if (ch(c_text.Text) == 0)
                    {
                        c_text.Text = "除数不能为零";
                    }
                    else
                    { 
                        ans /= ch(c_text.Text);
                        c_text.Text = ans + "";
                    }
                    break;
                case "%": ans %= ch(c_text.Text); c_text.Text = ans + ""; break;
            }
            r_text.Text = null;
           // c_text.Text = ans + "";
            ans = 0;
            count = 0;
            sign = 1;
        }
        /********************************************数字部分**************************8************/
        //数字0
        private void zero_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            if (sign == 1)
            {
                c_text.Text = "";
                if (!c_text.Text.Equals("0"))
                {
                    c_text.Text += "0";
                }
                sign = 0;
            }
            else
            {
                if (!c_text.Text.Equals("0"))
                {
                    c_text.Text += "0";
                }
            }
            numandfu = 0;
        }
        //数字1
        private void one_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            
      
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "1";
                sign = 0;
            }
            else
            {
                c_text.Text += "1";
            }
            numandfu = 0;
        }
        //数字2
        private void two_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "2";
                sign = 0;
            }
            else
            {
                c_text.Text += "2";
            }
            numandfu = 0;
        }
        //数字3
        private void three_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "3";
                sign = 0;
            }
            else
            {
                c_text.Text += "3";
            }
            numandfu = 0;
        }
        //数字4
        private void four_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "4";
                sign = 0;
            }
            else
            {
                c_text.Text += "4";
            }
            numandfu = 0;
        }
        //数字5
        private void five_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "5";
                sign = 0;
            }
            else
            {
                c_text.Text += "5";
            }
            numandfu = 0;
        }
        //数字6
        private void six_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "6";
                sign = 0;
            }
            else
            {
                c_text.Text += "6";
            }
            numandfu = 0;
        }
        //数字7
        private void seven_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "7";
                sign = 0;
            }
            else
            {
                c_text.Text += "7";
            }
            numandfu = 0;
        }
        //数字8
        private void eight_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1)
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "8";
                sign = 0;
            }
            else
            {
                c_text.Text += "8";
            }
            numandfu = 0;
        }
        //数字9
        private void nine_btn_Click(object sender, EventArgs e)
        {
            //如果上一运算为sqrt或1/x,清空r_text
            if (advandnum == 1) 
            {
                r_text.Text = "";
                advandnum = 0;
            }
            //如果不包含小数点,去除数字前面无效0
            if (!c_text.Text.Contains('.'))
            {
                c_text.Text = c_text.Text.TrimStart('0');
            }
            if (sign == 1)
            {
                c_text.Text = "";
                c_text.Text += "9";
                sign = 0;
            }
            else
            {
                c_text.Text += "9";
            }
            numandfu = 0;
        }

    }
}
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值