原文件和代码需要的话私聊留邮箱我看见会发给你!,做到力所能及 这里是旧版计算器
优化 改过bug的 请移步至
新版计算器
visual studio 2019
这是我的样式
–接下来是代码
//--------------------------------------------------------------------------------
//变量声明and变量的作用开始
//记录程序第一次1启动
Boolean system_one = false;
//判断用过小数点后,是否有输入数字如果没有输入数字就不能使用四则运算符
Boolean dian_number;
//ji 计算 用过多少次等于号
int ji = 0;
//sum 用来记录每一次的新值
double sum = 0;
//value 是最后的结果
double value;
//fh 是用来记录我们正在使用的符号
String fh;
//eco 用来记录 用户摁过多少次等于号, eco = 0 就是还没用过, 如果用过的话 就++
int eco = 0;
//temp 用来记录 一直被处理的数字
double temp = 0.0;
//record 用来判断使用四则运算符后,是否输入数字,输入了就是true没有就是false
Boolean record = true;
//number 是用来判断数字键是否使用过,number = 0 就是没用过 等于 number =1 就是使用过;
byte number = 0;
//符号的次数 0就按原来的样式不等0就是其他样式
byte numberOfSymbols = 0;
//用来装记忆的盒子
double memory = 0.0;
//等号执行多次的 num1
double num1 = 0.0;
//记录符号中的变化之前的值
double temp_symbols;
//变量声明和变量使用的介绍结束
//-------------------------------------------------------------------------------------
//退格键方法
private void Backpace_Click(object sender, EventArgs e)
{ //当删完了之后,就给它补个零
if (enter.Text == "")
{
enter.Text = "0";
}
else //否则就继续删
{
string old = enter.Text;
char o = old[0];
if (old.Length == 2 && o=='-')
{
enter.Text = old.Remove(0);
enter.Text = "0";
}
else {
enter.Text = old.Remove(old.Length - 1);
}
}
}
//-----------------------------------
//数字键入
private void Number_Click(object sender, EventArgs e)
{
dian_number = true;
if (ji == 1) {
Empty_Click(C, null);
ji = 0;
}
if (number == 0 )
{
enter.Clear();
}
record = true;
int leng = enter.TextLength;
Button num = (Button)sender;
if (leng < 16)
{
if (enter.Text == "0")
{
enter.Text = num.Text;
}
else
{
enter.Text += num.Text;
}
}
else
{
enter.Text = enter.Text;
}
number = 1;//用过就记录一下
}
//----------------------------------------------
##符号键
//符号键入方法
private void Symbol_Click(object sender, EventArgs e)
{
if (dian_number == true)
{
//刷新用户摁过的等号次数
eco = 0;
ji = 0;
Button f = (Button)sender;
fh = f.Text;
/*
* 如果enter.Text 是空值的话 人enter.Text 等于 原来的值
*/
if (enter.Text == "")
{
enter.Text = sum.ToString();
}
//第一次使用从这里
if (numberOfSymbols == 0)
{
CalculationSteps.Text = "";
//record 记录数字键是否有用过 有用过就是true 没用过就是false
if (record == true)
{
sum = double.Parse(enter.Text);
//判断CalculationSteps 的内容是不是0 如果是就直接覆盖 如果不是就加等
if (CalculationSteps.Text == "0" && ji != 0)
{
CalculationSteps.Text = enter.Text + fh;
}
else
{
CalculationSteps.Text += enter.Text + fh;
}
value = sum;
//用完符号键 就需要在等待数字键的输入所以此时数字键是没用过的所以是false
record = false;
}
else
{
enter.Text = "0";
}
//用一次
numberOfSymbols = 1;
}
else
{
if (record == true)
{
temp = double.Parse(enter.Text);
temp_symbols = value;
switch (fh)
{
case "+":
value += temp;
break;
case "-":
value -= temp;
break;
case "x":
value *= temp;
break;
case "÷":
if (enter.Text == "0")
{
enter.Text = "除数不能为零";
}
else
{
value /= temp;
}
break;
}
enter.Text = value.ToString();
/*CalculationSteps.Text = enter.Text + f.Text;*/
//该之后
CalculationSteps.Text = temp_symbols.ToString() + f.Text + temp.ToString() + "=";
}
else
{
CalculationSteps.Text = enter.Text + f.Text;
record = false;
}
}
number = 0;//符号键入后需要继续输入数字所以就把数字的使用记录清空后,在等待数字键入,以防出现两次符号
}
else {
//如果输入小数点后不输入数字,就不做任何操作
}
}
//-------------------------------------------------------
//百分比
private void Bai_Click(object sender, EventArgs e)
{
int B = 100;
enter.Text = (double.Parse(enter.Text) / B).ToString();
}
//--------------------------------------------
//等于号
/*
* 处理点了等号之后的操作
* 比如如果我们没有输入值,然后点了等号 之后的处理
*/
private void Equal_Click(object sender, EventArgs e)
{
//读取等于号
Button nu = (Button)sender;
if (number == 0)
{
enter.Text = value.ToString();
}
//如果enter.Text 是空值的话 人enter.Text 等于 "0"
if (enter.Text == "")
{
enter.Text = "0";
}
else//不是的话就,正常执行操作
{
//第一次进入系统和没用过符号
if (numberOfSymbols == 0 & system_one == false )
{
value = Convert.ToDouble(enter.Text);
CalculationSteps.Text = enter.Text;
}
else
{
//第一次点等号执行这个操作
if (eco == 0)
{
Boolean WhetherTheNumbers = double.TryParse(enter.Text, out double Now);
if (WhetherTheNumbers == true )
{
if (fh == null)
{
CalculationSteps.Text = enter.Text;
numberOfSymbols = 0;
enter.Text = value.ToString();
ji = 1;
return;
}
CalculationSteps.Text = value.ToString() + fh.ToString() + enter.Text + nu.Text;
switch (fh)
{
case "+":
value += Now;
break;
case "-":
value -= Now;
break;
case "x":
value *= Now;
break;
case "÷":
if (enter.Text == "0")
{
enter.Text = "除数不能为零";
return;
}
else
{
value /= Now;
}
break;
}
eco++;
temp = Now;
}
else
{
enter.Clear();
CalculationSteps.Text = "0";
temp = 0;
return;
}
}//点击1~n次的等号后的操作
else
{
switch (fh)
{
case "+":
value += temp;
num1 = value - temp;
break;
case "-":
value -= temp;
num1 = value + temp;
break;
case "x":
value *= temp;
num1 = value / temp;
break;
case "÷":
if (enter.Text == "0")
{
enter.Text = "除数不能为零";
}
else
{
value /= temp;
}
num1 = value * temp;
break;
}
CalculationSteps.Text = num1.ToString() + fh.ToString() + temp + nu.Text;
}
}
enter.Text = value.ToString();
ji=1;
}
system_one = true;
numberOfSymbols = 0;
}
//动态显示
/*
该方法的作用是控制enter.Text
也就是用户能够输入几个数
超过十个数之后就缩小字体大小
*/
private void Enter_TextChanged(object sender, EventArgs e)
{
TextBox temp = (TextBox)sender;
int leng = temp.TextLength;
if (leng == 10)
{
//设置enter 超过10位时 字体变小
enter.Font = new Font("Microsoft YaHei UI", 22);
}
}
//清空操作
private void Empty_Click(object sender, EventArgs e)
{
Button en = (Button)sender;
switch (en.Text)
{ //让一切回到最初的样式
case "C":
ji = 0;
sum = 0;
eco = 0;
temp = 0.0;
number = 0;
value = 0.0;
record = true;
enter.Text = "0";
dian_number = true;
CalculationSteps.Text = "";
break;
// 只清空enter.Text的记录
case "CE":
enter.Text = "0";
break;
}
}
//小数点
private void Dian_Click(object sender, EventArgs e)
{
//判断该字符串中是否有 "." 如果没有就可以使用 "." 如果有就不能使用
if (enter.Text.Contains(".") == false)
{
enter.Text += ".";
}
dian_number = false;
}
##记忆键使用
//记忆存
private void MS_Click(object sender, EventArgs e)
{
MR_label.Enabled = true;
MC_Label.Enabled = true;
Mv_label.Enabled = true;
memory = double.Parse(enter.Text);
}
//记忆清楚
private void MC_Click(object sender, EventArgs e)
{
memory = 0.00;
MC_Label.Enabled = false;
Mv_label.Enabled = false;
MR_label.Enabled = false;
}
//记忆读取
private void MR_Click(object sender, EventArgs e)
{
enter.Text = memory.ToString();
}
//记忆加
private void MJ_Click(object sender, EventArgs e)
{
memory += double.Parse(enter.Text);
}
//记忆存
private void Ms_Click(object sender, EventArgs e)
{
memory -= double.Parse(enter.Text);
}
//查看当前的记忆数字
private void Mv_Click(object sender, EventArgs e)
{
MessageBox.Show("当前记忆数字是"+memory.ToString(),"当前记忆数字");
}
//正负号添加
private void JiaOrJian_Click(object sender, EventArgs e)
{
string tempStr = enter.Text;
char t = tempStr[0];
if (enter.Text == "0")
{
enter.Text = enter.Text;
}
else
{
if (t == '-')
{
enter.Text = tempStr.Remove(0, 1);
}
else
{
enter.Text = tempStr.Insert(0, "-");
}
}
}