Ejemplo n.º 1
0
        private void buttonGenExercise_Click(object sender, EventArgs e)
        {
            int maxFactor = decimal.ToInt32(numericUpDownMaxFactor.Value);
            if (maxFactor < 1)
            {
                MessageBox.Show("难度太低,请提高难度 :XD");
                return;
            }

            decimal addPercentage = numericUpDownAddPercentage.Value;
            decimal minusPercentage = numericUpDownMinusPercentage.Value;
            decimal multiplyPercentage = numericUpDownMultiplyPercentage.Value;
            decimal dividePercentage = numericUpDownDividePercentage.Value;
            decimal totalPercentage = addPercentage + minusPercentage + multiplyPercentage + dividePercentage;
            // 如果总占比小于100%,则根据现有占比平均分配
            if (totalPercentage == 0)
            {
                MessageBox.Show("所有题型占比都是0,请重新分配 :XD");
                return;
            }
            if (totalPercentage != 100)
            {
                numericUpDownAddPercentage.Value = (int)(addPercentage * 100 / totalPercentage);
                numericUpDownMinusPercentage.Value = (int)(minusPercentage * 100 / totalPercentage);
                numericUpDownMultiplyPercentage.Value = (int)(multiplyPercentage * 100 / totalPercentage);
                // 其实可以直接等于 numericUpDownDividePercentage.Maximum
                numericUpDownDividePercentage.Value = 100 - numericUpDownAddPercentage.Value - numericUpDownMinusPercentage.Value - numericUpDownMultiplyPercentage.Value;
            }
            int exVolumeAll = decimal.ToInt32(numericUpDownExVolume.Value);
            int exVolumeAdd = decimal.ToInt32(numericUpDownAddPercentage.Value * exVolumeAll / 100);
            int exVolumeMinus = decimal.ToInt32(numericUpDownMinusPercentage.Value * exVolumeAll / 100);
            int exVolumeMultiply = decimal.ToInt32(numericUpDownMultiplyPercentage.Value * exVolumeAll / 100);
            // 这个考虑用总数减去前三个数,避免整除导致最后四个题量加起来不是总题量
            int exVolumeDivide = decimal.ToInt32(numericUpDownDividePercentage.Value * exVolumeAll / 100);
            //int exVolumeDivide = decimal.ToInt32(exVolumeAll - exVolumeAdd - exVolumeMinus - exVolumeMultiply);
            int exVolumeDiff = exVolumeAll - exVolumeAdd - exVolumeMinus - exVolumeMultiply - exVolumeDivide;
            if (exVolumeDiff > 0)
            {
                if (exVolumeAdd > 0)
                    exVolumeAdd = exVolumeAdd + exVolumeDiff;
                else if (exVolumeMinus > 0)
                    exVolumeMinus = exVolumeMinus + exVolumeDiff;
                else if (exVolumeMultiply > 0)
                    exVolumeMultiply = exVolumeMultiply + exVolumeDiff;
                else
                    exVolumeDivide = exVolumeDivide + exVolumeDiff;
            }
            double fillInBlankPercentage = decimal.ToInt64(numericUpDownFillInBlankPercentage.Value) / 100.0;

            ArithmeticExerciseFactory exFactory = new ArithmeticExerciseFactory();
            ArrayList exerciseList = new ArrayList();
            exerciseList.AddRange(exFactory.ProduceAddEx(exVolumeAdd, maxFactor, fillInBlankPercentage));
            exerciseList.AddRange(exFactory.ProduceMinusEx(exVolumeMinus, maxFactor, fillInBlankPercentage));
            exerciseList.AddRange(exFactory.ProduceMultiplyEx(exVolumeMultiply, maxFactor, fillInBlankPercentage));
            exerciseList.AddRange(exFactory.ProduceDivideEx(exVolumeDivide, maxFactor, fillInBlankPercentage));
            // 打乱题目顺序
            string[] exerciseArray = (string[])exerciseList.ToArray(typeof(string));
            Random random = new Random();
            for (int i = 0; i < exerciseArray.Length; i++)
            {
                int r = random.Next(0, exerciseArray.Length);
                string tmp = exerciseArray[i];
                exerciseArray[i] = exerciseArray[r];
                exerciseArray[r] = tmp;

                Console.WriteLine("length: " + exerciseArray[i].Length);
            }

            new ResultForm(exerciseArray).ShowDialog(); //, exVolumeAdd, exVolumeMinus, exVolumeMultiply, exVolumeDivide).ShowDialog();

            //Console.WriteLine(DateTime.Now + " @ done with " + exerciseArray.Length + " questions.");
            //return;
        }
