师资队伍 | 课程介绍 | 教学大纲 | 实验大纲 | 实训指导 | 网络教学 | 授课录像 | 学生作品 | 课程考核 | 获奖证书 | 参考书 | 申报表

 

Visual Basic课程实训指导书

 

一、课程实训的意义:

1  学会综合运用VB有关的控件、函数和对象的知识。

2  学习各种数据处理控件的使用方法,掌握数据库应用程序的开发技术。

3  学会运用VB进行程序设计的特点和方法。

4  在学会运用VB进行面向对象程序设计步骤和方法的基础上,能够设计其他的实际应用系统,从而达到一定的应用程序设计水平。

二、课程实训的内容:
设计并实现图书馆管理的应用程序。

三、课程实训的要求:
建立一个图书馆管理数据库,包含书目表、读者表和借阅表,设计并实现图书馆管理的应用程序,要求能完成
1
)图书入库和图书查找及图书信息的维护
2
)读者登记和查找
3
)借阅查找,可以查找某读者借阅的全部图书
4
)借书和还书处理。

四、课程实训的步骤:
1
)、分析要解决的问题,明确管理系统的目的和系统应具备的功能,划分功能模块,并画出系统功能模块图。
2
)分析所管理的信息,设计数据库的结构。
3
)根据各程序模块的功能分别画出程序的详细流程图。
4
)分模块编写程序。
5
)程序编写完,分模块调试,各模块调试通过之后,在联起来调试,调试通过之后试运行无错误时,编译生成可执行文件。
6
)写出完整的课程实训报告。

五、课程实训的过程
1
、建立数据库
1
)启动数据管理器
VB集成开发环境中,单击“外接程序”/“可视化数据管理器”,打开数据管理器
VisData
窗口。
2
)新建Jet数据库
①选择“文件”/“新建”
②选择命令“Microsoft Access…..”/”Version 7.0MDB…”
③保存,数据库名为:library.mdb
3)
数据表设计:
书目表Book bookid(馆藏书号、booktype(类别)、ISBN(国际书号)bookname(书名)、publisher(出版社)pubdate(出版日期)author(作者)size(尺寸)price(价格)pages(页数)stocks(库存总量)spare(可借数量)abstract(简介)location(馆藏位置)
读者表readerreaderid(读者编号)readername(读者姓名)allownum(最多可借书数量)borrownum((已借数量)
借阅表 borrowreaderid(读者编号)bookid(馆藏书号)borrowdate(借书日期)
4)
建立表结构
5)
输入数据
2
、按模块编写程序
1
)添加标准模块conn.bas
在标准模块conn.bas中定义全局connection对象变量dbconnection,作为数据库对象的活动连接,供整个工程使用。
2
)主窗体
包括主菜单的制作和窗体加载及卸载过程的编程。
主窗体加载时打开数据库连接,卸载时关闭连接,并释放对象。并释放对象。
加载主窗体
private sub form_load()
dbconnection.ConnectionString = "provider=microsoft.jet.OLEDb.4.0;data source=d:\
案例\library.mdb;persist security info=false"

dbconnection.Open
end sub
卸载主窗体
private sub form_unload(cancel as integer)
dbconnection.close
set dbconnection=nothing
end sub
主菜单的结构:
书目管理:包括新书登记、旧书淘汰和书目查询。

读者管理:包括读者登记和读者删除。

借书管理:包括借书、还书和借阅查询三项功能。
3
)书目管理
①新书登记
界面设计:其中图书类别用组合框表示,可以选择输入。
逻辑设计:
在窗体层定义变量 booksize,表示书的开本尺寸。
界面初始化
Private Sub Form_Load()

Cbobooktype.AddItem "哲学"

Cbobooktype.AddItem "政治"

Cbobooktype.AddItem "军事"

Cbobooktype.AddItem "经济"

Cbobooktype.AddItem "文学"

Cbobooktype.AddItem "历史地理"

Cbobooktype.AddItem "数理化"

Cbobooktype.AddItem "工业技术"

