读书人

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

发布时间: 2012-06-08 12:55:24 作者: rapoo

求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作为一个事件来触发
而且嵌套太深,不合理

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

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

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

读书人网 >C#

热点推荐