小計算器代碼(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(this, new 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)));
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.