Cbobooktype.AddItem "生物化学"

Cbobooktype.AddItem "其他"

booksize = "16"

End Sub
改变尺寸
Private Sub Optsize_Click(Index As Integer)

booksize=optsize(index).Caption

End Sub
单击“确定”按钮,保存到数据库中。
Private Sub Cmdsave_Click()

Adodc1.RecordSource = "select * from book where bookid='" & Trim(Txtbookid.Text) & "'"

 Adodc1.Refresh

If Adodc1.Recordset.EOF = True And Adodc1.Recordset.BOF = True Then

    Adodc1.Recordset.AddNew

    Adodc1.Recordset("bookid") = Txtbookid

    Adodc1.Recordset("booktype") = Cbobooktype

    Adodc1.Recordset("ISBN") = TxtISBN

    Adodc1.Recordset("bookname") = Txtbookname

    Adodc1.Recordset("publisher") = Txtpublisher

    Adodc1.Recordset("author") = Txtauthor

    Adodc1.Recordset("size") = booksize

    Adodc1.Recordset("price") = CCur(Txtprice)

    Adodc1.Recordset("pages") = CInt(Txtpages)

    Adodc1.Recordset("stocks") = CInt(Txtstocks)

    Adodc1.Recordset("spare") = CInt(Txtstocks)

    Adodc1.Recordset("abstract") = Txtabstract

    Adodc1.Recordset("location") = Txtlocation

    Adodc1.Recordset("pubdate") = CDate(Txtpubdate)

    Adodc1.Recordset.Update

    Adodc1.Recordset.Close

    MsgBox "登记完毕"

    Txtbookid = ""

    TxtISBN = ""

    Txtbookname = ""

    Txtpublisher = ""

    Txtauthor = ""

    Txtprice = ""

    Txtpages = ""

    Txtstocks = ""

    Txtabstract = ""

    Txtpubdate = ""

    Txtlocation = ""

Else

    MsgBox "书号重复!"

    Txtbookid.SetFocus

    Adodc1.Recordset.Close

End If

End Sub
②旧书淘汰
界面设计:

逻辑设计:
窗体加载
Private Sub Form_Load()

Set dbrec.ActiveConnection = dbconnection

End Sub
窗体卸载
Private Sub Form_Unload(Cancel As Integer)

Set dbrec = Nothing

End Sub
输入书号回车后,调用getbookdetail显示该书的详细信息
Private Sub Txtbookid_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 And Trim(Txtbookid) <> "" Then

    Call getbookdetail

End If

End Sub
单击“确定”按钮,修改数据库纪录
Private Sub Cmdsave_Click()

If CInt(Txtstocks) = 0 Then

    dbrec.Delete

    dbrec.Update

Else

    dbrec("spare") = dbrec("spare") + CInt(Txtstocks) - dbrec("stocks")

    dbrec("stocks") = CInt(Txtnewstocks)

    dbrec.Update

    dbrec.MoveLast

End If

MsgBox "已完成!"

Unload Me

End Sub
根据书号取出书籍纪录并显示,可以修改库存数量,如果书号错允许重新输入
Private Sub getbookdetail()

dbrec.Source = "select * from book where bookid= '" & Trim(Txtbookid.Text) & "'"

dbrec.CursorType = adOpenDynamic

dbrec.LockType = adLockOptimistic

dbrec.Open

If dbrec.EOF = True And dbrec.BOF = True Then

    MsgBox "书号不存在!"

    Txtbookid.SelStart = 0

    Txtbookid.SelLength = Len(Txtbookid)

    dbrec.Close

