首先打开Microsoft Visual Studio 2010,把语言配置成C#.net。创建出一个Windows 窗体应用程序。然后再自动生成的Form1面板上面拖拽出一个textbox空间,接着拖拽出相应的按钮控件,不再一一赘述。每一个控件都要添加事件。textbox控件的单击事件可以设置为 textBox1.Text = ""; 即一旦点击输入框,输入框的文本就自动置为“”(没有任何内容), 其中textbox1是 textbox控件的名字,可以在属性框里面设定。
接下来对按钮1,2,3,4,5,6,7,8,9,0,.,*,+,-,/,等符号添加事件。每个按钮都要添加事件,但是可以是同一个事件。比如为button1添加 private void button1_Click(object sender, EventArgs e)事件后,接着对其余的控件添加事件,点开事件的下拉框,选择button1_Click事件,由于好多按钮的单击事件都相似,所以只在一个事件函数里面处理即可。但是下面让我学会了第一点重要的东西,object sender中的sender虽然作为事件源的参数,但是sender是object类型的,所以先要Button buttonsender = (Button)sender;
if (sender != 等)
{
textBox1.Text += buttonsender.Text;
}
else
{
}
在else的部分,就要对文本textBox1.Text进行分析。本计算器不带有括号,所以每个运算符两边必定是数字。接下来就要把用户输入的数字部分摘选出来,当然,选择使用Split函数了。但是只知道这个函数能以一种字符进行分割。经过反复百度才了解了这个函数有多种重载,多种用法。其中一种是string string1 = textBox1.Text; char[] A=new char[4]{'+','-','/','*'}; string2=string1 .Split(A);其中string2是一个字符数组,相当于C中指针的指针。字符数组A包含了四种运算符。string2=string1.Split(A)把string1用A中的字符分割出来,函数原型是 string【】 Split(char【】)返回的是一个指向字符串数组的引用。
接下来要做的是运算符,textBox1.Text中含有的是加减乘除和零到九小数点。所以把不是运算符的字符全删除即可。很明显的想到了替换函数 string replace(char,char)用第二种字符替换前一种字符。
fuhao = string1.Replace("1","");
string fuhao1 = fuhao.Replace("2", "");
fuhao = fuhao1.Replace("3", "");
fuhao1 = fuhao.Replace("4", "");
fuhao = fuhao1.Replace("5", "");
fuhao1 = fuhao.Replace("6", "");
fuhao = fuhao1.Replace("7", "");
fuhao1 = fuhao.Replace("8", "");
fuhao = fuhao1.Replace("9", "");
fuhao1 = fuhao.Replace("0", "");
fuhao = fuhao1.Replace(".", "");
接下来就进行计算。计算的思想是:加减乘除运算分为两层,第一层是乘除运算,第二层是加减运算。通过mark来标记运算符字符串里面的乘除运算符,加减运算符是否还有。先做所有的乘除计算,在做剩余的加减运算。 int i,mark=1;
while (mark == 1&&fuhao!="")
{
mark = 0;
for (i=0;i < fuhao.Length;i++)
{
if (fuhao[i] == '*')
{
chengfa(i);
mark = 1;
break;
}
else if (fuhao[i] == '/')
{
chufa(i);
mark = 1;
break;
}
}
}
这个循环处理了所有的乘除运算符。
mark = 1;
while (mark == 1&&fuhao!="")
{
mark = 0;
for (i = 0; i < fuhao.Length; i++)
{
if (fuhao[i] == '+')
{
jiafa(i);
mark = 1;
break;
}
else if (fuhao[i] == '-')
{
jianfa(i);
mark = 1;
break;
}
}
}
这个处理了所有的加减运算符。
public string[] DeleteString(string[] list, int posation)
{ List<string> l = new List<string>();
for (int i = 0; i < list.Length; i++)
{
if (i != posation) { l.Add(list[i]); }
}
return l.ToArray();
}
public string[] AddString(string[] list, string key,int location)
{
List<string> l = new List<string>();
for (int i = 0; i < list.Length; i++)
{ if (i == location ) { l.Add(key); }
l.Add(list[i]);
}
return l.ToArray();
}
public void chengfa(int i)
{
double a = Convert.ToDouble(string2[i]);
double b = Convert.ToDouble(string2[i + 1]);
double c=a*b;
string2 = AddString(string2, Convert.ToString(c), i);
string2 = DeleteString(string2, i + 1);
string2 = DeleteString(string2, i + 1);
fuhao = fuhao.Remove(i, 1);
}
public void chufa(int i)
{
double a = Convert.ToDouble(string2[i]);
double b = Convert.ToDouble(string2[i + 1]);
double c = a / b;
string2 = AddString(string2, Convert.ToString(c), i);
string2 = DeleteString(string2, i + 1);
string2 = DeleteString(string2, i + 1);
fuhao = fuhao.Remove(i, 1);
}
public void jiafa(int i)
{
double a = Convert.ToDouble(string2[i]);
double b = Convert.ToDouble(string2[i + 1]);
double c = a + b;
string2 = AddString(string2, Convert.ToString(c), i);
string2 = DeleteString(string2, i + 1);
string2 = DeleteString(string2, i + 1);
fuhao = fuhao.Remove(i, 1);
}
public void jianfa(int i)
{
double a = Convert.ToDouble(string2[i]);
double b = Convert.ToDouble(string2[i + 1]);
double c = a - b;
string2 = AddString(string2, Convert.ToString(c), i);
string2 = DeleteString(string2, i + 1);
string2 = DeleteString(string2, i + 1);
fuhao = fuhao.Remove(i, 1);
}