求C#计算器完整代码!多谢!

求C#计算器完整代码!!!谢谢!!!望高手发给本人邮箱 sunle0710@126.com希望窗体和控制台各一份!只需要实现

求C#计算器完整代码!!!谢谢!!!
望高手发给本人邮箱 sunle0710@126.com
希望窗体和控制台各一份!
只需要实现 简单的加减乘除,以及符号问题就ok!
谢谢!



[解决办法]
public class Operation 
{ 
private double _numberA = 0; 
private double _numberB = 0; 
public double NumberA 
{ 
get 
{ 
return _numberA; 
} 
set 
{ 
_numberA = value; 
} 
} 
public double NumberB 
{ 
get 
{ 
return _numberB; 
} 
set 
{ 
_numberB = value; 
} 
} 
public virtual double GetResult() 
{ 
double result = 0; 
return result; 
} 
public static string checkNumberInput(string currentNumber, string inputString) 
{ 
string result = ""; 
if (inputString == ".") 
{ 
if (currentNumber.IndexOf(".") < 0) 
{ 
if (currentNumber.Length == 0) 
result = "0" + inputString; 
else 
result = currentNumber + inputString; 
} 
} 
else if (currentNumber == "0") 
{ 
result = inputString; 
} 
else 
{ 
result = currentNumber + inputString; 
} 

return result; 
} 


} 
class OperationAdd : Operation 
{ 
public override double GetResult() 
{ 
double result = 0; 
result = NumberA + NumberB; 
return result; 
} 
} 
class OperationSub : Operation 
{ 
public override double GetResult() 
{ 
double result = 0; 
result = NumberA - NumberB; 
return result; 
} 
} 
class OperationMul : Operation 
{ 
public override double GetResult() 
{ 
double result = 0; 
result = NumberA * NumberB; 
return result; 
} 
} 
class OperationDiv : Operation 
{ 
public override double GetResult() 
{ 
double result = 0; 
if (NumberB == 0) 
throw new Exception("除数不能为0。"); 
result = NumberA / NumberB; 
return result; 
} 
} 
class OperationSqr : Operation 
{ 
public override double GetResult() 
{ 
double result = 0; 
result = NumberB * NumberB; 
return result; 
} 
} 
class OperationSqrt : Operation 
{ 
public override double GetResult() 
{ 
double result = 0; 
if (NumberB < 0) 


throw new Exception("负数不能开平方根。"); 
result = Math.Sqrt(NumberB); 
return result; 
} 
} 
class OperationReverse : Operation 
{ 
public override double GetResult() 
{ 
double result = 0; 
result = -NumberB; 
return result; 
} 
} 
public class OperationFactory 
{ 
public static Operation createOperate(string operate) 
{ 
Operation oper = null; 
switch (operate) 
{ 
case "+": 
{ 
oper = new OperationAdd(); 
break; 
} 
case "-": 
{ 
oper = new OperationSub(); 
break; 
} 
case "*": 
{ 
oper = new OperationMul(); 
break; 
} 
case "/": 
{ 
oper = new OperationDiv(); 
break; 
} 
case "sqr": 
{ 
oper = new OperationSqr(); 
break; 
} 
case "sqrt": 
{ 
oper = new OperationSqrt(); 
break; 
} 
case "+/-": 
{ 
oper = new OperationReverse(); 
break; 
} 
} 

return oper; 
} 


private void buttonAdd_Click(object sender, EventArgs e) 
{ 
if (txtShow.Text != "") 
{ 
oper = OperationFactory.createOperate(((Button)sender).Text); 

oper.NumberA = Convert.ToDouble(txtShow.Text); 

bOperate = true; 
} 
} 
private void buttonEqual_Click(object sender, EventArgs e) 
{ 
if (txtShow.Text != "") 
{ 
if (((Button)sender).Text != "=") 
{ 
oper = OperationFactory.createOperate(((Button)sender).Text); 
} 
oper.NumberB = Convert.ToDouble(txtShow.Text); 
txtShow.Text = oper.GetResult().ToString(); 
bOperate = true; 
} 
} 
 或到下载里看看
[解决办法]
大话设计模式第一章就是做计算器的

在网吧陪老婆上网 等明天回去给你发吧

LZ可以弄来看看 很简单

下面是简单工厂模式的原理 LZ可以参考一下自己做一做 直接在回复里敲的 可能有拼写错误 将就看吧

C# code
//大体思路就是用两个值来保存先后输出的变量,用switch case语句判断预算符号,然后将结果输出//下面是控制台的,窗体的和控制台的原理差不多,<大话>上建立的运算基类,然后继承,但是感觉对于计算器来将没必要这么做,所以就直接像下面这么写了Class Operation{   private int firstNum = 0;   private int secondNum = 0;   private string str = "";   public void Main()   {      Console.WriteLine("请输入第一个数:");      firstNum = Convert.ToInt32(Console.ReadLine());      Console.WriteLine("请输入第二个数:");      secondNum = Convert.ToInt32(Console.ReadLine());      Console.WriteLine("请输入运算符:");      str = Console.ReadLine();      switch(str)      {         case "+":            firstNum += secondNum;            Console.WriteLine("这两个数的和是:{0}",firstNum);         break;         case "-":            firstNum -= secondNum;            Console.WriteLine("这两个数的差是:{0}",firstNum);         break;         case "*":            firstNum *= secondNum;            Console.WriteLine("这两个数的积是:{0}",firstNum);         break;         case "/":            if(secondNum = 0)            {               Console.WriteLine("除数不能为0");            }            else            {            firstNum /= secondNum;            Console.WriteLine("这两个数的商是:{0}",firstNum);            }         break;      }   }}//至于取反,直接用0减去TextBox中的值就行了 


[解决办法]

探讨
引用:
7楼的代码太多冗余
不行的,可以将数字button作为一个事件来触发
而且嵌套太深,不合理

说来听下 哪里冗余了?
学习!!!!
还请指教!!
谢谢!!

[解决办法]
探讨
引用:
楼主写得代码太罗嗦了哦。

新手 呵呵!
我现在有个疑问,到底是代码少和代码多 实现一样的功能那个好?