C# 在vs中写的简单计算器 winform应用程序

C# 在vs中写的简单计算器 winform应用程序

界面

在这里插入图片描述
这个程序十分简单,我觉得比较重要的设计思路就是双目和单目运算符的不同算法,双目运算符要记录两个数字,而单目运算符记录一个数字,并且两者算法都在点击下一个运算符的时候,使用上一次运算符进行计算得出结果。其次的问题就是一些细节和一些特殊情况下可能会出的bug。

源代码

using System;
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 Calculator
{
    public partial class Form1 : Form
    {
        bool isAppend; //控制数字输入
        string preOper = null; //前一位运算符
        double result; //运算结果
        bool Useequal = false; //判断等号是否使用
        bool Usedot = false; //判断小数点是否使用
        bool UseNegative = false; //判断负数符号是否使用

		//textbox1为输入框
		//textbox2为运算式显示框

        public Form1() //主窗体
        {
            InitializeComponent();
        }

        private void NumClicked(object sender, EventArgs e) //数字按钮click函数
        {

            string num = ((Button)sender).Text;
            Textdisplay(num);
            NumInput(num);

        }

        private void Textdisplay(string num)   //第一行的运算式的显示函数
        {
            this.textBox2.Text += num;  
        }

        private void NumInput(string num)   //数字输入
        {
            if (Useequal == true)
            {
                this.textBox2.Text = num;
                Useequal = false;
            }
            if (isAppend)
            {
                this.textBox1.Text += num;
            }
            else
            {
                this.textBox1.Text = num;
            }
                
                
            isAppend = true;
            this.textBox1.Focus();
            this.textBox1.SelectionStart = this.textBox1.Text.Length;
        }

        private void DoubleClicked(object sender, EventArgs e)  //双目运算符click函数
        {
            string curOper = ((Button)sender).Text;
            if(this.textBox2.Text.Last()=='+'|| this.textBox2.Text.Last() == '-' ||
                this.textBox2.Text.Last() == '*' || this.textBox2.Text.Last() == '/' )
            {
                this.textBox2.Text = this.textBox2.Text.Remove(this.textBox2.Text.Length - 1, 1)+curOper;
                preOper = curOper;
            }
            else
            {
                Textdisplay(curOper);
                DoubleOperInput(curOper);
            }

            this.textBox1.Focus();
        }

        private void DoubleOperInput(string curOper)     //双目运算符输入
        {
            if (Useequal == true)
                Useequal = false;
            if (preOper == null)
                {
                    preOper = curOper;
                    this.result = double.Parse(this.textBox1.Text);
                }
            else
                {
                    double curNum = double.Parse(this.textBox1.Text);
                    switch (preOper)
                    {
                        case "+": this.result += curNum; break;
                        case "-": this.result -= curNum; break;
                        case "*": this.result *= curNum; break;
                        case "/": this.result /= curNum; break;

                    }
                    this.textBox1.Text = result.ToString();
                    preOper = curOper;
                }
            isAppend = false;
            Usedot = false;
            UseNegative = false;
        }

        private void SingleClick(object sender, EventArgs e)   ////单目运算符click函数
        {
            if (Useequal == true)
                Useequal = false;
            double curNum = double.Parse(this.textBox1.Text);
            string curOper = ((Button)sender).Text;
            Textdisplay(curOper);
            switch (curOper)
            {
                case "sqrt": curNum=Math.Sqrt(curNum); break;
                case "1/x": curNum=1/curNum; break;
                case "x^2": curNum=curNum*curNum; break;
                case "sin": curNum = Math.Sin(Math.PI * (curNum / 180)); break;

            }
            this.textBox1.Text = curNum.ToString();
            Usedot = false;
            UseNegative = false;
            isAppend = false;
            this.textBox1.Focus();
            this.textBox1.SelectionStart = this.textBox1.Text.Length;
        }

        private void DotClick(object sender, EventArgs e)    //小数点click函数
        {
            string curOper = ((Button)sender).Text;
            DotInput(curOper);
        }

        private void DotInput(string curOper)       //小数点输入
        {
            if (Usedot == false)
            {
                if (Useequal == true)
                {
                    this.textBox2.Text = "0" + curOper;
                    this.textBox1.Text = "0" + curOper;
                    Useequal = false;
                    isAppend = true;
                }
                else if (this.textBox1.Text == "")
                {
                    this.textBox2.Text = "0" + curOper;
                    this.textBox1.Text = "0" + curOper;
                    isAppend = true;
                }
                else if (!char.IsDigit(this.textBox2.Text.Last()))
                {
                    this.textBox2.Text += "0" + curOper;
                    this.textBox1.Text = "0" + curOper;
                    isAppend = true;
                }
                else
                {
                    this.textBox1.Text += curOper;
                    this.textBox2.Text += curOper;
                }
                Usedot = true;
            }

            this.textBox1.Focus();
        }

        private void EqualClick(object sender, EventArgs e)   //等于按钮click函数
        {
            DoubleClicked(btnEquals,null);
            this.textBox2.Text =result.ToString();
            preOper = null;
            Useequal = true;
            Usedot = false;
            UseNegative = false;
            this.textBox1.Focus();
        }

        private void BackClick(object sender, EventArgs e)   //退格click函数
        {
            if (isAppend&& this.textBox1.Text!="")
            {
                this.textBox1.Text = this.textBox1.Text.Remove(this.textBox1.Text.Length-1,1);
                this.textBox2.Text = this.textBox2.Text.Remove(this.textBox2.Text.Length - 1, 1);
            }
                this.textBox1.Focus();
        }

        private void ClearClick(object sender, EventArgs e)  //清除
        {
            this.textBox1.Text = "";
            this.textBox2.Text = "";
            preOper = null;
            Usedot = false;
            Useequal = false;
            UseNegative = false;
            this.textBox1.Focus();
        }


        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)  //键盘输入
        {
            e.Handled = true;
            if (char.IsDigit(e.KeyChar))
            {
                Textdisplay(e.KeyChar.ToString());
                NumInput(e.KeyChar.ToString());
            }
            else if(e.KeyChar == '.')
            {
                DotInput(e.KeyChar.ToString());
            }
            else if (e.KeyChar == '+'||e.KeyChar == '-' || e.KeyChar == '*' || e.KeyChar == '/'){
                Textdisplay(e.KeyChar.ToString());
                DoubleOperInput(e.KeyChar.ToString());
            }
            else if(e.KeyChar== 8)  //退格符的ascii码为8
            {
                BackClick(null, null);
            }
            else if(e.KeyChar==13)  //等于符的ascii码为13
            {
                EqualClick(null, null);
            }
            this.textBox1.SelectionStart = this.textBox1.Text.Length;
        }

        private void Negative(object sender, EventArgs e)  //负数click函数
        {
            if (UseNegative == false)
            {
                if (this.textBox1.Text == "")
                {
                    this.textBox1.Text = "-";
                    this.textBox2.Text = "(-)";
                    isAppend = true;
                }
                else if (Useequal == true)
                {
                    this.textBox1.Text = "-";
                    this.textBox2.Text = "(-)";
                    Useequal = false;
                    isAppend = true;
                }
                else if(!char.IsDigit(this.textBox2.Text.Last()))
                {
                    this.textBox2.Text += "(-)";
                    this.textBox1.Text = "-";
                    isAppend = true;
                }

            }

            UseNegative = true;
        }
    }
}

资源下载

链接: https://pan.baidu.com/s/1HcoEnuY–p0vtCPMfEtl4g 提取码: g8kn

发布了3 篇原创文章 · 获赞 6 · 访问量 133

猜你喜欢

转载自blog.csdn.net/sakura55520/article/details/105056344