VBA编写的 ACCESS 程序 请确认后在下载 咨询
图书借阅管理系统设计文档
一、 系统概述
为学校图书借阅室设计图书管理系统,完成新增图书上架、读者办理图书借阅证、图书查询、借书、还书工作的自动处理。
二、 需求分析
1. 图书借阅处理过程简述
处理过程主要包含:新增图书上架、办理图书借阅证、图书查询、借书、还书等。
(1) 新增图书上架
新书上架时,需要登记新书的:书名、作者、出版社、出版时间(年)、版次、价格、总册数的信息;并对图书统一编号(书号为8位数字)。
(2) 办理图书借阅证
读者办理借书证时,需要登记读者(学生)的学号(6位)、姓名、班级、扫描学生证照片,并对借书证统一编号(借书证号为6位数字,值与学号相同)。
(3) 图书查询
读者可以按照书名、作者、出版社查询图书基本信息,并可以得知现还有几册可以借阅。
(4) 借书
每个学生读者最多借3本书;借书时间为2周,如果有超期未还的图书则不能再借书。
读者借书时,应登记借书证号、书号、借书日期(年月日);并打印借书条交给读者,借书条上包括借书证号、所借各本书的书名、应还书的时间。
(5) 还书
读者还书时,应查看是否超期,如果超期则每天罚款0.1元,计算出应交罚款。
2. 数据分析
数据处理过程中涉及到两个实体:图书和读者;各实体应具有的属性如下:
² 图书(书号、书名、作者、出版社、出版时间、版次、价格、总册数)
² 读者(借书证号、学号、姓名、班级、照片)
由于同一种图书可以有多册上架,每个读者最多可以借阅3本书,所以图书和读者之间是多对多的关系;为了表示多对多关系,应将图书借阅定为实体,构造两个一对多关系。图书借阅的属性如下:
² 借阅(借书证号、书号、借书日期)
3. 功能分析
系统功能模块包括:图书上架、借书证办理、图书查询、借书、还书;另外还包括图书信息修改和读者信息修改;共七个模块。各模块功能如下:
a) 图书上架
登记新书信息并编号
b) 借书证办理
登记读者信息并编号
c) 图书查询
允许读者选择查询方式,并按照读者输入的信息查找到相关图书的信息并显示
d) 借书
查看是否能借书,如果可以则登记相关信息,打印借书条。
e) 还书
查看是否超期,如果超期,则计算应交罚款。
三、 数据库设计
1. 数据库
数据库名称为library.mdb。
2. 表
数据库中包含三个表:图书表(book)、读者表(reader)、借阅表(borrow)各表结构如下:
book
字段名 |
书号 |
书名 |
作者 |
出版社 |
出版时间 |
版次 |
价格 |
总册数 |
类型 |
文本 |
文本 |
文本 |
文本 |
数字 |
数字 |
数字 |
数字 |
字段大小 |
8 |
20 |
10 |
10 |
整数 |
字节 |
单精度型 |
字节 |
其它 |
数字字符 |
必填 |
必填 |
必填 |
1990至当年 |
1~9 |
两位小数 |
1~10 |
主键 |
主键 |
|
|
|
|
|
|
|
reader
字段名 |
借书证号 |
学号 |
姓名 |
班级 |
照片 |
类型 |
文本 |
文本 |
文本 |
文本 |
OLE对象 |
字段大小 |
6 |
6 |
4 |
6 |
|
其它 |
数字字符 |
数字字符/必填 |
必填 |
|
|
主键 |
主键 |
|
|
|
|
borrow
字段名 |
流水号 |
借书证号 |
书号 |
借书日期 |
已归还 |
类型 |
自动编号 |
文本/查阅 |
文本/查阅 |
日期 |
是/否 |
字段大小 |
|
6 |
8 |
|
|
其它 |
|
数字字符/必填 |
数字字符/必填 |
默认值:Date() |
默认值:否 |
主键 |
主键 |
|
|
|
|
book表与borrow表为一对多的关系,连接字段为book的书号和borrow的书号;
reader表与borrow表为一对多的关系,连接字段为reader的借书证号和borrow的借书证号。
四、 总体设计
1. 总体功能设计
系统功能总体分为五个模块:管理员登录、图书上架、借阅证办理、图书查询和借书还书。
2. 系统功能模块图
总控模块以主窗体形式出现。其中,默认情况下,管理员登录、图书查询和借书还书模块可以使用,即所有用户都可以使用。只有进行合法的管理员登录后,图书上架、借阅证办理才可以使用。
3. 子模块功能设计
l 管理员登录子模块用来判断用户输入的密码是否正确,以决定是否进入管理员模式
l 图书上架子模块用来输入图书基本信息
l 借阅证办理子模块用来输入读者基本信息
l 图书查询子模块包括按照书名、读者、出版社进行选择查询、条件查询和模糊查询三大部分
l 借书还书子模块包括借书和还书两个二级子模块。其中,
Ø 借书二级子模块包括借书信息输入和打印借书条两部分
Ø 还书二级子模块包括还书信息输入和计算超时欠费两部分
五、 详细设计
1. 系统初始化模块
系统初始化模块的作用是声明系统全局变量,初始化系统变量设置等。
¨模块init
Option Compare Database
Public Login As Boolean '全局变量Login - 记录管理员是否登录
2. 系统主控模块——主窗体
(1) 功能说明
系统主窗体是用户进入系统后首先打开的窗体,主要用于方便用户进行工作选择,因此采用按钮和菜单两种方式完成。
(2) 界面设计——按钮
i 主窗体界面图
系统主窗体界面设计如图 1。
ii 主窗体及控件属性
系统主窗体及控件属性如表 1。
名称 |
属性 |
属性值 |
主窗体 |
标题 |
图书借阅管理系统 |
滚动条 |
两者均无 |
记录选择器 |
否 |
导航按钮 |
否 |
分割线 |
否 |
自动调整 |
否 |
自动居中 |
是 |
边框样式 |
细边框 |
最大最小化按钮 |
最小化按钮 |
命令0 |
单击事件 |
运行宏“管理员登录” |
Label0 |
标题 |
管理员登录 |
命令1 |
单击事件 |
运行宏“图书上架” |
可见性 |
否 |
Label1 |
标题 |
图书上架 |
可见性 |
否 |
命令2 |
单击事件 |
运行宏“借阅证办理” |
可见性 |
否 |
Label2 |
标题 |
借阅证办理 |
可见性 |
否 |
命令3 |
单击事件 |
运行宏“图书查询” |
Label3 |
标题 |
图书查询 |
命令4 |
单击事件 |
运行宏“借书还书” |
Label4 |
标题 |
借书还书 |
iii 主窗体及控件事件宏和代码
¨主窗体“加载”事件
Private Sub Form_Load()
Login = False
End Sub
¨主窗体“打开”事件
Private Sub Form_Open(Cancel As Integer)
命令1.Visible = Login
Label1.Visible = Login
命令2.Visible = Login
Label2.Visible = Login
命令0.Visible = Not Login
Label0.Visible = Not Login
End Sub
¨ “管理员登录”宏
操作 |
参数 |
参数值 |
Close |
对象类型 |
窗体 |
对象名称 |
主窗体 |
OpenForm |
窗体名称 |
管理员登录 |
¨ “图书上架”宏
操作 |
参数 |
参数值 |
OpenForm |
窗体名称 |
图书上架 |
数据模式 |
增加 |
¨“借阅证办理”宏
操作 |
参数 |
参数值 |
OpenForm |
窗体名称 |
借阅证办理 |
数据模式 |
增加 |
¨“图书查询”宏
操作 |
参数 |
参数值 |
OpenForm |
窗体名称 |
图书查询 |
¨“借书还书”宏
操作 |
参数 |
参数值 |
OpenForm |
窗体名称 |
借书还书 |
(3) 界面设计——菜单
i 系统主菜单
系统主菜单(略)
如表 2。()
菜单项 |
子菜单 |
宏 |
参数 |
管理 |
|
|
|
|
管理员登录 |
打开窗体OpenForm |
|
|
图书上架 |
打开窗体OpenForm |
|
|
图书信息修改 |
打开窗体OpenForm |
|
|
借阅证办理 |
打开窗体OpenForm |
|
|
退出系统 |
Quit |
|
借还书 |
|
|
|
|
图书查询 |
打开查询OpenQuery |
|
|
借书 |
打开报表OpenReport |
|
|
还书 |
打开报表OpenReport |
|
窗口 |
|
|
|
|
最小化 |
Minimize |
|
帮助 |
|
|
|
|
关于… |
打开窗体OpenForm |
|
|
系统说明 |
打开窗体OpenForm |
系统设计说明 |
ii 宏设计
(略)如表 2。()
表 3
3. 管理员登录子模块——“管理员登录”窗体
(1) 功能说明
在系统主界面中当用户选择管理员登录功能时,打开管理员登录窗体,要求用户输入管理员密码。密码正确才能进入。密码输入错误,给出提示并返回主控窗体。
(2) 界面设计
“管理员登录”窗体界面设计如图 2:
控件 |
属性 |
属性值 |
标签 |
名称 |
标签1 |
标题 |
请输入管理员密码: |
文本框 |
名称 |
密码 |
输入掩码 |
密码 |
按钮 |
名称 |
命令2 |
标题 |
确定 |
默认 |
是 |
(3) 功能实现
单击“确定”按钮时,进行密码验证,决定登录是否成功。在“确定”按钮的“单击”事件中,写入如下代码:
Private Sub命令2_Click()
If 密码<> "admin" Then
MsgBox "密码输入错误!即将进入读者登录界面。"
Login = False
Else
MsgBox "欢迎进入管理员登录界面!"
Login = True
End If
DoCmd.Close
DoCmd.OpenForm "主窗体"
End Sub
4. 图书上架子模块——“图书上架”窗体
(1) 功能说明
在系统主界面中当用户选择“图书上架”功能时,打开“图书上架”窗体,要求用户输入图书基本信息。输入完成后关闭窗体,即可完成图书信息输入,并返回主控窗体。
(2) 界面设计
“图书上架”窗体界面设计如下图 3:
其中,窗体及主要控件属性设置如下:
控件 |
属性 |
属性值 |
窗体 |
记录源 |
“book”表 |
按钮 |
名称 |
关闭 |
标题 |
关闭 |
(3) 功能实现
¨“关闭”按钮
Private Sub 关闭_Click()
On Error GoTo Err_关闭_Click
DoCmd.Close
Exit_关闭_Click:
Exit Sub
Err_关闭_Click:
MsgBox Err.Description
Resume Exit_关闭_Click
End Sub
5. 借阅证办理子模块——“借阅证办理”窗体
(1) 功能说明
在系统主界面中当用户选择“借阅证办理”功能时,打开“借阅证办理”窗体,要求用户输入读者基本信息。输入完成后关闭窗体,即可完成读者信息输入,并返回主控窗体。
(2) 界面设计
“借阅证办理”窗体界面设计如图 4:
其中,窗体及主要控件属性设置如下:
控件 |
属性 |
属性值 |
窗体 |
记录源 |
“reader”表 |
“借书证号” 文本框 |
名称 |
借书证号 |
控件来源 |
借书证号 |
输入掩码 |
000000 |
是否锁定 |
是 |
按钮 |
名称 |
结束 |
标题 |
办理结束 |
默认 |
是 |
“班级”组合框属性如下图:
(3) 功能实现
¨窗体加载后,自动将焦点设置在“学号”文本框上
Private Sub Form_Load()
[学号].SetFocus
End Sub
¨输入学号后,自动将“借书证号”设置为与“学号”相同
Private Sub 学号_Change()
[借书证号] = [学号]
End Sub
Private Sub 学号_LostFocus()
[借书证号] = [学号]
End Sub
¨ “结束”按钮
Private Sub 结束_Click()
On Error GoTo Err_结束_Click
ch = MsgBox("输入的读者信息将会保存。请确认数据输入是否正确。" & vbCrLf _
& "单击“是”将保存数据,单击“否”将回到输入窗口继续输入或修改。", _
vbQuestion + vbYesNo + vbDefaultButton2, "确认保存")
If ch = vbYes Then
DoCmd.Close
End If
Exit_结束_Click:
Exit Sub
Err_结束_Click:
MsgBox Err.Description
Resume Exit_结束_Click
End Sub
6. 图书查询子模块——“图书查询”窗体
(1) 功能说明
在系统主界面中当用户选择“图书查询”功能时,打开“图书查询”窗体,允许用户选择按照书名、读者、出版社查询或使用模糊查询。
(2) 界面设计
“图书查询”窗体界面设计如图 5:
窗体属性如下表:
属性 |
属性值 |
标题 |
图书查询 |
滚动条 |
两者均无 |
记录选择器 |
否 |
导航按钮 |
否 |
分割线 |
否 |
自动调整 |
否 |
自动居中 |
是 |
边框样式 |
细边框 |
最大最小化按钮 |
最小化按钮 |
“Combo条件”文本框属性如下图:
(3) 功能实现
¨单击“按书名查询图书及现有册数”按钮(名称为“按书名查询”),打开“按书名查询图书及现有册数”窗体
Private Sub 按书名查询_Click()
On Error GoTo Err_按书名查询_Click
DoCmd.OpenForm "按书名查询图书及现有册数"
Exit_按书名查询_Click:
Exit Sub
Err_按书名查询_Click:
MsgBox Err.Description
Resume Exit_按书名查询_Click
End Sub
¨单击“按作者查询图书及现有册数”按钮(名称为“按作者查询”),打开“按作者查询图书及现有册数”窗体
Private Sub 按作者查询_Click()
On Error GoTo Err_按作者查询_Click
DoCmd.OpenForm "按作者查询图书及现有册数"
Exit_按作者查询_Click:
Exit Sub
Err_按作者查询_Click:
MsgBox Err.Description
Resume Exit_按作者查询_Click
End Sub
¨单击“按出版社查询图书及现有册数”按钮(名称为“按出版社查询”),打开“按出版社查询图书及现有册数”窗体
Private Sub 按出版社查询_Click()
On Error GoTo Err_按出版社查询_Click
DoCmd.OpenForm "按出版社查询图书及现有册数"
Exit_按出版社查询_Click:
Exit Sub
Err_按出版社查询_Click:
MsgBox Err.Description
Resume Exit_按出版社查询_Click
End Sub
¨如果在“查询条件”组合框(名称为“Combo条件”)中选择“全部”,则不显示“查询内容”文本框,否则显示
Private Sub Combo条件_Change()
If Combo条件.ListIndex = 0 Then
Text查询内容.Visible = False
Label查询内容.Visible = False
Else
Text查询内容.Visible = True
Label查询内容.Visible = True
End If
End Sub
Private Sub Combo条件_Click()
If Combo条件.ListIndex = 0 Then
Text查询内容.Visible = False
Label查询内容.Visible = False
Else
Text查询内容.Visible = True
Label查询内容.Visible = True
End If
End Sub
¨单击“条件查询”按钮(名称为“Cmd查询”),根据条件分别打开不同窗体
Private Sub Cmd查询_Click()
Select Case Combo条件
Case "全部"
DoCmd.OpenForm "查询结果"
Case "书名"
DoCmd.OpenForm "书名查询", OpenArgs:=Text查询内容
Case "作者"
DoCmd.OpenForm "作者查询", OpenArgs:=Text查询内容
Case "出版社"
DoCmd.OpenForm "出版社查询", OpenArgs:=Text查询内容
End If
End Sub
¨单击“模糊查询”按钮(名称为“模糊查询”),根据条件查询(使用SQL命令)后显示
Private Sub 模糊查询_Click()
On Error GoTo Err_模糊查询_Click
sqlstr = ""
num = 1
If 书号 <> "" Then
If num <> 1 Then
sqlstr = sqlstr & " and "
End If
num = num + 1
sqlstr = sqlstr & "书号 like '*" & 书号 & "*'"
End If
If 书名 <> "" Then
If num <> 1 Then
sqlstr = sqlstr & " and "
End If
num = num + 1
sqlstr = sqlstr & "书名 like '*" & 书名 & "*'"
End If
If 作者 <> "" Then
If num <> 1 Then
sqlstr = sqlstr & " and "
End If
num = num + 1
sqlstr = sqlstr & "作者 like '*" & 作者 & "*'"
End If
If 出版社 <> "" Then
If num <> 1 Then
sqlstr = sqlstr & " and "
End If
num = num + 1
sqlstr = sqlstr & "出版社 like '*" & 出版社 & "*'"
End If
If 出版时间 <> "" Then
If num <> 1 Then
sqlstr = sqlstr & " and "
End If
num = num + 1
sqlstr = sqlstr & "出版时间 like '*" & 出版时间 & "*'"
End If
If 版次 <> "" Then
If num <> 1 Then
sqlstr = sqlstr & " and "
End If
num = num + 1
sqlstr = sqlstr & "版次 like '*" & 版次 & "*'"
End If
If 价格 <> "" Then
If num <> 1 Then
sqlstr = sqlstr & " and "
End If
num = num + 1
sqlstr = sqlstr & "价格 like '*" & 价格 & "*'"
End If
If sqlstr <> "" Then
DoCmd.OpenForm "查询结果", OpenArgs:=sqlstr
Else
MsgBox "请输入查询要求!"
End If
Exit_模糊查询_Click:
Exit Sub
Err_模糊查询_Click:
MsgBox Err.Description
Resume Exit_模糊查询_Click
End Sub
7. 图书查询各子模块(子窗体)
(1) “按书名查询图书及现有册数”窗体、“按作者查询图书及现有册数”窗体、“按出版社查询图书及现有册数”窗体
¨界面设计
“按书名查询图书及现有册数”窗体界面如图 6(其他类似):
各窗体“记录源”属性如下表:
窗体 |
属性值 |
“按书名查询图书及现有册数” |
“按书名查询图书及现有册数”查询 |
“按作者查询图书及现有册数” |
“按作者查询图书及现有册数”查询 |
“按出版社查询图书及现有册数” |
“按出版社查询图书及现有册数”查询 |
¨查询实现
“按书名查询图书及现有册数”查询设计如图 7:(其余类似)
¨“查询图书借出册数”查询实现
(2) “书名查询”窗体、“作者查询”窗体、“出版社查询”窗体
¨界面设计
“书名查询”窗体界面如图 8(其他类似):
¨查询功能实现
“书名查询”窗体加载代码和查询按钮代码如下:(其余窗体类似)
Private Sub Form_Load()
查询书名 = Me.OpenArgs
Me.RecordSource = "select * from 查询图书及现有册数 where 书名='" & Me.OpenArgs & "'"
记录数.Caption = "共" & DCount("书号", "查询图书及现有册数", "书名='" & Me.OpenArgs & "'") & "条记录"
查询书名.SetFocus
End Sub
Private Sub 查询_Click()
Me.RecordSource = "select * from 查询图书及现有册数 where 书名='" & 查询书名 & "'"
记录数.Caption = "共" & DCount("书号", "查询图书及现有册数", "书名='" & 查询书名 & "'") & "条记录"
查询书名.SetFocus
End Sub
¨“查询图书及现有册数”查询实现
(3) “查询结果”窗体
¨界面设计
“查询结果”窗体界面如图 9:
¨功能实现
“查询结果”窗体加载代码如下:
Private Sub Form_Load()
If Me.OpenArgs <> "" Then
Me.RecordSource = "select * from 查询图书及现有册数 where " & Me.OpenArgs
查询条件.Caption = "查询条件:" & Me.OpenArgs
End If
记录数.Caption = "共" & DCount("书号", "查询图书及现有册数", Me.OpenArgs) & "条记录"
End Sub
8. 借书还书
(1) 功能说明
(略)
(2) 界面设计
(略)
(3) 功能实现
(略)
9. 设置启动窗体
将主窗体设置为启动窗体。
无法找到演示,请联系客服 点击联系客服