Beispiel #1
0
        public int pik_processDigitPeriod(MyInternalKey ik)
        {
            switch (mycalcState)
            {
            case MyCalcState.CS_STATE_READY:
                firstNumber.setNumber("0.");
                ikm_textRefreshed(firstNumber.OriString());

                mycalcState = MyCalcState.CS_STATE_FIRSTOPERAND;
                break;

            case MyCalcState.CS_STATE_FIRSTOPERAND:
                firstNumber.appendDigit(".");
                ikm_textRefreshed(firstNumber.OriString());
                break;

            case MyCalcState.CS_STATE_OPERATOR:
                secondNumber.setNumber("0.");
                ikm_textRefreshed(secondNumber.OriString());

                mycalcState = MyCalcState.CS_STATE_SECONDOPERAND;
                break;

            case MyCalcState.CS_STATE_SECONDOPERAND:
                secondNumber.appendDigit(".");
                ikm_textRefreshed(secondNumber.OriString());
                break;
            }
            return(0);
        }
Beispiel #2
0
 public void Form1_Load(object sender, EventArgs e)
 {
     initGlobal();
     memNum.setNumber("0");
     lastFirst.setNumber("0");
     lastSecond.setNumber("0");
     lastOperator = MyInternalKey.IK_OPERATOR_START;
 }
Beispiel #3
0
        void initGlobal()
        {
            mycalcState         = MyCalcState.CS_STATE_READY;
            this.txtOutBox.Text = "0.";
            firstNumber         = new MyCalcNumber();
            secondNumber        = new MyCalcNumber();
            resultNumber        = new MyCalcNumber();
            MyInternalKey mycalcOperator;

            //firstNumber.setNumber('0');
            //secondNumber.setNumber('0');
            resultNumber.setNumber("0");
            firstNumber.setText("END");
            secondNumber.setText("END");
            mycalcOperator = MyInternalKey.IK_CANCEL_START;
        }
Beispiel #4
0
        //--------------------ClassifyInternalKey_End--------------------


        //--------------------ProcessInternalKey_Start--------------------

        public int pik_processDigit(MyInternalKey ik)
        {
            int ik_digit;

            if (g_getInternalKeyType(ik) != MyCalcInternalKeyType.IKT_DIGIT)
            {
                return(1);
            }


            if (ik == MyInternalKey.IK_DIGIT_PERIOD)
            {
                pik_processDigitPeriod(ik);
                return(0);
            }
            ik_digit = ik - MyInternalKey.IK_DIGIT_0;

            switch (mycalcState)
            {
            case MyCalcState.CS_STATE_READY:
                this.firstNumber.setNumber(ik_digit);
                ikm_textRefreshed(firstNumber.OriString());

                mycalcState = MyCalcState.CS_STATE_FIRSTOPERAND;
                break;

            case MyCalcState.CS_STATE_FIRSTOPERAND:
                firstNumber.appendDigit(ik_digit.ToString());
                ikm_textRefreshed(firstNumber.OriString());
                break;

            case MyCalcState.CS_STATE_OPERATOR:
                secondNumber.setNumber(ik_digit);
                ikm_textRefreshed(secondNumber.OriString());

                mycalcState = MyCalcState.CS_STATE_SECONDOPERAND;
                break;

            case MyCalcState.CS_STATE_SECONDOPERAND:
                secondNumber.appendDigit(ik_digit.ToString());
                ikm_textRefreshed(secondNumber.OriString());
                break;
            }
            return(0);
        }
Beispiel #5
0
        private void Form2_Load(object sender, EventArgs e)
        {
            initGlobal();
            memNum.setNumber("0");
            lastFirst.setNumber("0");
            lastSecond.setNumber("0");
            lastOperator = MyInternalKey.IK_OPERATOR_START;

            openFileDialog1.ShowDialog();
            Fname = openFileDialog1.FileName;
            if (Fname != "")
            {
                this.label2.Text = Fname;
            }
            else
            {
                this.label2.Text = "您还没有选择批量测试文件,请选择";
            }
        }
Beispiel #6
0
        //--------------------InternalKeyManager_End--------------------


        //--------------------ClassifyInternalKey_Start--------------------
        public int cik_inputKey(MyInternalKey ik)
        {
            switch (g_getInternalKeyType(ik))
            {
            case MyCalcInternalKeyType.IKT_DIGIT:
                pik_processDigit(ik);
                break;

            case MyCalcInternalKeyType.IKT_OPERATOR:
                pik_processOperator(ik);
                break;

            case MyCalcInternalKeyType.IKT_CANCEL:
                pik_processCancel(ik);
                break;

            case MyCalcInternalKeyType.IKT_MEMORY:
                pik_processMemory(ik);
                break;
            }
            return(0);
        }
