背景
孩子天天上网看动画片,都幼儿园大班了还不会100以内的加减法,因为我平时还需要忙着工作不能天天陪着孩子。
这次我们整个活,让孩子每天心甘情愿的做100道题。而且电脑还要给孩子一些提醒,即使做错了也会不厌其烦的给孩子提示计算的方法,每做对一道题还会鼓励孩子坚持学习。
无论是做对还是做错了题,都要存到C盘根目录里,这样等下班回来了还可以针对孩子做错的题分析和加强训练。
做一个让孩子输入数学运算的成绩
为了能够实现让孩子在算完数学题之前不能用电脑,我们要拿出祖传的VB.Net语言
主窗体把TopMost勾上,界面就会永远覆盖在其他界面之上,孩子就没办法擅自打开网页和游戏了
外观FormBorderStyle选择None,这样界面就不会显示最大化、最小化、关闭按钮了
屏幕初始位置设置为CenterScreen(居中),窗口状态设置为Maximized(最大化),这样就能实现全屏效果
把控件都拖拽到界面上,属性栏里可以设置一下界面背景、文字颜色、文字大小
为了能用系统自带的文字转语音功能,让程序能和孩子互动说话,还需要加上System.Speech引用
然后重点来了,我们双击窗体任意空白位置,开始写代码
Imports System.Speech.Synthesis
Public Class Form1
' 第一个数
Dim a As Integer = 0
' 第二个数
Dim b As Integer = 0
' 符号
Dim c As Integer = 0
' 正确得数
Dim d As Integer = 0
' 得分
Dim score As Integer = 0
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
出题()
End Sub
Private Sub 出题()
Start:
Dim rand As New Random()
a = rand.Next(100)
b = rand.Next(100)
c = rand.Next(2)
If c = 0 Then
If a + b > 100 Then
GoTo Start
End If
d = a + b
Label1.Text = a & "+" & b & "="
ElseIf c = 1 Then
If a - b < 0 Then
GoTo Start
End If
d = a - b
Label1.Text = a & "-" & b & "="
End If
Dim thread As New Threading.Thread(AddressOf say)
thread.Start()
Label2.Text = "得分:" & score
End Sub
Private Sub say()
SpeakText(Label1.Text.Replace("-", "减").Replace("+", "加").Replace("=", "等于多少"))
End Sub
Private Sub yes()
Dim a = New Random().Next(10)
Dim text = ""
Select Case a
Case 0
text = "对啦!你好聪明!"
Case 1
text = "哇,天才!"
Case 2
text = "太棒了!"
Case 3
text = "未来的科学家!"
Case 4
text = "数学不错!"
Case 5
text = "好极了!"
Case 6
text = "你真优秀!"
Case 7
text = "答对啦!"
Case 8
text = "不错哦!"
Case 9
text = "继续保持,加油!"
End Select
SpeakText(text)
End Sub
Private Sub no()
Dim text = "再想想"
Dim 算式 = Label1.Text.Replace("=", "")
If 算式.Contains("+") Then
Dim 数字 As String() = 算式.Split("+")
Dim 数字1 As Integer = 数字(0)
Dim 数字2 As Integer = 数字(1)
If HasCarry(数字1, 数字2) Then
text &= ",这是个加法进位题,个位凑十之后剩下的就是新的个位,而且不要忘了进位"
Else
text &= ",这道题对你来说不难"
End If
ElseIf 算式.Contains("-") Then
Dim 数字 As String() = 算式.Split("-")
Dim 数字1 As Integer = 数字(0)
Dim 数字2 As Integer = 数字(1)
If NeedsBorrow(数字1, 数字2) Then
text &= ",这个是减法退位题,不够减我们要借一个十,最后不要忘了十位上要退位"
Else
text &= ",这道题对你来说不难"
End If
End If
SpeakText(text)
End Sub
Public Function NeedsBorrow(a As Integer, b As Integer) As Boolean
If a Mod 10 < b Mod 10 Then
Return True
Else
Return False
End If
End Function
Public Function HasCarry(a As Integer, b As Integer) As Boolean
If a Mod 10 + b Mod 10 > 9 Then
Return True
Else
Return False
End If
End Function
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
End Sub
Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.Enter Then
If TextBox1.Text = d.ToString Then
IO.File.AppendAllLines("C:\答对题目.txt", New String() {Label1.Text & TextBox1.Text})
score += 1
If score >= 100 Then
SpeakText("宝贝,恭喜你全部答对了,你真聪明!现在可以看动画片了,拜拜!")
End
End If
yes()
出题()
Else
Dim thread As New Threading.Thread(AddressOf no)
thread.Start()
IO.File.AppendAllLines("C:\错题本.txt", New String() {Label1.Text & TextBox1.Text})
End If
TextBox1.Text = ""
TextBox1.Focus()
End If
End Sub
Private Sub TextBox1_LostFocus(sender As Object, e As EventArgs) Handles TextBox1.LostFocus
TextBox1.Focus()
End Sub
Public Sub SpeakText(text As String)
Try
Using synth As New SpeechSynthesizer()
synth.SetOutputToDefaultAudioDevice() '设置输出音频设备(默认)
synth.Speak(text) '朗读文本
End Using
Catch ex As Exception
End Try
End Sub
End Class
加上监控手段
配合上向日葵远程桌面观看和萤石云摄像头,就可以随时查看孩子是否在学习了
有的时候孩子跑去玩别的,或者注意力不集中,则可以用系统自带的文本转语音把孩子叫回来(监控对讲也有相同的效果,不过就没有电脑对孩子的神秘感了)
实际使用效果
用了大概一周的时间,孩子已经把100以内的加减法练的非常熟练了,家里的老人和保姆都夸这解决方案是真的让人很省心。现在孩子每天甚至会主动打开电脑把100道题做完,因为着急要用电脑看动画片。达到了想要的效果。