计算器代码2
2019獨角獸企業重金招聘Python工程師標準>>>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Caculator
{
? ? public partial class Form1 : Form
? ? {
? ? ? ? private ?Boolean clean = false,num1flag=false,simpleflag=true,num2flag=false;
? ? ? ? private simplecal scalculator = new simplecal();
? ? ? ? private char calchar;
? ? ? ? private double num1 = 0, num2 = 0, ans = 0;
? ? ? ? private Stack<char> ?soptr=new Stack<char>();
? ? ? ?
? ? ? ? public Form1()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? ? ??
? ? ? ? }
? ? ? ? private void button1_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? if (simpleflag == false)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (textBox1.Text == "0" || textBox1.Text == "-0" || clean == true)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? textBox1.Text = null;
? ? ? ? ? ? ? ? ? ? clean = false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? textBox1.Text += sender.ToString().Substring(sender.ToString().LastIndexOf(" ") + 1, 1);
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (textBox1.Text == "0" || textBox1.Text == "-0" || clean == true)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? textBox1.Text = null;
? ? ? ? ? ? ? ? ? ? clean = false;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? textBox1.Text += sender.ToString().Substring(sender.ToString().LastIndexOf(" ") + 1, 1);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? private void button2_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button3_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button4_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button5_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button6_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button7_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button8_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button9_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button10_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ?
? ? ? ? ? ? button1_Click(sender, e);
? ? ? ? }
? ? ? ? private void button11_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? if (textBox1.Text.Substring(0, 1).Equals("-"))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? textBox1.Text = textBox1.Text.Substring(1, textBox1.Text.Length - 1);
? ? ? ? ? ? }
? ? ? ? ? ? else {
? ? ? ? ? ? ? ? textBox1.Text = "-" + textBox1.Text;
? ? ? ? ? ? }
? ? ? ? }// ?+/-
? ? ?
? ? ? ? private void button12_Click(object sender, EventArgs e) //小數點
? ? ? ? {
? ? ? ? ? ? if (textBox1.Text.Contains("."))
? ? ? ? ? ? { }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? textBox1.Text+=".";
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? ? ? ?
? ? ? ? private void Form1_KeyPress(object sender, KeyPressEventArgs e)
? ? ? ? {
? ? ? ? ? ? //this.textBox1.Text = e.KeyChar.ToString();
? ? ? ? ? ? switch ((Keys)e.KeyChar)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? case Keys.D1: button1.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D2: button2.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D3: button3.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D4: button4.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D5: button5.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D6: button6.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D7: button7.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D8: button8.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D9: button9.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.D0: button10.PerformClick(); break;
? ? ? ? ? ? ? ? case (Keys)'.': button12.PerformClick(); break;
? ? ? ? ? ? ? ? case (Keys)'+': button13.PerformClick(); break;
? ? ? ? ? ? ? ? case (Keys)'-': button14.PerformClick(); break;
? ? ? ? ? ? ? ? case (Keys)'*': button15.PerformClick(); break;
? ? ? ? ? ? ? ? case (Keys)'/': button16.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.Escape: button22.PerformClick(); break; ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? case Keys.Back: button21.PerformClick(); break;
? ? ? ? ? ? ? ? case Keys.Enter:button20.PerformClick(); break;
? ? ? ? ? ? ? ? default:break;
? ? ? ? ? ? }
? ? ? ? } //鍵盤事件
? ? ? ? private void button13_Click(object sender, EventArgs e)//+
? ? ? ? {
? ? ? ? ? ? if (simpleflag == false)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? button1_Click(sender, e);?
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? input();
? ? ? ? ? ? ? ? if (num1flag == true && num2flag == true)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? cal();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? Setzero();
? ? ? ? ? ? ? ? button1_Click(sender, e); ?//顯示+號 ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? calchar = this.textBox1.Text[0];//記錄運算符號
? ? ? ? ? ? ? ? clean = true;//清屏標志為true
? ? ? ? ? ? }
? ? ? ? }
? ? ? ?
? ? ? ? private void button21_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? if (this.textBox1.Text.Length==1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? this.textBox1.Text = "0";
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? this.textBox1.Text = this.textBox1.Text.Substring(0, this.textBox1.Text.Length - 1);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch(Exception)
? ? ? ? ? ? ? ? {?
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ??
? ? ? ? } // ←
? ? ? ? private void button22_Click(object sender, EventArgs e)// cancel
? ? ? ? {
? ? ? ? ? ? reset();
? ? ? ? ? ? Setzero();
? ? ? ? ? ?
? ? ? ? }
? ? ? ? private void button14_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button13_Click(sender, e);
? ? ? ? }
? ? ? ? private void button15_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button13_Click(sender, e);
? ? ? ? }
? ? ? ? private void button16_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button13_Click(sender, e);
? ? ? ? }
? ? ? ? private void button17_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? input();
? ? ? ? ? ? Setzero();
? ? ? ? ? ? button1_Click(sender, e); ?//顯示運算符號 ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? calchar = this.textBox1.Text[0];//記錄運算符號
? ? ? ? ? ? cal2(); ? ? ? ? ??
? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? this.textBox1.Text = num1.ToString();
? ? ? ? ? ? reset();
? ? ? ? ? ? clean = true;//清屏標志為true
? ? ? ? }
? ? ? ? private void button18_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button17_Click(sender, e);
? ? ? ? }
? ? ? ? private void button19_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button13_Click(sender, e);
? ? ? ? }
? ? ?
? ? ? ? private void button20_Click(object sender, EventArgs e)// =
? ? ? ? {
? ? ? ? ? ? if (simpleflag == false)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? this.textBox1.Text += '#';
? ? ? ? ? ? ? ? num1 = cal3();
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? input();
? ? ? ? ? ? ? ? if (num1flag == true && num2flag == true)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? cal();
? ? ? ? ? ? ? ? }//計算并將結果給予num1
? ? ? ? ? ? }
? ? ? ? ? ? this.textBox1.Text = num1.ToString();
? ? ? ? ? ? clean = true;
? ? ? ? ? ? reset();
? ? ? ? }
? ? ? ? private void radioButton2_CheckedChanged(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? simpleflag = true;
? ? ? ? ? ? button23.Visible = false;
? ? ? ? ? ? button24.Visible = false;
? ? ? ? }
? ? ? ? private void radioButton1_CheckedChanged(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? simpleflag = false;
? ? ? ? ? ? button23.Visible = true;
? ? ? ? ? ? button24.Visible = true;
? ? ? ? }
? ? ? ? private void reset()
? ? ? ? { ? ? ? ??
? ? ? ? ? ?num1 = 0;
? ? ? ? ? ? num2 = 0;
? ? ? ? ? ? num1flag = false;
? ? ? ? ? ? num2flag = false;
? ? ? ? }// num1 num2 重置
? ? ? ? private void Setzero()
? ? ? ? {
? ? ? ? ? ? this.textBox1.Text = "0";
? ? ? ? }//顯示0
? ? ? ? private void input()
? ? ? ? {
? ? ? ? ? ? if (num1flag == false)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? num1 = Convert.ToDouble(this.textBox1.Text);
? ? ? ? ? ? ? ? ? ? num1flag = true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch (Exception) { }
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? num2 = Convert.ToDouble(this.textBox1.Text);
? ? ? ? ? ? ? ? ? ? num2flag=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? catch (Exception) { }
? ? ? ? ? ? }
? ? ? ? } //輸入num1或num2;
? ? ? ? private void cal()
? ? ? ? {
? ? ? ? ? ? num1 = scalculator.ans(num1, num2, calchar);
? ? ? ? ? ? num2flag=false;
? ? ? ? ? ?
? ? ? ? }
? ? ? ? private void cal2()
? ? ? ? {
? ? ? ? ? ? num1 = scalculator.ans(num1,calchar);
? ? ? ? ? ? num2flag = false;
? ? ? ? }
? ? ? ? private double cal3()//科學運算
? ? ? ? {
? ? ? ? ?Stack<char> OPTR=new Stack<char>();//運算符
? ? ? ? ?Stack<double> OPND = new Stack<double>();//操作數
? ? ? ? ?OPTR.Push('#');
? ? ? ? ?char calchar,c=this.textBox1.Text[0];
? ? ? ? ?double a = 0, b = 0;
? ? ? ? ?int i = 0, j = 0;
? ? ? ? ?while(c!='#'||OPTR.Peek()!='#')
? ? ? ? ?{
? ? ? ? ? ? ?c = this.textBox1.Text[i];
? ? ? ? ? ? ?if (!In(c))//是數字
? ? ? ? ? ? ?{ ??
? ? ? ? ? ? ? ? ?if(i==0||In(this.textBox1.Text[i-1]))//上一個符號是運算符或i=0;
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ?j = i;
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?if (In(this.textBox1.Text[i + 1]))//下一個符號是運算符
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ?OPND.Push(Convert.ToDouble(this.textBox1.Text.Substring(j, i-j+1)));
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?i++;
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ?if(Precede(OPTR.Peek(),c)=='?'){this.textBox1.Text="表達式錯誤";break;}
? ? ? ? ? ? ? ? ?switch (Precede(OPTR.Peek(), this.textBox1.Text[i]))
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ?case'<':
? ? ? ? ? ? ? ? ? ? ? ? ?OPTR.Push(c);
? ? ? ? ? ? ? ? ? ? ? ? ?i++;
? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ?case'=':
? ? ? ? ? ? ? ? ? ? ? ? ?OPTR.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ?i++;
? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ?case'>':
? ? ? ? ? ? ? ? ? ? ? ? ?calchar = OPTR.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ?b = OPND.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ?a=OPND.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ?OPND.Push(scalculator.ans(a, b, calchar));
? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ?}
? ? ? ? ??
? ? ? ? ? ??
? ? ? ? ? ? ? ?
? ? ? ? ?}
? ? ? ? ?return OPND.Peek();
? ? ? ? }
? ? ? ? private char Precede(char a, char b)
? ? ? ? {
? ? ? ? ? ? switch (a)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? case '+':
? ? ? ? ? ? ? ? case '-':
? ? ? ? ? ? ? ? ? ? if (b == '+' || b == '-' || b == ')' || b == '#') return '>';
? ? ? ? ? ? ? ? ? ? if (b == '*' || b == '/' || b == '(') return '<';
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case '*':
? ? ? ? ? ? ? ? case '/':
? ? ? ? ? ? ? ? ? ? if (b == '+' || b == '-' || b == '*' || b == '/' || b == ')' || b == '#') return '>';
? ? ? ? ? ? ? ? ? ? if (b == '(') return '<';
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case '(':?
? ? ? ? ? ? ? ? ? ? if (b == '+' || b == '-' || b == '*' || b == '/' || b == '(') return '<';
? ? ? ? ? ? ? ? ? ? if (b == ')') return '=';
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case ')':?
? ? ? ? ? ? ? ? ? ? if (b == '+' || b == '-' || b == '*' || b == '/' || b == ')'||b=='#') return '<';
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case '#':
? ? ? ? ? ? ? ? ? ? if(b == '+' || b == '-' || b == '*' || b == '/' || b == '(') ?return'<';
? ? ? ? ? ? ? ? ? ? if(b=='#')return '=';
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? default: return '?'; break;
? ? ? ? ? ? }
? ? ? ? ? ? return '?';
? ? ? ? }
? ? ? ? private Boolean In(char a)//是運算符返回true
? ? ? ? {
? ? ? ? ? ? if (a.Equals('+') || a.Equals('-') || a.Equals('*') || a.Equals('/') || a.Equals('(') || a.Equals(')') || a.Equals('#')) { return true; }
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? private void textBox1_TextChanged(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button20.Focus(); //text改變,焦點鎖定為“=”
? ? ? ? ? ?
? ? ? ? }
? ? ? ? private void button23_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);?
? ? ? ? }
? ? ? ? private void button24_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? button1_Click(sender, e);?
? ? ? ? }
? ? ? ? private void Form1_Load(object sender, EventArgs e)
? ? ? ? {
? ? ? ? }
? ??
? ? ? ?
? ? ?
? ??
? ? ? ??
? ? ??
? ? ? ?
? ? ? ?
? ? }
}
轉載于:https://my.oschina.net/u/1462795/blog/278833
總結
- 上一篇: Nginx 反向代理、负载均衡、页面缓存
- 下一篇: WebService入门Demo