Beispiel #7
0
 public MyCalcInternalKeyType g_getInternalKeyType(MyInternalKey ik)
 {
     if (ik.CompareTo(MyInternalKey.IK_DIGIT_START) > 0 && ik.CompareTo(MyInternalKey.IK_DIGIT_END) < 0)
     {
         return(MyCalcInternalKeyType.IKT_DIGIT);
     }
     else if (ik.CompareTo(MyInternalKey.IK_OPERATOR_START) > 0 && ik.CompareTo(MyInternalKey.IK_OPERATOR_END) < 0)
     {
         return(MyCalcInternalKeyType.IKT_OPERATOR);
     }
     else if (ik.CompareTo(MyInternalKey.IK_CANCEL_START) > 0 && ik.CompareTo(MyInternalKey.IK_CANCEL_END) < 0)
     {
         return(MyCalcInternalKeyType.IKT_CANCEL);
     }
     else if (ik.CompareTo(MyInternalKey.IK_MEMORY_START) > 0 && ik.CompareTo(MyInternalKey.IK_MEMORY_END) < 0)
     {
         return(MyCalcInternalKeyType.IKT_MEMORY);
     }
     else
     {
         return(MyCalcInternalKeyType.IKT_UNKNOWN);
     }
 }
Beispiel #8
0
 public int pik_processCancel(MyInternalKey ik)
 {
     ikm_clearAll();
     return(0);
 }
Beispiel #9
0
        public int pik_doCalculate()
        {
            try
            {
                double fn, sn, rn;
                int    error = 0;
                fn = 0;
                sn = 0;
                rn = 0;
                if (firstNumber.OToString() == "END" && secondNumber.OToString() == "END")
                {
                    if (mycalcOperator == MyInternalKey.IK_CANCEL_START)
                    {
                        this.initGlobal();
                    }
                    firstNumber.setText(resultNumber.getText());
                    secondNumber.setText(lastSecond.getText());
                    fn             = firstNumber.getNumber();
                    sn             = secondNumber.getNumber();
                    mycalcOperator = lastOperator;
                    switch (mycalcOperator)
                    {
                    case MyInternalKey.IK_OPERATOR_SIGN:
                        rn = 0 - fn;
                        break;

                    case MyInternalKey.IK_OPERATOR_PLUS:
                        rn = fn + sn;
                        break;

                    case MyInternalKey.IK_OPERATOR_SUB:
                        rn = fn - sn;
                        break;

                    case MyInternalKey.IK_OPERATOR_MUL:
                        rn = fn * sn;
                        break;

                    case MyInternalKey.IK_OPERATOR_DIV:
                        if (sn != 0)
                        {
                            rn = fn / sn;
                        }
                        else
                        {
                            error = 1;
                        }
                        break;

                    case MyInternalKey.IK_OPERATOR_RESULT:
                        break;

                    default:
                        break;
                    }
                    lastFirst.setText(firstNumber.getText());
                    lastSecond.setText(secondNumber.getText());
                    lastOperator = mycalcOperator;

                    firstNumber.setText("END");
                    secondNumber.setText("END");
                    resultNumber.setNumber(rn);

                    ikm_textRefreshed(resultNumber.toString());
                    if (error == 1)
                    {
                        ikm_textRefreshed("Error : Divide By Zero !");
                    }
                }
                else
                {
                    if (firstNumber.OToString() != "END" && secondNumber.OToString() == "END")
                    {
                        fn = firstNumber.getNumber();
                        sn = firstNumber.getNumber();
                    }

                    if (firstNumber.OToString() != "END" && secondNumber.OToString() != "END" /*&& firstNumber.OToString() != resultNumber.OToString()*/)
                    {
                        fn = firstNumber.getNumber();
                        sn = secondNumber.getNumber();
                    }
                    rn = 0.0;

                    switch (mycalcOperator)
                    {
                    case MyInternalKey.IK_OPERATOR_SIGN:
                        rn = 0 - fn;
                        break;

                    case MyInternalKey.IK_OPERATOR_PLUS:
                        rn = fn + sn;
                        break;

                    case MyInternalKey.IK_OPERATOR_SUB:
                        rn = fn - sn;
                        break;

                    case MyInternalKey.IK_OPERATOR_MUL:
                        rn = fn * sn;
                        break;

                    case MyInternalKey.IK_OPERATOR_DIV:
                        if (sn != 0)
                        {
                            rn = fn / sn;
                        }
                        else
                        {
                            error = 1;
                        }
                        break;

                    case MyInternalKey.IK_OPERATOR_RESULT:
                        break;

                    default:
                        break;
                    }
                    lastFirst.setText(firstNumber.getText());
                    lastSecond.setText(secondNumber.getText());
                    lastOperator = mycalcOperator;

                    firstNumber.setText("END");
                    secondNumber.setText("END");
                    resultNumber.setNumber(rn);

                    ikm_textRefreshed(resultNumber.toString());
                    if (error == 1)
                    {
                        ikm_textRefreshed("Error : Divide By Zero !");
                    }
                }
            }
            catch
            {
                this.initGlobal();
            }
            return(0);
        }
