# 图书馆 **Repository Path**: little-pig_2/library ## Basic Information - **Project Name**: 图书馆 - **Description**: 图书借还书数据库综合实验 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-11-01 - **Last Updated**: 2023-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### **图书借还书数据库综合实验** **原创性声明** 所呈交的报告是我在老师指导下进行的研究工作及取得的研究成果。除了特别加以标注和致谢的地方外,报告中不包含其他人已经发表或撰写过的研究成果。 小组成员及分工: **destiny**:需求分析,数据库设计,图书管理、图书借还功能编程实现 **小龙曦宝**:需求分析,数据库设计,用户管理、读者借还情况查询编程实现 W:需求分析,数据库设计,部分图书和用户管理的业务逻辑实现 签名:  xiaolongxibao 日期: 2022.12.23 **图书借还书数据库综合实验** **1** **概述** ***1.1*任务描述** 本系统面向图书馆管理人员提供便捷的书籍信息和读者的管理与查询服务,并为读者提供明确的书籍借还信息查询。当代人们精神方面上的高要求使得人们对实体书籍的借阅产生了大量的需求,而伴随着各地图书馆规模的不断扩大,日益膨胀的数据信息量带来了人力物力成本的大量上升,传统的人工管理模式已不再适合目前图书的借还管理需求,因此,一款可靠而又便捷的图书借还数据库管理系统的建立迫在眉睫。 大型图书馆拥有大量的读者群体,而读者对书籍的借阅使得其与书籍信息产生了庞大的信息交错,因此本系统要求基本的对图书资料以及读者信息进行存储查询修改等,还要提供可靠的借还登记信息存储服务和便捷的查询服务。综上,本系统旨在建立一个拥有规范可靠的图书借还书信息存储、高效快速的信息查询修改、友好便捷的操作界面的图书管理系统。 **1.2** **系统目标** 实用性原则:真正为读者及图书管理员的实际工作服务,按照图书馆书籍借阅的实际流程,设计出实用的图书借阅管理系统。 可靠性原则:必须为图书馆用户群体提供可靠的信息安全服务,以保证读者的个人隐私信息不被泄露。 友好性原则:本图书借阅管理系统面向的用户是读者群体以及图书管理工作人员,所以系统操作上要求简单、方便、快捷,易于上手,便于用户使用。 可扩展性原则:采用开放的标准和接口,便于系统在不断的更新迭代中向更大的规模和功能扩展,同时能够不断适应图书管理需求的变更。 **1.3系统的功能需求** 根据图书借还管理系统的理念,此图书借还管理系统必须满足以下需求: \1) 具有新书登记、不存在书目删除、变更图书信息修改等对图书资料进行管理的功能。 \2) 提供多条件查询书目详细信息的功能。 \3) 具有新读者登记、不再借阅的读者信息删除、变更读者信息修改、读者详细信息查询等对读者信息进行管理的功能。 \4) 能快速、准确地了解读者本人所借阅过以及正在借阅的书籍信息,以便进行读者的借阅书籍规划。 \5) 提供借阅登记表以及返还登记表来管理借阅,并提供书籍借阅次数排行。 \6) 能快速、准确地了解书籍的借阅状态,以便于读者借阅以及书记管理。 \7) 提供借书和还书功能。 \8) 提供简单的管理员添加与修改功能。 **1.4系统的性能需求** 为了保证系统能够长期、安全、稳定、可靠、高效的运行,系统应该满足以下的性能需求: l 系统的准确性和及时性 系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足用户对信息的处理。由于系统的查询功能对于整个系统的功能和性能完成很重要。从系统的多个数据来源来看,书籍信息查询、读者信息查询、借还信息查询,其准确性很大程度上决定了系统的成败。因此,在系统开发过程中,系统采用优化的SQL语句及安全扩展存储过程来保证系统的准确性和及时性。 l 系统的开放性和系统的可扩充性 系统在开发过程中,应该充分考虑以后的可扩充性。例如系统权限和书籍信息设置等模块也会不断的更新和完善。所有这些都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、 替换完成系统的升级和更新换代。 l 系统的易用性 本书籍借还管理系统面向的用户是读者群体以及书籍管理工作人员,此类人群对计算机的操作能力参差不齐,所以在系统操作上要求简单、方便、快捷,便于用户使用。这就要求系统能够提供良好的用户接口,易于上手的人机交互界面。 **2** **需求分析** 对用户需求进行调查分析后,形成用户需求分析文档。 **2.1数据字典** 1.数据项的描述(部分) 数据项: 书籍编号 含义说明: 标识每一本书(不同的书本实体) 类型: 字符型 长度: 12 取值含义: 由书本入库时间以及当日序列决定,唯一标识不能为空 与其他数据项的逻辑关系:与书本实体信息一一对应 数据项: 书目编号 含义说明: 标记每一种类的书目(同样的书目同一书籍编号) 类型: 数值型 长度: 不限 取值含义: 设定编号自增,当新增书目信息时在库编号加一 与其他数据项的逻辑关系:同一书目编号可以对应多个书籍编号 数据项: 读者编号 含义说明: 标记每一个读者 类型: 字符型 长度: 12 取值含义: 由读者注册时间以及当日序列决定,唯一标识不能为空 与其他数据项的逻辑关系:与读者一一对应 数据项: 书名 含义说明: 书目名称 类型: 字符型 长度: 12 取值含义: 书目名称,标识书本,可存在不同版次的同名书籍 与其他数据项的逻辑关系: 与书目编号一一对应关系 数据项: 作者 含义说明: 某一书目的作者 类型: 字符型 长度: 30 取值含义: 定义作者的标志,可以存在重复 与其他数据项的逻辑关系: 与书目编号一一对应关系 2.数据结构的描述(部分) 数据结构: 读者 含义说明: 是图书管理系统的主题数据结构,定义了一个用户登记的相关信息 组成: 读者号,姓名,性别,联系方式,权限,信用等级,违规次数 数据结构: 书目 含义说明: 是图书管理系统的主题数据结构,定义了一种书目登记的相关信息 组成: 书目号,书名,作者,出版社,类型,价格 数据结构: 图书 含义说明: 是图书管理系统的主题数据结构,定义了一本书登记的相关信息 组成: 书号,书目号,借阅次数,书籍状态,入库时间 数据结构: 借书信息 含义说明: 记录了一个读者借阅一本书的时间和应还书时间 组成: 借阅号,读者号,书籍号,借阅时间,应还书日期 数据结构: 还书信息 含义说明: 记录了一个读者返还一本书的时间以及书本归还状态 组成: 还书号,读者号,书籍号,还书时间,还书状态 3.数据流的描述(部分) 数据流编号:F1 数据流名称:书籍信息 简述: 供读者查阅书籍内容 数据流来源:图书管理系统 数据流去向:读者 数据流组成:书号,书名,作者,出版社,入库时间,类型,当前状态, 价格,借阅次数 数据流量: 400次/天 高峰流量: 600次/天 数据流编号:F2 数据流名称:读者信息 简述: 系统用于判断读者行为的合法性 数据流来源:图书管理系统 数据流去向:读者 数据流组成:读者号 姓名 权限 信用等级 违规次数 数据流量: 100次/天 高峰流量: 150次/天 数据流编号:F3 数据流名称:借书信息 简述: 记录读者借书信息 数据流来源:读者 数据流去向:借书处 数据流组成:读者号,书号,借阅时间,应还书日期 数据流量: 200次/天 高峰流量: 300次/天 数据流编号:F4 数据流名称:还书信息 简述: 记录读者还书信息 数据流来源:读者 数据流去向:还书处 数据流组成:读者号,书号,还书时间,还书状态 数据流量: 200次/天 高峰流量: 300次/天 4.处理逻辑的描述 处理逻辑编号: P1 处理逻辑名称: 更新现有图书信息 简述: 有新增图书购入图书馆或者有图书状态等信息变更时,要及时更新图书馆藏书信息 输入的数据流: 更新书籍信息表单 处理描述: 对图书信息数据进行更新操作 输出的数据流: 新的图书馆藏书信息 处理频率: 10次/天 处理逻辑编号: P2 处理逻辑名称: 图书借阅证办理 简述: 有新的读者注册后,要及时分配读者id、更新读者信息 输入的数据流: 读者身份信息 处理描述: 对新增读者进行注册操作 输出的数据流: 新增读者证信息 处理频率: 20次/天 处理逻辑编号: P3 处理逻辑名称: 更新读者信息 简述: 有读者信息变更或者选择注销后,要及时更新读者信息 输入的数据流:变更的读者证件 处理描述: 依照需求对对应读者进行更新操作 输出的数据流:新的读者信息 处理频率: 10次/天 处理逻辑编号: P4 处理逻辑名称: 查询读者信息 简述: 读者查询自身信息或者管理员根据id查询对应读者的详细信息 输入的数据流: 所要查询的读者id 处理描述: 根据id进行读者信息查询操作 输出的数据流:读者身份信息、读者书籍借阅情况信息 处理频率: 100次/天 处理逻辑编号: P5 处理逻辑名称: 更新图书归还信息 简述: 当有读者归还书籍后,要及时更新图书归还登记信息 输入的数据流: 图书归还登记表 处理描述: 对图书返还登记表以及对应书籍状态数据进行更新操作 输出的数据流:新的书籍归还信息、新的书籍状态 处理频率: 200次/天 处理逻辑编号: P6 处理逻辑名称: 更新图书借阅信息 简述: 有图书被借阅走后,要及时更新图书借阅信息以及对应图书状态 输入的数据流: 图书借阅登记表 处理描述: 对图书借阅登记表以及对应书籍状态数据进行更新操作 输出的数据流:新的书籍借阅信息、新的书籍状态 处理频率: 200次/天 处理逻辑编号: P7 处理逻辑名称: 查询图书信息 简述: 读者有查询需求时,要按照所给的查询要求进行快速查询 输入的数据流: 查询书目条件 处理描述: 按照查询书目条件进行多条件查询,在所有馆藏书目中进行筛查显示 输出的数据流:所查找到的书籍信息 处理频率: 400次/天 5.数据存储的描述 数据存储编号: S1 数据存储名称: 图书数据 简述: 记录图书信息 数据存储组成: 图书编号,图书名,作者,出版社,入库时间,类型, 当前状态,价格,借阅次数 关键字: 图书编号 相关联的处理: P1,P5,P6,P7 数据存储编号: S2 数据存储名称: 读者数据 简述: 记录读者信息 数据存储组成:读者编号,姓名,权限,信用等级,违规次数 关键字: 读者编号 相关联的处理: P2,P3,P4 数据存储编号: S3 数据存储名称: 借阅登记表 简述: 记录借阅信息,包括借阅时间,和应还时间 数据存储组成:读者编号,书编号,借阅时间,应还书日期,状态 关键字: 读者编号,书编号,借阅时间 相关联的处理: P6 数据存储编号: S4 数据存储名称:返还登记表 简述: 记录图书返还信息 数据存储组成:读者编号,书编号,还书日期 关键字: 读者编号,书编号,还书日期 相关联的处理: P5 **2.2数据流图** ![image-20230223142928302](README.assets/image-20230223142928302.png) **3** **数据库设计** **3.1** **概念结构设计** 根据需求分析形成的数据字典和数据流图,抽象得到的实体有: 用户(编号,姓名,性别,联系方式,违规次数) 书籍(书籍编号,当前状态,借阅次数,入库时间) 借阅登记表(借阅号,借阅时间,归还期限) 还书登记表(借阅号,还书时间,书本情况) 根据实体与属性划分原则得到的实体有: 书目(书目编号,书名,作者,出版社,类型) 用户类型(代码,身份名称) 信用等级(等级编号,可借数量,借阅期限) 实体之间的联系如下: 一个读者可以借阅多本图书,一本书籍同时只能借给一个读者。 一种书目可以有多本书籍实体,一本书籍的书目种类是唯一的。 一种用户类型可以有多个用户,一个用户的用户类型是唯一的。 一种信用等级可以有多个用户,一个用户的信用等级是唯一的。 借走的书本可以归还。 一个读者可以归还多本书。 图书借还系统E-R图: ![image-20230223142945961](README.assets/image-20230223142945961.png) **3.2** **逻辑结构设计** 联系转换的关系模式: \>“借阅”联系与借阅登记表关系模式合并。 \>“还书”联系与还书登记表关系模式合并。 \>“使用”联系与借阅登记表关系模式合并。 \>“属于”联系(用户)与用户关系模式合并。 \>“属于”联系(图书)与图书关系模式合并。 由于同中图书可能有多本,为避免数据冗余,将图书拆分为书目表以及图书表 图书借还系统关系模式如下: 用户(编号,姓名,性别,联系方式,违规次数,等级编码,身份代码) 用户类型(代码,身份名称) 信用等级(等级编号,可借数量,借阅期限) 图书(书籍编号,书目编号,当前状态,借阅次数,入库时间) 书目(书目编号,书名,价格,作者,出版社,类型) 图书借阅表(借阅号,读者编号,书籍编号,借阅时间,归还期限) 图书返还表(返还编号,借阅编号,归还时间,书本情况) 定义读者子模式: 书籍库存(书名,作者,出版社,类型,总库存,当前库存,借阅次数) 借阅排行(书籍编号,书名,借阅次数) 借阅书单(借阅号,书籍编号,用户编号,借阅时间,借阅期限,返还状态) **3.3** **物理结构设计** 图书租售数据库的数据文件、日志文件存放到指定的硬盘上,该硬盘最好不安装操作 系统、DBMS 等软件,数据库备份文件存放到移动硬盘。 数据库索引采用数据库建立时默认生成的索引形式,不添加额外索引。 **4** **数据库实施** **4.1 MySQL 8.0**概述 **4.1.1**安装 ​ MySQL官网提供了zip版本文件进行离线安装,其中包含MySQL数据库引擎在内的各种组件,直接下载解压即可 **4.1.2**配置 将MySQL添加至环境变量后,通过手动编辑my.ini对MySQL进行进一步配置。 ![image-20230223142956677](README.assets/image-20230223142956677.png) **4.1.3**管理 l 服务器管理 Ø 注册服务器 Ø 配置服务器 l 管理数据库引擎服务 可以使用 MySQL配置管理器或从命令提示符处启动、暂停、停止和配置服务。 l 备份和还原 利用select into outfile实现数据的备份与还原 利用mysqldump工具对数据进行备份和还原 利用lvm快照实现几乎热备的数据备份与恢复 基于Xtrabackup做备份恢复 l 使用MySQL数据库安装工具或前往MySQL获取最新安装包进行数据库升级。 **4.2**数据库创建 **4.2.1**创建数据库 定义library数据库: Create DataBase library on (name=library_dat,filename='D:\data\hotel_data.mdf',size=100mb) log on (name=library_log,filename='D:\data\hotel_log.ldf',size=10mb) **4.2.2**定义基本表 在library数据库上,根据关系模式,定义基本表。表结构如下: l 用户表:存储用户的信息,包括读者和图书管理员。 表4.1 tb_user(用户表) | 属性列名 | 属性说明 | 数据类型 | 码 | 外码 | 备注 | | ------------ | -------- | ---------- | ---- | ---- | --------------------------------------- | | u_id | 用户编号 | Char(12) | 主码 | | (U+日期+id) UyyyymmddXXX | | u_name | 用户姓名 | Varchar(9) | | | Not null | | u_gender | 性别 | Tinyint | | | 0-girl 1-boy | | u_phone | 联系方式 | Char(11) | | | | | u_violation | 违规次数 | Int | | | Not null Default 0 | | credit_grade | 信用等级 | Int | | 外码 | Not null Default 1 参照tb_creditGrade | | Identity_id | 身份编码 | Char(4) | | 外码 | Not null 参照tb_userType | l 用户类型表:存储用户类型和身份。 表4.2 tb_userType | 属性列名 | 属性说明 | 数据类型 | 码 | 外码 | 备注 | | -------- | -------- | ---------- | ---- | ---- | -------- | | ut_id | 身份编码 | Char(4) | 主码 | | | | ut_name | 身份名称 | Varchar(5) | | | Not null | l 信用等级表:存储信用等级及对应的可借数量和借阅期限。 表4.3 tb_creditGrade | 属性列名 | 属性说明 | 数据类型 | 码 | 外码 | 备注 | | -------- | -------- | -------- | ---- | ---- | ------------------------------ | | cg_id | 等级编号 | Int | 主码 | | 等级 0、1、2、3、4 | | cg_num | 可借数量 | Int | | | Check in (0,1,2,3,4) | | cg_time | 借阅期限 | Int | | | Day Check in (0,20,25,30,35) | l 图书表:存储每每本图书信息 表4.4 tb_book | 属性列名 | 属性说明 | 数据类型 | 码 | 外码 | 备注 | | ------------- | -------- | --------- | ---- | ---- | -------------------------------------------- | | b_id | 书籍编号 | Char(12) | 主码 | | (B+日期+id) ByyyymmddXXX | | b_no | 书目编号 | Int | | 外码 | Not null | | b_status | 书籍状态 | TinyInt | | | Not null Default 1 1:在库 2:借出 3:遗失 | | b_borrowcount | 借阅次数 | Int | | | Deflaut 0 | | b_jointime | 入库时间 | Timestamp | | | Not null | l 书目表:存储书目信息。 表4.5 tb_bookinfo | 属性列名 | 属性说明 | 数据类型 | 码 | 外码 | 备注 | | -------- | -------- | ----------- | ---- | ---- | ---------------------------- | | b_no | 书目编号 | Int | 主码 | | primary key auto_increment | | b_name | 书名 | Varchar(12) | | | Not null | | b_author | 作者 | Varchar(30) | | | Not null | | b_press | 出版社 | Varchar(20) | | | Not null | | b_type | 书目类型 | Varchar(20) | | | Not null | | b_price | 价格 | Double | | | Not null | l 书籍借阅表:存储书籍借阅情况 表3.6 tb_borrowCard | 属性列名 | 属性说明 | 数据类型 | 码 | 外码 | 备注 | | ----------- | -------- | --------- | ---- | ---- | --------------------------- | | bc_id | 借阅编号 | Char(13) | 主码 | | (BC+日期+id) BCyyyymmddXXX | | u_id | 读者编号 | Char(12) | | 外码 | 参照tb_user | | b_id | 书籍编号 | Char(12) | | 外码 | 参照tb_book | | Borrow_time | 借阅时间 | Timestamp | | | Not null | | Retrun_ddl | 归还期限 | Timestamp | | | Not null | l 书籍归还表:存储书籍归还情况 表3.7 tb_returnCard | 属性列名 | 属性说明 | 数据类型 | 码 | 外码 | 备注 | | ----------- | -------- | --------- | ---- | ---- | --------------------------- | | rc_id | 归还编号 | Char(13) | 主码 | | (RC+日期+id) RCyyyymmddXXX | | Bc_id | 借阅编号 | Char(13) | | 外码 | 参照tb_borrwoCard | | Return_time | 借阅时间 | Timestamp | | | Not null | | Book_status | 书本情况 | TinyInt | | | 1:正常 2:破损 3:遗失 | **4.2.3**定义视图 1.书籍库存(书籍编号,书名,作者,出版社,类型) ![image-20230223143055776](README.assets/image-20230223143055776.png) 2.借阅排行(书籍编号,书名,借阅次数) ![image-20230223143105258](README.assets/image-20230223143105258.png) 3.借阅书单(借阅号,书籍编号,用户编号,借阅时间,借阅期限,返还状态) ![image-20230223143114910](README.assets/image-20230223143114910.png) **4.2.4**定义触发器 触发器作为一种特殊的存储过程,其在插入、删除、修改特定表中的数据时,由DBMS自动调用执行。鉴于能提供比数据库本身标准功能更精细、更复杂的数据控制能力,在保障数据的完整性和一致性的同时能够消除上层应用程序的冗余编码,因此对本系统中部分表定义触发器以完成插入时的编号自动生成,在此以借阅表为例: 此触发器会在向借阅表插入数据之前按照借阅时间和当日最后一次的借阅索引自动生成借阅号,同时通过查询借阅的读者的信用等级自动计算最后的归还期限;因此在上层的应用程序控制中只需要提供读者号以及所借阅的书籍号便可生成借阅表,减少了因误操作而带来脏数据、错误数据的可能性。 -- 触发器 for auto_borrowCard_id (BCYYYYMMDDXXX) delimiter $$ drop trigger if exists auto_set_borrowCard_id$$ create trigger auto_set_borrowCard_id before insert on tb_borrowCard for each row begin declare idNum int default 0; declare time_length int; declare generate_id char(13); declare my_id varchar(3) ; declare insert_time varchar(8) default concat(date_format(now(), '%Y%m%d')); select substring(last_id,11) into my_id from tb_lastId where tb_id=2 and last_id like concat('%',insert_time,'%') ; if(my_id is not null) then ​ select my_id+1 into idNum; end if; select lpad(idNum+'',3,0) into my_id; set generate_id = concat('BC', insert_time, my_id); update tb_lastId set last_id=generate_id where tb_id=2; -- update tb_book.borrowcount,status update tb_book set b_status = 3, b_borrowcount = b_borrowcount + 1 where b_id = NEW.b_id; -- update return_ddl select `cg_time` into time_length from tb_creditGrade,tb_user where tb_user.u_id = NEW.u_id and tb_creditGrade.cg_id = tb_user.credit_grade; set NEW.Return_ddl = date_add(current_date(), INTERVAL time_length DAY); set NEW.bc_id = generate_id; -- 向表插入记录之前,设置bc_id字段。 end $$ delimiter ; **4.2.5**数据加载 按照设计的数据库结构,使用Excel组织书籍,用户,借阅数据。 使用Navicat Premium 15的导入数据向导将书籍,用户,借阅数据加载到library数据库中。 **5** **应用系统设计** 本系统采用模块化的结构设计方式,设计过程中采用三层架构的思想将软件结构分为表现层,业务逻辑层以及持久层,在简化软件设计过程的同时兼具良好的拓展性以及层次性,以实现功能模块之间的相互独立,基本做到了软件设计中高内聚低耦合的目标。经过对变换型数据流图的分析得到图书借还管理系统包括用户管理、图书管理、借阅管理三个模块,每个模块实现其相应的功能,具体设计方案如下图所示: ![image-20230223143152901](README.assets/image-20230223143152901.png) **6** **应用系统实施** **6.1**软件支撑环境及开发工具 ​ 依据本图书借还管理系统的需求分析以及经过相关技术可行性分析后,结合拟定的系统规模大小以及软件的拓展性要求,综合考量过后选定使用java 作为系统的程序设计语言,其具有的简单性、跨平台性、面向对象、安全性、多线程性、分布性、可移植性、解释型、高性能和动态性等特性让它能较好的完成系统实现中所需要的代码拓展和复用、事务并发和多线程任务处理需求。同时为了合作编写的项目结构统一,选择使用 maven 进行项目构建和依赖管理,选用Spring这一简单、可测试和松耦合的开源框架进行项目编写;而对于持久层的数据存储则借助 MyBatis这一款优秀的持久层框架,其对于自定义 SQL 的支持、存储过程以及高级映射的处理使得对于系统的数据库的链接更为动态和便捷,也更利于后期的维护,同时借助 SQL 进行数据的一些初始化操作。 最后拟定本次图书借还管理系统的开发所拟定的开发环境如下: a) 集成开发环境:IntelliJ IDEA 2022.1.4(项目编写) MySQL80(数据库选取) b) 主要开发依赖: Java Jdk 16.0.2 MyBatis 3.5.11 Maven 3.8.6 Spring 5.3.1 **6.2** **用户界面设计** **6.2.1** **书籍管理模块** 1.书籍库存浏览界面 用户可在此界面浏览当前图书馆库存情况,并可通过书籍名,作者名以及对书籍类型进行筛选查找图书馆当前是否有所需书籍库存(实现书籍信息多条件查询)。并可通过借阅排行按钮查看当前借阅前10的书目。管理员可通过书籍详情按钮查看每本书的当前状态和借阅情况。 ![image-20230223143206972](README.assets/image-20230223143206972.png) 2.书籍入库界面 图书管理员可在此界面进行书籍入库操作,在录入书籍名称,作者,出版社,单价以及类型等相关信息后,点击添加按钮及可进行书籍入库操作。对于不存在于书目信息表中的书目会在新增书目后添加书籍,若已存在于书目信息表则直接添加书籍。图书馆里员可以获取入库编号以对书籍进行标注。 ![image-20230223143224958](README.assets/image-20230223143224958.png) 3.书籍信息修改界面 图书管理员可在此界面查看书籍详情并进行针对书籍的详细信息修改,并可以进行遗失状态书籍的删除操作,如果是对于书籍的状态信息进行更改则会修改数据库中单本书籍的状态;若是针对书目信息的修改则会对书目表中的信息进行修改从而达到修改全体同种书目的效果。 ![image-20230223143233297](README.assets/image-20230223143233297.png) **6.2.2**书籍借还模块 1.书籍借阅/归还界面 用户可在此界面进行借阅/返还操作,系统会根据用户进入当前界面的选择,自动设置当前界面的相关内容。用户可通过在书籍编号处输入书籍号来借阅/返还书籍,若书籍满足借阅/返还条件,则将书籍加入借阅/返还列表中,同时可点击删除按钮将某本书籍从借阅/返还列表中删除。当添加所有书籍完成,则点击借阅/返还按钮进行借阅/返还操作。同时当前借阅人/返还人默认为当前账号登录人员,若要选择其他人员,可通过在用户编号处输入相应用户编号进行更换,若输入正确,则会在用户信息栏更新用户信息,否则会输出相应提示信息。 ![image-20230223143249211](README.assets/image-20230223143249211.png) 2.用户借阅界面 用户可通过个人信息界面查看个人借阅情况,包括借阅图书总数,待归还图书总数以及详细借阅情况,并可筛选个人借阅图书中已归还和待归还的图书,从而直观了解个人借阅情况。 ![image-20230223143255734](README.assets/image-20230223143255734.png) 3.管理员借还历史信息查询界面 管理员可以通过此界面进行图书馆借还记录的查询,并提供针对书籍编号的所有借阅历史查询也可进行日期区间内的借还记录查询以及两者结合的多条件查询。 ![image-20230223143300443](README.assets/image-20230223143300443.png) **6.2.3**用户管理模块 1.读者/管理员登录/注册界面 用户可以在此页面输入图书证号或者注册时使用的手机号作为账号并输入正确密码进行登录操作;若尚未注册账号也可以通过注册按钮进行读者账号的注册;除此之外也可以使用游客的身份对图书馆内的藏书进行查阅,但无法查看书籍的详细信息以及书籍的借阅服务。 ![image-20230223143321995](README.assets/image-20230223143321995.png) 2.用户个人信息管理及借阅情况查询 用户可以在此页面查看个人详细信息并可以进行个人的密码、联系方式以及其他个人信息的修改,同时可以通过查看个人借阅次数以及未还书目的数量直观的反映用户的书籍借阅归还情况,也可以点击查看借阅/归还来查询个人借阅历史详情。 ![image-20230223143328615](README.assets/image-20230223143328615.png) 3.管理员读者管理界面 管理员可以通过用户管理界面进行包括用户的查询、非活/违规用户的删除、用户权限的更改、用户密码的重置等操作。并且可以通过双击用户列表中的对应用户查询用户的书籍借阅情况(即对应用户的历史借阅归还信息)。 ![image-20230223143333028](README.assets/image-20230223143333028.png) **6.3** **功能模块编程** 1.数据库连接配置 本次使用Spring框架整合MyBatis进行数据库的编程实现,其底层是使用JDBC连接至数据库,所以首先要在项目依赖中数据库连接的配置文件,包括注册驱动、数据库URL及端口、登录数据库的账号密码等数据库基本信息。如: jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3307/librarydb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC jdbc.username=root jdbc.password=huahua 2.数据库访问具体过程 在mybatis的全局配置文件中进行数据源和事务提交的配置,同时配置映射文件mapper.xml(编写想数据库传递的SQL语句);在进行数据库通讯时则通过SqlSessionFactory会话工厂产生本次操作数据库(发出sql增删改查)的SqlSession会话对象,其可以通过Eecutor执行器操作数据库进行CRUD(增删改查),最后由mapper statement底层封装对象完成对数据库存储的封装(sql语句、输入参数、输出结果类型)。 3.功能模块实现(以书籍管理为例) 依照自顶向下逐步求精的程序设计方法,本次系统设计参考三层架构进行实现,在表现层中的 Controller 中的 BookController 用于控制应用界面并依据请求内容调用UserService中的业务逻辑处理方法(如 BookInfoChange 书籍信息修改)进行处理,而业务逻辑 BookService则调用数据访问层的方法对持久层数据进行相应的增删改查(BookMapper)。 BookMapper.xml中sql查询语句的配置: 而在对应BookMapper的接口类中只需要定义其抽象方法: Book selectBookById(@Param("bookId") String bookId); 通过注解完成参数映射,而接口类和xml配置文件的映射由myBatis完成。 **6.4** **系统调试及测试** ​ 本次项目调试测试阶段对各个模块进行了针对基本路径测试的白盒测试以及等价类划分和边界值分析的黑盒测试,以及最后进行了项目整体自底向上的集成测试。而经过不断地调试修改,最终测试无误,系统呈现效果能较好地满足系统整体的业务需求。 **7 参考文献** [1] 王珊、萨师煊.数据库系统概论(第5版)[M].北京:高等教育出版社,2014. [2] 王红、陈功平.数据库开发案例教材[M].北京:清华大学出版社,2013. [3] Cay S.Horstmann、Gary Cornell.JAVA2核心技术卷II:高级特性(原书第7版)[M]. 北京:机械工业出版社, 2006 [4] 杨开振. 深入浅出MyBatis技术原理与实战[M]. 北京:电子工业出版社, 2016. #### 软件架构 a) 集成开发环境:IntelliJ IDEA 2022.1.4(项目编写) ​ MySQL80(数据库选取) b) 主要开发依赖: Java Jdk 16.0.2 ​ MyBatis 3.5.11 ​ Maven 3.8.6 ​ Spring 5.3.1 #### 安装教程 #### 使用说明 ​ you can #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)