你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
2.3 Visual Basic桌面式背单词系统(下)
 

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储存单词信息,然后将其转换为图片储存在指定的目录下。下面代码中的WordPicutrePicutreBox控件。设置背景需要调用win APISystemParametersInfo 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

’strString类型,用来存储数据库中单词的信息

str = rs.Fields(0) & vbCrLf & vbCrLf & rs.Fields(1) & vbCrLf & vbCrLf & rs.Fields(2) & vbCrLf & vbCrLf & rs.Fields(3)

’WordPicutrePicutreBox控件

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 XPVisual Basic 6.0Access 2000的环境下运行成功。

运行本系统之前,首先要对桌面进行设置,背景图案的位置设为居中,而颜色设为黑色,这样效果会更好,如图10所示。


10 桌面设置的图示

    

运行本系统时,首先它会弹出一个对话框询问你要不要测试一下哪些你不熟悉的单词,关闭或测试完毕后就会进入主界面,如图11所示。


11 系统运行后主界面的图示

 

之后系统会根据数据库更改你的桌面背景,关闭本系统后,桌面效果如图12所示。


12  系统运行后桌面改变的图示

 

四、结语

开发系统需要对数据库开发和软件工程理论有了更进一步的理解,特别是认识到前期的需求分析很重要,而在开发过程中遇到的技术问题可以通过参阅相关书籍来解决。由于笔者水平有限和时间的限制,难免有错漏之处,敬请读者指正。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089