小計算器代碼(C#)

爲應付考試的c#計算器程序主要代碼 :
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Text.RegularExpressions;

namespace caculator

{

    public partial class caculator1 : Form

    {

        String op1,op2;           //定義兩個操作數

        bool DecimalFlag;         //標識小數點是否存在

        int NumOps;               //記錄操作數個數

        String LastInput;         //指示上一次按鍵事件的類型

        int OpFlag;               //指示將要進行的操作類型

        bool OperaterFlag;        //指示是否已經進行過操作

        String TempReadout;

        public caculator1()

        {

            InitializeComponent();//初始化界面控件

        }

        private void caculator1_Load(object sender, EventArgs e)   //對變量進行初始化賦值

        {

            DecimalFlag = false;                 //小數點標誌賦爲false

            OperaterFlag = false;                //尚未進行過操作

            NumOps = 0;                          //操作數個數爲

            LastInput = "NONE";

            OpFlag = 0;

            ReadOut.Text = "0.";                 //文本框中初始值爲“.”

        }

        public void calculate(int MyNumber)            //接收操作數

        {

            if (!OperaterFlag)                         //判斷是否點擊過操作符,初始值爲false  如果沒有點擊操作符

            {

                if (DecimalFlag)                       //判斷是否點擊過小數點,初始值爲false   如果已經點擊過小數點

                {

                    ReadOut.Text = ReadOut.Text + MyNumber;   //直接把點擊的數字加在框中現有數據的後面  小數點後點擊的數字直接追加

                }

                else                                       //未曾點擊過小數點則進行如下操作  

                {

                    if (ReadOut.Text == "0.")          

                    {

                        ReadOut.Text = MyNumber + ".";      //如果輸入框中此時爲“0.”,則在輸入數字的後面加上小數點,如此時輸入,則顯示“.”

                    }

                    Else   

                    {

                        ReadOut.Text = ReadOut.Text.Substring(0, ReadOut.Text.Length - 1) + MyNumber + ".";  //框中數據後面加上小數點

                    }

                }

            }

            else

            {

                ReadOut.Text = MyNumber + ".";     //點擊過操作符之後,輸入的數字後面仍然加個小數點(爲了顯示的一致性,即任何時候框中的數據都是*.)

            }

           // DecimalFlag = false;

            OperaterFlag = false;

        }

        private void sign_Click(object sender, EventArgs e)        //正負切換(+/-)

        {

            if (ReadOut.Text != "0.")          //此時框中的數值不爲“0.”

            {

                if (LastInput == "NUMS")       //上次輸入的數爲正數

                {

                    LastInput = "NEG";             //把LastInput置爲“NEG”,表明最後一次輸入的數是負數

                    ReadOut.Text = "-" + ReadOut.Text;    //給文本框中的數值前添上“-”號

                }

                else if (LastInput == "NEG")     //如果上次輸入爲負數

                {

                    LastInput = "NUMS";         //把LastInput置爲“NUMS”,表明最後一次輸入的數是正數

                    ReadOut.Text = ReadOut.Text.Substring(1, ReadOut.Text.Length - 1);  //把框中的數據最前面的符號去掉(重新變成正數)

                }

                else                     //正常情況下默認此時文本框中的數值是正數,點擊+/-後,變成負數

                {

                    LastInput = "NEG";

                    ReadOut.Text = "-" + ReadOut.Text;

                } 

            }  

            else

            {

                LastInput = "NUMS";      //爲“0.”時的情況

            }

        }

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

        {

            if (OperaterFlag == true)

            {

                ReadOut.Text = "0.";

            }

               DecimalFlag = true;

        }

        public void StandardizationShow(String s)                     //規範化顯示

        {

            if (s.IndexOf(".") == -1)

            {

                ReadOut.Text = s + "."

            }

            else

            {

                ReadOut.Text=s;

            }

        }

        private void Number0_Click(object sender, EventArgs e)    //點擊對應的數字鍵時調用方法

        {

            calculate(0);

        }

        private void Number1_Click(object sender, EventArgs e)

        {

            calculate(1);

        }

        private void Number2_Click(object sender, EventArgs e)

        {

            calculate(2);

        }

        private void Number3_Click(object sender, EventArgs e)

        {

            calculate(3);

        }

        private void Number4_Click(object sender, EventArgs e)

        {

            calculate(4);

        }

        private void Number5_Click(object sender, EventArgs e)

        {

            calculate(5);

        }

        private void Number6_Click(object sender, EventArgs e)

        {

            calculate(6);

        }

        private void Number7_Click(object sender, EventArgs e)

        {

            calculate(7);

        }

        private void Number8_Click(object sender, EventArgs e)

        {

            calculate(8);

        }

        private void Number9_Click(object sender, EventArgs e)

        {

            calculate(9);

        }

        public void OperatorCal(int MyOperator)                  //接收操作符

        {

            if(!OperaterFlag)             //判斷以前是否單擊過操作符,避免連擊操作符錯誤

            {

                NumOps = NumOps + 1;  

            }

  

            switch (NumOps)

            {

                case 0:

                    OperaterFlag = true;

                    break;

                case 1:

                    op1 = ReadOut.Text;

                    OperaterFlag = true;

                    break;

                case 2:

                    op2 = ReadOut.Text;

                    switch (OpFlag)

                    {

                        case 1:

                            op1 = (Double.Parse(op1) + Double.Parse(op2)).ToString();  //

                            break;

                        case 3:

                            op1 = (Double.Parse(op1) - Double.Parse(op2)).ToString();  //

                            break;

                        case 2:

                            op1 = (Double.Parse(op1) * Double.Parse(op2)).ToString();//

                            break;

                        case 0:

                            if (Double.Parse(op2) == 0)                                //

                            {

                                MessageBox.Show("除數不能爲""計算器");

                            }

                            else

                            {

                                try

                                {

                                    op1 = (Double.Parse(op1) / Double.Parse(op2)).ToString();

                                }

                                catch (Exception e)

                                {

                                    Console.WriteLine("Generic Exception Handler: {0}", e.ToString());

                                }

                            }

                            break;

                        case 4:

                            op1 = op2;                        //等                                               

                            break;

                    }

                    TempReadout = op1;

                    this.StandardizationShow(TempReadout);

                    NumOps = 1;

                    break;

            }

            if(NumOps!=0)

            {

                OpFlag = MyOperator;

            }

            OperaterFlag = true;

            DecimalFlag = false;                              

           // LastInput = "NUMS";

        }

        private void operator1_Click(object sender, EventArgs e)

        {

            OperatorCal(1);

        }

        private void operator3_Click(object sender, EventArgs e)

        {

            OperatorCal(3);

        }

        private void operator2_Click(object sender, EventArgs e)

        {

            OperatorCal(2);

        }

        private void operator0_Click(object sender, EventArgs e)

        {

            OperatorCal(0);

        }

        private void operator4_Click(object sender, EventArgs e)

        {

            OperatorCal(4);

        }

        private void Percent_Click(object sender, EventArgs e)       //%

        {

            ReadOut.Text = (Double.Parse(ReadOut.Text) / 100).ToString();

            NumOps = NumOps + 1;

            DecimalFlag = true;

        }

        private void Cancel_Click(object sender, EventArgs e)        //C

        {

            ReadOut.Text = "0.";

            op1 = "";

            op2 = "";

            caculator1_Load(thisnew System.EventArgs());

        }

        private void CancelEntry_Click(object sender, EventArgs e)   //CE

        {

            ReadOut.Text = "0.";

            DecimalFlag = false;

            LastInput = "CE";

        }

        private void reciprocal_Click(object sender, EventArgs e)    //求倒數(/x)

        {

            ReadOut.Text = (1/Double.Parse(ReadOut.Text)).ToString();

        }

        private void Copy_Click(object sender, EventArgs e)     //複製

        {

           if(ReadOut.Text.Equals(""))

           {

               return;

           }

           Clipboard.SetDataObject(ReadOut.Text,true);

        }

        private void paste_Click(object sender, EventArgs e)   //粘貼

        {

            if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))

            {

                this.paste.Enabled = true;

                ReadOut.Text = "";

                this.ReadOut.Paste();

            }

            else

            {

                this.paste.Enabled = false;

            } 

        }

        private void Delete_Click(object sender, EventArgs e)   //刪除(BackSpace)

        {

            if (ReadOut.Text != "0.")

            {

                try

                {

                    ReadOut.Text = ReadOut.Text.Substring(0, ReadOut.Text.Length - 2) + ".";

                }

                catch (Exception ex)

                {

                    Console.WriteLine("Generic Exception Handler: {0}", ex.ToString());

                }

                

                if(ReadOut.Text==".")

                {

                    ReadOut.Text = "0.";

                }

            }

            

        }

        private void sqrt_Click(object sender, EventArgs e)

        {

            TempReadout = this.ReadOut.Text;

            this.ReadOut.Text = System.Convert.ToString(Math.Sqrt(System.Convert.ToDouble(TempReadout)));

        }

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章