C#實現按鍵計算器功能
(一次失敗的編程)
界面:
代碼如下:
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 { //flag1表示開始輸入數字時,該數的位數 //flag2表示在此時運算符(+ - */)的個數 //flag3在輸入運算符時用於判斷,表示在輸入運算符時,前一個運算符為+時等於1, -為2 *為3 /為4 int flag1 =0,flag2=0,flag3=5; //isEqual表示該狀態時是否點擊了等於按鈕 bool isEqual =false; //isClear表示是否清空了主輸入編輯框里的數據 bool isClear = true; //isError表示是否出現錯誤,數據溢出,該部分還未完善 bool isError = false; //輸入等於號的個數,這里程序后面會控制在0和1之間,多余的輸入無效 int numEqual = 0; //m表示進行計算的第一個數,n表示進行計算的第二個數,一般第一次計算結束后會把結果存儲在result中, int m = 0, n = 0,result=0; public Form1() { InitializeComponent(); } //將鍵盤與按鈕關聯 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) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "1"; textBox2.Text = textBox2.Text + "1"; flag1++; } private void btn2_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "2"; textBox2.Text = textBox2.Text + "2"; flag1++; } private void btn3_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "3"; textBox2.Text = textBox2.Text + "3"; flag1++; } private void btn4_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "4"; textBox2.Text = textBox2.Text + "4"; flag1++; } private void btn5_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "5"; textBox2.Text = textBox2.Text + "5"; flag1++; } private void btn6_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "6"; textBox2.Text = textBox2.Text + "6"; flag1++; } private void btn7_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "7"; textBox2.Text = textBox2.Text + "7"; flag1++; } private void btn8_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "8"; textBox2.Text = textBox2.Text + "8"; flag1++; } private void btn9_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "9"; textBox2.Text = textBox2.Text + "9"; flag1++; } private void btn0_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "0"; textBox2.Text = textBox2.Text + "0"; flag1++; } private void btnf_Click(object sender, EventArgs e) { // textBox1.Text = textBox1.Text + "."; } private void btnadd_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1!=0) { textBox1.Text = textBox1.Text + "+"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text=""; flag1 = 0; flag2=1; flag3 = 1; isClear = false; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch(flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } textBox2.Text=""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 1; } } } } private void textBox1_TextChanged(object sender, EventArgs e) { } private void btnmul_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1 != 0) { textBox1.Text = textBox1.Text + "*"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text = ""; flag1 = 0; flag2 = 1; flag3 = 3; isClear = false; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } if(isEqual) textBox2.Text = ""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 3; } } } } private void btndiv_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1 != 0) { textBox1.Text = textBox1.Text + "/"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text = ""; flag1 = 0; flag2 = 1; flag3 = 4; isClear = false; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } textBox2.Text = ""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 4; } } } } private void btnsub_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1 != 0) { textBox1.Text = textBox1.Text + "-"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text = ""; flag1 = 0; flag2 = 1; flag3=2; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } textBox2.Text = ""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 2; } } } } private void btnequ_Click(object sender, EventArgs e) { if (flag1 != 0) { if (numEqual == 0) { textBox1.Text = textBox1.Text + "="; numEqual++; } n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } if (flag2 == 0) { if (numEqual == 1) { m = int.Parse(textBox2.Text); } } textBox2.Text = m.ToString(); result = m; flag1 = 1; flag2 = 0; flag3 = 5; isEqual = true; } } private void btncle_Click(object sender, EventArgs e) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; numEqual = 0; isClear = true; } } }
運行結果:
不足:1.未處理數據溢出的情況
2.只支持整型數據運算,還不能進行浮點運算