c# 计算器
程序员文章站
2022-07-16 19:44:01
...
源码:Form1.cs
软件截图
using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class equ : Form //类equ的起点
{
public equ()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.textBox1.SelectionStart = this.textBox1.Text.Length;
this.textBox1.SelectionLength = 0;
this.textBox1.ScrollToCaret();
}
//---按键绑定--------------------
private void equ_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '1')
{
addNum("1");
}
if (e.KeyChar == '2')
{
addNum("2");
}
if (e.KeyChar == '3')
{
addNum("3");
}
if (e.KeyChar == '4')
{
addNum("4");
}
if (e.KeyChar == '5')
{
addNum("5");
}
if (e.KeyChar == '6')
{
addNum("6");
}
if (e.KeyChar == '7')
{
addNum("7");
}
if (e.KeyChar == '8')
{
addNum("8");
}
if (e.KeyChar == '9')
{
addNum("9");
}
if (e.KeyChar == '0')
{
addNum("0");
}
if (e.KeyChar == '+')
{
ways[index] = '+';
listway.Add('+');
selectways('+');
}
if (e.KeyChar == '-')
{
ways[index] = '-';
listway.Add('-');
selectways('-');
}
if (e.KeyChar == '*')
{
ways[index] = '*';
listway.Add('*');
selectways('*');
}
if (e.KeyChar == '/')
{
ways[index] = '/';
listway.Add('/');
selectways('/');
}
if (e.KeyChar == '=')
{
answer();
}
if (e.KeyChar == 27)
{
Clear ();
}
}
//成员变量
string numstr = "";
string num_answer="" ;
char[] ways=new char [20] ; // 运算方式标志
double[] num = new double[20];
int index = 0;
List<double >listnum =new List<double >(); //默认容量4个
List<char> listway = new List<char>();
int calflag1 = 0; // + - 标志位
int equflag2 = 0; // =标志
//只加数字和.方法addNum
public void addNum(string num) //方法 string +
{
if (calflag1 == 1 && equflag2 == 1) //第二行计算,包括清零
{
textBox1.Text += "\r\n"; //clear清屏,这里换行
num_answer = "";
numstr = "";
index =0;
calflag1 = 0;
equflag2 = 0;
}
textBox1.Text += num;
numstr += num;
}
private void button1_Click_1(object sender, EventArgs e)
{
addNum("1");
}
private void button2_Click_1(object sender, EventArgs e)
{
addNum("2");
}
private void button3_Click_1(object sender, EventArgs e)
{
addNum("3");
}
private void button4_Click_1(object sender, EventArgs e)
{
addNum("4");
}
private void button5_Click_1(object sender, EventArgs e)
{
addNum("5");
}
private void button6_Click_1(object sender, EventArgs e)
{
addNum("6");
}
private void button7_Click_1(object sender, EventArgs e)
{
addNum("7");
}
private void button8_Click_1(object sender, EventArgs e)
{
addNum("8");
}
private void button9_Click_1(object sender, EventArgs e)
{
addNum("9");
}
private void button10_Click_1(object sender, EventArgs e)
{
addNum("0");
}
private void button11_Click(object sender, EventArgs e) // .
{
addNum(".");
}
//+
private void button13_Click_1(object sender, EventArgs e)
{
ways[index] = '+';
listway.Add('+');
selectways('+');
}
//-
private void button14_Click_1(object sender, EventArgs e)
{
ways[index] = '-';
listway.Add('-');
selectways('-');
}
//*
private void button15_Click_1(object sender, EventArgs e)
{
ways[index] = '*';
listway.Add('*');
selectways('*');
}
// /
private void button16_Click_1(object sender, EventArgs e)
{
ways[index] = '/';
listway.Add('/');
selectways('/');
}
//计算符号
private void button12_Click(object sender, EventArgs e) //=
{
answer();
}
private void button17_Click(object sender, EventArgs e) //清零
{
Clear();
}
private void button18_Click(object sender, EventArgs e) //退格键, 不需要处理集合数据
{
if (equflag2 == 0) //出现= 不能退
{
if (textBox1.Text.Length > 0)
{
if (textBox1.Text.EndsWith("+") || textBox1.Text.EndsWith("-") || textBox1.Text.EndsWith("*") || textBox1.Text.EndsWith("/"))
{
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
}
else
{
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);//移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
numstr = numstr.Remove(numstr.Length - 1);
}
}
}
}
public void selectways(char ways) //方法 string +
{
//已有方法时候不再增加+-
if (textBox1.Text.EndsWith("+") || textBox1.Text.EndsWith("-") || textBox1.Text.EndsWith("*") || textBox1.Text.EndsWith("/"))
{
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
textBox1.Text += ways;
listway.RemoveAt(index -1);
//MessageBox.Show(":"+listway .Capacity );
}
else
{
if (numstr.Length > 0)
{
// num[index] = Convert.ToDouble(numstr);
listnum.Add(Convert.ToDouble(numstr));
index++;
numstr = "";
switch (ways)
{
case '+':
textBox1.Text += "+";
break;
case '-':
textBox1.Text += "-";
break;
case '*':
textBox1.Text += "*";
break;
case '/':
textBox1.Text += "/";
break;
}
calflag1 = 1;
equflag2 = 0;
}
}
}
private double cal(double i, double j, char k)
{
switch (k)
{
case '+':
return i + j;
case '-':
return i - j;
case '*':
return i * j;
case '/':
return i / j;
default:
return 00000000000;
}
// MessageBox.Show("k="+k);
}
private void answer() //计算
{
textBox1.Text += "=";
double result=0.0;
try
{
// num[index] = Convert.ToDouble(numstr);
listnum.Add(Convert.ToDouble(numstr));
index++;
}
catch
{
textBox1.Text = "请输入第二个数";
}
//MessageBox.Show("ways:" + ways[0] +"/n" + ";num1:" + num[0] + ";num2:" + num[1] + ";num_answer :" + num_answer + "; numstr:" + numstr); //提示框
try
{
// result = num[0];
result = listnum[0];
for (int i = 0; i < index-1; i++)
{
// char aa = ways[i];
char aa = listway [i];
// MessageBox.Show("aa=" + aa);
result = cal(result , listnum[i+1], aa);
}
num_answer = result.ToString();
textBox1.Text += num_answer;
}
catch
{
textBox1.Text = "error";
}
equflag2 = 1; //等号自己的标志
numstr = "";
listnum.Clear();
listway.Clear();
}
private void Clear()
{
textBox1.Text = "";
num_answer = "";
numstr = "";
calflag1 = 0;
equflag2 = 0;
index =0;
listnum.Clear();
listway.Clear();
}
}
}
// MessageBox.Show("aa=" + aa);
//public bool EndsWith( string value ) 判断 string 对象的结尾是否匹配指定的字符串。
//快速删除一行Shift+delete
//if (caseflag3 == 1) //不换行接着计算
//{
// num2_str += num;
//}
//else
//{
// if (equflag2 == 0) //等号标志
// {
// if (calflag1 == 0) //没有按计算方法,给第一个变量
// {
// num1_str = num1_str + num;
// }
// else //按下计算方法后,数字赋给第二个变量
// {
// num2_str += num;
// }
// }
//}
//if (calflag1 == 1 && equflag2 == 0) //没有等号下,按运算符
//{
// num2_str = numstr;
// double temp1 = Convert.ToDouble(num1_str);
// double temp2 = Convert.ToDouble(num2_str);
// switch (ways)
// {
// case 1:
// num_answer = (temp1 + temp2).ToString();
// break;
// case 2:
// num_answer = (temp1 - temp2).ToString();
// break;
// case 3:
// num_answer = (temp1 * temp2).ToString();
// break;
// case 4:
// num_answer = (temp1 / temp2).ToString();
// break;
// }
// equflag2 = 1; //等号自己的标志
// num1_str = "";
// num2_str = "";
// numstr = "";
//}