废话不多说直接上代码:
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 MyPersonalComputer
{
public partial class Form1 : Form
{
private static double ans = 0;//计算结果
private static String div_zero_fu = "+";//r_text.text最后一位,既上升运算符
private static int sign = 0;//清除c_text.text标记,在点击运算符后
private static int count = 0;//运算次数
private static int advance = 0;//提前运算标记,用于sqrt和1/x
private static int advandnum = 0;//如果输入sqrt和1/x后按数字r_text.text会清零
private static int numandfu = 1;//不允许连续输入运算符
public Form1()
{
InitializeComponent();
}
//字符串转化成double
private static double ch(String s)
{
return Convert.ToDouble(s);
}
//操作中心
private static void doCal(String suf, String fu)
{
Console.WriteLine("操作中心.....开始—————" + "ans=" + ans + " fu=" + fu + " suf=" + suf);
switch (div_zero_fu)
{
case "+": ans = count == 0 ? ch(suf) : ans + ch(suf); break;
case "-": ans = count == 0 ? ch(suf) : ans - ch(suf); break;
case "*": ans = count == 0 ? ch(suf) : ans * ch(suf); break;
case "/": ans = count == 0 ? ch(suf) : ans / ch(suf); break;
case "%": ans = count == 0 ? ch(suf) : ans % ch(suf); break;
}
count++;
sign = 1;
div_zero_fu = fu;
Console.WriteLine("操作中心.....结束—————" + "ans=" + ans + " fu=" + fu + " suf=" + suf);
}
/********************************************基础运算**************************8************/
//加法
private void add_btn_Click(object sender, EventArgs e)
{
//c_text.Text是空字符串,但不为null
//没有数字输入时,无法使用运算
if (numandfu == 1)
{
return;
}
//判断前一个上升操作是否为'/',并且数字是否为零
if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
{
c_text.Text = "除数不能为零";
r_text.Text = null;
ans = 0;
count = 0;
sign = 1;
return;
}
doCal(c_text.Text, "+");
numandfu = 1;
advandnum = 0;
//去重复0
if (ch(c_text.Text) == 0)
{
c_text.Text = "0";
}
//提前处理则结果不上升
if (advance == 1)
{
r_text.Text += "+";
c_text.Text = ans + "";
advance = 0;
}
else
{
r_text.Text += c_text.Text + "+";
c_text.Text = ans + "";
}
}
//减法
private void sub_btn_Click(object sender, EventArgs e)
{
//没有数字输入时,无法使用运算
if (numandfu == 1)
{
return;
}
//判断前一个上升操作是否为'/',并且数字是否为零
if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
{
c_text.Text = "除数不能为零";
r_text.Text = null;
ans = 0;
count = 0;
sign = 1;
return;
}
doCal(c_text.Text, "-");
numandfu = 1;
advandnum = 0;
//去重复0
if (ch(c_text.Text) == 0)
{
c_text.Text = "0";
}
//提前处理则结果不上升
if (advance == 1)
{
r_text.Text += "-";
c_text.Text = ans + "";
advance = 0;
}
else
{
r_text.Text += c_text.Text + "-";
c_text.Text = ans + "";
}
}
//乘法
private void mul_btn_Click(object sender, EventArgs e)
{
//没有数字输入时,无法使用运算
if (numandfu == 1)
{
return;
}
//判断前一个上升操作是否为'/',并且数字是否为零
if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
{
c_text.Text = "除数不能为零";
r_text.Text = null;
ans = 0;
count = 0;
sign = 1;
return;
}
doCal(c_text.Text, "*");
numandfu = 1;
advandnum = 0;
//去重复0
if (ch(c_text.Text) == 0)
{
c_text.Text = "0";
}
//提前处理则结果不上升
if (advance == 1)
{
r_text.Text += "*";
c_text.Text = ans + "";
advance = 0;
}
else
{
r_text.Text += c_text.Text + "*";
c_text.Text = ans + "";
}
//r_text.Text += c_text.Text + "*";
// c_text.Text = ans + "";
}
//除法
private void div_btn_Click(object sender, EventArgs e)
{
//没有数字输入时,无法使用运算
if (numandfu == 1)
{
return;
}
//判断前一个上升操作是否为'/',并且数字是否为零
if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
{
c_text.Text = "除数不能为零";
r_text.Text = null;
ans = 0;
count = 0;
sign = 1;
return;
}
doCal(c_text.Text, "/");
numandfu = 1;
advandnum = 0;
//提前处理则结果不上升
if (advance == 1)
{
r_text.Text += "/";
c_text.Text = ans + "";
advance = 0;
}
else
{
r_text.Text += c_text.Text + "/";
c_text.Text = ans + "";
}
}
//求余
private void mod_btn_Click(object sender, EventArgs e)
{
//没有数字输入时,无法使用运算
if (numandfu == 1)
{
return;
}
//判断前一个上升操作是否为'/',并且数字是否为零
if ("/".Equals(div_zero_fu) && ch(c_text.Text) == 0)
{
c_text.Text = "除数不能为零";
r_text.Text = null;
ans = 0;
count = 0;
sign = 1;
return;
}
doCal(c_text.Text, "%");
numandfu = 1;
advandnum = 0;
//去重复0
if (ch(c_text.Text) == 0)
{
c_text.Text = "0";
}
//提前处理则结果不上升
if (advance == 1)
{
r_text.Text += "%";
c_text.Text = ans + "";
advance = 0;
}
else
{
r_text.Text += c_text.Text + "%";
c_text.Text = ans + "";
}
}
/********************************************功能部分**************************8************/
//退格
private void back_btn_Click(object sender, EventArgs e)
{
if (c_text.Text.Length > 0)
{
c_text.Text = c_text.Text.Remove(c_text.Text.Length - 1, 1);
}
}
//CE清除当前行
private void CE_btn_Click(object sender, EventArgs e)
{
c_text.Text = "";
}
//清出所有,C
private void C_btn_Click(object sender, EventArgs e)
{
c_text.Text = "";
r_text.Text = "";
ans = 0;
count = 0;
}
//负号,转换正负
private void opp_btn_Click(object sender, EventArgs e)
{
//防止开始时,空值触发异常
if ("".Equals(c_text.Text))
{
return;
}
if (c_text.Text.Substring(0, 1).Equals("-"))
{
c_text.Text = c_text.Text.Remove(0, 1);
}
else
{
String s = "-" + c_text.Text;
c_text.Text = s;
}
}
//开平方
private void sqrt_btn_Click(object sender, EventArgs e)
{
if (advandnum == 1 || numandfu == 1)
{
return;
}
r_text.Text += "sqrt("+c_text.Text+")";
c_text.Text = Math.Sqrt(ch(c_text.Text)) + "";
sign = 1;
advance = 1;
advandnum = 1;
}
//分数
private void rec_btn_Click(object sender, EventArgs e)
{
if (advandnum == 1 || numandfu == 1)
{
return;
}
r_text.Text += "reciproc(" + c_text.Text + ")";
c_text.Text = 1.000000/ch(c_text.Text) + "";
sign = 1;
advance = 1;
advandnum = 1;
}
//小数点
private void spot_btn_Click(object sender, EventArgs e)
{
//空值则在前面补零
if (c_text.Text == "")
{
c_text.Text = "0.";
}
//非空,加点
else
{
//一个数字中只能有一个小数点
if (c_text.Text.Contains('.'))
{
return;
}
c_text.Text += ".";
}
}
//等于
private void res_btn_Click(object sender, EventArgs e)
{
switch (div_zero_fu)
{
case "+": ans += ch(c_text.Text); c_text.Text = ans + ""; break;
case "-": ans -= ch(c_text.Text); c_text.Text = ans + ""; break;
case "*": ans *= ch(c_text.Text); c_text.Text = ans + ""; break;
case "/":
if (ch(c_text.Text) == 0)
{
c_text.Text = "除数不能为零";
}
else
{
ans /= ch(c_text.Text);
c_text.Text = ans + "";
}
break;
case "%": ans %= ch(c_text.Text); c_text.Text = ans + ""; break;
}
r_text.Text = null;
// c_text.Text = ans + "";
ans = 0;
count = 0;
sign = 1;
}
/********************************************数字部分**************************8************/
//数字0
private void zero_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
if (sign == 1)
{
c_text.Text = "";
if (!c_text.Text.Equals("0"))
{
c_text.Text += "0";
}
sign = 0;
}
else
{
if (!c_text.Text.Equals("0"))
{
c_text.Text += "0";
}
}
numandfu = 0;
}
//数字1
private void one_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "1";
sign = 0;
}
else
{
c_text.Text += "1";
}
numandfu = 0;
}
//数字2
private void two_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "2";
sign = 0;
}
else
{
c_text.Text += "2";
}
numandfu = 0;
}
//数字3
private void three_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "3";
sign = 0;
}
else
{
c_text.Text += "3";
}
numandfu = 0;
}
//数字4
private void four_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "4";
sign = 0;
}
else
{
c_text.Text += "4";
}
numandfu = 0;
}
//数字5
private void five_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "5";
sign = 0;
}
else
{
c_text.Text += "5";
}
numandfu = 0;
}
//数字6
private void six_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "6";
sign = 0;
}
else
{
c_text.Text += "6";
}
numandfu = 0;
}
//数字7
private void seven_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "7";
sign = 0;
}
else
{
c_text.Text += "7";
}
numandfu = 0;
}
//数字8
private void eight_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "8";
sign = 0;
}
else
{
c_text.Text += "8";
}
numandfu = 0;
}
//数字9
private void nine_btn_Click(object sender, EventArgs e)
{
//如果上一运算为sqrt或1/x,清空r_text
if (advandnum == 1)
{
r_text.Text = "";
advandnum = 0;
}
//如果不包含小数点,去除数字前面无效0
if (!c_text.Text.Contains('.'))
{
c_text.Text = c_text.Text.TrimStart('0');
}
if (sign == 1)
{
c_text.Text = "";
c_text.Text += "9";
sign = 0;
}
else
{
c_text.Text += "9";
}
numandfu = 0;
}
}
}