C#實現(xiàn)簡易計算器小功能
本文實例為大家分享了C#實現(xiàn)簡易計算器小功能的具體代碼,供大家參考,具體內(nèi)容如下
簡易的登陸界面。

具有幻燈片效果。(picturebox time控件)
計算器支持多位數(shù),小數(shù),括號的運算。

音樂是一個練習用的小控件(Listbox),可以選擇指定的歌曲播放,直接忽略掉吧。
建立winform窗體
數(shù)字和運算符都為button,輸入和輸出的為textbox
基本代碼
在所有button控件的click事件均為加上所對應的文本。
例如:數(shù)字1所對應的button就為
textBox1.Text += '1';
運算符同理
textBox1.Text += '*';
核心代碼
核心代碼均在‘=’的click的事件中
Stack<double> vs = new Stack<double>();//運算符棧
Stack<char> vvs = new Stack<char>();//操作符棧
? ? ? ?string a = textBox1.Text + '=';
? ? ? ?string b = "";
? ? ? ?vvs.Push('=');
? ? ? for (int i = 0; i < a.Length; i++)
? ? ? {
? ? ? ?if (a[i] >= '0' && a[i] <= '9'||a[i]=='.')
? ? ? {
? ? ? ? ? ?b += a[i];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if (a[i] == '=')
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (b != "")
? ? ? ? ? ? ? ? ? ? ? ? vs.Push(Convert.ToDouble(b));
? ? ? ? ? ? ? ? ? ? while (vvs.Peek() != '=')
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? char t = vvs.Pop(); double d = vs.Pop();
? ? ? ? ? ? ? ? ? ? ? ? if (vs.Count() != 0)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? double j = vs.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? vs.Push(Jisuan(d, t, j));
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("你輸入的有問題");
? ? ? ? ? ? ? ? ? ? ? ? ? ? textBox1.Text = "";
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (b != "")
? ? ? ? ? ? ? ? ? ? ? ? vs.Push(Convert.ToDouble(b));
? ? ? ? ? ? ? ? ? ? switch (Bijiao(vvs.Peek(), a[i]))
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? case '>':
? ? ? ? ? ? ? ? ? ? ? ? ? ? while (vvs.Count != 1 && vvs.Peek() != '(')
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? char th = vvs.Pop(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double f = vs.Pop(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double g = vs.Pop(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? vs.Push(Jisuan(f, th, g));
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (vvs.Peek() == '(' && a[i] == ')')
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? vvs.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? vvs.Push(a[i]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case '<':
? ? ? ? ? ? ? ? ? ? ? ? ? ? vvs.Push(a[i]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case '=':
? ? ? ? ? ? ? ? ? ? ? ? ? ? while (vvs.Peek() != '=')
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? char th = vvs.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? double f = vs.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? double g = vs.Pop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? vs.Push(Jisuan(f, th, g));
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? b = "";
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? textBox1.Text = "";
? ? ? ? ? ? if(vs.Count()!=0)
? ? ? ? ? ? { textBox1.Text = vs.Peek().ToString(); }
? ? ? ? }所用到的方法(函數(shù))
public double Jisuan(double c, char t, double a)//用來計算的方法
? ? ? ? {
? ? ? ? ? ? switch (t)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? case '+':
? ? ? ? ? ? ? ? ? ? return a + c;
? ? ? ? ? ? ? ? case '-':
? ? ? ? ? ? ? ? ? ? return a - c;
? ? ? ? ? ? ? ? case '*':
? ? ? ? ? ? ? ? ? ? return a * c;
? ? ? ? ? ? ? ? case '/':
? ? ? ? ? ? ? ? ? ? if (c == 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("0不能作為被除數(shù)");
? ? ? ? ? ? ? ? ? ? ? ? return ?0;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? return a / c;
? ? ? ? ? ? ? ? case '%':
? ? ? ? ? ? ? ? ? ? return a % c;
? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? return 0;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? char Bijiao(char theta1, char theta2)//比較運算符優(yōu)先級的方法
? ? ? ? {
? ? ? ? ? ? if ((theta1 == '(' && theta2 == ')') || (theta1 == '#' && theta2 == '#'))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return '=';
? ? ? ? ? ? }
? ? ? ? ? ? else if (theta1 == '(' || theta1 == '#' || theta2 == '(' || (theta1
? ? ? ? ? ? ? ? ? == '+' || theta1 == '-') && (theta2 == '*' || theta2 == '/'))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return '<';
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? return '>';
? ? ? ? }為了使計算器更加美觀,可以添加picturebox控件等等。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C#中GridView動態(tài)添加列的實現(xiàn)方法
這篇文章主要介紹了C#中GridView動態(tài)添加列的實現(xiàn)方法,涉及C#中GridView的相關使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07
C# Dictionary和SortedDictionary的簡介
今天小編就為大家分享一篇關于C# Dictionary和SortedDictionary的簡介,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10

