图书借阅系统.docx
《图书借阅系统.docx》由会员分享,可在线阅读,更多相关《图书借阅系统.docx(27页珍藏版)》请在冰豆网上搜索。
图书借阅系统
第11章图书借阅系统
学习数据库的目的就是应用数据库管理系统解决具体的实际问题。
一个成功的信息管理系统,是建立在许多条件之上的,而数据库是其中一个非常重要的条件和关键技术。
本章从完成一个数据库应用系统的设计出发,结合前面章节所学内容,通过“图书借阅系统”的设计实例,使学生掌握Access应用系统开发的全过程。
11.1数据库设计
数据库应用系统设计一般分为以下6个阶段:
需求分析、概念结构设计、逻辑结构设计、物理结构设计、系统实施、系统的运行和维护。
1.需求分析
需求分析是整个数据库应用系统开发过程中最重要的一步,是数据库设计的关键。
需求分析的主要目的是了解用户需求,通过对现实世界中的处理对象进行调查、分析,制定出数据库的具体设计目标。
图书馆作为一种信息资源的交换场所,图书和用户借阅资料繁多,包含很多数据信息的管理,因此实现图书管理的计算机化,可以简化繁琐的工作模式,有效解决图书借阅过程中的诸多问题,给图书管理员和借阅者带来极大的便利。
图书借阅系统是为了满足图书馆借阅图书的工作而设计的,它的功能主要分为数据维护和基本功能两大模块。
其中数据维护模块包括图书的数据维护和借阅者的数据维护;基本功能模块包括对图书和借阅者的信息浏览、借书、还书、查询、统计等功能。
具体的功能模块如图11.1所示。
图11.1图书借阅系统功能模块图
2.概念结构设计
概念结构设计主要是根据需求分析的结果将用户的各种需求用E-R图来描述。
一个简单的图书借阅系统的实体包括“图书”和“借阅者”。
图11.2所示为图书借阅系统的E-R图。
图11.2图书借阅系统的E-R图
3.逻辑结构设计
逻辑结构设计的主要任务是将概念结构设计的基本E-R图转换成具体的关系模型并进行优化,也就是将E-R图转换为关系(表)。
本系统的实体为“图书”和“借阅者”,它们之间通过“借阅记录”联系起来。
具体的关系模式为:
图书(图书编号,分类名,书名,作者,出版社,定价,库存量)
借阅者(借书证号,姓名,性别,出生日期,系,班级)
借阅记录(借书证号,图书编号,借书日期,还书日期,已还)
4.物理设计
物理设计的主要任务是在逻辑结构设计的基础上选取最适合的物理结构和存储方法。
数据库在存储时一般占用比较大的存储空间,可以使用Accesss的“压缩”工具将数据库压缩之后保存。
5.系统实施
系统实施的主要任务是按系统的设计方案,具体实施系统的逐级控制和各个独立模块的创建,从而形成一个完整的数据库应用系统。
具体设计数据库应用系统时,应做到每一模块易于维护和修改,使每一个功能模块尽量小而且简明,模块之间的接口数目尽可能少。
1)自顶向下的策略
这种方法类似于写文章之前先确定写作大纲。
系统的功能主要体现在主窗体中,因此需要按需求分析先设计主窗体,主窗体上的每个按钮都对应一个完整的功能模块。
2)自底向上的设计
(1)创建表。
(2)建立表之间的关系。
(3)录入表中的数据。
(4)创建各种窗体、查询、报表和宏。
(5)创建登录窗体和主控窗体,将整个系统联系起来。
(6)设置系统的安全性,如为系统设计密码等。
6.系统的运行和维护
在完成整个数据库应用系统的设计后,进入到系统运行和维护阶段。
在此阶段,对各功能模块运行,不断发现问题,解决问题,完善各模块的功能。
11.2创建数据库和表
首先创建一个空数据库,然后根据需要创建数据库中的对象。
1.创建空数据库
(1)在Access窗口中单击“文件”|“新建”命令,打开“新建文件”任务窗格,选择“空数据库”。
(2)在“文件新建数据库”窗口的“文件名”文本框中输入数据库的名称“图书借阅系统”,选择数据库文件的保存位置,单击“创建”按钮。
2.创建表
创建表需要先创建表的结构。
根据本系统的逻辑结构设计,需要创建3张表:
“图书”、“借阅者”和“借阅记录”,各表的结构如表11-1~11-3所示。
表11-1“图书”表结构
字段名称
数据类型
字段大小
主键
其它
图书编号
文本
10
主键
分类名
文本
20
书名
文本
50
作者
文本
20
出版社
文本
20
定价
货币
默认
小数位数为1
库存量
数字
整型
表11-2“借阅者”表结构
字段名称
数据类型
字段大小
主键
其它
借书证号
文本
10
主键
姓名
文本
10
性别
文本
2
设置为查阅列表
默认为男
出生日期
日期/时间
默认
短日期
系
文本
10
班级
文本
10
表11-3“借阅记录”表结构
字段名称
数据类型
字段大小
主键
其它
借书证号
文本
10
主键
设置为查阅列表
图书编号
文本
10
主键
设置为查阅列表
借书日期
日期/时间
主键
短日期
还书日期
日期/时间
短日期
已还
是/否
默认
默认为否
【提示】
(1)“借阅记录”表中的“借书证号”和“图书编号”字段的数据来源分别为“借阅者”表中“借书证号”和“图书表”中的“图书编号”。
(2)在“借阅记录”表中设定借阅规则:
借阅者在同一天同一本书只能借一次,因此将“借书证号”、“图书编号”、“借书日期”3个字段设置为“借阅记录”表中主键。
3.创建表之间的关系
表与表之间是通过相关字段进行连接来建立关系的,本系统中“借阅者”表与“借阅记录”表之间通过“借书证号”字段建立了一对多的关系,“图书”表与“借阅记录”表通过“图书编号”字段建立了一对多的关系,如图11.3所示。
因为图书借阅系统表中的数据变动比较频繁,而且每张表的数据变动可能会影响到其它表中数据的正确性,因此创建表之间的关系时均要实施参照完整性、设置级联更新和级联删除。
图11.3创建表之间的关系
4.录入数据
表中的数据可以在创建表和关系后录入,也可以在创建表时录入,但后者不能保证数据的参照完整性。
录入数据后3张表的记录如图11.4~11.6所示。
图11.4“图书”表的记录
图11.5“借阅者”表的记录11.6“借阅记录”表的记录
11.3数据维护
根据功能模块的需求创建各个窗体,窗体中涉及到的查询、报表和宏也同时设计出来。
本系统的数据维护窗体主要有:
图书信息维护窗体、借阅者信息维护窗体。
1.创建图书窗体
创建图书窗体用于图书的数据维护。
(1)使用“自动创建窗体”的方法创建“图书”窗体。
窗体的记录源为“图书”表,将窗体保存为“图书”。
(2)打开窗体的设计视图,调整标签和文本框的大小和位置,将它们的字体均设置为“宋体、加粗”、字号设置为“9”。
(3)使用按钮向导添加“添加记录”、“保存记录”、“删除记录”、“打印记录”、“关闭窗体”按钮,自动生成相应的记录和关闭窗体的操作。
(3)使用按钮向导添加4个图形样式的按钮
作为导航按钮,自动生成浏览记录的操作。
(4)将窗体的“滚动条”设置为“两者均无”,将“记录选择器”、“导航按钮”和“分隔线”属性设置为“否”。
(5)选择“格式”|“自动套用格式”命令,将窗体的格式设置为“远征”,将窗体保存为“图书的信息维护”,窗体视图如图11.7所示。
图11.7“图书”数据维护窗体
【提示】可以用同样的方法创建“借阅者信息维护窗体”。
11.4借书和还书
1.借书
根据借书窗体中输入的借书证号和图书编号,单击“借书”按钮时需将“图书”表中相应记录的“库存量”减1同时在“借阅记录”表中添加一条新记录。
因此在创建借书窗体的同时还需要分别创建借书修改图书库存量的查询、借书追加借阅记录的查询和借书宏。
(1)创建借书窗体
使用窗体设计视图创建借书窗体,在窗体中添加3个未绑定的文本框,窗体各控件的主要属性设置如表11-4所示。
将窗体的“滚动条”设置为“两者均无”,“记录选择器”、“导航按钮”和“分隔线”属性设置为“否”,窗体的设计视图如图11.8所示,将窗体保存为“借书”。
表11-4“借书”窗体的属性表
对象
属性
说明
标签1
名称:
label1标题:
借书证号
标签2
名称:
label3标题:
图书编号
标签3
名称:
label5标题:
借书日期
文本框1
名称:
Text0
控件提示文本:
请输入借书证号
在其中输入借书证号
文本框2
名称:
Text2
控件提示文本:
请输入图书编号
在其中输入图书编号
文本框3
名称:
Text4
单击时默认为当前日期
图11.8“借书窗体”设计视图
(2)创建借书修改图书数量查询
单击“借书”按钮时,需根据“借书”窗体文本框(名称为Text2)中输入的图书编号将“图书”表中相应记录的“库存量”字段的值减1,因此需要设计一个更新查询,查询设计视图如图11.9所示。
将查询保存为“借书修改图书数量”。
图11.9“借书修改图书数量”设计视图
【提示】Text2不是“图书表”中的字段而是其它对象中的控件,因此使用时需要在其前面加前缀,指明它属于哪个对象。
(3)创建借书追加借阅记录查询
单击“借书”按钮,将文本框中输入的借书证号、图书编号、借书日期增加到“借阅记录”表的新记录中。
因此需要设计一个追加查询用于追加借阅记录,具体方法为在“SQL”视图中输入如下的SQL语句:
InsertInto借阅记录(借书证号,图书编号,借书日期)
Values(Forms!
借书窗体!
Text0,Forms!
借书窗体!
Text2,Forms!
借书窗体!
Text4);
将查询保存为“借书追加记录”。
(4)创建借书宏
功能:
打开“借书修改图书数量”和“借书追加查询”。
表11-5所示为“借书”宏的设置。
表11-5“借书”宏的设置表
宏名
操作
设置
借书
OpenQuery
查询名称:
借书追加查询
OpenQuery
查询名称:
借书修改图书数量
(5)创建借书返回宏
功能:
打开“主控窗体”,关闭当前窗体。
表11-6所示为“借书返回”宏的设置。
表11-6“借书返回”宏的设置表
宏名
操作
设置
借书返回
OpenForm
窗体名称:
主控窗体
Close
对象名称:
借书窗体
(6)修改借书窗体
使用窗体设计视图修改“借书”窗体,在窗体上添加2个命令按钮:
“返回”和“借书”,如图11.10所示。
将2个命令按钮分别与“借书返回”宏和“借书”宏相连接,命令按钮的设置如表11-7所示。
,
图11.10“借书”窗体视图
表11-7“借书”窗体命令按钮属性表
对象
属性
说明
按钮1
名称:
command1标题:
返回
单击事件:
“借书返回”宏
按钮2
名称:
command2标题:
借书
单击事件:
“借书”宏
【提示】单击“借书日期”文本框Text4时,自动生成当前系统日期,通过在模块中编写如下代码实现:
PrivateSubText4_Click()
Text4.Text=Date
EndSub
2.还书
根据还书窗体文本框中输入的借书证号和图书编号,单击“还书”按钮时需要更新3项内容:
(1)将“图书”表中相应记录的“库存量”增1。
(2)将“借阅记录”表中的“已还”字段设置为“True”。
(3)将“借阅记录”表中的“还书日期”更新为还书窗体中的还书日期(名称为Text4)。
因此在创建还书窗体的同时还需要创建还书修改图书库存量、还书日期、已换状态的查询和还书返回宏。
(1)创建还书窗体
使用窗体设计视图创建还书窗体,在窗体中添加3个未绑定的文本框,窗体各控件的主要属性设置如表11-8所示。
将窗体的“滚动条”设置为“两者均无”,“记录选择器”、“导航按钮”和“分隔线”属性设置为“否”,窗体的设计视图如图11.11所示,将窗体保存为“还书”。
表11-8“还书”窗体的属性表
对象
属性
说明
标签1
名称:
label1标题:
借书证号
标签2
名称:
label3标题:
图书编号
标签3
名称:
label5标题:
还书日期
文本框1
名称:
Text0
控件提示文本:
请输入借书证号
在其中输入借书证号
文本框2
名称:
Text2
控件提示文本:
请输入图书编号
在其中输入图书编号
文本框3
名称:
Text4
单击时默认为当前日期
图11.11“还书”窗体设计视图
(2)创建还书窗体的查询
创建一个更新查询用于修改图书的库存量、已还状态和还书日期,查询设计视图如图11.12所示,将查询保存为“还书更改数量状态日期”。
图11.12“还书修改图书数量”查询设计视图
(3)创建还书返回宏
功能:
打开“主控窗体”,关闭当前窗体。
表11-9所示为“还书返回”宏的设置。
表11-9“还书返回”宏的设置表
宏名
操作
设置
还书返回
OpenForm
窗体名称:
主控窗体
Close
对象名称:
还书窗体
(4)修改还书窗体
使用设计视图修改“还书”窗体,在窗体上添加2个命令按钮:
“返回”和“还书”,如图11.13所示。
将2个命令按钮分别与“还书返回”宏和“还书”宏相连接,命令按钮的设置如表11-10所示。
图11.13“还书窗体”窗体视图
表11-10“还书”窗体的属性表
对象
属性
说明
按钮1
名称:
command1标题:
返回
单击事件:
“还书返回”宏
按钮2
名称:
command2标题:
还书
使用命令按钮向导创建
【提示】
(1)单击还书日期文本框Text4时,自动生成当前系统日期,设置方法与借书窗体的借书日期相同。
(2)“还书”按钮使用命令按钮向导创建:
在对话框中依次选择“杂项”-“运行查询”-“还书更改数量状态日期”。
11.5查询
在查询模块中包含“查询出版社信息”、“查询借阅者借书信息”、“按书名模糊查询”、“按分类名模糊查询”、“查询未还书信息”等子模块,因此创建查询窗体前应先创建查询模块中的各个窗体。
1.创建查询出版社信息窗体
选择窗体组合框的下拉列表框中的某个出版社时,在子窗体中显示出相应出版社的图书信息,因此需要建立带子窗体的窗体。
(1)创建图书子窗体
以“图书”表为记录源,使用自动创建窗体的方法创建一个纵栏式窗体,将窗体的“记录选择器”和“分隔线”属性设置为“否”,将窗体保存为“图书子窗体”。
(2)创建查询
在查询的“SQL”视图中输入如下的SQL语句:
SelectDistinct图书.出版社
From图书;
将查询保存为“查询出版社”。
(3)创建按出版社查询窗体
使用设计视图创建“按出版社查询窗体”,设置窗体的记录源为“查询出版社”。
在窗体中使用组合框向导添加一个组合框,组合框的记录源为查询中的“出版社”字段,将窗体的“滚动条”设置为“两者均无”,将“记录选择器”、“导航按钮”和“分隔线”属性设置为“否”。
在窗体中添加子窗体“图书子窗体”,当在主窗体组合框中的下拉列表框中选择一个出版社时,子窗体中显示出相应出版社的图书信息,窗体视图如图11.14所示。
图11.14“按出版社查询窗体”窗体视图图11.15“组合框向导”对话框
【提示】使用组合框向导添加组合框时,一定要选择“组合框向导”对话框中“在基于组合框中选定的值而创建的窗体上查找记录”单选钮(只有为窗体选择记录源后,才会出现这个单选钮),如图11.15所示
2.创建按书名模糊查询窗体
只要在参数输入值对话框中输入书名中包含的某些字(无论这些字的位置在哪)就能查询到相应的信息。
(1)创建按书名模糊查询:
需要创建带通配符的参数查询,查询设计视图如图11.16所示,将查询保存为“按书名模糊查询”。
图11.16“按书名模糊查询”设计视图
【提示】可以采用同样的方法,创建“按分类名模糊查询”的查询设计视图。
(2)创建按书名模糊查询窗体
使用自动创建窗体的方法创建“按书名模糊查询”窗体,窗体的记录源为查询—“按书名模糊查询”,使用命令按钮向导创建“关闭窗体”按钮,功能为关闭当前窗体。
将窗体的“滚动条”设置为“两者均无”,窗体的“记录选择器”和“分隔线”属性均设置为“否”。
运行时,如果在“输入参数值”对话框中输入“计算机”(图11.17),则窗体视图如图11.18所示。
图11.17“输入参数值”对话框图11.18“按书名模糊查询”窗体视图
【提示】可以采用同样的方法,创建“按分类名模糊查询”窗体。
3创建未还书信息窗体
创建未还书信息窗体用于查询未还书的信息。
(1)创建未还书查询
查询的记录源需要三张表:
“借阅者”、“借阅记录”和“图书”,在“设计网格”区的字段行中分别选择每张表中的相关字段,查询设计视图如图11.19所示,将查询保存为“未还书查询”。
图11.19“未还书查询”设计视图
【提示】
①因为查询未还书信息,需要将“借阅记录”表的“已还”字段的条件行设置为“False”。
②为了使查询结果更加满意,在不更改表结构的情况下,需要添加一个计算字段“应还日期”。
设借书期限设定为30天,则“应还日期”通过计算表达式“[借书日期]+30”得出。
(2)创建未还书窗体
使用自动创建窗体的方法创建表格式的“按书名模糊查询”窗体,窗体的记录源为查询—“未还书查询”,单击“格式”|“自动套用格式”命令,将窗体格式设置为“宣纸”。
将窗体保存为“未还书窗体”,窗体视图如图11.20所示。
图11.20“未还书窗体”窗体视图
4.查询借阅者借书信息窗体
根据“某一借阅者借书记录”窗体文本框(Text0)输入的借书证号查询其借阅信息。
查询时需要创建2个窗体“某一借阅者借书记录”和“某一借阅者借书记录子窗体”
(1)创建某一借阅者借书记录窗体
使用设计视图创建“某一借阅者借书记录”窗体,在窗体上利用按钮向导创建“查询”和“关闭窗体”按钮,功能分别是打开“某一借阅者借书记录子窗体”和关闭当前窗体。
窗体视图如图11.21所示,窗体中文本框的名称为Text0。
图11.21“某一借阅者借书记录”窗体视图
(2)创建某一借阅者借书记录查询
需要使用参数查询,查询设计视图如图11.22所示,将查询保存为“查询某一借阅者借书记录”。
图11.22“查询某一借阅者借书记录”设计视图
【提示】此查询根据“某一借阅者的借书记录”窗体的文本框(名称为Text0)中输入的“借书证号”进行查询,因此需要在查询中将“借书证号”字段的条件行设置为“[Forms]!
[某一借阅者的借书记录]!
[Text0]”(可用表达式生成器生成)并去掉其显示行的“√”,否则因为“借书证号”在设计视图中包含了2次,显示结果不美观。
(3)创建某一借阅者借书记录子窗体
以查询“查询某一借阅者借书记录”为记录源,使用自动创建窗体的方法创建一个表格式窗体,并在“窗体页脚”处利用按钮向导创建“返回”按钮,功能是返回到“某一借阅者借书记录”窗体,将窗体的“滚动条”设置为“两者均无”,将“记录选择器”、“导航按钮”和“分隔线”属性设置为“否”。
窗体的设计视图如图11.23所示,将窗体保存为“某一借阅者借书记录子窗体”。
图11.23“某一借阅者借书记录”窗体设计视图
4)创建查询窗体
使用设计视图的方法创建查询窗体,窗体中的按钮通过命令按钮向导创建,功能是打开对应的查询子窗体,窗体视图如图11.24所示。
图11.24“查询窗体”图11.25“统计”窗体
此外,如果需要,还可以使用生成表查询设计“超过借书期限”查询,运行后在数据库中生成“超过借书期限”表;使用删除查询设计“删除已还记录”查询;使用交叉表查询设计“每个学生的未还书”查询等,并以每个查询为记录源创建相应的窗体。
11.6统计
使用窗体设计视图创建统计窗体,将窗体的“滚动条”设置为“两者均无”,“记录选择器”、“导航按钮”和“分隔线”属性设置为“否”,将窗体保存为“统计”。
在窗体中使用命令按钮向导创建如图11.25所示的“按出版社统计图书”、“按分类名统计图书”、“未还书统计”3个按钮,分别打开相应的报表。
“返回主控窗体”按钮通过将其“单击”事件设置为“返回”宏实现,“返回”宏的设置如表11-11所示。
表11-11“返回”宏的设置表
宏名
操作
设置
返回主控窗体
OpenForm
窗体名称:
主控窗体
Close
对象类型:
窗体
对象名称:
统计
11.7浏览
使用报表可以方便地浏览各种信息,因此根据需要设计如下报表:
1.创建“浏览借阅者信息”报表和“浏览图书信息”报表
可以使用自动创建报表的方法创建这两张报表,报表的记录源分别为“借阅者”表和“图书”表。
图11.26所示为“浏览借阅者信息”报表的预览效果。
图11.26“浏览借阅者信息”报表的预览效果
2.按出版社统计图书
使用报表向导生成“按出版社统计图书”报表,并且按图11.27所示修改报表的设计视图,报表的预览效果如图11.28所示。
图11.27“按出版社统计图书”的报表设计视图
图11.28“按出版社统计图书”报表的部分预览效果
【提示】
(1)在报表向导中按“出版社”进行分组,并对“库存量”字段进行汇总设计。
(2)“按分类名统计图书”报表也可以用上面的方法进行设计,报表的预览效果如图11.29所示。
图11.29“按分类名统计图书”报表的部分预览效果
3.未还书报表
以前面创建的“未还书”查询(图11.19)为记录源设计“未还书报表”,报表的设计视图如图11.30所示,图11.31所示为报表的预览效果。
图11.30“未还书报表”的设计视图
图11.31“未还书报表”的预览效果
【提示】报表中所用字段不是“未还书”查询中的全部字段。
11.8系统集成
系统集成的目的就是将已经创建完成的数据库窗体和报表组织在一起,通过特定的窗体来调用它们,保证数据库操作的准确性和安全性,使用户看到的只是窗体界面,便于操作。
系统集成的过程主要包括创建登录窗体、创建主控窗体、创建数据库密码等。
1.创建登录窗体
当输入正确的用户名“admin”和密码“abc”时,单击“确定”按钮打开“主控窗体”。
创建登录窗体和相应宏的方法见例7.5,本系统设计的登录窗体如图11.32所示,“登录”宏组的设置如表11-12所示。
图11.32“登录窗体”视图
表11-12“登录”宏组设置表
宏名
条件
操作
设置
确定
[Text0]="admin"And[Text2]="abc"
OpenForm
对象名称:
主控窗体
Close
对象名称:
登录窗体
[Text0]<>"admin"Or[Text0]IsNull
MsgBox
消息:
您输入的用户名有误,请重新输入!
类型:
警告?
标题:
警告!
SetValue
项目:
Text0
表达式:
""
GoToControl
控件名称:
Text0
[Text2]<>"abc"Or[Text2]IsNull
MsgBox
消息:
您输入的密码有误,请重新输入!
类型:
警告?
标题:
警告!
SetValue
项目:
Text2
表达式:
""
GoToControl
控件名称:
Text2
退出
Close
对象名称:
登录窗体
【提示】将登录窗体设置为启动窗体。
2.