Else

    Cbobooktype.AddItem dbrec.Fields("booktype")

    Txtisbn = dbrec.Fields("isbn")

    Txtbookname = dbrec.Fields("bookname")

    Txtpublisher = dbrec.Fields("publisher")

    Txtauthor = dbrec.Fields("author")

    Select Case dbrec.Fields("size")

        Case "32"

            Optsize(0).Value = True

        Case "16"

            Optsize(1).Value = True

        Case "16"

            Optsize(2).Value = True

    End Select

    Txtprice = dbrec.Fields("price")

    Txtpages = dbrec.Fields("pages")

    Txtstocks = dbrec.Fields("stocks")

    Txtabstract = dbrec.Fields("abstract")

    Txtlocation = dbrec.Fields("location")

    Txtpubdate = dbrec.Fields("pubdate")

    dbrec.Requery

    Txtbookid.Enabled = False

    Txtnewstocks.SetFocus

End If

End Sub
③书目查询:
界面设计:

                          
主要控件的属性设置:

控件

控件名

属性名

属性值

Adodc1

Adodc1

Connectionstring

RecordSource

D:\案例\library.mdb

Select * from book

 

 

visible

false

Datagrid

Datagrid1

Datasource

Adodc1

 

 

逻辑设计:
通过对输入的条件进行“鱼”组合后得到一个完整的查询语句,设置为adodc1recordsource属性,刷新后表格终就会显示查询结果。
Private Sub Cmdsearch_Click()

Dim ssql As String

Dim sqlbookid, sqlbookname, sqlauthor, sqlpublisher

   If Trim(Txtbookname.Text) <> "" Then

        sqlbookname = "(bookname like '%" & Trim(Txtbookname.Text) & "%')  and"

    End If

    If Trim(Txtbookid.Text) <> "" Then

        sqlbookid = "bookid='" & Trim(Txtbookid.Text) & "' and "

    End If

    If Trim(Txtauthor.Text) <> "" Then

        sqlauthor = "(author like '%" & Trim(Txtauthor.Text) & "%') and "

    End If

    If Trim(Txtpublisher.Text) <> "" Then

        sqlpublisher = "(publisher like '%" & Trim(Txtpublisher.Text) & "%') and "

    End If

    ssql = sqlbookid & sqlbookname & sqlauthor & sqlpublisher

    Debug.Print ssql

        ssql = Left(ssql, Len(ssql) - 5)

    If ssql <> "" Then

        ssql = "select * from book where " & ssql

        Debug.Print ssql

    Else

        ssql = "select * from book"

    End If

        Adodc1.RecordSource = ssql

    Adodc1.Refresh

    

End Sub
4
)读者管理
①读者界面设计:

逻辑设计:根据读者编号具有唯一性进行读者登记。
‘单击确定按钮
Private Sub Cmdsave_Click()

Dim dbrec As New ADODB.Recordset

Set dbrec.ActiveConnection = dbconnection

dbrec.Source = "select * from reader where readerid= '" & Trim(Txtreaderid.Text) & "'"

dbrec.CursorType = adOpenDynamic

dbrec.LockType = adLockOptimistic

dbrec.Open

    If dbrec.EOF = True And dbrec.BOF = True Then

        dbrec.AddNew

        dbrec.Fields("readerid") = Txtreaderid

        dbrec.Fields("readername") = Txtreadername

        dbrec.Fields("allownum") = CInt(Txtallownum)

        dbrec.Fields("borrownum") = 0

        dbrec.Update

        dbrec.Close

        Set dbrec = Nothing

        MsgBox "登记完毕"

        Unload Me

    Else

        MsgBox "编号重复,请修改!"

        Txtreaderid.SetFocus

        dbrec.Close

        Set dbrec = Nothing

    End If

End Sub
②读者删除:
界面设计:

逻辑设计:
‘单击确定按钮
Private Sub Command1_Click()

Dim dbrec As New ADODB.Recordset

Set dbrec.ActiveConnection = dbconnection

dbrec.Source = "select * from reader where readerid= '" & Trim(Txtreaderid.Text) & "'"

dbrec.CursorType = adOpenDynamic

dbrec.LockType = adLockOptimistic

dbrec.Open

If dbrec.EOF = True And dbrec.BOF = True Then

    dbrec.Close

    MsgBox "无此读者!"

Else

    If dbrec.Fields("borrownum") = 0 Then

        dbrec.Delete

        dbrec.Update

        MsgBox "已完成!"

    Else

        MsgBox "该读者还有书未还!"

    End If

