計算器代碼2

using System;this

using System.Collections.Generic;spa

using System.ComponentModel;orm

using System.Data;事件

using System.Drawing;input

using System.Linq;string

using System.Text;it

using System.Windows.Forms;io


namespace Caculatorast

{form

    public partial class Form1 : Form

    {

        private  Boolean clean = false,num1flag=false,simpleflag=true,num2flag=false;

        private simplecal scalculator = new simplecal();

        private char calchar;

        private double num1 = 0, num2 = 0, ans = 0;

        private Stack<char>  soptr=new Stack<char>();


       

        public Form1()

        {

            InitializeComponent();

            

        }


        private void button1_Click(object sender, EventArgs e)

        {

            if (simpleflag == false)

            {

                if (textBox1.Text == "0" || textBox1.Text == "-0" || clean == true)

                {

                    textBox1.Text = null;

                    clean = false;

                }

                textBox1.Text += sender.ToString().Substring(sender.ToString().LastIndexOf(" ") + 1, 1);

            }

            else

            {

                if (textBox1.Text == "0" || textBox1.Text == "-0" || clean == true)

                {

                    textBox1.Text = null;

                    clean = false;

                }

                textBox1.Text += sender.ToString().Substring(sender.ToString().LastIndexOf(" ") + 1, 1);

            }

        }


