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

c# 计算器

程序员文章站 2022-07-16 19:44:01
...

源码:Form1.cs

软件截图

c# 计算器

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

namespace WindowsFormsApplication1
{
    public partial class equ : Form   //类equ的起点
    {
        public equ()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {

            this.textBox1.SelectionStart = this.textBox1.Text.Length;
            this.textBox1.SelectionLength = 0;
            this.textBox1.ScrollToCaret();

        }


        //---按键绑定--------------------
        private void equ_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '1')
            {
                addNum("1");

            }
            if (e.KeyChar == '2')
            {
                addNum("2");
            }
            if (e.KeyChar == '3')
            {
                addNum("3");
            }
            if (e.KeyChar == '4')
            {
                addNum("4");
            }
            if (e.KeyChar == '5')
            {
                addNum("5");
            }
            if (e.KeyChar == '6')
            {
                addNum("6");
            }
            if (e.KeyChar == '7')
            {
                addNum("7");
            }
            if (e.KeyChar == '8')
            {
                addNum("8");

            }
            if (e.KeyChar == '9')
            {
                addNum("9");
            }
            if (e.KeyChar == '0')
            {
                addNum("0");
            }
            if (e.KeyChar == '+')
            {
                ways[index] = '+';
                listway.Add('+');
                selectways('+');
            }
            if (e.KeyChar == '-')
            {
                ways[index] = '-';
                listway.Add('-');
                selectways('-');
            }
            if (e.KeyChar == '*')
            {
                ways[index] = '*';
                listway.Add('*');
                selectways('*');
            }
            if (e.KeyChar == '/')
            {
                ways[index] = '/';
                listway.Add('/');
                 selectways('/');
            }
            if (e.KeyChar == '=')
            {
                answer();
            }
            if (e.KeyChar == 27)
            {
                Clear ();
            }

        }

        //成员变量
        string numstr = "";
        string num_answer="" ;
        char[] ways=new char [20] ;     //   运算方式标志        
        double[] num = new double[20];
        int index = 0;
        List<double >listnum =new List<double >();  //默认容量4个
        List<char> listway = new List<char>();
        int calflag1 = 0;    //  + - 标志位
        int equflag2 = 0;  //  =标志



        //只加数字和.方法addNum
        public void addNum(string  num)   //方法 string  +
        {
            if (calflag1 == 1 && equflag2 == 1)  //第二行计算,包括清零
            {
                textBox1.Text += "\r\n";   //clear清屏,这里换行

                num_answer = "";
                numstr = "";
                index =0;
                calflag1 = 0;
                equflag2 = 0;


            }
            textBox1.Text += num;
            numstr += num;
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            addNum("1");
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            addNum("2");
        }

        private void button3_Click_1(object sender, EventArgs e)
        {
            addNum("3");
        }

        private void button4_Click_1(object sender, EventArgs e)
        {
            addNum("4");
        }

        private void button5_Click_1(object sender, EventArgs e)
        {
            addNum("5");
        }

        private void button6_Click_1(object sender, EventArgs e)
        {
            addNum("6");
        }

        private void button7_Click_1(object sender, EventArgs e)
        {
            addNum("7");
        }

        private void button8_Click_1(object sender, EventArgs e)
        {
            addNum("8");
        }

        private void button9_Click_1(object sender, EventArgs e)
        {
            addNum("9");
        }

        private void button10_Click_1(object sender, EventArgs e)
        {
            addNum("0");
        }

        private void button11_Click(object sender, EventArgs e)  // .
        {
            addNum(".");
        }

        //+
        private void button13_Click_1(object sender, EventArgs e)
        {
            ways[index] = '+';
            listway.Add('+');
            selectways('+');
        }
        //-
        private void button14_Click_1(object sender, EventArgs e)
        {
            ways[index] = '-';
            listway.Add('-');
            selectways('-');
        }
        //*
        private void button15_Click_1(object sender, EventArgs e)
        {
            ways[index] = '*';
            listway.Add('*');
            selectways('*');
        }
        //   /
        private void button16_Click_1(object sender, EventArgs e)
        {
            ways[index] = '/';
            listway.Add('/');
            selectways('/');
        }
        //计算符号

        private void button12_Click(object sender, EventArgs e)  //=
        {

            answer();

        }

        private void button17_Click(object sender, EventArgs e)  //清零
        {
            Clear();
        }

        private void button18_Click(object sender, EventArgs e)   //退格键,  不需要处理集合数据
        {

            if (equflag2 == 0)  //出现= 不能退
            {
                if (textBox1.Text.Length > 0)
                {
                    if (textBox1.Text.EndsWith("+") || textBox1.Text.EndsWith("-") || textBox1.Text.EndsWith("*") || textBox1.Text.EndsWith("/"))
                    {
                        textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);

                    }
                    else
                    {
                        textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length  - 1);//移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
                        numstr = numstr.Remove(numstr.Length - 1);

                    }
                }
            }
        }

        public void selectways(char ways)   //方法 string  +
        {


            //已有方法时候不再增加+-
            if (textBox1.Text.EndsWith("+") || textBox1.Text.EndsWith("-") || textBox1.Text.EndsWith("*") || textBox1.Text.EndsWith("/"))
            {
                textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
                textBox1.Text += ways;
                listway.RemoveAt(index -1);

                //MessageBox.Show(":"+listway .Capacity );
            }
            else
            {
                if (numstr.Length > 0)
                {

                   // num[index] = Convert.ToDouble(numstr);
                    listnum.Add(Convert.ToDouble(numstr));
                    index++;

                    numstr = "";

                    switch (ways)
                    {
                        case '+':
                            textBox1.Text += "+";

                            break;
                        case '-':
                            textBox1.Text += "-";
                            break;
                        case '*':
                            textBox1.Text += "*";
                            break;
                        case '/':
                            textBox1.Text += "/";
                            break;
                    }
                    calflag1 = 1;
                    equflag2 = 0;
                }
            }
        }


        private double  cal(double i, double j, char k)
        {
                switch (k)
                {
                    case '+':
                       return i + j;
                    case '-':
                        return i - j;
                    case '*':
                        return i * j;
                    case '/':
                        return i / j;
                    default:
                        return 00000000000;

                }
               // MessageBox.Show("k="+k);

        }
        private void answer()   //计算
        {
            textBox1.Text += "=";
            double result=0.0;
            try
            {
             //   num[index] = Convert.ToDouble(numstr);
                listnum.Add(Convert.ToDouble(numstr));
                index++;
            }
            catch
            {
                textBox1.Text = "请输入第二个数";
            }

            //MessageBox.Show("ways:" + ways[0] +"/n" + ";num1:" + num[0] + ";num2:" + num[1] + ";num_answer :" + num_answer + "; numstr:" + numstr);  //提示框

            try
            {
               // result = num[0];
                result = listnum[0];
                for (int i = 0; i < index-1; i++)
                {
                   // char aa = ways[i];
                   char   aa = listway [i];
                   // MessageBox.Show("aa=" + aa);
                    result =  cal(result , listnum[i+1], aa);

                }
                num_answer = result.ToString();
                textBox1.Text += num_answer;
            }
            catch
            {
                textBox1.Text = "error";
            }
            equflag2 = 1;  //等号自己的标志

            numstr = "";
            listnum.Clear();
            listway.Clear();

        }

        private void Clear()
        {
            textBox1.Text = "";

            num_answer = "";
            numstr = "";

            calflag1 = 0;
            equflag2 = 0;
            index =0;
            listnum.Clear();
            listway.Clear();

        }
    }

}

// MessageBox.Show("aa=" + aa);
//public bool EndsWith( string value ) 判断 string 对象的结尾是否匹配指定的字符串。
//快速删除一行Shift+delete
//if (caseflag3 == 1)   //不换行接着计算
//{
//    num2_str += num;
//}
//else
//{
//    if (equflag2 == 0) //等号标志
//    {
//        if (calflag1 == 0) //没有按计算方法,给第一个变量
//        {
//            num1_str = num1_str + num;
//        }
//        else //按下计算方法后,数字赋给第二个变量
//        {
//            num2_str += num;
//        }
//    }
//} 

//if (calflag1 == 1 && equflag2 == 0)  //没有等号下,按运算符
//{
//    num2_str = numstr;
//    double temp1 = Convert.ToDouble(num1_str);
//    double temp2 = Convert.ToDouble(num2_str);
//    switch (ways)
//    {
//        case 1:
//            num_answer = (temp1 + temp2).ToString();
//            break;
//        case 2:
//            num_answer = (temp1 - temp2).ToString();
//            break;
//        case 3:
//            num_answer = (temp1 * temp2).ToString();
//            break;
//        case 4:
//            num_answer = (temp1 / temp2).ToString();
//            break;
//    }

//    equflag2 = 1;  //等号自己的标志
//    num1_str = "";
//    num2_str = "";
//    numstr = "";
//}   

上一篇: C#入门

下一篇: 第4章 复合类型