Beispiel #10
0
        public void pik_processMemory(MyInternalKey ik)
        {
            switch (ik)
            {
            case MyInternalKey.IK_MEMORY_MA:
            {
                memNum.setNumber(memNum.getNumber() + Convert.ToDouble(this.txtOutBox.Text));
                this.ioc_setMemoryFlagData();
            }
            break;

            case MyInternalKey.IK_MEMORY_MS:
            {
                memNum.setNumber(memNum.getNumber() - Convert.ToDouble(this.txtOutBox.Text));
                this.ioc_setMemoryFlagData();
            }
            break;

            case MyInternalKey.IK_MEMORY_MC:
            {
                memNum.setNumber(0);
                this.ioc_clearMemoryFlagData();
            }
            break;

            case MyInternalKey.IK_MEMORY_MR:
            {
                if (pressedMR == 0)
                {
                    pressedMR = 1;
                    switch (mycalcState)
                    {
                    case MyCalcState.CS_STATE_READY:
                    {
                        ikm_textRefreshed(memNum.toString());
                        firstNumber.setNumber(memNum.getNumber());
                        mycalcState = MyCalcState.CS_STATE_FIRSTOPERAND;
                    }
                    break;

                    case MyCalcState.CS_STATE_FIRSTOPERAND:
                    {
                        ikm_textRefreshed(memNum.toString());
                        firstNumber.setNumber(memNum.getNumber());
                        mycalcState = MyCalcState.CS_STATE_OPERATOR;
                    }
                    break;

                    case MyCalcState.CS_STATE_OPERATOR:
                    {
                        ikm_textRefreshed(memNum.toString());
                        secondNumber.setNumber(memNum.getNumber());
                        mycalcState = MyCalcState.CS_STATE_SECONDOPERAND;
                    }
                    break;

                    case MyCalcState.CS_STATE_SECONDOPERAND:
                    {
                        //ikm_textRefreshed(memNum.toString());
                        //secondNumber.setNumber(memNum.getNumber());
                        pik_doCalculate();
                    }
                    break;
                    }
                }
            }
            break;
            }
        }
Beispiel #11
0
        public int pik_processOperator(MyInternalKey ik)
        {
            //double fn, sn, rn;

            if (g_getInternalKeyType(ik) != MyCalcInternalKeyType.IKT_OPERATOR)
            {
                return(1);
            }

            if (ik == MyInternalKey.IK_OPERATOR_SIGN)
            {
                if (mycalcState == MyCalcState.CS_STATE_FIRSTOPERAND)
                {
                    firstNumber.setNumber(0 - firstNumber.getNumber());
                    ikm_textRefreshed(firstNumber.toString());
                }
                if (mycalcState == MyCalcState.CS_STATE_SECONDOPERAND)
                {
                    secondNumber.setNumber(0 - secondNumber.getNumber());
                    ikm_textRefreshed(secondNumber.toString());
                }
                if (mycalcState == MyCalcState.CS_STATE_OPERATOR)
                {
                    secondNumber.setNumber(0 - secondNumber.getNumber());
                    ikm_textRefreshed(secondNumber.toString());
                }
                if (mycalcState == MyCalcState.CS_STATE_READY)
                {
                    resultNumber.setNumber(0 - resultNumber.getNumber());
                    ikm_textRefreshed(resultNumber.toString());
                }
            }
            else
            {
                if (ik == MyInternalKey.IK_OPERATOR_RESULT)
                {
                    mycalcState = MyCalcState.CS_STATE_SECONDOPERAND;
                }

                switch (mycalcState)
                {
                case MyCalcState.CS_STATE_READY:
                    if (firstNumber.getText() == "END" && secondNumber.getText() == "END")
                    {
                        firstNumber.setText(resultNumber.getText());
                        mycalcOperator = ik;
                        mycalcState    = MyCalcState.CS_STATE_OPERATOR;
                    }
                    break;

                case MyCalcState.CS_STATE_FIRSTOPERAND:
                    mycalcOperator = ik;
                    mycalcState    = MyCalcState.CS_STATE_OPERATOR;
                    break;

                case MyCalcState.CS_STATE_OPERATOR:
                {
                    if (ik == MyInternalKey.IK_OPERATOR_RESULT && firstNumber.getText() == resultNumber.getText() && secondNumber.getText() == "END")
                    {
                        secondNumber.setNumber(firstNumber.getNumber());
                        pik_doCalculate();
                        mycalcState = MyCalcState.CS_STATE_READY;
                    }
                    else
                    {
                        mycalcOperator = ik;
                    }
                }
                break;

                case MyCalcState.CS_STATE_SECONDOPERAND:
                    pik_doCalculate();
                    mycalcState = MyCalcState.CS_STATE_READY;
                    if (ik != MyInternalKey.IK_OPERATOR_RESULT)
                    {
                        firstNumber.setText(resultNumber.getText());
                        mycalcOperator = ik;
                        mycalcState    = MyCalcState.CS_STATE_OPERATOR;
                    }
                    break;
                }
            }

            return(0);
        }
Beispiel #12
0
        //--------------------InputOutputController_End--------------------


        //--------------------InternalKeyManager_Start--------------------
        int ikm_inputKey(MyInternalKey ik)
        {
            cik_inputKey(ik);
            return(0);
        }