End If

End Sub
5
)借书管理
①借书
界面设计:


主要控件的属性设置:


控件

控件名

属性名

属性值

Adodc1

Adodc1

Connectionstring

RecordSource
visible

D:\案例\library.mdb

Select * from reader
false

Adodc2

Adodc2

Connectionstring

RecordSource
visible

D:\案例\library.mdb

Select * from book
false

Adodc3

Adodc3

Connectionstring

RecordSource
visible

D:\案例\library.mdb

Select * from borrow
false


逻辑设计:
验证读者编号
Private Sub Txtreaderid_Validate(Cancel As Boolean)

    Adodc1.RecordSource = "select * from reader where readerid='" & Trim(Txtreaderid) & "'"

    Adodc1.Refresh

    If Adodc1.Recordset.EOF = True And Adodc1.Recordset.BOF = True Then

        MsgBox "读者编号输入错误!"

        Cancel = True

    Else

        Txtborrownum = Adodc1.Recordset("borrownum")

        If Adodc1.Recordset("borrownum") = Adodc1.Recordset("allownum") Then

            MsgBox "读者借书数已达限额!"

            Cancel = True

        End If

    End If

   End Sub
‘验证书号
Private Sub Txtbookid_Validate(Cancel As Boolean)

    Adodc2.RecordSource = "select * from book where bookid='" & Trim(Txtbookid) & "'"

    Adodc2.Refresh

    If Adodc2.Recordset.EOF = True And Adodc2.Recordset.BOF = True Then

        MsgBox "书号输入错误!"

        Cancel = True

    ElseIf Adodc2.Recordset("spare") = 0 Then

        MsgBox "该书已全部借出!"                                                                               

        Cancel = True

    End If

End Sub
单击“确定”按钮
Private Sub Cmdsave_Click()

    If Trim(Txtbookid) = "" Then

        Txtbookid.SetFocus

        Exit Sub

    End If

    '修改读者的借书

    Adodc1.Recordset("borrownum") = Adodc1.Recordset("borrownum") + 1

    Adodc1.Recordset.Update

    '修改书籍的可借数

    Adodc2.Recordset("spare") = Adodc2.Recordset("spare") - 1

    Adodc2.Recordset.Update

    '增加借书记录

    Adodc3.RecordSource = "select * from borrow where 1=2"

    Adodc3.Refresh

    Adodc3.Recordset.AddNew

    Adodc3.Recordset("readerid") = Txtreaderid

    Adodc3.Recordset("bookid") = Txtbookid

    Adodc3.Recordset("borrowdate") = Date

    Adodc3.Recordset.Update

    MsgBox "借书操作完成 !"

    Txtreaderid = ""

    Txtbookid = ""

    Txtborrownum = ""

    Txtreaderid.SetFocus

End Sub
②还书
读者还书时提供读者编号,系统检索出所借的书并列表显示,管理员选择列表的一本或多本书执行归还操作。
界面设计:

主要控件的属性设置:


控件

控件名

属性名

属性值

Adodc1

Adodc1

Connectionstring

RecordSource

D:\案例\library.mdb

Select * from reader

Adodc2

Adodc2

Connectionstring

RecordSource

D:\案例\library.mdb

Select * from book

Adodc3

Adodc3

Connectionstring

RecordSource

D:\案例\library.mdb

Select * from borrow

 
逻辑设计:
取出并显示该读者所界的书号和书名
Private Sub Txtreaderid_KeyPress(KeyAscii As Integer)

Dim i As Integer

    If KeyAscii = 13 And Trim(Txtreaderid) <> "" Then

        Adodc3.RecordSource = "select * from borrow where readerid='" & Trim(Txtreaderid) & "'"

        Adodc3.Refresh

        List1.Clear

        If Adodc3.Recordset.EOF = True And Adodc3.Recordset.BOF = True Then

            MsgBox "没有借书记录!"

        Else

            For i = 0 To Adodc3.Recordset.RecordCount - 1

                Adodc2.RecordSource = "select * from book where bookid='" & Adodc3.Recordset("bookid") & "'"

                Adodc2.Refresh

               List1.AddItem Adodc3.Recordset("bookid") & Space(5) & Adodc2.Recordset("bookname")

                Adodc3.Recordset.MoveNext

            Next

        End If

    End If

 End Sub