Ejemplo n.º 2
0
        private void buttonGenExercise_Click(object sender, EventArgs e)
        {
            int maxFactor = decimal.ToInt32(numericUpDownMaxFactor.Value);

            if (maxFactor < 1)
            {
                MessageBox.Show("难度太低,请提高难度 :XD");
                return;
            }

            decimal addPercentage      = numericUpDownAddPercentage.Value;
            decimal minusPercentage    = numericUpDownMinusPercentage.Value;
            decimal multiplyPercentage = numericUpDownMultiplyPercentage.Value;
            decimal dividePercentage   = numericUpDownDividePercentage.Value;
            decimal totalPercentage    = addPercentage + minusPercentage + multiplyPercentage + dividePercentage;

            // 如果总占比小于100%,则根据现有占比平均分配
            if (totalPercentage == 0)
            {
                MessageBox.Show("所有题型占比都是0,请重新分配 :XD");
                return;
            }
            if (totalPercentage != 100)
            {
                numericUpDownAddPercentage.Value      = (int)(addPercentage * 100 / totalPercentage);
                numericUpDownMinusPercentage.Value    = (int)(minusPercentage * 100 / totalPercentage);
                numericUpDownMultiplyPercentage.Value = (int)(multiplyPercentage * 100 / totalPercentage);
                // 其实可以直接等于 numericUpDownDividePercentage.Maximum
                numericUpDownDividePercentage.Value = 100 - numericUpDownAddPercentage.Value - numericUpDownMinusPercentage.Value - numericUpDownMultiplyPercentage.Value;
            }
            int exVolumeAll      = decimal.ToInt32(numericUpDownExVolume.Value);
            int exVolumeAdd      = decimal.ToInt32(numericUpDownAddPercentage.Value * exVolumeAll / 100);
            int exVolumeMinus    = decimal.ToInt32(numericUpDownMinusPercentage.Value * exVolumeAll / 100);
            int exVolumeMultiply = decimal.ToInt32(numericUpDownMultiplyPercentage.Value * exVolumeAll / 100);
            // 这个考虑用总数减去前三个数,避免整除导致最后四个题量加起来不是总题量
            int exVolumeDivide = decimal.ToInt32(numericUpDownDividePercentage.Value * exVolumeAll / 100);
            //int exVolumeDivide = decimal.ToInt32(exVolumeAll - exVolumeAdd - exVolumeMinus - exVolumeMultiply);
            int exVolumeDiff = exVolumeAll - exVolumeAdd - exVolumeMinus - exVolumeMultiply - exVolumeDivide;

            if (exVolumeDiff > 0)
            {
                if (exVolumeAdd > 0)
                {
                    exVolumeAdd = exVolumeAdd + exVolumeDiff;
                }
                else if (exVolumeMinus > 0)
                {
                    exVolumeMinus = exVolumeMinus + exVolumeDiff;
                }
                else if (exVolumeMultiply > 0)
                {
                    exVolumeMultiply = exVolumeMultiply + exVolumeDiff;
                }
                else
                {
                    exVolumeDivide = exVolumeDivide + exVolumeDiff;
                }
            }
            double fillInBlankPercentage = decimal.ToInt64(numericUpDownFillInBlankPercentage.Value) / 100.0;

            ArithmeticExerciseFactory exFactory = new ArithmeticExerciseFactory();
            ArrayList exerciseList = new ArrayList();

            exerciseList.AddRange(exFactory.ProduceAddEx(exVolumeAdd, maxFactor, fillInBlankPercentage));
            exerciseList.AddRange(exFactory.ProduceMinusEx(exVolumeMinus, maxFactor, fillInBlankPercentage));
            exerciseList.AddRange(exFactory.ProduceMultiplyEx(exVolumeMultiply, maxFactor, fillInBlankPercentage));
            exerciseList.AddRange(exFactory.ProduceDivideEx(exVolumeDivide, maxFactor, fillInBlankPercentage));
            // 打乱题目顺序
            string[] exerciseArray = (string[])exerciseList.ToArray(typeof(string));
            Random   random        = new Random();

            for (int i = 0; i < exerciseArray.Length; i++)
            {
                int    r   = random.Next(0, exerciseArray.Length);
                string tmp = exerciseArray[i];
                exerciseArray[i] = exerciseArray[r];
                exerciseArray[r] = tmp;

                Console.WriteLine("length: " + exerciseArray[i].Length);
            }

            new ResultForm(exerciseArray).ShowDialog(); //, exVolumeAdd, exVolumeMinus, exVolumeMultiply, exVolumeDivide).ShowDialog();

            //Console.WriteLine(DateTime.Now + " @ done with " + exerciseArray.Length + " questions.");
            //return;
        }