C#網頁版計算器程序代碼


calculator.aspx.cs代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default2 : System.Web.UI.Page
{
    static double[] num = new double[10]; //操作數數組
    static char[] oprt = new char[10]; //操作運算符
    static string no="";//數字字符串轉換為double型數據
    static int i = 0, j = 0, st = 0, q = 0;//i數組下標,j運算符下標,st顯示屏清零標識符,q 括號下標
    static int[] kh = new int[10];//括號數量和坐標
           
    protected void Page_Load(object sender, EventArgs e)
    {

        if (st == 1) { Label1.Text = "";st = 0; }//清零后操作重新顯示
        
    }
    protected void Button_Click(object sender, EventArgs e)//數字鍵組合按鈕事件,利用中間no過度得到double型數據
    {
        Button b=sender as Button;
        no += b.Text.ToString() ;
        Label1.Text += b.Text;
        num[i] = Convert.ToDouble(no);
    }
    protected void ButtonOprt_Click(object sender, EventArgs e)
    {
        Button b = sender as Button;
        Label1.Text += b.Text;
        oprt[j] = Convert.ToChar(b.Text);//操作運算符-+*/
        ++i; ++j; no = "";

        if (j - kh[q] == 3)//保持數字數組中的個數為三個,大於三個時就可以判斷計算更新數字數組;
                           //kh[q]是對於括號中的數字進行統計
        {
            switch (oprt[j-2].ToString())
            {
                case "/"://判斷第二個運算符是不是*/,假如是還需判斷第一個是不是,從而決定計算順序
                    {
                        if (oprt[j - 3].ToString().Equals("/") || oprt[j - 3].ToString().Equals("*")) break;
                        else { num[i-2] /= num[i-1]; goto update2; }//
                    }

                case "*":
                    {
                        if (oprt[j - 3].ToString().Equals("/") || oprt[j - 3].ToString().Equals("*")) break;
                        else { num[i - 2] *= num[i - 1]; goto update2; }
                    }
                default: break;

            }
            switch (oprt[j - 3].ToString())//計算第一個運算符
            {
                case "/": num[i - 3] /= num[i - 2]; goto update1;
                case "*": num[i - 3] *= num[i - 2]; goto update1;
                case "+": num[i - 3] += num[i - 2]; goto update1;
                case "-": num[i - 3] -= num[i - 2]; goto update1;
                default: break;

            }

        update1://根據計算結果更新數組和運算符
            num[i - 2] = num[i - 1];
            oprt[j - 3] = oprt[j - 2];
        update2:
            i--; j--;
            oprt[j - 1] = oprt[j];

        }
        
    }

    protected void ButtonDot_Click(object sender, EventArgs e)
    {
        Label1.Text += ".";
        no += ".";
    }
    protected void ButtonClear_Click(object sender, EventArgs e)//數據清零按鈕
    {
        i = j = 0;no = "";//數據清零
        Label1.Text ="0";
        st = 1;
    }
    protected void ButtonTime_Click(object sender, EventArgs e)//顯示時間按鈕
    {
        i = j = 0; no = "";//數據清零
        Label1.Text = DateTime.Now.ToString();
        st = 1;
    }
    protected void ButtonResult_Click(object sender, EventArgs e)
    {
        Label1.Text += RstBt.Text;
        if (j == 2)
        {
            switch (oprt[1].ToString())//同ButtonOprt_Click事件中
            {
                case "/":
                    {
                        if (oprt[0].ToString().Equals("/") || oprt[0].ToString().Equals("*")) break;
                        else { num[1] /= num[2]; i--; j--; break; }
                    }
                case "*":
                    {
                        if (oprt[0].ToString().Equals("/") || oprt[0].ToString().Equals("*")) break;
                        else { num[1] *= num[2]; i--; j--; break; }
                    }
                default: break;
                    
            }
        }
        for (int k = 0; k <i; k++)//計算結果
        {
            switch (oprt[k].ToString())
            {
                case "/": num[k] /= num[k + 1]; break;
                case "*": num[k] *= num[k + 1]; break;
                case "+": num[k] += num[k + 1]; break;
                case "-": num[k] -= num[k + 1]; break;
                default: break;
            }
            num[k+1] = num[k];
        }
        num[0] = num[i];
        Label1.Text += num[0];
        i = j = 0; no = "";//數據清零
        st = 1;
    }
    protected void ButtonOprt2_Click(object sender, EventArgs e)
    {
        /*對應於計算器中最左邊一排運算符
         * 使用舉例如:計算5!需先點擊3數字按鈕
         * 然后點擊!階乘按鈕,顯示5_n!
         * 點擊=按鈕即顯示結果 5_n!=120,其他同理*/
        Button b = sender as Button;
        Label1.Text += ("_" + b.Text);
        switch (b.ID)
        {
            case ("t"): num[i] = Math.Pow(10, num[i]); break;
            case ("s"): num[i] = Math.Pow(num[i], 2); break;
            case ("f"):
                for (int m = (int)num[i] - 1; m >= 1; m--)
                { num[i] *= m; }
                break;
            case ("r"): num[i] = 1 / num[i]; break;
            case ("p"): num[i] = num[i] / 100; break;
            default: break;
        }

    }
    protected void ButtonLkh_Click(object sender, EventArgs e)
    {
        Button b = sender as Button;
        Label1.Text += b.Text;
        kh[++q] = i;//記錄括號位置,以方便括號中計算結果后存儲到num相應索引中
        //ButtonOprt_Click中j->j-kh[q],num[0]->num[kh[q]],

    }
    protected void ButtonRkh_Click(object sender, EventArgs e)
    {
        Button b = sender as Button;
        Label1.Text += b.Text;
        //當點擊一次右括號時把括號中的結果計算出來
        //同於=中的算法,num[0]->num[kh[q]],i=kh[q--];j=kh[q--];
        if (j - kh[q] == 2)
        {
            switch (oprt[j-1].ToString())//同ButtonOprt_Click事件中
            {
                case "/":
                    {
                        if (oprt[j-2].ToString().Equals("/") || oprt[j-2].ToString().Equals("*")) break;
                        else { num[i-2] /= num[i-1]; i--; j--; break; }
                    }
                case "*":
                    {
                        if (oprt[j - 2].ToString().Equals("/") || oprt[j - 2].ToString().Equals("*")) break;
                        else { num[i - 2] *= num[i - 1]; i--; j--; break; }
                    }
                default: break;

            }
        }
        for (int k = kh[q]; k < i; k++)//計算結果
        {
            switch (oprt[k].ToString())
            {
                case "/": num[k] /= num[k + 1]; break;
                case "*": num[k] *= num[k + 1]; break;
                case "+": num[k] += num[k + 1]; break;
                case "-": num[k] -= num[k + 1]; break;
                default: break;
            }
            num[k + 1] = num[k];
        }
        num[kh[q]] = num[i];
        i = kh[q]; 
        j = kh[q--];
    }
}

  calculator.aspx代碼

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="calculator.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css"> 
        
        .bib 
        {width:50px;   
         height:35px;   
         line-height:30px;   
         background-position: 0 -132px;}
         
     
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        
        <asp:Panel ID="Panel1" runat="server" BorderStyle=" inset" Width="240px" 
            Height="35px">
            <asp:Label ID="Label1" runat="server" Text="" Height="34px" Width="260px" ></asp:Label>
        </asp:Panel>

        <asp:Panel ID="Panel2" runat="server" BorderStyle="none" Width="283px" >
            <asp:Button ID="t" runat="server" Text="10^" class="bib" 
                onclick="ButtonOprt2_Click" />
            <asp:Button ID="Button2" runat="server" Text="(" class="bib" 
                onclick="ButtonLkh_Click" />
            <asp:Button ID="Button3" runat="server" Text=")" class="bib" 
                onclick="ButtonRkh_Click"  />
            <asp:Button ID="Button4" runat="server" Text="C"  class="bib" 
                onclick="ButtonClear_Click" />
            <asp:Button ID="Button5" runat="server" Text="T"  class="bib" 
                onclick="ButtonTime_Click" />

            <br />

            <asp:Button ID="s" runat="server" Text="x^2" class="bib"  
                onclick="ButtonOprt2_Click" />
            <asp:Button ID="Button7" runat="server" Text="7"  class="bib" 
                onclick="Button_Click" />
            <asp:Button ID="Button8" runat="server" Text="8"  class="bib"
              onclick="Button_Click" />
            <asp:Button ID="Button9" runat="server" Text="9"  class="bib" 
              onclick="Button_Click"/>
            <asp:Button ID="Button10" runat="server" Text="/"  class="bib" 
                onclick="ButtonOprt_Click" />

            <br />

            <asp:Button ID="f" runat="server" Text="n!"  class="bib" 
                 onclick="ButtonOprt2_Click"/>
            <asp:Button ID="Button12" runat="server" Text="4"  class="bib"
              onclick="Button_Click" />
            <asp:Button ID="Button13" runat="server" Text="5"  class="bib" 
              onclick="Button_Click"/>
            <asp:Button ID="Button14" runat="server" Text="6"  class="bib" 
              onclick="Button_Click"/>
            <asp:Button ID="Button15" runat="server" Text="*"  class="bib"
               onclick="ButtonOprt_Click" />
            <br />

            <asp:Button ID="r" runat="server" Text="1/x"  class="bib" 
              onclick="ButtonOprt2_Click"/>
            <asp:Button ID="Button17" runat="server" Text="1"  class="bib"
              onclick="Button_Click" />
            <asp:Button ID="Button18" runat="server" Text="2"  class="bib"
              onclick="Button_Click" />
            <asp:Button ID="Button19" runat="server" Text="3"  class="bib"
              onclick="Button_Click" />
            <asp:Button ID="Button20" runat="server" Text="-"  class="bib" 
                onclick="ButtonOprt_Click" />
            <br />

            <asp:Button ID="p" runat="server" Text="%"  class="bib" onclick="ButtonOprt2_Click" />
            <asp:Button ID="Button22" runat="server" Text="0"  class="bib"
              onclick="Button_Click" />
            <asp:Button ID="Button23" runat="server" Text="."  class="bib" 
              onclick="ButtonDot_Click"/>
            <asp:Button ID="RstBt" runat="server" Text="="  class="bib" 
                onclick="ButtonResult_Click" />
            <asp:Button ID="Button25" runat="server" Text="+"  class="bib"
               onclick="ButtonOprt_Click" />
        </asp:Panel>
    </div>
    </form>
</body>
</html>

  


免責聲明!

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



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