欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-03 11:07:57
...

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