小学一年级加减法生成器

      前段时间,女儿所在的学校要求家长每天都要给孩子出一些加减法的数学题,让孩子练习。作为会一点程序设计的我来说,总想偷一些懒,于是制作了以下程序。

     程序窗口,如下所示。

具体源代码如下:

首先,在表单Form1的 init 事件中,    加入以下代码

CLOSE TABLES ALL
THISFORM.spinner1.VALUE
= 0
THISFORM.spinner2.VALUE
= 10
THISFORM.optiongroup1.VALUE
= 1
THISFORM.optiongroup1.INTERACTIVECHANGE
WITH  THISFORM.list1
    .BOUNDCOLUMN
= 1
    .COLUMNWIDTHS
= ' 100'
    .COLUMNCOUNT = 1
    .COLUMNLINES
= .T.
    .ITEMTIPS
= .T.
    .ROWSOURCETYPE
= 6
    .ROWSOURCE
= ""
ENDWITH

 第二,在单选按钮组Optiongroup1的 InteractiveChange 事件中,加入以下代码

THISFORM.list1.ROWSOURCE = ""
IF  USED( " _temp " )
   USE 
IN  _temp
ENDIF
m
= THIS.VALUE
s
= ""
DO   CASE
   
CASE  m = 1
      s
= " 和的最大值 "
   
CASE  m = 2
      s
= " 被减数的最大值 "
   
CASE  m = 3
      s
= " 积的最大值 "
   
CASE  m = 4
      s
= " 被除数的最大值 "
   
CASE  m = 5
      s
= " 以内的加减法 "
   
CASE  m = 6
      s
= " 以内的乘除法 "
   
CASE  m = 7
      s
= " 和的最大值 "
   
CASE  m = 8
      s
= " 被减数的最大值 "
ENDCASE
THISFORM.label2.CAPTION
= s

 第三,“生成试题”命令按钮Command1的 Click 事件中加入以下代码

m1 = THISFORM.optiongroup1.VALUE
m2
= THISFORM.spinner1.VALUE   && 数量
m3
= THISFORM.spinner2.VALUE   && 最大数
m4
= LEN(ALLT(STR(m3)))        && 最大数的位数
m4
= IIF(m3 = 10 , 1 ,m4)

IF USED(
" _temp " )
   USE IN _temp
ENDIF
CREATE CURSOR _temp (nn1 c(
30 ),nn2 c( 30 ),nn3 c( 30 ))
SELE _temp
THISFORM.list1.ROWSOURCE
= " _temp.nn1 "

DO WHILE RECC()
< m2
   k1
= INT(RAND() * m3)
   k2
= INT(RAND() * m3)
   DO CASE
      CASE m1
= 1    &&  两数的加法
         IF k1
>= 0  AND k2 >= 0  AND k1 + k2 <= m3
            s
= STR(k1,m4) + " " + STR(k2,m4)
            APPE BLAN
            REPL nn1 WITH s
         ENDIF
      CASE m1
= 2    &&  两数的减法
         IF k1
>= 0  AND k2 >= 0  AND k1 - k2 <= m3 AND k1 - k2 >= 0
            s
= STR(k1,m4) + " " + STR(k2,m4)
            APPE BLAN
            REPL nn1 WITH s
         ENDIF
      CASE m1
= 3    &&  两数的乘法
         IF k1
> 0  AND k2 >= 0  AND k1 * k2 <= m3
            s
= STR(k1,m4) + " × " + STR(k2,m4)
            APPE BLAN
            REPL nn1 WITH s
         ENDIF
      CASE m1
= 4   &&  两数的除法
         IF k1
> 0  AND k2 > 0  AND INT(k1 / k2) = k1 / k2   && 注意除数不能为0
            s
= STR(k1,m4) + " ÷ " + STR(k2,m4)
            APPE BLAN
            REPL nn1 WITH s
         ENDIF
      CASE m1
= 5    && 加减混合
         k01
= MOD(INT(RAND() * 100 ), 2 )   && 两次运算的符号
         k02
= IIF(k01 = 0 , 1 , 0 )           && 两次运算符号相反
         IF k01
= 0    && 加法
            k41
= k1 + k2
            k3
= INT(RAND() * k41)
            k42
= k41 - k3
            s
= STR(k1,m4) + " " + STR(k2,m4) + " " + STR(k3,m4)
         ELSE
            k41
= k1 - k2
            k3
= INT(RAND() * m3)
            k42
= k41 + k3
            s
= STR(k1,m4) + " " + STR(k2,m4) + " " + STR(k3,m4)
         ENDIF
         IF k1
> 0  AND k2 >= 0  AND k41 >= 0  AND k42 >= 0  AND k41 <= m3 AND k42 <= m3 AND k2 + k3 <> 0
            APPE BLAN
            REPL nn1 WITH s
         ENDIF
      CASE m1
= 6    && 乘除混合
         EXIT
      CASE m1
= 7    && 三数连加
         k3
= INT(RAND() * m3)
         s
= STR(k1,m4) + " " + STR(k2,m4) + " " + STR(k3,m4)
         IF k1
> 0  AND k2 >= 0  AND k3 >= 0  AND k1 + k2 + k3 <= m3 AND k2 + k3 <> 0
            APPE BLAN
            REPL nn1 WITH s
         ENDIF
      CASE m1
= 8    && 三数连减
         k3
= INT(RAND() * m3)
         s
= STR(k1,m4) + " " + STR(k2,m4) + " " + STR(k3,m4)
         IF k1
> 0  AND k2 >= 0  AND k1 - k2 >= 0  AND k1 - k2 - k3 >= 0  AND k2 + k3 <> 0
            APPE BLAN
            REPL nn1 WITH s
         ENDIF
   ENDCASE
ENDDO
SELE _temp
REPLACE ALL nn2 WITH STRTRAN(STRTRAN(STRTRAN(STRTRAN(s,
" " , " + " ), " " , " - " ), " × " , " * " ), " ÷ " , " / " )
REPLACE ALL nn3 WITH RTRIM(nn1)
+ " "
GO TOP
THISFORM.list1.ROWSOURCE
= " _temp.nn1 "
THISFORM.list1.REFRESH

 第四,“打印预览”命令按钮Command2的 Click 事件中加入以下代码 

THISFORM.LOCKSCREEN = .T.
_m_maxbutton
= THISFORM.MAXBUTTON
_m_windowstate
= THISFORM.WINDOWSTATE
_m_caption
= THISFORM.CAPTION
THISFORM.MAXBUTTON
= .T.
THISFORM.WINDOWSTATE
= 2
THISFORM.CAPTION
= '   预览'
REPORT FORM 算数.lbx PREVIEW  WINDOWS form1
THISFORM.MAXBUTTON
= _m_maxbutton
THISFORM.WINDOWSTATE
= _m_windowstate
THISFORM.CAPTION
= _m_caption
THISFORM.LOCKSCREEN
= .F.

  

      打印报表,如下所示。

发布了24 篇原创文章 · 获赞 5 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/cdbqss1/article/details/1899907