首先打開Microsoft Visual Studio 2010,把語言配置成C#.net。創(chuàng)建出一個Windows 窗體應用程序。然后再自動生成的Form1面板上面拖拽出一個textbox空間,接著拖拽出相應的按鈕控件,不再一一贅述。每一個控件都要添加事件。textbox控件的單擊事件可以設置為 textBox1.Text = ""; 即一旦點擊輸入框,輸入框的文本就自動置為“”(沒有任何內(nèi)容), 其中textbox1是 textbox控件的名字,可以在屬性框里面設定。
接下來對按鈕1,2,3,4,5,6,7,8,9,0,.,*,+,-,/,等符號添加事件。每個按鈕都要添加事件,但是可以是同一個事件。比如為button1添加 private void button1_Click(object sender, EventArgs e)事件后,接著對其余的控件添加事件,點開事件的下拉框,選擇button1_Click事件,由于好多按鈕的單擊事件都相似,所以只在一個事件函數(shù)里面處理即可。但是下面讓我學會了第一點重要的東西,object sender中的sender雖然作為事件源的參數(shù),但是sender是object類型的,所以先要Button buttonsender = (Button)sender;
if (sender != 等)
{
textBox1.Text += buttonsender.Text;
}
else
{
}
在else的部分,就要對文本textBox1.Text進行分析。本計算器不帶有括號,所以每個運算符兩邊必定是數(shù)字。接下來就要把用戶輸入的數(shù)字部分摘選出來,當然,選擇使用Split函數(shù)了。但是只知道這個函數(shù)能以一種字符進行分割。經(jīng)過反復百度才了解了這個函數(shù)有多種重載,多種用法。其中一種是string string1 = textBox1.Text; char[] A=new char[4]{'+','-','/','*'}; string2=string1 .Split(A);其中string2是一個字符數(shù)組,相當于C中指針的指針。字符數(shù)組A包含了四種運算符。string2=string1.Split(A)把string1用A中的字符分割出來,函數(shù)原型是 string【】 Split(char【】)返回的是一個指向字符串數(shù)組的引用。
接下來要做的是運算符,textBox1.Text中含有的是加減乘除和零到九小數(shù)點。所以把不是運算符的字符全刪除即可。很明顯的想到了替換函數(shù) 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;
}
}
}
這個循環(huán)處理了所有的乘除運算符。
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);
}