一、前言
平时我们使用电脑都离不开桌面,而本系统就是把一些你不容易记住单词显示到电脑桌面上,每当在开机等待的那段漫长时间或进行桌面切换操作时,就会有意识或无意识地浏览到这些单词,哪怕只是短短的一两秒钟甚至更短,次数多了自然而然地就把单词记住了。大家知道,学习英语的一大障碍就是单词记不住,或者是当时记住了过一段时间又忘了。这时系统就需要一个能有唤醒记忆的功能,而本系统能根据用户的单词库来分析你对这些单词的上次记忆的时间和熟悉程度,然后有选择地进行测试。因为不同的用户对识记的单词不一样,所以不宜采用把大量的单词事先录入系统的数据库,而是把你想记忆的单词及其相关信息(可以结合金山词霸之类的词典工具)输入到系统中的生词本数据库,系统再根据用户的学习情况安排来学习。本系统最大的特点是每次运行时,会自动把用户最早记忆和最不熟悉的单词及其意思和例句显示到用户桌面的显眼位置,方便用户在空闲时间或开机等候时间进行记忆。学习英语不是一朝一夕的事情,要抓住点点滴滴的空闲时间,通过长期的努力才能有效果。
二、开发过程
1.概要设计
(1)系统功能分析
1)单词的添加、删除和修改。
2)根据数据库中单词的上次记忆日期和熟悉程度自动生成测试。
3)根据数据库把用户最早记忆和最不熟悉的单词及其相关信息显示到桌面。
(2)功能结构如图1所示。
2.数据库设计
针对一般学生对单词记忆的需求和通过对单词本的数据流程分析,本系统采用Access来开发它的数据库,并且方便用户管理。数据结构设计比较简单,如下面所示:
Name : 单词名称
Grammar : 词性
Meaning : 意思
Example : 例句
State : 记忆的熟悉程度(数值越小,熟悉程度越差)
Date : 上次记忆的时间
单词库的E-R图如图2所示。
图2 单词库的E-R图
相应在Access中建立的单词库(word.mdb),单词表(word)的结构如图3所示。
图3 Access中单词表的结构图
3.详细设计
有关数据库的所有后台工作已经完成。现在通过对桌面式背单词系统中各个功能模块的实现来讲解如何使用Visual Basic编写本系统的应用程序。
(1)公共模块的实现
在Visual Basic中可以用公用模块来存放整个工程项目公用的函数和全局变量,这样可以极大地提高编写代码的效率。由于系统中各个功能模块都将频繁使用数据库中的记录,因此需要一个公共的操作函数,用于执行各种SQL语句,其中也包括数据库的连接。添加函数TransactSQL,实现的方法有很多种。实现的核心代码如下:
'执行SQL语句的函数
Public Function TransactSQL(ByVal sql As String) As ADODB.Recordset
Dim cont As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strConnection As String
Dim strArray() As String
Set cont = New ADODB.Connection '创建连接
Set rs = New ADODB.Recordset
On Error GoTo transactsql_error
strConnection = "Provider = Microsoft.jet.oledb.4.0; data source=" & App.Path & "\word.mdb;"
strConnection = strConnection & "Persist Security Info=False;Jet OLEDB:Database Password=''"
strArray = Split(sql)
cont.Open strConnection '打开连接
If StrComp(UCase$(strArray(0)), "select", vbTextCompare) = 0 Then
rs.Open Trim$(sql), cont, adOpenKeyset, adLockOptimistic
Set TransactSQL = rs
Else
cont.Execute sql
End If
transactsql_exit:
Set rs = Nothing
Set cont = Nothing
Exit Function
transactsql_error:
MsgBox "查询错误:" & Err.Description
Resume transactsql_exit
End Function
同样,因为频繁使用数据库的记录集和执行的SQL语句,所以分别声明这两个类型变量为公共成员变量,方便后面各功能的函数使用,如下所示:
Public rs As New ADODB.Recordset '获取数据库记录集的变量
Public sql As String ' 执行的SQL语句的字符串变量
(2)生词本功能的实现
生词本的基本功能是添加、删除和修改单词,因为都是在设计数据库时常用的基本操作,在很多VB数据库的书籍也有这方面的介绍和详细实现,由于篇幅的限制这里就不详细给出,只有相关图表、代码片段和文字说明,希望读者谅解。
创建生词本的窗体,如图4所示的窗体。
图4生词本的窗体的图示
生词本用到的窗体和控件的详细说明如表1所示。
表1 生词本窗体和控件的说明表
控件类型 |
名称 |
说明 |
Form |
WordsBook |
单词本的窗体 |
CommandButton |
AddButton
(添加) |
单击时,响应 AddButton_Click()函数 |
CommandButton |
DelButton(删除) |
单击时,响应 DelButoon_Click()函数 |
CommandButton |
EditButton(修改) |
单击时,响应 EditButoon_Click()函数 |
MSFlexGrid |
WordsList |
显示数据库中单词相关信息 |
生词本实现的核心代码如下:
Public wordName As String '存储单词名称的临时变量
Public Function WordsList_update() '对单词表(WordsList)的内容更新
sql = "select * from word order by date,state"
Set rs = TransactSQL(sql)
’更新WordsList里的内容
sql = "select * from word order by date,state"
Set rs = TransactSQL(sql)
With WordsList
.Rows = 1
While Not rs.EOF
.Rows = .Rows + 1
.TextMatrix(.Rows - 1, 0) = rs(0)
.TextMatrix(.Rows - 1, 1) = rs(1)
.TextMatrix(.Rows - 1, 2) = rs(2)
rs.MoveNext
Wend
End With
rs.Close
End Function
Private Sub Form_Load() '窗体的导入函数,显示基本功能和单词本的基本信息
’初始化单词本(WordsList)的内容
wordName = ""
With WordsList
.TextMatrix(0, 0) = "名称"
.TextMatrix(0, 1) = "词性"
.TextMatrix(0, 2) = "意思"
.ColWidth(0) = 2200
.ColWidth(1) = 1000
.ColWidth(2) = 4450
End With
Call WordsList_update '显示单词本(WordsList)
End Sub
Private Sub WordsList_Click() '鼠标单击WordsList控件的响应函数
’选择单词表(WordsList)中的单词
Dim i As Integer '标记选择WordsList的第几条记录
i = WordsList.Row '获得选定的行号
'把点击单词的名称赋值给wordName
wordName = WordsList.TextMatrix(i, 0)
End Sub
Private Sub AddButton_Click() '添加单词的响应函数
AddWordForm.Show vbModal
End Sub
Private Sub EditButton_Click() '修改单词的响应函数
'判断用户是否选择了要修改的单词
|