摘要:我们平时常花一大段时间来记单词,如果不坚持很快就忘记了,而且我们也不经常有一大段时间来记单词,只好利用一些零碎时间来记单词,而现在我们又经常使用电脑,使用电脑都离不开桌面,因此我们设计了这个桌面式背单词系统。本系统最大的特点是每次运行本系统时,会自动把用户最早记忆和最不熟悉的单词及其意思和例句显示到用户桌面的显眼位置,方便用户在各种空闲时间或开机等候时间进行学习,这是与其他记单词系统不同之处,它更具有个性化。
关键词:背单词 桌面背景 数据库VB Access
一、前言
你认为用什么办法去记单词才会收到良好的效果呢?也许你有自己的一套方法。不知道你有没有这样的经验,把一些容易忘记事情写到纸条上,让后贴到显眼的地方,这样能在有意识或无意识的情况下把事情记住。那现在我们的这个小系统的构思也就来源于这个小经验。平时我们使用电脑都离不开桌面,而我们系统就是把一些你不容易记住单词提到你的电脑桌面上,每当在你开机等候的那段漫长时间或你进行桌面切换操作时,你就会有意或无意地浏览这些单词,哪怕只是短短的一两秒钟甚至更短,次数多了自然而然地就把单词记住了。大家知道,学习英语的一大障碍就是单词记不住,或者是当时记住了过一段时间又忘了。这就需要一个系统能有唤醒记忆的功能,而本系统能根据用户对某个单词的上次记忆的时间和熟悉程度来选择性地进行测试。由于不同用户对识记的单词不一样,所以不宜采用把大量的词汇事先录入系统的数据库,而是把你想记忆的单词及其相关信息(可以结合金山词霸之类的工具)输入到系统中的生词本数据库,系统再根据用户的学习情况安排来学习。本系统最大的特点是每次运行本系统时,会自动把用户最早记忆和最不熟悉的单词及其意思和例句显示到用户桌面的显眼位置,方便用户在各种空闲时间或开机等候时间进行学习。学习英语不是一朝一夕的事情,是要通过长期的努力才能有效果的,要抓住点点滴滴的时间去学习。
二、开发过程
1.概要设计
(1) 系统功能分析
1)单词的添加、删除和修改
2)根据数据库中单词的熟悉程度和上次记忆日期自动生成测试
3)根据数据库把用户最早记忆和最不熟悉的单词及其相关信息提到桌面
(2) 功能结构图如下所示:

图2.1 系统的功能结构图示
2.数据库设计
针对一般学生对单词记忆的需求,通过对单词本的内容和数据流程分析,采用ACCESS来开发数据库,方便用户管理。数据结构设计比较简单,如下面所示:
单词库:Name, Grammar, Meaning ,Example, State, Date
解释:
Name : 单词名称
Grammar : 词性
Meaning : 意思
Example : 例句
State : 记忆的熟悉程度(数值越小,熟悉程度越差)
Date : 上次记忆的时间
单词库的E-R图如下所示:

图2.2 单词库的E-R图
相应在ACCESS中建立的单词库(word.mdb),单词表(word)的结构如下所示:

图2.3 ACCESS中单词表的结构图
3.详细设计
有关数据库的所有后台工作已经完成。现在通过桌面式背单词中各个功能模块的实现,讲解如何使用Visual
Basic来编写数据库系统的客户端程序。
(1) 公共模块的实现
在Visual
Basic中可以用公用模块来存放整个工程项目公用的函数、过程和全局变量等。这样可以极大地提高代码的效率。由于系统中各个功能模块都将频繁使用数据库中的各种数据,因此需要一个公共的数据操作函数,用于执行各种SQL语句,其中也包括数据库的连接。添加函数TransactSQL,其代码省略,因为有很多这方面的参考书籍,读者可以参看周国民写《Visual
BASIC+Access数据库项目开发实践》。函数接口如下:
'执行sql语句的函数
Public Function TransactSQL(ByVal sql As String) As
ADODB.Recordset
同样,因为频繁使用数据库记录集和SQL语句,所以分别声明这两个类型变量为公共成员变量,方便后面的函数使用,如下所示:
Public rs As New ADODB.Recordset '获取数据库记录集的变量
Public sql As String ' 执行的SQL语句的字符串变量
(2) 生词本功能的实现
生词本的基本功能是添加、删除和修改单词,因为这些都是数据库的基本操作,很多VB数据库的书籍都有这方面的详细介绍和实现,由于篇幅的限制这里就不详细给出,后面的代码中有很多处都用了“*”取代或直接省略了,只有图表、代码片段和文字说明,希望读者谅解。
创建生词本的窗体,如图2.4所示的窗体。

图2.4生词本的窗体的图示
生词本用到的窗体和控件的详细说明如表2.1所示。
|
控件类型 |
名称 |
说明 |
|
Form |
WordsBook |
单词本的窗体 |
|
CommandButton |
AddButton
(添加) |
单击时,响应
AddButton_Click()函数 |
|
CommandButton |
DelButton(删除) |
单击时,响应
DelButoon_Click()函数 |
|
CommandButton |
EditButton(修改) |
单击时,响应
EditButoon_Click()函数 |
|
MSFlexGrid |
WordsList |
显示数据库中单词相关信息 |
表2.1 生词本窗体和控件的说明表
生词本的代码片段如下:
Public wordName As String '存储单词名称的临时变量
Public Function WordsList_update() '对单词表(WordsListGrid)的内容更新
sql = "select * from word order by date,state"
Set rs = TransactSQL(sql)
’更新WordsList里的内容
******
End Function
Private Sub Form_Load() '窗体的导入函数,显示基本功能和单词本的基本信息
’初始化单词本(WordsList)的内容
******
Call WordsList_update '显示单词本(WordsList)
End Sub
Private Sub WordsList_Click() '鼠标单击WordsListGrid控件的响应函数
’选择单词表(WordsList)中的单词
******
End Sub
Private Sub AddButton_Click() '添加单词的响应函数
AddWordForm.Show vbModal
End Sub
Private Sub EditButton_Click() '修改单词的响应函数
'判断用户是否选择了要修改的单词
’如果没有选择,就显示提示信息
******
’如果选择了,就显示修改单词窗体
******
End Sub
单击生词本的“添加”按钮,将出现如图2.5所示的窗体。

