数据库课程设计实验报告

数据库设计报告

  目:图书管理系统

        

班级:

专业:

姓名:

学号:

辅导老师:


. 设计目的

 本课程设计是计算机科学与技术专业的学生在学习完《数据库原理与应用》课程后,进行的一次综合的实践训练,其目的在于加深对数据库基础理论和基本知识的理解,掌握数据库应用系统开发的基本方法。同时也使学生了解基于图形用户界面的多任务环境中应用程序开发的特点,熟悉Windows应用程序的开发过程和基本的编程方法。掌握一种Windows平台上的应用开发工具。

. 设计内容

图书管理系统

三.概要设计

1.功能模块图;

 

                         

 

2.各个模块详细的功能描述。

(1)系统管理:包括新增用户,修改密码,关于软件,退出系统。

(2)读者管理:包括读者新增,读者编辑,读者删除。

(3)图书库管理:包括图书新增,图书编辑,图书删除。

(4)图书查询。

(5)借阅管理:包括图书借出,图书归还,借阅查询。

四.详细设计

1.功能函数的调用关系图;

2.各功能函数的数据流程图;

3.重点设计及编码。

登录:

Private Sub cmdOk_Click()

  If Text1.Text = "" Or Text2.Text = "" Then

     MsgBox "请输入完整的信息!", vbCritical, "警告"

  Else

     If Combo1.Text = "" Then

     MsgBox "请选择权限!", vbCritical, "警告"

  Else

     rs1.Open "Select * From 系统设置 Where 用户名='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

     strD = Text1.Text

     strB = rs1.Fields(2)

     inta = rs1.RecordCount

     rs1.Close

     If inta = 0 Then

        MsgBox "无此用户!", vbCritical, "警告"

        Text1.Text = ""

        Text2.Text = ""

        Combo1.Text = ""

        Exit Sub

     Else

     rs1.Open "Select * From 系统设置 Where 用户名='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

     strA = rs1.Fields(1)

    ' MsgBox rs1.Fields(2)

     rs1.Close

     If Combo1.Text <> Trim(strB) Then

        MsgBox "权限不匹配!", vbCritical, "警告"

     Else

     If Trim(Text2.Text) = Trim(strA) Then

          ' MDIForm1.Show

          ' rs1.Open "Select 权限 From 系统设置 Where 用户名='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

           If Combo1.Text = "student" Then

              MDIForm1.Show

              BlnQX = False

              Call QX

              Unload Me

           Else

              If Combo1.Text = "administrator" Then

         '  rs1.Close

              MDIForm1.Show

              Unload Me

              End If

            End If

        Else

           MsgBox "密码错误!", vbCritical, "提示"

           intCount = intCount + 1

           If intCount = 3 Then

             MsgBox "密码错误登录次数超过限制次数!", vbCritical, "警告"

             End

           End If

          Exit Sub

      End If

     End If

    End If

  End If

 End If

End Sub

新增用户:

Private Sub cmdOk_Click()

  If txt(0).Text = "" Or txt(1).Text = "" Or Combo1.Text = "" Then

     MsgBox "请输入完成的信息!"

  Else

    rs.Open "Select * From 系统设置 Where 用户名='" & txt(0).Text & "'", cn, adOpenKeyset, adLockOptimistic

    If rs.EOF = False Then

 '   If rs.RecordCount <> 0 Then

       MsgBox "有重名!", vbCritical, "警告"

       rs.Close

       Exit Sub

    End If

    rs.Close

    If txt(2).Text = txt(1).Text Then

       rs.Open "系统设置", cn, adOpenKeyset, adLockOptimistic

       rs.AddNew

       rs.Fields(0) = txt(0).Text

       rs.Fields(1) = txt(1).Text

       rs.Fields(2) = Combo1.Text

       rs.Update

       rs.Close

       MsgBox "添加新用户成功!", , "恭喜"

       txt(0).Text = ""

       txt(1).Text = ""

       txt(2).Text = ""

       Combo1.ListIndex = -1

    Else

       MsgBox "两次输入的密码不相同,请确认后重新输入", vbCritical, "警告"

    End If

  End If

End Sub

读者新增:

Private Sub cmdOk_Click()

  Dim i As Integer

  If txt(0).Text = "" Or txt(1).Text = "" Or txt(2).Text = "" Or txt(3).Text = "" Then

     MsgBox "请输入完整的信息!"

  Else

     rs1.Open "读者库", cn, adOpenKeyset, adLockOptimistic

     rs1.AddNew

     For i = 0 To 3

       rs1.Fields(i) = txt(i).Text

     Next i

     rs1.Update

     MsgBox "添加新用户成功!", , "恭喜"

     txt(0).Text = rs1.Fields(0) + 1

     For i = 1 To 3

       txt(i).Text = ""

     Next i

  End If

