1 需求分析 1
1.1 概述 1
1.2 功能结构简介 1
1.3 运行环境 1
1.4 数据流图 1
2 概念设计 2
2.1数据字典 2
2.2 E-R图 2
2.3 转换规则及关系模式 3
2.3.1 转换规则 3
2.3.2关系模式 3
3 逻辑设计 4
3.1 表信息 4
3.2 表之间的关系 5
4 程序的功能模块 6
4.1书库管理 6
4.1.1添加图书 6
4.1.2 修改图书 6
4.1.3 删除图书 7
4.2 书库查询模块 8
4.3 借书模块 10
4.4 还书模块 11
5 运行结果 13
6 心得体会 15
参考文献 15
1 需求分析
1.1 概述
图书馆在正常运营中面对大量书籍、读者信息以及两者间相互联系产生的借书信息、还书信息。人工记录的方法既效率低且容易出现错误,大大影响了图书馆的正常管路工作。因此,需要通过计算机辅助对书籍资源、读者信息、借还书信息进行管理,以便了解各个环节中信息的变更,这就是图书管理信息系统的主要任务。
1.2 功能结构简介
图书管理信息系统的主要功能包括:书库管理、书库查询、图书类别查询、读者正常借书管理、读者续借管理和读者还书管理
1. 书库管理:它提供添加、修改和删除图书等操作的功能。
2. 书库查询:它提供书库查询操作的功能。
3. 图书类别查询:它提供添加、修改和删除等操作的功能。
4. 读者正常借书管理:通过该功能把读者和其借阅书籍的信息保存起来。
5. 读者续借管理:通过该功能修改读者的借书日期。
6. 读者还书管理:通过该功能可以记录读者还书的情况,并显示读者所借书是否过期及罚款。
1.3 运行环境
本系统采用Visual Basic 6.0作为系统前台应用程序开发工具,Access作为
后台数据库,通过Visual Basic6.0中的DBGrid1、Data控件及ADO控件等前台和后台进行数据连接从而进行系统软件开发。
1.4 数据流图
数据流图用于表达数据和处理过程之间的关系。数据流图中,矩形表示数据的源点或者终点,圆表示数据的处理过程,平行线表示需要存储的数据,箭头的线段表示流动的数据,如图1.1所示。
2 概念设计
2.1数据字典
数据字典如表1.1所示。
表2.1 数据字典
数据名 数据类型 数据的描述
读者编号 数据项 {编号,文本, 15}
读者姓名 数据项 {姓名,文本, 20}
读者性别 数据项 {性别,文本, 2 }
办证日期 数据项 {出生日期,日期/时间}
联系电话 数据项 {电话,文本,11}
工作单位 数据项 {工作单位,文本,50}
住址 数据项 {家庭住址,文本,50}
读者 数据结构 {读者,{读者编号,读者姓名,读者性别,办证日期,联系电话,工作单位,住址}}
借书日期 数据项 {工作单位,日期/时间}
超出天数 数据项 {超出天数,整型}
罚款金额 数据项 {罚款金额,单精度型}
借还 数据结构 {借还,{借书日期,还书日期,超出天数,罚款金额}}
书号 数据项 {书号,文本, 10}
书名 数据项 {书名,文本, 50}
出版社 数据项 {出版社,文本, 20}
作者 数据项 {作者,文本, 20}
价格 数据项 {价格,单精度型 }
页码 数据项 {页码,文本,10 }
登记日期 数据项 {登记日期,日期/时间}
是否借出 数据项 {是否借出,是/否 }
图书 数据结构 {图书,{书号、书名、出版社、作者、价格、页码、登记日期、是否借出}}
类别代码 数据项 {类别代码,文本,5}
书籍类别 数据项 {书籍类别,文本,20}
可借天数 数据项 {可借天数,整型}
书库 数据结构 {书库,{类别代码,书籍类别,可借天数}}
2.2 E-R图
根据以上的需求分析,E-R图如图2.1所示。
2.3 转换规则及关系模式
2.3.1 转换规则
1、若实体间的联系是1:1的,可以在两个实体类型转换成的两个关系
模式中任意一个关系模式的属性中加入另一个关系模式的键和联系类型的属性。
2、若实体之间的联系是1:N的,则在N端实体类型转换成的关系模式中加入1端实体类型转换成的关系模式的键和联系类型的属性。
3、若实体之间的联系是M:N的,则将联系类型也转换成关系模式,其属性为两端实体类型的键加上联系类型的属性,而键为两端实体键的组合。
2.3.2关系模式
读者(读者编号,读者姓名,读者性别,办证日期,联系电话,工作单位,住址)
借还(书籍编号,借书日期,还书日期,超出天数,罚款金额)
图书(书籍编号、书名、出版社、作者、价格、页码、登记日期、是否借出)
书库(类别代码,书籍类别,可借天数)
3 逻辑设计
3.1 表信息
1 基本设置表:包括:借出册数和罚款,如图3.1所示。
图3.1基本设置表
2 图书表:包括:书籍名称、类别代码、出版社、作者姓名、书籍价格、书籍价格、登记日期和是否借出,如图3.2所示。
图3.2 图书表
3 书类表:包括:类别代码、书籍类别、借出天数,如图3.3所示。
图3.3 书类表
4 借书信息表:包括:读者编号、书籍编号、借书日期、超出天数和罚款金额,如图3.4所示。
图3.4 借书信息表
5 读者信息表:包括:读者编号、读者姓名、读者性别、办证日期、联系电话、工作单位及家庭地址,,如图3.5所示。
图3.5 读者信息表
3.2 表之间的关系
根据所创建的5份额表中,除基本设置表外,其余4个表的关系如图3.6所示。
图3.6 关系图
4 程序的功能模块
4.1书库管理
4.1.1添加图书
1 代码:
Set g_rs = g_db.OpenRecordset("SELECT * FROM bookInfo", dbOpenDynaset)
'添加记录
g_rs.AddNew '设置记录的字段值
g_rs!书籍编号 = txtBookID.Text
g_rs!书籍名称 = txtBookName.Text
g_rs!类别代码 = Mid(cboType.Text, 1, 1)
g_rs!出版社 = txtBookConcern.Text
g_rs!作者姓名 = txtWriter.Text
g_rs!书籍价格 = txtBookPrice.Text
g_rs!书籍页码 = txtPage.Text
g_rs!登记日期 = dtpRigDate.Value
g_rs!是否借出 = False
g_rs.Update
Set g_rs = Nothing
MsgBox "新书添加完毕", vbOKOnly, "提示"
2 界面,如图4.1所示。
图4.1 界面1
4.1.2 修改图书
1.代码:
g_strSql = "select * from bookInfo where 书籍编号='" & txtBookID.Text & "'"
Set g_rs = g_db.OpenRecordset(g_strSql)
g_rs.Edit '设置记录的字段值
g_rs!书籍名称 = txtBookName.Text
g_rs!类别代码 = Mid(cboType.Text, 1, 1)
g_rs!出版社 = txtBookConcern.Text
g_rs!作者姓名 = txtWriter.Text
g_rs!书籍价格 = txtPrice.Text
g_rs!书籍页码 = txtPage.Text
g_rs!登记日期 = dtpRigDate.Value
g_rs!是否借出 = False ' 保存修改!!!
g_rs.Update
Set g_rs = Nothing
MsgBox "保存修改完毕!", vbOKOnly, "提示"
FrmBookManage.Adodc1.Refresh
Unload Me
2.界面,如图4.2所示。
图4.2 界面2
4.1.3 删除图书
Dim strBookID As String
Dim intResponse As Integer
DataGrid1.Col = 0
strBookID = DataGrid1.Text
intResponse = MsgBox("是否真的要删除编号为" + strBookID + "的书籍信息?", vbOKCancel, "提示")
If intResponse = vbOK Then
g_strSql = "select * from bookInfo where 书籍编号='" & strBookID & "'"
Set g_rs = g_db.OpenRecordset(g_strSql)
g_rs.Delete
Set g_rs = Nothing
Adodc1.Refresh
Call Form_Load
MsgBox "删除完毕!", vbOKOnly, "提示"
End If
4.2 书库查询模块
1.代码
Dim strSQL As String
Dim strCon(6) As String
Dim intCount As Integer
Dim i As Integer
intCount = 0
If txtBookID.Text <> "" Then '获得所有得查询条件
If chkMoHu.Value = 1 Then
strCon(1) = "书籍编号 like '%" & txtBookID.Text & "%'"
Else
strCon(1) = "书籍编号='" & txtBookID.Text & "'"
End If
Else
strCon(1) = ""
End If
If txtBookName.Text <> "" Then
If chkMoHu.Value = 1 Then
strCon(2) = "书籍名称 like '%" & txtBookName.Text & "%'"
Else
strCon(2) = "书籍名称='" & txtBookName.Text & "'"
End If
Else
strCon(2) = ""
End If
If cboType.Text <> "" Then
If chkMoHu.Value = 1 Then
strCon(3) = "类别代码 like '%" & Mid(cboType.Text, 1, 1) & "%'"
Else
strCon(3) = "类别代码='" & Mid(cboType.Text, 1, 1) & "'"
End If
Else
strCon(3) = ""
End If
If txtBookConcern.Text <> "" Then
If chkMoHu.Value = 1 Then
strCon(4) = "出版社 like '%" & txtBookConcern.Text & "%'"
Else
strCon(4) = "出版社='" & txtBookConcern.Text & "'"
End If
Else
strCon(4) = ""
End If
If txtBookPrice.Text <> "" Then
If chkMoHu.Value = 1 Then
strCon(5) = "书籍价格 like %" & CInt(txtBookPrice.Text) & "%"
Else
strCon(5) = "书籍价格=" & CInt(txtBookPrice.Text) & ""
End If
Else
strCon(5) = ""
End If
If chkRigDate.Value = 1 Then
If chkMoHu.Value = 1 Then
strCon(6) = "登记日期 like #" & dtpRigDate.Value & "#"
Else
strCon(6) = "登记日期=#" & dtpRigDate.Value & "#"
End If
Else
strCon(6) = ""
End If
If strCon(1) = "" And strCon(2) = "" And strCon(3) = "" And strCon(4) = "" And strCon(5) = "" And strCon(6) = "" Then
strSQL = "select * from bookInfo"
Else
strSQL = "select * from bookInfo where "
For i = 1 To 6
If strCon(i) <> "" Then
intCount = intCount + 1
If intCount = 1 Then
strSQL = strSQL + strCon(i)
Else
strSQL = strSQL + " and " + strCon(i)
End If
End If
Next
End If
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\图书馆查询管理系统.mdb;Persist Security Info=False"
Adodc1.CursorLocation = adUseClient
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = strSQL
Adodc1.Refresh
2.界面,如图4.3所示。
图4.3 界面3
4.3 借书模块
1 代码:
If KeyAscii = "13" And txtReaderID.Text <> "" And txtBookID.Text <> "" Then
g_strSql = "select bookInfo.书籍名称,bookInfo.书籍价格,bookInfo.出版社,bookInfo.书籍页码," _ & "bookInfo.是否借出,bookType.书籍类别 from bookInfo,bookType where 书籍编号='" & txtBookID.Text & "'" _
& " and bookInfo.类别代码=bookType.类别代码"
Set g_rs = g_db.OpenRecordset(g_strSql)
If Not g_rs.EOF Then
txtBookName.Text = g_rs!书籍名称
txtBookPrice.Text = g_rs!书籍价格
txtBookLeibie.Text = g_rs!书籍类别
txtBookConcern.Text = g_rs!出版社
txtBookPage.Text = g_rs!书籍页码
If g_rs!是否借出 = True Then
MsgBox "该书已经借出,请选择其它图书!", vbOKOnly, "提示"
cmdLendBook.Enabled = False
Else
cmdLendBook.Enabled = True
End If
Else
MsgBox "没有该书信息!", vbOKOnly, "提示"
txtBookName.Text = ""
txtBookPrice.Text = ""
txtBookLeibie.Text = ""
txtBookConcern.Text = ""
txtBookPage.Text = ""
End If
Set g_rs = Nothing
ElseIf KeyAscii = "13" And txtReaderID.Text = "" Then
MsgBox "请先输入读者编号", vbOKOnly, "提示"
ElseIf KeyAscii = "13" And txtReaderID.Text <> "" And txtBookID.Text = "" Then
MsgBox "请先输入书籍编号", vbOKOnly, "提示"
End If
2.界面,如图4.4所示。
图4.4 界面4
4.4 还书模块
1 代码:
Dim strSQL As String
'判断用户按下回车键并且是否输入读者编号和书籍编号
If KeyAscii = "13" And txtBookIDReturn.Text <> "" Then
strSQL = "select lentInfo.读者编号,readerInfo.读者姓名,lentInfo.书籍编号,bookInfo.书籍价格," _& " bookInfo.书籍名称,bookInfo.书籍页码,lentInfo.借书日期,bookType.书籍类别,bookType.借出天数" _& " from readerInfo,bookInfo,lentInfo,bookType where readerInfo.读者编号=lentInfo.读者编号" _ & " and bookInfo.书籍编号=lentInfo.书籍编号 and bookInfo.书籍编号='" & txtBookIDReturn.Text & "'" _ & " and bookInfo.类别代码=bookType.类别代码"
g_strSql = strSQL
Set g_rs = g_db.OpenRecordset(g_strSql)
If Not g_rs.EOF Then
cmdLendBook.Enabled = True
txtBookNameReturn.Text = g_rs!书籍名称
txtBookPriceReturn.Text = g_rs!书籍价格
txtBookLeibieReturn.Text = g_rs!书籍类别
txtBookPageReturn.Text = g_rs!书籍页码
txtReadIDReturn.Text = g_rs!读者编号
txtReaderNameReturn.Text = g_rs!读者姓名
txtLendDateReturn.Text = g_rs!借书日期
txtDay.Text = g_rs!借出天数
txtReturnDate.Text = Date
txtFactDay.Text = CStr(Date - g_rs!借书日期)
If CInt(txtFactDay.Text) - CInt(txtDay.Text) > 0 Then
txtDayCount.Text = CStr(CInt(txtFactDay.Text) - CInt(txtReturnDate.Text))
Else
txtDayCount.Text = "0"
End If
Set g_rs = Nothing
g_strSql = strSQL
Set g_rs = g_db.OpenRecordset("select * from basicSet")
txtFakuan.Text = g_rs!罚款 * CInt(txtDayCount.Text)
Set g_rs = Nothing
cmdReturn.Enabled = True
Else
Set g_rs = Nothing
MsgBox "没有该书信息!", vbOKOnly, "提示"
txtBookNameReturn.Text = ""
txtBookPriceReturn.Text = ""
txtBookLeibieReturn.Text = ""
txtBookPageReturn.Text = ""
txtReadIDReturn.Text = ""
txtReaderNameReturn.Text = ""
txtLendDateReturn.Text = ""
txtDay.Text = ""
txtReturnDate.Text = ""
txtFactDay.Text = ""
txtDayCount.Text = ""
cmdReturn.Enabled = False
End If
ElseIf KeyAscii = "13" And txtBookIDReturn.Text = "" Then
MsgBox "请先输入书籍编号", vbOKOnly, "提示"
End If