C#计算器
学习C#时制作的一个计算器,设计器如图:
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace jisuanqi
{
public partial class Form1 : Form
{
bool ise = false; //判断计算是否完成
public Form1()
{
InitializeComponent();
Initialize();
}
public void Initialize() //初始化
{
textBox1.Text = "0";
textBox2.Text = "";
label1.Text = "";
ise = false;
}
public void AddNum(string num) // 输入数字
{
if (ise)
{
Initialize();
}
if (textBox1.Text == "0" && num!=".")//初始0会被覆盖
{
textBox1.Text = num;
}
else if(textBox1.Text=="" && num == ".")
{
textBox1.Text = "0" + num;
}
else
{ textBox1.Text += num; }
}
public void Addop(string op) // 输入运算符
{
if (ise)
{
textBox2.Text = textBox1.Text;
textBox1.Text = "";
ise = false;
}
textBox2.Text += textBox1.Text;
string pattern = @"[0-9]$";
Match match = Regex.Match(textBox2.Text, pattern);//匹配末尾字符串
if (match.Success==false || textBox1.Text.EndsWith(".")) //匹配成功则回退一格并改变运算符
{
textBox2.Text = textBox2.Text[0..^1];
}
textBox1.Text = "";
textBox2.Text += op;
}
public void Addot(string str) // 其他运算
{
if (textBox1.Text != "" && ise==false)
{
double a = 0;
switch (str)
{
case "平方": a = System.Math.Pow(Convert.ToDouble(textBox1.Text), 2); break;
case "开根号": a = System.Math.Sqrt(Convert.ToDouble(textBox1.Text));break;
case "1/x":
if (textBox1.Text!="0") { a = 1 / Convert.ToDouble(textBox1.Text); }
else { label1.Text = "除数不能为0!"; }
break;
}
textBox1.Text = "";
textBox1.Text += a;
}
}
private void timer1_Tick(object sender, EventArgs e) //显示时间
{
DateTime dt = DateTime.Now;
this.label2.Text = dt.ToString();
}
#region 按钮0-9、.
private void button0_Click(object sender, EventArgs e)
{
AddNum("0");
}
private void button1_Click(object sender, EventArgs e)
{
AddNum("1");
}
private void button2_Click(object sender, EventArgs e)
{
AddNum("2");
}
private void button3_Click(object sender, EventArgs e)
{
AddNum("3");
}
private void button4_Click(object sender, EventArgs e)
{
AddNum("4");
}
private void button5_Click(object sender, EventArgs e)
{
AddNum("5");
}
private void button6_Click(object sender, EventArgs e)
{
AddNum("6");
}
private void button7_Click(object sender, EventArgs e)
{
AddNum("7");
}
private void button8_Click(object sender, EventArgs e)
{
AddNum("8");
}
private void button9_Click(object sender, EventArgs e)
{
AddNum("9");
}
private void button10_Click(object sender, EventArgs e)
{
if (textBox1.Text.Contains(".")==false)
{
AddNum(".");
// point = true;
}
}
#endregion
#region 运算符
private void button17_Click(object sender, EventArgs e)
{
Addop("+");
}
private void button16_Click(object sender, EventArgs e)
{
Addop("-");
}
private void button13_Click(object sender, EventArgs e)
{
Addop("×");
}
private void button11_Click(object sender, EventArgs e)
{
Addop("÷");
}
#endregion
private void button20_Click(object sender, EventArgs e) //全部清零
{
Initialize();
}
private void button19_Click(object sender, EventArgs e) //回退一格
{
if (!ise)
{
if (textBox1.Text.Length != 0)
{
textBox1.Text = textBox1.Text[0..^1];
}
else if (textBox2.Text.Length != 0)
{
textBox2.Text = textBox2.Text[0..^1];
}
}
else//如果已经运算了就初始化
{
Initialize();
}
//textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length - 1);
//textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
}
private void button15_Click(object sender, EventArgs e) //平方
{
Addot("平方");
}
private void button12_Click(object sender, EventArgs e) //根号√
{
Addot("开根号");
}
private void button14_Click(object sender, EventArgs e) // 1/x
{
Addot("1/x");
}
private void button18_Click(object sender, EventArgs e) // "=" 及运算
{
if (!ise)
{
Addop(null);
string str = textBox2.Text.Replace('÷', '/').Replace('×', '*'); //替换一下乘号和除号
label1.Text = "";
try
{
var sum = new DataTable().Compute(str, null);
textBox1.Text = "";
textBox2.Text += "=";
textBox1.Text += sum;
if (textBox1.Text == "∞")
{
textBox1.Text = "";
label1.Text = "除数不能为0!";
}
ise = true;
}
catch
{
label1.Text = "格式错误";
}
}
}
}
}