        private void button2_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button3_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button4_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button5_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button6_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button7_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button8_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button9_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e);

        }


        private void button10_Click(object sender, EventArgs e)

        {

           

            button1_Click(sender, e);

        }


        private void button11_Click(object sender, EventArgs e)

        {

            if (textBox1.Text.Substring(0, 1).Equals("-"))

            {

                textBox1.Text = textBox1.Text.Substring(1, textBox1.Text.Length - 1);

            }

            else {

                textBox1.Text = "-" + textBox1.Text;

            }

        }//  +/-


     


        private void button12_Click(object sender, EventArgs e) //小數點

        {

            if (textBox1.Text.Contains("."))

            { }

            else

            {

                textBox1.Text+=".";

            }

        }

             


        private void Form1_KeyPress(object sender, KeyPressEventArgs e)

        {

            //this.textBox1.Text = e.KeyChar.ToString();

            switch ((Keys)e.KeyChar)

            {

                case Keys.D1: button1.PerformClick(); break;

                case Keys.D2: button2.PerformClick(); break;

                case Keys.D3: button3.PerformClick(); break;

                case Keys.D4: button4.PerformClick(); break;

                case Keys.D5: button5.PerformClick(); break;

                case Keys.D6: button6.PerformClick(); break;

                case Keys.D7: button7.PerformClick(); break;

                case Keys.D8: button8.PerformClick(); break;

                case Keys.D9: button9.PerformClick(); break;

                case Keys.D0: button10.PerformClick(); break;

                case (Keys)'.': button12.PerformClick(); break;

                case (Keys)'+': button13.PerformClick(); break;

                case (Keys)'-': button14.PerformClick(); break;

                case (Keys)'*': button15.PerformClick(); break;

                case (Keys)'/': button16.PerformClick(); break;

                case Keys.Escape: button22.PerformClick(); break;               

                case Keys.Back: button21.PerformClick(); break;

                case Keys.Enter:button20.PerformClick(); break;

                default:break;

            }

        } //鍵盤事件


        private void button13_Click(object sender, EventArgs e)//+

        {

            if (simpleflag == false)

            {

                button1_Click(sender, e); 

            }

            else

            {

                input();

                if (num1flag == true && num2flag == true)

                {

                    cal();

                }

                Setzero();

                button1_Click(sender, e);  //顯示+號                    

                calchar = this.textBox1.Text[0];//記錄運算符號

                clean = true;//清屏標誌爲true

            }


        }


       

        private void button21_Click(object sender, EventArgs e)

        {

            if (this.textBox1.Text.Length==1)

            {

                this.textBox1.Text = "0";

            }

            else

            {

                try

                {

                    this.textBox1.Text = this.textBox1.Text.Substring(0, this.textBox1.Text.Length - 1);

                }

                catch(Exception)

                { 

                }

            }

            

        } // ←

        private void button22_Click(object sender, EventArgs e)// cancel

        {

            reset();

            Setzero();

           

        }

        private void button14_Click(object sender, EventArgs e)

        {

            button13_Click(sender, e);

        }

        private void button15_Click(object sender, EventArgs e)

        {

            button13_Click(sender, e);

        }

        private void button16_Click(object sender, EventArgs e)

        {

            button13_Click(sender, e);

        }

        private void button17_Click(object sender, EventArgs e)

        {

            input();

            Setzero();

            button1_Click(sender, e);  //顯示運算符號                    

            calchar = this.textBox1.Text[0];//記錄運算符號

            cal2();           

         

           

            this.textBox1.Text = num1.ToString();

            reset();

            clean = true;//清屏標誌爲true


        }

        private void button18_Click(object sender, EventArgs e)

        {

            button17_Click(sender, e);

        }

        private void button19_Click(object sender, EventArgs e)

        {

            button13_Click(sender, e);

        }

     


        private void button20_Click(object sender, EventArgs e)// =

        {

            if (simpleflag == false)

            {

                this.textBox1.Text += '#';

                num1 = cal3();

            }


            else

            {

                input();

                if (num1flag == true && num2flag == true)

                {

                    cal();

                }//計算並將結果給予num1

            }

            this.textBox1.Text = num1.ToString();

            clean = true;

            reset();

        }


        private void radioButton2_CheckedChanged(object sender, EventArgs e)

        {

            simpleflag = true;

            button23.Visible = false;

            button24.Visible = false;

        }


        private void radioButton1_CheckedChanged(object sender, EventArgs e)

        {

            simpleflag = false;

            button23.Visible = true;

            button24.Visible = true;

        }


        private void reset()

        {         

           num1 = 0;

            num2 = 0;

            num1flag = false;

            num2flag = false;

        }// num1 num2 重置


        private void Setzero()

        {

            this.textBox1.Text = "0";

        }//顯示0


        private void input()

        {

            if (num1flag == false)

            {

                try

                {

                    num1 = Convert.ToDouble(this.textBox1.Text);

                    num1flag = true;

                }

                catch (Exception) { }


            }



            else

            {

                try

                {

                    num2 = Convert.ToDouble(this.textBox1.Text);

                    num2flag=true;

                }

                catch (Exception) { }

            }

        } //輸入num1或num2;


        private void cal()

        {

            num1 = scalculator.ans(num1, num2, calchar);

            num2flag=false;

           

        }

        private void cal2()

        {

            num1 = scalculator.ans(num1,calchar);

            num2flag = false;


        }

        private double cal3()//科學運算

        {

         Stack<char> OPTR=new Stack<char>();//運算符

         Stack<double> OPND = new Stack<double>();//操做數

         OPTR.Push('#');

         char calchar,c=this.textBox1.Text[0];

         double a = 0, b = 0;

         int i = 0, j = 0;

         while(c!='#'||OPTR.Peek()!='#')

         {

             c = this.textBox1.Text[i];

             if (!In(c))//是數字

             {   

                 if(i==0||In(this.textBox1.Text[i-1]))//上一個符號是運算符或i=0;

                 {

                     j = i;

                    

                   

                 }


                 if (In(this.textBox1.Text[i + 1]))//下一個符號是運算符

                 {


                     OPND.Push(Convert.ToDouble(this.textBox1.Text.Substring(j, i-j+1)));

                     

                 }

                 i++;

             }

             else

             {

                

                 if(Precede(OPTR.Peek(),c)=='?'){this.textBox1.Text="表達式錯誤";break;}

                 switch (Precede(OPTR.Peek(), this.textBox1.Text[i]))

                 {

                     case'<':

                         OPTR.Push(c);

                         i++;

                         break;

                     case'=':

                         OPTR.Pop();

                         i++;

                         break;

                     case'>':

                         calchar = OPTR.Pop();

                         b = OPND.Pop();

                         a=OPND.Pop();

                         OPND.Push(scalculator.ans(a, b, calchar));

                         break;

                       

                 }

             }

          

            

               


         }

         return OPND.Peek();

        }


        private char Precede(char a, char b)

        {

            switch (a)

            {

                case '+':

                case '-':

                    if (b == '+' || b == '-' || b == ')' || b == '#') return '>';

                    if (b == '*' || b == '/' || b == '(') return '<';

                    break;

                case '*':

                case '/':

                    if (b == '+' || b == '-' || b == '*' || b == '/' || b == ')' || b == '#') return '>';

                    if (b == '(') return '<';

                    break;

                case '(': 

                    if (b == '+' || b == '-' || b == '*' || b == '/' || b == '(') return '<';

                    if (b == ')') return '=';

                    break;

                case ')': 

                    if (b == '+' || b == '-' || b == '*' || b == '/' || b == ')'||b=='#') return '<';

                    break;

                case '#':

                    if(b == '+' || b == '-' || b == '*' || b == '/' || b == '(')  return'<';

                    if(b=='#')return '=';

                    break;

                default: return '?'; break;

            }

            return '?';

        }

        private Boolean In(char a)//是運算符返回true

        {

            if (a.Equals('+') || a.Equals('-') || a.Equals('*') || a.Equals('/') || a.Equals('(') || a.Equals(')') || a.Equals('#')) { return true; }

            return false;

        }

        private void textBox1_TextChanged(object sender, EventArgs e)

        {

            button20.Focus(); //text改變,焦點鎖定爲「=」

           

        }


        private void button23_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e); 

        }


        private void button24_Click(object sender, EventArgs e)

        {

            button1_Click(sender, e); 

        }


        private void Form1_Load(object sender, EventArgs e)

        {


        }


    


       


     

    

        


      

       


       

    }

}

相關文章
相關標籤/搜索