将列表中选中的书执行归还操作
Private Sub Cmdreturn_Click()

Dim i As Integer

'修改读者表的借书数

    Adodc1.RecordSource = "select * from reader where readerid='" & Trim(Txtreaderid) & "'"

    Adodc1.Refresh

    Adodc1.Recordset("borrownum") = Adodc1.Recordset("borrownum") - List1.SelCount

    Adodc1.Recordset.Update

'循环取出列表中选中的项目进行处理

Adodc3.Recordset.MoveLast

For i = List1.ListCount - 1 To 0 Step -1

    If List1.Selected(i) = True Then

             '修改书目表中的可借数

        Adodc2.RecordSource = " select * from book where bookid='" & Adodc3.Recordset("bookid") & "'"

        Adodc2.Refresh

        Adodc2.Recordset("spare") = Adodc2.Recordset("spare") + 1

        Adodc2.Recordset.Update

            '删除借书记录

        Adodc3.Recordset.Delete

        List1.RemoveItem i

    End If

    Adodc3.Recordset.MovePrevious

Next

End Sub

③借阅查询:
根据书号、借阅日期查询书的去向,也可根据读者编号查询读者借的书。
界面设计:

主要控件的属性设置:


控件

控件名

属性名

属性值

Adodc1

Adodc1

Connectionstring

RecordSource

D:\案例\library.mdb

Select * from book

 

Adodc1

visible

false

Datagrid

Datagrid1

Datasource

Adodc1

 

逻辑设计:
Private Sub Cmdsearch_Click()

Dim ssql As String

Dim sqlbookid As String, sqlreaderid As String, sqldate As String

    If Trim(Txtbookid.Text) <> "" Then

        sqlbookid = "b.bookid='" & Trim(Txtbookid.Text) & "' and "

    End If

    If Trim(Txtreaderid.Text) <> "" Then

        sqlreaderid = "b.readerid='" & Trim(Txtreaderid.Text) & "' and "

    End If

    If Trim(Txtborrowdate.Text) <> "" Then

        sqldate = "b.borrowdate=#" & Trim(Txtborrowdate.Text) & "# and "

    End If

    ssql = sqlbookid & sqlreaderid & sqldate

    If ssql <> "" Then

        ssql = Left(ssql, Len(ssql) - 5)

        ssql = "select *from borrow b,book where book.bookid=b.bookid and " & ssql

    Else

        ssql = "select *from borrow,book where book.bookid=b.bookid"

    End If

    Adodc1.RecordSource = ssql

     Adodc1.Refresh

 End Sub
3
、主菜单的制作与编程
1
)制作主菜单:
打开主窗体,单击“工具”/“菜单编辑器”,打开菜单编辑器,

2
)菜单编程:
Private Sub mnuaddbook_Click()
新书登记

Frmaddbook.Show 1

End Sub

Private Sub mnudelbook_Click()
旧书淘汰

Frmdelbook.Show 1

End Sub

Private Sub mnusearchbook_Click()

书目查询
Frmlookbook.Show 1

End Sub

Private Sub mnureaderadd_Click()
读者登记

Frmreader.Show 1

End Sub

Private Sub mnureaderdel_Click()
读者删除

Frmreaderdel.Show 1

End Sub

Private Sub mnuborrowbook_Click()
借书
Frmborrowbook.Show 1

End Sub

Private Sub mnureturnbook_Click()
还书

Frmreturnbook.Show 1

End Sub

Private Sub mnuborrowsearch_Click()

Frmborlook.Show 1       借阅查询

End Sub

六、调试并编译生成图书馆管理系统.exe文件。

 

琼州学院VB程序设计课程组 维护更新