1. 设计内容 设计开发一个图书管理系统,主要包括如下要求: 1) 对读者基本信息的管理,包括读者信息的录入、修改、删除及查询; 2) 对图书信息的管理,进行新书入库、现有图书信息修改、删除以及查询; 3) 图书借阅的管理; 4) 图书归还的管理. 2. 设计目的 数据库课程设计是为数据库原理及应用课程而独立开设的实践性课程,对于巩固数据库知识,加强学生的实际动手能力和提高学生综合素质十分必要.通过本实验达到以下目的: 1) 培养具有C/S和B/S模式的数据库应用软件系统的设计和开发能力。 2) 熟练掌握一种数据库系统(如SQL SERVER)的使用。 3) 熟练掌握一种数据库应用软件开发工具(如ASP、VB、VC)的使用。 4) 通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力。 要求: 要求掌握数据库的设计的每个步骤;掌握数据库设计各阶段的设计内容、设计方法和工具。 3。 设计过程 3.1 需求分析 3。1.1 用户需求 图书馆在正常运营中总是面对大量的读者信息、书籍信息以及两者相互作用产生的借书信息、还书信息。需要对读者资源、书籍资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,有利于提高管理效率。 (1)对用户信息的管理 能够对一定数量的读者信息进行存储与管理,这其中包括:读者信息的登记、删除及修改;读者基本信息的查询. (2)对图书信息的管理 能够存储一定数量的图书信息,并方便有效地进行书籍数据的操作和管理,这主要包括:图书信息的录入、删除及修改;图书信息的查询,即可根据不同的条件(条形码、书名、类别、作者、书架、出版社等信息)查询读者需要的图书,而读者可根据不同的条件(条形码、图书名称、读者编号、读者姓名、到期时间等信息)查询自己借阅图书的信息。 (3)对图书借阅的管理 借书管理:读者从书架上选取所需图书后,将图书和借阅卡交管理人员,管理人员利用条形码扫描仪及读卡器将图书和借阅卡上的信息读入系统。系统根据借阅卡信息从借阅者的借阅文件中找到相应记录;根据图书信息从图书文件中找到相应记录,读者如果有如下列情况之一将不予办理借书手续。 ① 读者所借阅图书已超过该读者允许的最多借书数目。 ② 该读者还有已超过归还日期而仍未归还的图书. 若读者符合所有借书条件时,予以借出.系统在借阅文件中增加一条记录,记入读者编号(学生学号或教师编号)、图书编号(可以使用ISBN号)、借阅日期等内容。 (4)对图书归还的管理 还书管理:还书时,读者将图书交给管理人员,管理员通过条形码扫描仪将图书上的图书条码读入系统,系统从借阅文件上找到相应记录,填上还书日期,同时系统根据借书、还书日期进行计算,判断是否超过归还日期,若未超期则结束过程,若超期则计算出超期天数、罚款数。通知读者交纳罚款. 3.1.2数据流图 依据用户需求,绘制系统的顶层数据流图,如图3-1所示。第一层数据流图(如图3-2所示),借书处理的数据流图(图3-3),还书处理的数据流图(图3—4)以及入库处理的数据流图(图3—5)。 图3—1 顶层数据流图 将顶层数据流图分层细化,下面是第一层数据流图(如图3-2所示). 图3—2第一层数据流图 图3-3是借书处理的数据流图. 图3-3 借书处理的数据流图 图3-4是还书处理的数据流图。 图3-4 还书处理的数据流图 3。1.3 数据字典 1. 数据结构字典 --—-----——--—--—————-————-----———-—--------—--—-———----————---———————— 数据结构名:借阅者 含义说明:借阅者信息 组成:借阅者姓名,借阅证号,班级,专业,院系,借书数量 -———--—————---—--——---—-——---——--—--——--—--—-———----—-—-—--——-—-—-—-—— 数据结构名: 管理员 含义说明: 管理员信息 组成: 管理员编号,管理员姓名,职称,负责书库 ———————--—-----—-----—————---—--—----—-——-———----————-——-—--——-———-——- 数据结构名: 图书 含义说明: 图书信息 组成:图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期 ---—-—--———-——--------—-—-—-—-----—-—-—-—--———-——————-—--—-——----—-——— 2。数据流字典 —-—-———-----—-——-——-———-——-——---———-—----—————------—-—---—------—---- 数据流名:借阅证 说明:借阅者信息 数据流来源:借阅者 数据流去向:借书处理 组成:借阅者姓名,借阅证号,班级,院系 —————-----———-———---———--—————————----———----———----—-———--—--—-—---—— 数据流名:图书 说明:借阅图书信息 数据流来源:借书处理 数据流去向:借阅者 组成:图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期 —-—---——-—--————---————-—-———--—————-—--—--———--——----—--——---------—- 数据流名:还书 说明:借阅者还书 数据流来源:借阅者 数据流去向:还书处理 组成:借阅者姓名,借阅证号,班级,院系 -—---—--—-—--———--—--—---—-—-———------————---——---————---—--—--—---—-- 数据流名:不合格的借阅证 说明:借阅证无法使用 数据流来源:借书处理 数据流去向:借阅者 组成:借阅者姓名,借阅证号,班级,院系 --—-—--—-—----——--——-——-—-—--——----————--—-—-——--———--—--—--—----—--—- 数据流名:借书清单 说明:借出书目信息 数据流来源:借书处理 数据流去向:图书库存情况存档 组成:图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期 ——————---——-—-—-———--—---—-——-----—-—-————--—----—---————-—-—-——---——— 数据流名:还书清单 说明:归还书目信息 数据流来源:还书处理 数据流去向:图书库存情况存档 组成:图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期-—--——-—-——-——-------—---——---———-—-----—-—-———--————----—-——---—-—-—- 数据流名:入库新书清单 说明:入库新书信息 数据流来源:管理员 数据流去向:新书入库处理 组成:图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期 —--—--———-—---——-—---—--—-——-—-——-—---—-—---———-———-—-—---——---—--———- 数据流名:库存清单 说明:库存图书信息 数据流来源:新书入库处理 数据流去向:图书库存情况存档 组成:图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期 -————------———----————-——-—-—-——-———-----——-—————-—--——-——--——-—-—-——— 数据流名:销书计划 说明:销毁图书信息 数据流来源:管理员 数据流去向:销书处理 组成:图书编号,图书名称,日期,数量 —--—--——--——--—---——-—-—--—---—-——-—-——--—————————-—-——--——-—-——-—-——— 数据流名:销书清单 说明:销毁图书目录 数据流来源:销书处理 数据流去向:图书库存情况存档 组成:图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期 —--—---—------—---—-—-—--——————-————---------—-——-—------—-————------- 数据流名: 罚款清单 数据流来源:罚款处理 数据流去向:借阅者 组成:管理员编号,借阅证号,借书编号,罚款数目 ————-——-———--————--——-—---—————--—-————--———----—----—--——————-——-—--— 3. 处理逻辑字典 -——-———-------—---———-----——————-—-—-—-—-—-—--———-———-————----—-—-——-— 处理逻辑名: 借书处理 含义说明:完成读者对图书的借阅处理 输入数据流:借阅证 来源:借阅者 输出数据流: (1) 不合格的借阅证 去向:借阅者 (2) 图书 去向:借阅者 (3) 借书清单 去向:图书库存情况存档,借阅者信息,借阅情况存档 处理:检索“借阅情况存档\",“借阅者信息\",根据借阅者的借阅卡信息,审核借阅者的借阅条件,若不符合条件,则退回借阅卡;若符合条件,则检索“图书在库情况存档”,有在库图书,则完成审核,形成合格的借书单,据此完成图书借阅,并将借书信息加入到“借阅情况存档”,根据借书清单修改“图书库存情况存档”,“借阅者信息”文件。 -—--——--—————-————-———---—---—--—————--—--------————-————--——----——-—— 处理逻辑名: 还书处理 含义说明:完成读者对图书的归还处理 输入数据流:还书 来源:借阅者 输出数据流:还书清单 去向:图书库存情况存档,借阅者信息,借阅情况存档 处理:检索“借阅情况存档”,通过计算图书借阅的时间,审核借阅者所借阅的图书是否过期,若过期则通知借阅者缴纳罚款,并归还图书,若未过期则完成图书入库处理,并根据形成的还书清单,修改“借阅情况存档”、“图书库存情况存档”、借阅者信息”文件. -—-—--———————-—-—--—-—-—---——-——-——--——-—---——-----——-——------—--——-—- 处理逻辑名: 入库处理 含义说明:完成新书入库处理 输入数据流:入库新书清单 来源:管理员 输出数据流:库存清单 去向:图书库存情况存档 处理:根据管理员提交的入库新书清单完成图书入库处理,并根据形成的库存清单,修改 “图书库存情况存档”文件. —---———----—————-—————-—-—-----———----————-—-—-—-———---——--—-——————-—- 处理逻辑名: 销书处理 含义说明:完成图书的出库销书处理 输入数据流:销书计划 来源:管理员 输出数据流:销书清单 去向:图书库存情况存档 处理:根据管理员提交的销书计划完成图书出库处理,并根据形成的销书清单,修改 “图书库存情况存档”文件。 ———————————-—-—-----—————----——-————--——---———-——————-—-—---—--——-—-—- 4。 数据存储字典 ---—---—--—---——----—-—-——--——--------—-——--———--—--—---——---——————--— 数据存储名:图书库存情况存档 含义说明:每类图书库存情况 输入数据流:借书清单、还书清单、库存清单、销书清单 输出数据流:图书库存情况 数据存储的组成:图书 --——----—-———-——--—————---—-————————————---—--——-——-—--—---—-——-———-—— 数据存储名:借阅情况存档 含义说明:借阅者借阅情况 输入数据流:借书清单、还书清单 输出数据流:借阅情况 数据存储的组成:借阅证号,图书编号,管理员编号,借出日期,归还日期,到期日期,拖欠日期,罚款数目 —-——————-—-—----—-—-—--——-----————-—-—-—--———--——------————---——---——— 数据存储名:借阅者信息 含义说明:借阅者信息 输入数据流:借书清单、还书清单 输出数据流:借阅者信息 数据存储的组成:借阅者 ———-----—---—---—-—-——-———---——--—--—------—--—-—--—----—---—---—-—--- 3.1.4 功能模块分析 根据用户需求,以及数据流图分析,提取出系统应该实现的功能,如图3-5所示. 图3—5 系统功能结构图 主要包括: (1)实现对图书信息的修改,包括定义、查询、更新、删除等操作 图书信息包括图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期等。 (2)实现对借阅者信息的修改,包括定义、查询、更新、删除等操作 借阅者信息包括借阅证号,姓名,班级,院系、借书数量等。 (3)实现借书功能 借书信息的输入,包括借阅证号,图书编号,借出日期,到期日期,归还日期,拖欠日期,罚款数目等。 借书信息的查询,修改,包括图书编号,借阅证号,借阅者姓名,图书名称,借出日期等。 (4)实现还书功能 还书信息的查询和修改,包括还书信息编号,借阅者编号,姓名,图书编号,图书名称,借书日期,还书日期等。 (5)实现销书功能 对不符合要求的图书进行出库处理,包括图书编号,书名,作者姓名,出版社,出版日期,在库数,所在书库,入库日期,出库日期等. 3.2 概念结构设计 分析了数据流图及数据字典,列出图书管理系统中涉及到的实体以及基本的E—R图。 (1)实体属性图 该系统中涉及到的实体有:图书实体、借阅者实体、 管理员实体、书库实体,上述实体对应的属性图见图3—6、图3-7、图3-8以及图3—9所示。 图3—6 图书实体属性图 图3-7 借阅者实体属性图 图3-8 管理员实体属性图 图3—9 书库实体属性图 (2)基本E—R图 图3—10 基本E—R图 3。3 逻辑结构设计 3。3.1 关系模型 将上述E—R图转换为逻辑模型,其中实体转换为独立的关系模式,多对多联系也转换为独立的关系模式,而一对多联系与n端实体的关系模式进行合并,可得到如下关系模式。 图书(图书编号,书名,作者姓名,出版社,出版日期,在库数,入库日期,出库日期,书库编号),其中“图书编号”为主码,“书库编号”为外码. 借阅者(借阅证号,姓名,学号,专业,年级,院系,借书数量),其中“借阅证号”是主码。 管理员(管理员编号,姓名,职称,书库编号),其中“管理员编号\"是主码,“书库编号”为外码。 书库(书库编号,书库名称,地点),其中“书库编号”是主码. 借阅(借阅证号,图书编号,管理员编号,借出日期,归还日期,到期日期,拖欠日期,罚款数目),其中“借阅证号\"、“图书编号”及“管理员编号”共同构成主码. 管理(管理员编号,借阅证号),其中“管理员编号”及“借阅证号”共同构成主码。 处理(管理员编号,图书编号),其中“管理员编号\"及“图书编号\"共同构成主码。 3。3。2 数据模型优化 在“图书”、“借阅者\"、“管理员”、“书库”、“借阅”“管理\"及“处理”关系模式中,不存在非主属性对码的部分函数依赖以传递函数依赖,因此这些关系模式属于第三范式。 3.3。3 视图设计 视图是从一个特定的角度来查看数据库中的数据,从数据库系统内部看,一个视图是由SELECT语句组成的查询定义的虚表,它是由一张或多张表中的数据组成的;从数据库系统外部来看,视图就如同一张表,对视图的操作最终转换为对基本表的操作。可以在上述基本表上建立如下视图。 表3—1 视图定义 编号 V-1 V-2 V-3 V-4 视图(View) BookView1 BookView2 BorrowView FineView 作用(共性:提供数据保密和安全保护机制) 便于查询和更新图书的基本信息 便于查询和更新图书的入库、出库日期 用于查询当前的借阅信息 便于查询罚款信息 BookView1(图书编号,书名,作者姓名,出版社,出版日期,在库数,书库编号); BookView2(图书编号,书名,入库日期,出库日期); BorrowView(借阅证号,图书编号,管理员编号,借出日期,到期日期); FineView(借阅证号,图书编号,到期日期,拖欠日期,罚款数目). 3.4 物理结构设计 根据上述分析,数据库中应包含7张基本表,下面列出了每张表中数据项的定义,见表3-2、表3—3、表3-4、表3—5、表3-6、表3-7以及表3-8所示. 表3—2 图书表(Book) 列名 BookNo BookName BookWriter BookPulish BookPDate BookQuantity BookIn BookOut BookRNo 列名 ReaderNo ReaderName ReaderID ReaderPref 数据类型 Char Char Char Char Date Int Date Date Char 约束条件 Primary key Not Null Not Null Not Null — Not Null Not Null Not Null Foreign Key 数据类型 Char Char Char Char 说明 图书的编号 图书的书名 图书作者 图书出版社 图书的出版日期 图书的在库数量 图书入库时间 图书出库时间 图书所在书库编号 约束条件 Primary Key Not Null Not Null Not Null 说明 借阅证号 借阅者姓名 借阅者学号 借阅者所属专业 表3-3 借阅者表(Reader) ReaderGrade ReaderDep BorrowQuantity 列名 ManagerNo ManagerName ManagerTitle BookRNo 列名 StackroomNo StackroomName StackroomLoc 列名 ReaderNo BookNo ManagerNo OutDate BackDate InDate ArrearsDate Fine 列名 ManagerNo BookNo 列名 ManagerNo ReaderNo Char Char Int 数据类型 Char Char Char Char 数据类型 Char Char Char 数据类型 Char Char Char Date Date Date Date Int 数据类型 Char Char 数据类型 Char Char Not null Not null Not null and <=10 约束条件 Primary Key Not Null Not Null Foreign Key 约束条件 Primary Key 书库编号 Not Null 书库名称 Not Null 约束条件 Primary key Primary key Not Null — Not Null Not Null Not Null 约束条件 地点 借阅者的年级 借阅者所在院系 借书数量 说明 表3—4 管理员表(Manager) 管理员编号 管理员姓名 管理员职称 管理员所负责的书库编号 说明 表3—5 书库表(Stackroom) 表3-6 借阅信息表(Borrow) 说明 借阅证号 图书的编号 借出日期 归还日期 到期日期 拖欠日期 罚款数目 说明 图书的编号 说明 借阅证号 Primary Key 管理员编号 表3—7 管理表(Manage) Primary Key 管理员编号 Primary key 约束条件 Primary Key 管理员编号 Primary key 表3—8 处理表(Handle) 根据上述视图的定义,下面列出了每个视图中数据项的定义,见表3—9、表3-10、表3—11以及表3—12所示。 表3-9 图书基本信息视图 列名 BookNo BookName BookWriter BookPulish BookPDate BookQuantity 数据类型 Char Char Char Char Date Int 可否为空 Not Null Not Null Not Null Not Null — Not Null 说明 图书的编号 图书的书名 图书作者 图书出版社 图书的出版日期 图书的在库数量 BookRNo 列名 BookNo BookName BookIn BookOut 列名 ReaderNo BookNo ManagerNo OutDate InDate 列名 ReaderNo BookNo InDate ArrearsDate Fine Char 数据类型 Char Char Date Date 数据类型 Char Char Char Date Date 数据类型 Char Char Date Date Int Not Null 图书所在书库编号 可否为空 Not null Not Null Not Null Not Null 可否为空 Not null Not null Not null Not Null Not Null 可否为空 Not null Not null Not Null Not Null Not Null 说明 图书的编号 图书的书名 图书入库时间 图书出库时间 说明 借阅证号 图书编号 管理员编号 借出日期 到期日期 说明 借阅证号 图书编号 到期日期 拖欠日期 罚款数目 表3-10 图书的出入库信息视图 表3—11 读者当前借阅信息视图 表3—12 罚款信息视图 数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,在这个阶段中要完成的主要任务为确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构。 为数据库中各基本表建立索引,如下所示。 由于基本表Reader,Book的主码ReaderNo,BookNo经常在查询条件和连接操作的连接条件中出现,且它们的值唯一,在两个属性上建立唯一性索引; 由于基本表Reader的属性ReaderDep,Book的属性BookPublish经常在查询条件中出现,在两个属性上建立聚簇索引; 借阅信息基本表Borrow的属性ReaderNo, BookNo,经常在查询条件中出现,考虑在其之上建立聚簇索引。 4. 系统的实现 利用VB、Accesss实现了图书管理系统中,图书信息录入、图书信息查询功能,代码如下: Private Sub Command1_Click() ‘首页 “进入系统”按钮的事件过程,进入登录窗口 首页。Hide 登录窗口。Show End Sub 如图4—1所示: 图4-1 系统首页 Private Sub Command1_Click() ‘登录界面中的“登录\"按钮对应的事件过程 If Text1 = \"admin\" And Text2 = \"12345\" Then ‘需要输入账号admin,密码12345,才能进入系统 登录窗口.Hide ‘登录界面隐藏 主界面.Show ‘系统主界面出现 End If End Sub Private Sub Command2_Click() ‘“退出\"按钮的事件过程,退出系统 End End Sub 如图4—2所示: 图4-2 登录界面 系统主界面如图4—3所示: 主界面中根据系统结构,设置了四个菜单,每个菜单下有对应的菜单选项,这里只实现了图书录入、图书查询功能。选择图书录入则进入到图4-4所示界面,选择图书查询则进入图4-5所示界面。 Private Sub 图书查询_Click() ‘选择图书查询菜单项进入图书信息查询界面 图书信息查询。Show End Sub Private Sub 图书录入_Click() ‘选择图书录入菜单项进入图书信息录入界面 图书信息录入。Show End Sub 图4—3 系统主界面 图4—4 图书信息录入界面 Private Sub Command1_Click() ‘图书录入界面中“增加信息”按钮的事件过程 Dim sql As String ‘定义变量sql为字符串类型,下同 Dim bookno1 As String Dim bookname1 As String Dim bookwriter1 As String Dim bookpublish1 As String Dim bookin1 As Date Dim bookout1 As Date Dim bookpdate1 As Date Dim bookquantity1 As Integer Dim bookrno1 As String Dim conn As New ADODB.Connection ‘定义数据库链接 Set conn = CreateObject(\"ADODB。Connection”) conn。Open ”Provider=Microsoft.Jet.OLEDB。4。0;Jet OLEDB:Database Password=;Persist Security Info=False;Data Source=” & App。Path + \"\\dbbook。mdb ” & ”\" ‘链接数据库 bookno1 = Trim(Text1(0).Text) ‘从录入界面的文本框中获取用户输入的数据,即图书信息,下同 bookname1 = Trim(Text2。Text) ‘Trim函数是去掉字符串两边的空格 bookwriter1 = Trim(Text3.Text) bookpublish1 = Trim(Text4。Text) bookpdate1 = Trim(Text5.Text) bookin1 = Trim(Text6.Text) bookout1 = Trim(Text7.Text) bookquantity1 = Trim(Text8。Text) bookrno1 = Trim(Text9。Text) sql = ”insert into 图书表 (bookno ,bookname,bookwriter,bookpublish,bookpdate,bookin,bookout,bookquantity,bookrno) values(’\" & bookno1 & ” ’ , '\" & bookname1 & \" ’,'\" & bookwriter1 & ” ','” & bookpublish1 & ” ','” & bookpdate1 & \" ’,’” & bookin1 & \" ','\" & bookout1 & ” ','” & bookquantity1 & ” ’,'” & bookrno1 & \" ’) \" conn.Execute (sql) ‘向数据库中插入用户输入的数据 End Sub Private Sub Command2_Click() ‘退出按钮的事件过程,点击该按钮则退出图书录入界面。 图书信息录入。Hide End Sub 图4-5 图书信息查询界面 Private Sub Command1_Click(Index As Integer) ‘图书查询界面中“查询”按钮对应的事件过程 Dim sql As String ‘定义字符串变量 If Check1.Value = 1 Then ‘如果选择书名前的选项,则按书名进行查询 sql = \"bookname='” & Trim(Text1。Text & ” ”) & ”’\" End If If Check3.Value = 1 Then If Trim(sql) = ”\" Then ‘如果没有选择书名前的选项,则按作者名进行查询 sql = \"bookwriter=’” & Trim(Text2.Text & \" ”) & ”'” Else ‘如果选择书名前的选项,也选择作者名前的选项则查询条件有两个,即书名、作者名, sql = sql & ” and bookwriter=’” & Trim(Text2。Text & \" \") & ”’\" ‘按书名、作者查询 End If End If If Trim(sql) = ”” Then MsgBox \"请选择查询方式!\", vbOKOnly + vbExclamation ‘如果既没有按书名也没按作者名查询,则给出提示对话框 Exit Sub End If Adodc1.RecordSource = \"select * from 图书表 where \" & sql ‘根据上面形成的查询条件,在数据库中执行SELECT语句,查询满足条件的记录 Adodc1。Refresh Set DataGrid1。DataSource = Adodc1 ‘将查询结果显示在DataGrid1控件中。 DataGrid1.Refresh DataGrid1。AllowAddNew = False ‘不允许直接在DataGrid1控件中添加、删除、修改记录 DataGrid1.AllowDelete = False DataGrid1.AllowUpdate = False End Sub Private Sub Command2_Click() ‘“取消”按钮的事件过程,退出 Unload Me End Sub
因篇幅问题不能全部显示,请点此查看更多更全内容