图2.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()函数,取消本次的单词添加 |
表2.2 添加单词的窗体和控件说明表
添加的单词代码片段如下:
Private Sub OkButton_Click() '添加单词
'判断输入的单词信息是否为空
’如果为空,显示提示信息
******
'如果输入的单词存在时,返回单词本
If rs.EOF = False Then
******
Else
'输入的单词不存在时,添加新纪录到数据库里
sql = "select * from word"
Set rs = TransactSQL(sql)
rs.AddNew '添加新纪录
*******
Call WordsBook.WordsList_update '刷新单词本(WordList)
End Sub
删除单词的代码片段如下:
Private Sub DelButton_Click() '删除单词的响应函数
'判断用户是否选择了要删除的单词
’如果为空,显示提示信息
******
’如果是,则删除单词,并更新数据库和单词本的显示内容
sql = "delete from word where name = '" & wordName & " '"
******
TransactSQL (sql)
******
Call WordsList_update '更新单词本(WordsList)
******
End Sub
实现修改单词信息功能模块和添加单词的实现差别不大,主要是把NameText控件的Enabled的属性值改为False,既不可修改的,代码和相关图示在这里就省略了。
(3) 测试功能的实现
测试筛选的单词是根据数据库中按单词的上次记忆的日期(date)和熟悉程度(state)两级排序来选取前面5个或少于5个(如果数据库中的单词项少于5个)单词,代码如下:
sql = "select * from word order by date,state"
******
进入测试模式后,系统会根据你回答的正误,来更新数据库中单词的记忆日期(date)和熟悉程度(state),同时根据拼写的对错显示相应的提示信息。用户在输入的单词时,不区分大小写,并且可以按回车确认提交答案,使用户操作方便些。测试功能的图示如下:

图2.6 测试模式的对话框图示
拼写单词不区分大小写的代码片段如下:
If UCase(AnsText.Text) = UCase(rs.Fields(0)) Then '判断输入是否正确,不区
分大小写
******
当拼写正确时,熟悉度值增加,否则减少,并更新日期。
根据用户的单词拼写和操作,会相应地显示提示信息,代码省略,具体效果如图2.7、2.8、2.9所示:

图2.7 拼写单词错误的提示信息

图2.8 拼写单词正确的提示信息

图2.9 跳过拼写单词的提示信息
(4) 设置桌面背景功能的实现
程序运行时,首先询问你是否要进入挑战模式,即测试模式,退出测试模式后,接着调用设置桌面背景函数SetBackColor,系统就会自选取数据库中那个你最不熟悉和记忆日期最早的那个单词,然后转换成单词图片(word.bmp),最后设置桌面背景为单词图片,其中储存单词信息的字符串变量str转换为图片,WordPicutre为PicutreBox控件。设置背景需要调用win
API的SystemParametersInfo API函数,读者可以参考相关文献,代码片段如下:
'设置桌面背景时,调用的常量和win API函数
******
Private Sub SetBackColor() '设置桌面背景图片函数
’单词的选择
sql = "select * from word order by date,state"
Set rs = TransactSQL(sql)
If Not rs.EOF Then '判断数据库的记录是否为空
str = rs.Fields(0) & vbCrLf & vbCrLf & rs.Fields(1) & vbCrLf &
vbCrLf & rs.Fields(2) & vbCrLf & vbCrLf & rs.Fields(3)
’str是String类型,用来存储单词的信息
WordPicture.AutoRedraw = True
WordPicture.Cls
WordPicture.Print str '把单词的内容显示到WordPicture上
WordPicture.Refresh
SavePicture WordPicture.Image, "c:\word.bmp" '保存单词图片
'把单词图片设置为桌面背景
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\word.bmp",
SPIF_UPDATEINIFILE)
End If
End Sub
三、运行
本系统已经在Windows XP、Visual Basic 6.0和Access 2000的环境下调试成功。
运行本系统之前,首先要对桌面进行设置,位置设为居中,颜色设为黑色,这样效果会比较好,如下图3.1所示:

图3.1 桌面设置的图示
接着启动本系统,首先会弹出对话框询问你要不要测试一下那些你不熟悉的单词,关闭后就进入主界面,如图3.2所示:

图3.2 系统运行后主界面的图示
之后系统会根据数据库更改你的桌面背景,关闭本系统后,如图3.3所示:

图3.3 系统运行后桌面改变的图示
四、小结
通过开发本系统,对数据库开发和软件工程理论等有了更进一步的理解,特别是认识到前期的需求分析很重要,开发过程中遇到的技术问题可以通过参阅相关书籍来解决。由于水平和时间的限制,难免有错漏之处,敬请读者指正。
参考文献:
1 《 Visual Basic 6.0程序设计》,谭浩强,中国铁道出版社,2003
2 《Visual Basic编程精选集锦》,《电脑编程技巧与维护》杂志社主编,科学出版社,2003
3 《Visual Basic 6.0 Win32 API程序设计》,刘炳文、 李凤华, 清华大学出版社, 2001
4 《Visual BASIC+Access数据库项目开发实践》,周国民,中国铁道出版社, 2005
(电脑编程技巧与维护杂志社版权所有。未经许可不得转载。)
|