小學一年級加減法生成器

      前段時間,女兒所在的學校要求家長每天都要給孩子出一些加減法的數學題,讓孩子練習。作爲會一點程序設計的我來說,總想偷一些懶,於是製作了以下程序。

     程序窗口,如下所示。

具體源代碼如下:

首先,在表單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.

  

      打印報表,如下所示。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章