首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

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

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

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

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

热点排行