为应付考试的c#计算器程序主要代码 :
using
System;
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
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)));
}
}
}
转载于:https://blog.51cto.com/lelezhang/55839