一、form界面搭建
1.我们需要选择“c#”语言,然后选择“windows窗体应用(.net framework )”,这个窗体类型一定不能选错,接着就下一步创建项目。
2.我先放我搭建好的计算器界面,但%的代码没有放进来,因此这按键不可用。
二、代码展示
peogram.cs代码
using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using system.windows.forms;
namespace 计算器2
{
internal static class program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[stathread]
static void main()
{
application.enablevisualstyles();
application.setcompatibletextrenderingdefault(false);
application.run(new formcalculator());
}
}
}
formcalculator.cs代码
using system;
using system.collections;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.text.regularexpressions;
using system.threading.tasks;
using system.windows.forms;
namespace 计算器2
{
public partial class formcalculator : form
{
#region 方法二:对表达式分析
string precede(string p, string q)
{
switch (p)
{
case "+":
case "-":
return ("*/(".indexof(q) != -1) ? "<" : ">";
case "*":
case "/":
return (q == "(") ? "<" : ">";
case "(":
return (q == ")") ? "=" : "<";
case ")":
return (q == "(") ? "?" : ">";
case "#":
return (q == "#") ? "=" : "<";
}
return "?";
}
double operate(double a, char o, double b)
{
switch (o)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return 0;
}
public object eval_2(string expression)
{
stack narr = new stack(), oarr = new stack();
int j = 0;
double a = 0, b = 0;
string w = "";
char o;
matchcollection arr = regex.matches(expression.replace(" ", "") + "#", @"(((?<=(^|\())-)?\d+(\.\d+)?|\d)");
oarr.push('#');
w = convert.tostring(arr[j++]);
while (!(w == "#" && convert.tostring(oarr.peek()) == "#"))
{
if ("+-*/()#".indexof(w) != -1)
{
switch (precede(oarr.peek().tostring(), w))
{
case "<":
oarr.push(w);
w = convert.tostring(arr[j++]);
break;
case "=":
oarr.pop();
w = convert.tostring(arr[j++]);
break;
case ">":
o = convert.tochar(oarr.pop());
b = convert.todouble(narr.pop());
a = convert.todouble(narr.pop());
narr.push(operate(a, o, b));
break;
default:
return "error";
}
}
else
{
narr.push(w);
w = convert.tostring(arr[j++]);
}
}
return narr.pop();
}
#endregion
public formcalculator()
{
initializecomponent();
this.maximizebox = false;//禁止最大化
}
private void tablelayoutpanel1_paint(object sender, painteventargs e)
{
}
private void textbox1_textchanged(object sender, eventargs e)
{
}
private void formcalculator_load(object sender, eventargs e)
{
}
private void button1_click(object sender, eventargs e)
{
this.textbox1.text += "1";
}
private void button2_click(object sender, eventargs e)
{
this.textbox1.text += "2";
}
private void button3_click(object sender, eventargs e)
{
this.textbox1.text += "3";
}
private void button4_click(object sender, eventargs e)
{
this.textbox1.text += "4";
}
private void button7_click(object sender, eventargs e)
{
this.textbox1.text += "5";
}
private void button6_click(object sender, eventargs e)
{
this.textbox1.text += "6";
}
private void button11_click(object sender, eventargs e)
{
this.textbox1.text += "7";
}
private void button8_click(object sender, eventargs e)
{
this.textbox1.text += "8";
}
private void button9_click(object sender, eventargs e)
{
this.textbox1.text += "9";
}
private void buttondot_click(object sender, eventargs e)
{
this.textbox1.text += ".";
}
private void button0_click(object sender, eventargs e)
{
this.textbox1.text += "0";
}
private void buttondiv_click(object sender, eventargs e)
{
this.textbox1.text += "/";
}
private void buttonmul_click(object sender, eventargs e)
{
this.textbox1.text += "*";
}
private void buttonsub_click(object sender, eventargs e)
{
this.textbox1.text += "-";
}
private void buttonadd_click(object sender, eventargs e)
{
this.textbox1.text += "+";
}
private void buttonclear_click(object sender, eventargs e)
{
this.textbox1.text = " ";
}
private void buttonparentheses1_click(object sender, eventargs e)
{
this.textbox1.text += "(";
}
private void buttonparentheses2_click(object sender, eventargs e)
{
this.textbox1.text += ")";
}
private void buttonper_click(object sender, eventargs e)
{
this.textbox1.text += "%";
}
//计算结果
private void buttonequal_click(object sender, eventargs e)
{
string str = textbox1.text;
double result = (double)eval_2(str);
this.textbox1.text = result.tostring();
}
}
}
注:本篇博文只是随意写,还有很多细节未展示,一定会报错,不适于用来参考。
发表评论