关于类似WINDOWS平台的计算器垒加问题,请各位大虾指教!!!!!!小弟在此谢过了。

解决方案 »

  1.   

    使用堆栈stack保存 
    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; 
                } 
            }
    http://topic.csdn.net/u/20090922/14/b244a32a-f2bd-4a22-9563-e107dbdb2abf.html