using System;
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 科学计算器
{
public partial class Form1 : Form
{
public double number1, number2, result;
public double input;
public int pointnum;
public enum Operator { none, Plus, Minus, Multiplication, Division, square, evolution, power, Sin, Cos, Tan, Ln, Log, fu }
public Operator mode = Operator.none;
public bool isequal = false, ispoint = false;
public Form1()
{
InitializeComponent();
}
public void Input(double n)
{
if (pointnum == 0)
{
if (mode == Operator.none)
{
number1 = number1 * 10 + n;
lableout.Text = Convert.ToString(number1);
}
else
{
number2 = number2 * 10 + n;
lableout.Text = Convert.ToString(number2);
}
}
else
{
pointnum = pointnum + 1;
if (mode == Operator.none)
{
number1 = number1 + n / Math.Pow(10, pointnum - 1);
lableout.Text = Convert.ToString(number1);
}
else
{
number2 = number2 + n / Math.Pow(10, pointnum - 1);
lableout.Text = Convert.ToString(number2);
}
}
}
private void Num1_Click(object sender, EventArgs e)
{
input = 1;
Input(input);
}
private void Num2_Click(object sender, EventArgs e)
{
input = 2;
Input(input);
}
private void Num3_Click(object sender, EventArgs e)
{
input = 3;
Input(input);
}
private void Num4_Click(object sender, EventArgs e)
{
input = 4;
Input(input);
}
private void Num5_Click(object sender, EventArgs e)
{
input = 5;
Input(input);
}
private void Num6_Click(object sender, EventArgs e)
{
input = 6;
Input(input);
}
private void Num7_Click(object sender, EventArgs e)
{
input = 7;
Input(input);
}
private void Num8_Click(object sender, EventArgs e)
{
input = 8;
Input(input);
}
private void Num9_Click(object sender, EventArgs e)
{
input = 9;
Input(input);
}
private void Num0_Click(object sender, EventArgs e)
{
input = 0;
Input(input);
}
private void Plus_Click(object sender, EventArgs e)
{
mode = Operator.Plus;
switchmode();
}
private void Minus_Click(object sender, EventArgs e)
{
mode = Operator.Minus;
switchmode();
}
private void Multiplication_Click(object sender, EventArgs e)
{
mode = Operator.Multiplication;
switchmode();
}
private void division_Click(object sender, EventArgs e)
{
mode = Operator.Division;
switchmode();
}
private void square_Click(object sender, EventArgs e)
{
mode = Operator.square;
switchmode();
}
private void evolution_Click(object sender, EventArgs e)
{
mode = Operator.evolution;
switchmode();
}
private void power_Click(object sender, EventArgs e)
{
mode = Operator.power;
switchmode();
}
private void Sin_Click(object sender, EventArgs e)
{
mode = Operator.Sin;
switchmode();
}
private void Cos_Click(object sender, EventArgs e)
{
mode = Operator.Cos;
switchmode();
}
private void Tan_Click(object sender, EventArgs e)
{
mode = Operator.Tan;
switchmode();
}
private void In_Click(object sender, EventArgs e)
{
mode = Operator.Ln;
switchmode();
}
private void Log_Click(object sender, EventArgs e)
{
mode = Operator.Log;
switchmode();
}
private void fu_Click(object sender, EventArgs e)
{
mode = Operator.fu;
switchmode();
}
private void equal_Click(object sender, EventArgs e)
{
jisuan();
isequal = true;
reclean();
}
private void clean_Click(object sender, EventArgs e)
{
number1 = 0;
lableout.Text = Convert.ToString(number1);
pointnum = 0;
}
private void Back_Click(object sender, EventArgs e)
{
if (ispoint == false)
{
if (mode == Operator.none)
{
if (number1 >= 10 || number1 <= -10)
{
number1 = Convert.ToDouble(Convert.ToString(number1).Substring(0, Convert.ToString(number1).Length - 1));
lableout.Text = number1.ToString();
}
else
{
number1 = 0;
lableout.Text = number1.ToString();
}
}
}
}
private void point_Click(object sender, EventArgs e)
{
ispoint = true;
if (ispoint == true)
{
pointnum = 1;
if (mode == Operator.none)
{
lableout.Text = Convert.ToString(number1) + ".";
}
else
{
lableout.Text = Convert.ToString(number2) + ".";
}
}
}
public void reclean()
{
if (isequal == true)
{
result = number1;
lableout.Text = Convert.ToString(result);
}
number1 = result;
number2 = 0;
labelup.Text = "";
labeldown.Text = "";
isequal = false;
mode = Operator.none;
}
public void switchmode()
{
switch (mode)
{
case Operator.Plus:
labeldown.Text = "+";
break;
case Operator.Minus:
labeldown.Text = "-";
break;
case Operator.Multiplication:
labeldown.Text = "*";
break;
case Operator.Division:
labeldown.Text = "÷";
break;
case Operator.square:
labeldown.Text = "^2";
break;
case Operator.evolution:
labeldown.Text = "√";
break;
case Operator.power:
labeldown.Text = "^";
break;
case Operator.Sin:
labeldown.Text = "sin";
break;
case Operator.Cos:
labeldown.Text = "cos";
break;
case Operator.Tan:
labeldown.Text = "tan";
break;
case Operator.Ln:
labeldown.Text = "ln";
break;
case Operator.Log:
labeldown.Text = "log";
break;
case Operator.fu:
labeldown.Text = "-";
break;
}
ispoint = false;
pointnum = 0;
labelup.Text = Convert.ToString(number1);
lableout.Text = Convert.ToString(number2);
}
private void Form1_Load(object sender, EventArgs e)
{
lableout.Text = Convert.ToString(number1);
}
public void jisuan()
{
switch (mode)
{
case Operator.Plus:
number1 = number1 + number2;
break;
case Operator.Minus:
number1 = number1 - number2;
break;
case Operator.Multiplication:
number1 = number1 * number2;
break;
case Operator.Division:
number1 = number1 / number2;
break;
case Operator.square:
number1 = number1 * number1;
break;
case Operator.evolution:
number1 = Math.Pow(number1, 0.5);
break;
case Operator.power:
number1 = Math.Pow(number1, number2);
break;
case Operator.Sin:
number1 = Math.Sin(number1);
break;
case Operator.Cos:
number1 = Math.Cos(number1);
break;
case Operator.Tan:
number1 = Math.Tan(number1);
break;
case Operator.Ln:
number1 = Math.Log10(number1);
break;
case Operator.Log:
number1 = Math.Log(number2, number1);
break;
}
}
}
}
可以参考下这个文章,代码比较简洁:https://blog.csdn.net/ChrisKevin0221/article/details/114822099
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632