If Trim(wordName) = "" Then
MsgBox "请在列表中选择一个单词:" & Err.Description
Else
EditWordForm.Show vbModal
End If
End Sub
单击生词本的“添加”按钮,将出现如图5所示的窗体。
图5 添加生词的窗体图示
添加单词用到的窗体和控件的说明如表2所示。
表2 添加单词的窗体和控件说明表
控件类型 |
名称 |
说明 |
Form |
AddWordForm |
添加单词的窗体 |
Label |
NameLabel |
显示 “名字” |
Label |
GrammerLabel |
显示 “词性” |
Label |
MeanLabel |
显示 “意思” |
Label |
ExampleLable |
显示 “例句” |
TextBox |
NameText |
接收用户输入的单词名字 |
TextBox |
GrammarText |
接收用户输入的单词词性 |
TextBox |
MeanText |
接收用户输入的单词意思 |
TextBox |
ExampleText |
接收用户输入的单词例句 |
CommandButton |
OkButton
(确定) |
单击时,响应 OkButton_Click()函数,添加新单词和基本信息到数据库 |
CommandButton |
CancelButton(取消) |
单击时,响应 PassButoon_Click()函数,取消本次的单词添加 |
添加单词实现的核心代码如下:
Private Sub OkButton_Click() '添加单词
'判断输入的单词信息是否为空
If Trim(NameText.Text) = "" Or Trim(GrammarText.Text) = "" Or Trim(MeanText.Text) = "" _Or Trim(ExampleText.Text) = "" Then
MsgBox "录入信息不能为空!", vbOKOnly '为空时显示提示信息
Else
sql = "select * from word where name ='" & NameText.Text & "'"
Set rs = TransactSQL(sql)
'如果输入的单词存在时
If rs.EOF = False Then
MsgBox "改编号的记录已存在,请核对!", vbOKOnly
rs.Close
Else
'输入的单词不存在时,添加新纪录到数据库里
sql = "select * from word"
Set rs = TransactSQL(sql)
'添加新纪录
rs.AddNew
rs.Fields(0) = Trim(NameText.Text)
rs.Fields(1) = Trim(GrammarText.Text)
rs.Fields(2) = Trim(MeanText.Text)
rs.Fields(3) = Trim(ExampleText.Text)
rs.Fields(4) = 0
rs.Fields(5) = Date
rs.Update
rs.Close
MsgBox "单词添加成功!", vbOKOnly
Unload Me
Call WordsBook.WordsList_update '刷新单词本(WordList)
End If
End If
End Sub
删除单词的核心代码如下:
Private Sub DelButton_Click() '删除单词的响应函数
'判断用户是否选择了要删除的单词
If Trim(wordName) = "" Then’如果没选择删除的单词,显示提示信息
MsgBox "请在列表中选择一个单词:"
Else
sql = "delete from word where name = '" & wordName & " '"
’否则删除单词,并更新数据库和单词本的显示内容
If MsgBox("真的要删除这条记录吗?", vbOKCancel + vbExclamation, "提示!") = vbOK Then
TransactSQL (sql)
MsgBox "记录已经删除!", vbOKOnly + vbExclamation, "警告!"
Call WordsList_update '更新单词本(WordsList)
wordName = ""
End If
End If
End Sub
实现修改单词信息功能模块和添加单词的实现差别不大,主要是把NameText控件的Enabled的属性值改为False,即不可修改的,代码和相关图示在这里就省略了。
(3)测试功能的实现
测试功能中筛选的单词是根据数据库中按单词的上次记忆的日期(date)和熟悉程度(state)两级排序来选取前面5个或少于5个(如果数据库中的单词项少于5个)单词。进入测试模式后,系统会根据你回答的正误,来更新数据库中单词的记忆日期和熟悉程度,同时显示相应的提示信息,强化记忆的效果。用户在输入单词时,不区分大小写,并且可以按回车确认提交答案,使用户操作更方便。测试功能如图6所示。
图6 测试模式的对话框图示
当拼写正确时,熟悉度值增加,否则减少,并更新日期为当天的日期。同时根据用户的单词拼写和操作,系统会显示相应地提示信息,代码实现如下:
Dim i As Integer '标记测试单词的个数
Private Sub Form_Load()
sql = "select * from word order by date,state"
Set rs = TransactSQL(sql)
i = 0
If Not rs.EOF Then '判断达记录是否为空
'显示单词的词性和意思
MeanLabel.Caption = rs.Fields(1) & " " & rs.Fields(2)
Else
Unload Me '退出测试
End If
End Sub
Private Sub OkButton_Click() '确定按钮响应函数
'判断输入是否正确,不区分大小写
If UCase(AnsText.Text) = UCase(rs.Fields(0)) Then
TestMessage.MessageLabel.Caption = "哇塞,这样的单词你都记住了! 不错!"
TestMessage.Show vbModal '显示提示信息
'答对时,增加数据库单词的state的值
rs.Fields(4) = rs.Fields(4) + 1
Else
'答错时,减少数据库单词的state的值
rs.Fields(4) = rs.Fields(4) - 1
TestMessage.MessageLabel.Caption = "我怎么又错了?" & vbCrLf & "哦,正确答案是:" & rs.Fields(0)
TestMessage.ExampleLabel.Caption = "例句:" & rs.Fields(3)
TestMessage.Show vbModal '显示提示信息
End If
rs.Fields(5) = Date '更新数据库单词的日期
rs.MoveNext
'判断是否到达记录的尾部和测试的单词数i是否少于5个
If Not rs.EOF And i < 5 Then
'显示单词的词性和意思
MeanLabel.Caption = rs.Fields(1) & " " & rs.Fields(2)
Else
Unload Me '退出测试
End If
AnsText.Text = ""
i = i + 1
End Sub
Private Sub PassButoon_Click() '跳过按钮的响应函数
rs.Fields(4) = rs.Fields(4) - 1 '跳过时,减少数据库单词的state的值
TestMessage.MessageLabel.Caption = "别轻易放弃!Come on!" & vbCrLf & "正确答案是:" & rs.Fields(0)
TestMessage.ExampleLabel.Caption = "例句:" & rs.Fields(3)
TestMessage.Show vbModal '显示提示信息
rs.Fields(5) = Date '更新数据库单词的日期
rs.MoveNext
'判断是否到达记录的尾部和测试的单词数i是否少于5个
If Not rs.EOF And i < 5 Then
'显示单词的词性和意思
MeanLabel.Caption = rs.Fields(1) & " " & rs.Fields(2)
Else
Unload Me '退出测试
End If
AnsText.Text = ""
i = i + 1
End Sub
Private Sub AnsText_KeyPress(KeyAscii As Integer) '按回车时的响应函数
If KeyAscii = vbKeyReturn Then
Call OkButton_Click '调用OkButton响应函数
End If
End Sub
根据你拼写单词的正误,相应提示信息的效果如图7、图8和图9所示。
图7 拼写单词错误的提示信息
图8 拼写单词正确的提示信息
图9 跳过拼写单词的提示信息
(4)设置桌面背景功能的实现
本系统每次运行时,首先询问你是否要进入挑战模式,即测试模式,退出测试模式后,接着调用设置桌面背景函数SetBackColor,系统就会自动选取数据库中那个你最不熟悉和记忆日期最早的单词,然后把那个单词转换成单词图片(word.bmp),最后设置桌面背景为单词图片,中间过程是先用字符串变量str储存单词信息,然后将其转换为图片储存在指定的目录下。下面代码中的WordPicutre为PicutreBox控件。设置背景需要调用win API的SystemParametersInfo API函数,读者可以参考相关文献。核心代码如下:
'设置桌面背景时,用到的常量和win API函数
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
'设置桌面背景图片函数
Private Sub SetBackColor()
’记录按单词的记忆日期和熟悉程度来选择
sql = "select * from word order by date,state"
Set rs = TransactSQL(sql)
'判断数据库的记录是否为空
If Not rs.EOF Then
’str是String类型,用来存储数据库中单词的信息
str = rs.Fields(0) & vbCrLf & vbCrLf & rs.Fields(1) & vbCrLf & vbCrLf & rs.Fields(2) & vbCrLf & vbCrLf & rs.Fields(3)
’WordPicutre为PicutreBox控件
WordPicture.AutoRedraw = True
WordPicture.Cls
'把单词的内容显示到WordPicture上
WordPicture.Print str
WordPicture.Refresh
'保存单词图片到c:\word.bmp
SavePicture WordPicture.Image, "c:\word.bmp"
'调用系统API函数,把单词图片设置为桌面背景
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\word.bmp", SPIF_UPDATEINIFILE)
End If
End Sub
三、运行效果
本系统在Windows XP、Visual Basic 6.0和Access 2000的环境下运行成功。
运行本系统之前,首先要对桌面进行设置,背景图案的位置设为居中,而颜色设为黑色,这样效果会更好,如图10所示。
图10 桌面设置的图示
运行本系统时,首先它会弹出一个对话框询问你要不要测试一下哪些你不熟悉的单词,关闭或测试完毕后就会进入主界面,如图11所示。
图11 系统运行后主界面的图示
之后系统会根据数据库更改你的桌面背景,关闭本系统后,桌面效果如图12所示。
图12 系统运行后桌面改变的图示
四、结语
开发系统需要对数据库开发和软件工程理论有了更进一步的理解,特别是认识到前期的需求分析很重要,而在开发过程中遇到的技术问题可以通过参阅相关书籍来解决。由于笔者水平有限和时间的限制,难免有错漏之处,敬请读者指正。
|