C#實現按鍵計算器功能2(增強版)


1.   實驗目的

  1)熟悉C#語言的使用和語法知識

2.   實驗要求

(1)設計簡單的含交互界面的計算器軟件,具有較強的用戶體驗感。

(2)使用C#語言進行編程,創建窗體應用程序。

(3)實現較簡單加減乘除等運算。

3.    運行效果如下:

4.    效果特點:

(1)每個按鈕均可輸入,但會阻止一些非法輸入,例如,在沒有輸入數字的時候就輸入運算符,點號的多次輸入,這些都會阻止。

(2)實現了運算的優先級,即乘除是先與加減計算的。

(3)可實現小數的計算,即彌補了整型無法得打小數的缺陷

(4)增加了歸零按鈕,一鍵返回到初始狀態

(5)按鈕和鍵盤綁定,可實現鍵盤敲擊時,界面按鈕同時相應

(6)結果可繼續運算,在點擊“=”完成后,可在第二個文本框中輸出結果,這時,如果在點擊運算符,可對這個結果繼續進行操作,實現完美的可繼續性

5.代碼如下:

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 按鍵計算器
{
    public partial class Form1 : Form
    {
        double[] number = new double[50];
        char[] operat = new char[50];
        bool isNumber = false;
        bool isDot = false;
        bool isOperat = false;
        bool isEqual = false;

        int numberIndex = 0;
        int operatIndex = 0;

        int dotCount = 0;
       





        public Form1()
        {
            InitializeComponent();
            btnleft.Hide();
            btnright.Hide();

        }

        //將鍵盤與按鈕關聯
        protected override bool ProcessCmdKey(ref   Message msg, Keys keyData)        
        {       
            if (keyData == Keys.NumPad1||keyData==Keys.D1)            
            {
                this.btn1.Focus();
                this.btn1.PerformClick(); 
             }
            if (keyData == Keys.NumPad2 || keyData == Keys.D2)
            {
                this.btn2.Focus();
                this.btn2.PerformClick();
            }
            if (keyData == Keys.NumPad3 || keyData == Keys.D3)
            {
                this.btn3.Focus();
                this.btn3.PerformClick();
            }
            if (keyData == Keys.NumPad4 || keyData == Keys.D4)
            {
                this.btn4.Focus();
                this.btn4.PerformClick();
            }
            if (keyData == Keys.NumPad5 || keyData == Keys.D5)
            {
                this.btn5.Focus();
                this.btn5.PerformClick();
            }
            if (keyData == Keys.NumPad6 || keyData == Keys.D6)
            {
                this.btn6.Focus();
                this.btn6.PerformClick();
            }
            if (keyData == Keys.NumPad7 || keyData == Keys.D7)
            {
                this.btn7.Focus();
                this.btn7.PerformClick();
            }
            if (keyData == Keys.NumPad8 || keyData == Keys.D8)
            {
                this.btn8.Focus();
                this.btn8.PerformClick();
            }
            if (keyData == Keys.NumPad9 || keyData == Keys.D9)
            {
                this.btn9.Focus();
                this.btn9.PerformClick();
            }
            if (keyData == Keys.NumPad0 || keyData == Keys.D0)
            {
                this.btn0.Focus();
                this.btn0.PerformClick();
            }
            if (keyData == Keys.Add)
            {
                this.btnadd.Focus();
                this.btnadd.PerformClick();
            }
            if (keyData == Keys.Subtract || keyData == Keys.OemMinus)
            {
                this.btnsub.Focus();
                this.btnsub.PerformClick();
            }
            if (keyData == Keys.Multiply)
            {
                this.btnmul.Focus();
                this.btnmul.PerformClick();
            }
            if (keyData == Keys.Divide)
            {
                this.btndiv.Focus();
                this.btndiv.PerformClick();
            }
            if (keyData == Keys.Enter || keyData == Keys.Oemplus)
            {
                this.btnequ.Focus();
                this.btnequ.PerformClick();
            }
            if (keyData == Keys.Back)
            {
                this.btncle.Focus();
                this.btncle.PerformClick();
            }      
        return base.ProcessCmdKey(ref   msg, keyData);  
        }  


        private void btn1_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {
             
                textBox1.Text ="";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }
            textBox1.Text = textBox1.Text + "1";
            textBox2.Text = textBox2.Text + "1";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;


        }

        private void btn2_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            textBox1.Text = textBox1.Text + "2";
            textBox2.Text = textBox2.Text + "2";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;

        }

        private void btn3_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            textBox1.Text = textBox1.Text + "3";
            textBox2.Text = textBox2.Text + "3";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;

        }

        private void btn4_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            textBox1.Text = textBox1.Text + "4";
            textBox2.Text = textBox2.Text + "4";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;

        }

        private void btn5_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            textBox1.Text = textBox1.Text + "5";
            textBox2.Text = textBox2.Text + "5";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;

        }

        private void btn6_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            textBox1.Text = textBox1.Text + "6";
            textBox2.Text = textBox2.Text + "6";
            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;
        }

        private void btn7_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            textBox1.Text = textBox1.Text + "7";
            textBox2.Text = textBox2.Text + "7";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;
        }

        private void btn8_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            textBox1.Text = textBox1.Text + "8";
            textBox2.Text = textBox2.Text + "8";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;
        }

        private void btn9_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }
            textBox1.Text = textBox1.Text + "9";
            textBox2.Text = textBox2.Text + "9";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;
        }

        private void btn0_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {

                textBox1.Text = "";
                textBox2.Text = "";

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }
            textBox1.Text = textBox1.Text + "0";
            textBox2.Text = textBox2.Text + "0";

            isNumber = true;
            isDot = false;
            isOperat = false;
            isEqual = false;
        }

        private void btnf_Click(object sender, EventArgs e)
        {
            if ((isNumber == true)&&(dotCount==0))
            {
                textBox1.Text = textBox1.Text + ".";
                textBox2.Text = textBox2.Text + ".";

                dotCount++;
                isNumber = false;
                isDot = true;
                isOperat = false;
                isEqual = false;
            }
        }

        private void btnadd_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {
                number[numberIndex] = double.Parse(textBox2.Text);
                operat[operatIndex] = '+';
                textBox1.Text = textBox2.Text + "+";
                textBox2.Text = "";

                numberIndex++;
                operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }
            
            if ((isOperat==false)&&(isDot==false)&&(isNumber == true))
            {
              
                    number[numberIndex] = double.Parse(textBox2.Text);
                    operat[operatIndex] = '+';
                    textBox1.Text = textBox1.Text + "+";
                    textBox2.Text = "";

                    numberIndex++;
                    operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;


            }
            

        }

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

        private void btnmul_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {
                number[numberIndex] = double.Parse(textBox2.Text);
                operat[operatIndex] = '*';
                textBox1.Text = textBox2.Text + "*";
                textBox2.Text = "";

                numberIndex++;
                operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }

            if ((isOperat == false) && (isDot == false) && (isNumber == true))
            {

                number[numberIndex] = double.Parse(textBox2.Text);
                operat[operatIndex] = '*';
                textBox1.Text = textBox1.Text + "*";
                textBox2.Text = "";

                numberIndex++;
                operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;


            }

        }

        private void btndiv_Click(object sender, EventArgs e)
        {

            if (isEqual == true)
            {
                number[numberIndex] = double.Parse(textBox2.Text);
                operat[operatIndex] = '/';
                textBox1.Text = textBox2.Text + "/";
                textBox2.Text = "";

                numberIndex++;
                operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }
            if ((isOperat == false) && (isDot == false) && (isNumber == true))
            {

                number[numberIndex] = double.Parse(textBox2.Text);
                operat[operatIndex] = '/';
                textBox1.Text = textBox1.Text + "/";
                textBox2.Text = "";

                numberIndex++;
                operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;


            }


        }

        private void btnsub_Click(object sender, EventArgs e)
        {
            if (isEqual == true)
            {
                number[numberIndex] = double.Parse(textBox2.Text);
                operat[operatIndex] = '-';
                textBox1.Text = textBox2.Text + "-";
                textBox2.Text = "";

                numberIndex++;
                operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;

            }
            if ((isOperat == false) && (isDot == false) && (isNumber == true))
            {

                number[numberIndex] = double.Parse(textBox2.Text);
                operat[operatIndex] = '-';
                textBox1.Text = textBox1.Text + "-";
                textBox2.Text = "";

                numberIndex++;
                operatIndex++;

                dotCount = 0;
                isNumber = false;
                isDot = false;
                isOperat = true;
                isEqual = false;


            }
        }

        private void btnequ_Click(object sender, EventArgs e)
        {
            if (textBox2.Text != "")
            {
                number[numberIndex] = double.Parse(textBox2.Text);



                //判斷乘除
                for (int i = 0; i < operatIndex;)
                {

                    //對乘號分析
                    if (operat[i] == '*')
                    {
                        number[i] = number[i] * number[i + 1];
                        for (int j = i + 1; j < operatIndex; j++)
                        {
                            number[j] = number[j + 1];
                            operat[j - 1] = operat[j];

                        }
                        numberIndex--;
                        operatIndex--;

                    }
                    //對除號分析
                    else if (operat[i] == '/')
                    {
                        number[i] = number[i] / number[i + 1];
                        for (int j = i + 1; j < operatIndex; j++)
                        {
                            number[j] = number[j + 1];
                            operat[j - 1] = operat[j];

                        }
                        numberIndex--;
                        operatIndex--;

                    }
                    else
                    { i++; }

                }


                //判斷加減
                for (int i = 0; i < operatIndex;)
                {

                    //對加號分析
                    if (operat[i] == '+')
                    {
                        number[i] = number[i] + number[i + 1];
                        for (int j = i + 1; j < operatIndex; j++)
                        {
                            number[j] = number[j + 1];
                            operat[j - 1] = operat[j];

                        }
                        numberIndex--;
                        operatIndex--;

                    }
                    //對減號分析
                    else if (operat[i] == '-')
                    {
                        number[i] = number[i] - number[i + 1];
                        for (int j = i + 1; j < operatIndex; j++)
                        {
                            number[j] = number[j + 1];
                            operat[j - 1] = operat[j];

                        }
                        numberIndex--;
                        operatIndex--;

                    }
                    else { i++; }

                }

                textBox2.Text = number[0].ToString();
                isNumber = false;
                isDot = false;
                isOperat = false;
                isEqual = true;
                numberIndex = 0;
                operatIndex = 0;
            }


        }
        private void btncle_Click(object sender, EventArgs e)
        {
           isNumber = false;
           isDot = false;
           isOperat = false;
           isEqual = false;

            numberIndex = 0;
            operatIndex = 0;

           dotCount = 0;
          
           textBox1.Text = "";
           textBox2.Text = "";

        }

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

        private void btnright_Click(object sender, EventArgs e)
        {

        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM