实例介绍
【实例简介】
【实例截图】
【核心代码】
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 计算器 : Form
{
public 计算器()
{
InitializeComponent();
}
public int tag = 0,suanwan = 0;//上次输入的字符或数字的标志
Queue<string> lishi = new Queue<string>();
Queue<string> que = new Queue<string>();
Stack<double> st = new Stack<double>();
Stack<string> ch= new Stack<string>();
Queue<string> tmp = new Queue<string>();
public void jisuan(string s)
{
int k = 0, ctos = 0, stoc = 0;
for (int i = 0; i < s.Length; i )
{
if (s[i] <= '9' && s[i] >= '0' || s[i] == '.'||((i == 0||s[i-1]=='(')&&(s[i]=='-'||s[i]==' ')))
{
if (ctos == 0)
{
k = i;
ctos = 1;
stoc = 0;
}
}
else
{
if (stoc == 0)
{
que.Enqueue(s.Substring(k, i - k));
ctos = 0;
stoc = 1;
}
if (s[i] != '=')
que.Enqueue("" s[i]);
}
}
ch.Push("#");
//foreach (string x in que)
//{
// Console.WriteLine(x);
//}
//Console.WriteLine("结束");
string y;
while (que.Count > 0)
{
y = que.Dequeue();
if (y == " " || y == "-" || y == "*" || y == "/" || y == "(" || y == ")" )
{
if (ch.Peek() == "#" || y == "(")
{
ch.Push(y);
}
else if ( y == " " || y == "-")
{
string a = ch.Pop();
while(a!="#"&&a!="(")
{
double x, v;
v = st.Pop();
x = st.Pop();
if (a == " ")
st.Push(x v);
if (a == "-")
st.Push(x - v);
if (a == "*")
st.Push(x * v);
if (a == "/")
st.Push(x / v);
a = ch.Pop();
}
ch.Push(a);
ch.Push(y);
}
else if (y == "*" || y == "/")
{
string a = ch.Peek();
if (a == " " || a == "-" || a == "#" || a == "(")
{
ch.Push(y);
}
else if(a == "*" || a == "/")
{
a = ch.Pop();
while (a != "#" && a != "(" && a != " " && a != "-")
{
double x, v;
v = st.Pop();
x = st.Pop();
if (a == "*")
st.Push(x * v);
if (a == "/")
st.Push(x / v);
a = ch.Pop();
}
ch.Push(a);
ch.Push(y);
}
}
else if (y == ")")
{
string r = ch.Pop();
while (r != "(")
{
double x, v;
v = st.Pop();
x = st.Pop();
if (r == " ")
st.Push(x v);
if (r == "-")
st.Push(x - v);
if (r == "*")
st.Push(x * v);
if (r == "/")
st.Push(x / v);
r = ch.Pop();
}
}
}
else
{
try
{
st.Push(Convert.ToDouble(y));
}
catch//随便加的解决第一个夸好
{
}
}
}
//foreach (double x in st)
//{
// Console.WriteLine(x);
//}
string g = ch.Pop();
while (g != "#")
{
double x, v;
v = st.Pop();
x = st.Pop();
if (g == " ")
st.Push(x v);
if (g == "-")
st.Push(x - v);
if (g == "*")
st.Push(x * v);
if (g == "/")
st.Push(x / v);
g = ch.Pop();
}
try
{
label1.Text = st.Pop().ToString();
}
catch
{
}
ch.Clear();
que.Clear();
st.Clear();
suanwan = 1;
if (checkBox2.Checked == true)
{
groupBox1.Text = textBox1.Text label1.Text '\n';
}
}
public void buttonclick(char c)
{
if(suanwan == 1)
{
textBox1.Text = "";
suanwan = 0;
}
if (tag == 1 && (c == ' ' || c == '-' || c == '/' || c == '*'))
{
textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
tag = 0;
}
else
tag = 0;
switch(c)
{
case '1':
textBox1.Text = '1'; break;
case '2':
textBox1.Text = '2'; break;
case '3':
textBox1.Text = '3'; break;
case '4':
textBox1.Text = '4'; break;
case '5':
textBox1.Text = '5'; break;
case '6':
textBox1.Text = '6'; break;
case '7':
textBox1.Text = '7'; break;
case '8':
textBox1.Text = '8'; break;
case '9':
textBox1.Text = '9'; break;
case '0':
textBox1.Text = '0'; break;
case '.':
textBox1.Text = '.'; break;
case ' ':
textBox1.Text = ' '; break;
case '-':
textBox1.Text = '-'; break;
case '*':
textBox1.Text = '*'; break;
case '/':
textBox1.Text = '/'; break;
case '(':
textBox1.Text = '('; break;
case ')':
textBox1.Text = ')'; break;
case '=':
textBox1.Text = '=';
jisuan(textBox1.Text);
break;
case '<':
if (textBox1.Text.Length>0)
textBox1.Text = textBox1.Text.Substring(0,textBox1.Text.Length-1);
break;
case 'A':
textBox1.Text = label1.Text; break;
}
}
private void button13_Click(object sender, EventArgs e)
{
buttonclick('1');
}
private void button14_Click(object sender, EventArgs e)
{
buttonclick('2');
}
private void button15_Click(object sender, EventArgs e)
{
buttonclick('3');
}
private void button9_Click(object sender, EventArgs e)
{
buttonclick('4');
}
private void button10_Click(object sender, EventArgs e)
{
buttonclick('5');
}
private void button11_Click(object sender, EventArgs e)
{
buttonclick('6');
}
private void button1_Click(object sender, EventArgs e)
{
buttonclick('7');
}
private void button6_Click(object sender, EventArgs e)
{
buttonclick('8');
}
private void button7_Click(object sender, EventArgs e)
{
buttonclick('9');
}
private void button18_Click(object sender, EventArgs e)
{
buttonclick('0');
}
private void button16_Click(object sender, EventArgs e)
{
buttonclick(' ');
tag = 1;
}
private void button12_Click(object sender, EventArgs e)
{
buttonclick('-');
tag = 1;
}
private void button8_Click(object sender, EventArgs e)
{
buttonclick('/');
tag = 1;
}
private void button3_Click(object sender, EventArgs e)
{
buttonclick('*');
tag = 1;
}
private void button19_Click(object sender, EventArgs e)
{
buttonclick('.');
}
private void button20_Click(object sender, EventArgs e)
{
if(textBox1.Text != "")
buttonclick('=');
}
private void button5_Click(object sender, EventArgs e)
{
buttonclick(')');
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
buttonclick('<');
}
private void label1_Click(object sender, EventArgs e)
{
}
private void 计算器_Load(object sender, EventArgs e)
{
groupBox1.Text = '\n' "";
label1.Text = "";
lishi.Clear();
}
private void button17_Click(object sender, EventArgs e)
{
buttonclick('A');
}
private void label2_Click(object sender, EventArgs e)
{
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if(checkBox1.Checked == true)
this.Width = groupBox1.Width;
else
this.Width -= groupBox1.Width;
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
}
private void button4_Click(object sender, EventArgs e)
{
buttonclick('(');
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论