📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace counterTool2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region 各变量和常数的声明
public const int NULL = 0; // 定义操作码
public const int ADD = 1; //表示加
public const int SUB = 2; //减
public const int MUL = 3; //乘
public const int DIV = 4; //除
public const int SQR = 5; //求平方
public const int SQRT = 6; //求平方根
public const int NODOT = 0; // 定义是否点击了小数点,0 为没点
public const int HASDOT = 1;
public const int moden = 7;
//以上用于CASE语句,选折用
private double res = 0; // 记录结果数
private double tmp = 0;// 当前输入的操作数
private double tem2 = 0;//保存当前数
//以上用于获取操作数
private int num = 0; // 记录输入操作数的个数
//以上纪录操作数的个数
private int dotnum = 0;// 记录小数点部分的个数
//记录小数点以后的个数
private int opt = NULL; // 记录操作码
private int dot = NODOT; // 记录是否点击了小数点,0为没有点
//以上用于记录是否熟路了小数点
string strOper;//获取操作符
#endregion
#region 获取操作数事件
//获取操作数事件
private void btn_0_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.Button btnTmp;
double i;
btnTmp = sender as System.Windows.Forms.Button;
if (btnTmp != null)
{
if (dot == NODOT)
{
// 没有点击小数点
i = double.Parse(btnTmp.Tag.ToString()); //取用户自定义的控件关联数,并转换成double型
tem2 = tmp;
tmp = tmp * 10 + i;
txtShow.Text = tmp.ToString(); //将其放入文本显示屏啊
}
else // 点击了小数点
{
dotnum++; //记录小数点部分的个数
// 生成小数部分的新的数值
i = double.Parse(btnTmp.Tag.ToString()) / System.Math.Pow(10, dotnum);
tem2 = tmp;
tmp = tmp + i; //将小数点后的值加到当前操做数
txtShow.Text = tmp.ToString();
}
}
}
#endregion
#region 获取操作符运事件
//获取操作符运事件
private void btn_Oper(object obj, EventArgs ea)
{
Button tmp1 = (Button)obj;
//bool flag = true;
strOper = tmp1.Text;
switch (strOper)
{
case "/": //除法运算
if (opt != NULL && opt != DIV)
{
calc();
}
opt = DIV;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
{
// if (tmp != 0)
res = res / tmp;
/* else
{ txtShow.Text = "您的输陆有错误"; flag = flag; }*/
}
else
res = tmp;
num++;
tmp = 0;
// if (flag)
//{
txtShow.Text = res.ToString();
//}
dot = NODOT;
break;
case "*":
// 乘法运算
if (opt != NULL && opt != MUL)
{
calc();
}
opt = MUL;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
{
if (tmp != 0)
res = res * tmp;
}
else
res = tmp;
num++;
tmp = 0;
txtShow.Text = res.ToString();
dot = NODOT;
break;
case "+": //加法运算
if (opt != NULL && opt != ADD)
{
calc();
}
opt = ADD;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res + tmp;
else
res = tmp;
num++;
tmp = 0;
txtShow.Text = res.ToString();
dot = NODOT;
break;
case "-": //减法运算
if (opt != NULL && opt != SUB)
{
calc();
}
/*if(opt==ADD)
{
res=res+tmp;
tmp=0;
}*/
opt = SUB;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res - tmp;
else
res = tmp;
num++;
tmp = 0;
txtShow.Text = res.ToString();
dot = NODOT;
break;
case "sqrt": //平方根运算
if (opt != NULL)
{
calc();
}
//opt=SQRT;
if (tmp > 0) //要求操作数大于0
{
res = Math.Sqrt(tmp);
//res=tmp;
}
else if (res > 0)
res = Math.Sqrt(res);
txtShow.Text = res.ToString();
num++;
tmp = 0;
dot = NODOT;
break;
case "sqr":
// 平方运算
if (opt != NULL)
{
calc();
}
//opt=SQR;
if (tmp != 0)
{
res = tmp * tmp;
//res=tmp;
}
else
res = res * res;
txtShow.Text = res.ToString();
num++;
tmp = 0;
dot = NODOT;
break;
case "1/x": //倒数运算
if (opt != NULL)
{
calc();
}
if (tmp != 0)
{
res = 1 / tmp;
//res=tmp;
}
else
res = 1 / res;
txtShow.Text = res.ToString();
tmp = 0;
dot = NODOT;
break;
case ".":
// 点击了小数点
if (dot == HASDOT)
return;
else
{
dot = HASDOT;
dotnum = 0;
}
break;
case "CE": //清除运算
res = 0; // 记录结果数
tmp = 0; // 当前输入的操作数
opt = NULL; // 记录操作码
dot = NODOT; // 记录是否点击了小数点
num = 0; // 记录输入操作数的个数
dotnum = 0; // 记录小数点部分的个数
txtShow.Text = "0";
break;
case "C":
res = 0;
tmp = 0;
opt = NULL;
dot = NODOT;
num = 0;
dotnum = 0;
txtShow.Text = "0";
break;
case "Backspace":
// tmp = tem2; ;
//txtShow.Text = tmp.ToString();
if (tmp != 0)
{
string s;
int len = (txtShow.Text).Length;
if (len == 1)
{
tmp = 0;
txtShow.Text = tmp.ToString();
}
else if (len > 1)
{
s = (txtShow.Text).Remove(len - 1);
//len--;
tmp = double.Parse(s);
txtShow.Text = tmp.ToString();
}
}
else if(res!=0)
{
string s;
int len = (txtShow.Text).Length;
if (len == 1)
{
res= 0;
txtShow.Text = tmp.ToString();
}
else if (len > 1)
{
s = (txtShow.Text).Remove(len - 1);
//len--;
res = double.Parse(s);
txtShow.Text = res.ToString();
}
}
break;
case "+/-":
if (tmp != 0)
{
tmp = 0 - tmp;
txtShow.Text = tmp.ToString();
}
else if (res != 0)
{
res = 0 - res;
txtShow.Text = res.ToString();
}
break;
case "%":
if (opt != NULL && opt != SUB)
{
calc();
}
opt = moden;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res %tmp;
else
res = tmp;
num++;
tmp = 0;
txtShow.Text = res.ToString();
dot = NODOT;
break;
}
}
#region
private void btn_equ_Click(object sender, System.EventArgs e)
{
calc();
}
private void calc()
{
// 生成结果
if (num == 0) //是否有操作数,没有就返回0
{
res = 0;
tmp = 0;
txtShow.Text = res.ToString();
return;
}
switch (opt) //找到对应的运算符进行计算
{
// 加法
case ADD:
res = res + tmp;
break;
// 减法
case SUB:
res = res - tmp;
break;
// 乘法
case MUL:
res = res * tmp;
break;
// 除法
case DIV:
res = res / tmp;
break;
// 平方
case SQR:
res = tmp * tmp;
break;
// 平方根
case SQRT:
res = System.Math.Sqrt(tmp);
break;
case moden:
res = res % tmp;
break;
default:
return;
}
txtShow.Text = res.ToString();
opt = NULL; //运算符清空
tmp = 0;
dot = NODOT;
//res = 0;
//num = 0;
}
#endregion
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -