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); }
public void Form1_Load(object sender, EventArgs e) { initGlobal(); memNum.setNumber("0"); lastFirst.setNumber("0"); lastSecond.setNumber("0"); lastOperator = MyInternalKey.IK_OPERATOR_START; }
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; }
//--------------------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); }
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 = "您还没有选择批量测试文件,请选择"; } }
//--------------------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); }
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); } }
public int pik_processCancel(MyInternalKey ik) { ikm_clearAll(); return(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); }
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; } }
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); }
//--------------------InputOutputController_End-------------------- //--------------------InternalKeyManager_Start-------------------- int ikm_inputKey(MyInternalKey ik) { cik_inputKey(ik); return(0); }