End Sub

读者删除:

Private Sub cmdEdit_Click()

  

 If txt(0).Text = "" Or txt(1).Text = "" Or txt(2).Text = "" Or txt(3).Text = "" Then

    MsgBox "请单击行标选择需要修改的读者行!", vbCritical, "警告"

    Exit Sub

 Else

     If rs1.Fields(0) <> txt(0).Text Then

       MsgBox "请单击行标选择需要修改的读者数据行!", vbCritical, "警告"

       Exit Sub

    Else

   If MsgBox("确认删除读者么?", vbYesNo, "提示") = vbYes Then

     rs1.Delete adAffectCurrent

 '  rs1.UpdateBatch adAffectCurrent

     rs1.MoveLast

     Dim i As Integer

     For i = 0 To 3

       txt(i) = ""

     Next i

     MsgBox "删除成功!", , "提示"

   End If

 End If

End If

End Sub

图书编辑:

Private Sub cmdEdit_Click()

If txt(0).Text = "" Or txt(1) = "" Or txt(2) = "" Or txt(3) = "" Or txt(4) = "" Or Combo1.Text = "" Then

   MsgBox "请单击行标选择需要修改的图书行", vbCritical, "提示"

   Exit Sub

Else

   If txt(0) <> rs1.Fields(0) Then

      MsgBox "请单击行标选择需要修改的图书行", vbCritical, "提示"

   Else

      If MsgBox("确认要修改么?", vbYesNo, "提示") = vbYes Then

         Dim i As Integer

         For i = 0 To 4

            rs1.Fields(i) = txt(i).Text

         Next i

         rs1.Fields(5) = Combo1.Text

         rs1.UpdateBatch adAffectCurrent

         MsgBox "修改成功", , "提示"

      End If

   End If

End If

End Sub

图书查询:

Private Sub cmdSearch_Click()

    On Error Resume Next

    rs1.Close

    rs1.CursorLocation = adUseClient

    rs1.Open "Select * From 书库 Where " & Combo1.Text & " ='" & txt_Search.Text & "'", cn, adOpenKeyset, adLockOptimistic

    Set DataGrid1.DataSource = rs1

 

   If rs1.RecordCount = 0 Then MsgBox "查无此书"

  

End Sub

图书借出:

Private Sub cmdB_Click()

 

    If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then

       MsgBox "请输入完整的数据!", vbCritical, "警告"

       Exit Sub

    Else

       rs1.Open "Select * From 书库 Where 书号='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

       intb = rs1.RecordCount

       rs1.Close

       rs1.Open "Select * From 读者库 Where 读者编号= '" & Text2.Text & "'", cn, adOpenKeyset, adLockOptimistic

       intc = rs1.RecordCount

       rs1.Close

       If intb = 0 Or intc = 0 Then

          MsgBox "书号或读者编号不存在!", vbCritical, "警告"

          Text1.Text = ""

          Text2.Text = ""

       Else

          rs1.Open "Select * From 书库 Where 书号='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

          If Trim(rs1.Fields(6)) = "Yes" Then

          rs1.Close

          Dim temp1 As String, temp2 As String

          rs1.Open "Select * From 书库 Where 书号='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

          temp1 = rs1.Fields(1)

          rs1.Close

          rs1.Open "Select * From 读者库 Where 读者编号= '" & Text2.Text & "'", cn, adOpenKeyset, adLockOptimistic

          temp2 = rs1.Fields(1)

          rs1.Close

          rs1.Open "借阅记录", cn, adOpenKeyset, adLockOptimistic

          rs1.AddNew

          rs1.Fields(0) = inta

          rs1.Fields(1) = Text1.Text

          rs1.Fields(2) = temp1

          rs1.Fields(3) = Text3.Text

          rs1.Fields(5) = Text2.Text

          rs1.Fields(6) = temp2

          rs1.UpdateBatch adAffectCurrent

          rs1.Close

          rs1.Open "Select * From 书库 Where 书号='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

          rs1.Fields(6) = "No"

          rs1.UpdateBatch adAffectCurrent

          rs1.Close

          MsgBox "已办理好借阅手续!", , "提示"

          Text1.Text = ""

          Text2.Text = ""

          Else

             MsgBox "该书已经被借出", vbCritical, "提示"

             rs1.Close

             Text1.Text = ""

             Text2.Text = ""

       End If

    End If

  End If

End Sub

图书归还:

Private Sub cmdR_Click()

   If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then

      MsgBox "请输入完整的数据!", vbCritical, "警告"

      Exit Sub

   Else

      rs2.Open "Select * From 书库 Where 书号='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

      inta = rs2.RecordCount

      rs2.Close

      If inta = 0 Then

         MsgBox "书号不存在!", vbCritical, "警告"

         Text1.Text = ""

         Text2.Text = ""

      Else

         rs2.Open "Select * From 书库 Where 书号='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

         If Trim(rs2.Fields(6)) = "No" Then

         rs2.Close

         rs2.Open "Select * From 借阅记录 Where 书号='" & Text1.Text & "' And 读者编号='" & Val(Text2.Text) & "'", cn, adOpenKeyset, adLockOptimistic

         rs2.Fields(4) = Text3.Text

         rs2.UpdateBatch adAffectCurrent

         rs2.Close

         rs2.Open "Select * From 书库 Where 书号='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

         rs2.Fields(6) = "Yes"

         rs2.UpdateBatch adAffectCurrent

         rs2.Close

         MsgBox "已经办理好归还手续!", , "提示"

         Text1.Text = ""

         Text2.Text = ""

         Else

             MsgBox "该书已在库!", vbCritical, "提示"

             rs2.Close

             Text1.Text = ""

             Text2.Text = ""

        End If

    End If

 End If

End Sub

借阅查询:

Private Sub cmdSearch_Click()

    On Error Resume Next

    rs1.Close

    rs1.CursorLocation = adUseClient

   

    If Opt1.Value = True Then

       rs1.Open "Select * From 借阅记录 Where  读者编号 ='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

    Else

       rs1.Open "Select * From 借阅记录 Where  书号 ='" & Text1.Text & "'", cn, adOpenKeyset, adLockOptimistic

    End If

   Set DataGrid1.DataSource = rs1

End Sub

五.测试数据及运行结果

1.正常测试数据(3组)及运行结果;

图书书号:IS-7

读者编号:9

图书书号:IS-4

读者编号:6

根据读者编号查询:6

2.非正常测试数据(2组)及运行结果。

图书书号:IS-2

读者编号:9

图书书号:IS-8

读者编号:9

六.调试情况,设计技巧及体会

1.对自己的设计进行评价,指出合理和不足之处,提出改进方案;

实验中遇到许多问题,比如在连接数据库的时候,老是连接不成功,后来才知道,数据库的连接需要定义数据库管理员的账户和密码,这样方便数据库的操作,在一些方面注意数据库的数据操作,什么时候需要更新数据库,什么时候需要删除数据库的内容,都要在恰当的时候.感觉在数据库的连接方面还是vb比较直观一点.在界面的一些操作中,需要注意一些细节问题,特别是按钮的设计,在按钮上设计位图,更改工具条的位图,还有就是tab操作这些都是需要注意的,在对类的设计上,感觉也有不完美的地方,最后不得不参照书本了,所以基本上看起来和书本上的差不多,但是确实遇到许多问题,也解决了许多问题,在登陆界面上,不支持快捷键的操作,现在也是感觉很矛盾的事情,因为需要屏蔽这个快捷键,另外也需要通过tab来更改热键的位置.程序设计当中遇到许多问题,有的已经解决,有的解决不是很理想,代码也存在冗余部分,比如对工具条的设计,或者对butter的设计等等,这些主要看的还是源代码.

2.对设计及调试过程的心得体会。

通过本次实验,充分的掌握了,程序中使用数据库的方法,另外自己感觉在数据库的连接上,问题可能还是遇到的不很全面,经验积累不足,经过老师的点评发现在数据库的设计上也存在一些漏洞,比如表的结构上以及表之间的关系主键,外键,触发器这些东西使用还是僵死.这可能是经验不足,或者第一次设计,心里还是脱离不开老的那种从文件中读数据的那种模式,所以这以后的课程设计和学习当中我会注意加强自己的数据库设计方面的能力.

七.参考文献

《Visual Basic开发实战宝典》  高春艳,刘彬彬等  清华大学出版社

《VisualBasic范例开发大全》    隋丽娜、迟剑、郭立峰  清华大学出版社

《数据库设计系统原理与应用》  孟彩霞  人民邮电出版社

www.baidu.com

八.附录:源代码(电子版)

相关推荐