大学生都经历过的图书管理系统(Mysql+MyEclipse+Struts2+Hibernate)--附带源码哟!

版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/84944648

图书管理系统(Mysql+MyEclipse+Struts2+Hibernate)

1、数据库与数据表的设计

1.1设计数据表(由于操作失误数据表重构略有差异)

    1. 读者类别表(tb_reader_type)

序号

字段名

数据类型

说明

1

type_id

SmallInt

读者类别【主键】

2

type_name

varchar(20)

读者类别名称【唯一、非空】

3

type_canLendQty

Int

可借书数量

4

type_canLendDay

Int

可借书天数

5

type_canContinueTimes

Int

可续借的次数

6

type_punishRate

Float

罚款率(元/天)

7

type_dateValid

SmallInt

证书有效期(年)【非空,0表示永久有效】

   2. 读者信息表(tb_reader)

序号

字段名

数据类型

说明

1

rd_id

Int

读者编号/借书证号【主键】

2

rd_name

nvarchar(20)

读者姓名

3

rd_sex

nchar(1)

性别,男/女

4

rd_type

SmallInt

读者类别【外键tb_reader_type】【非空】

5

rd_dept

nvarchar (20)

单位代码/单位名称

6

rd_phone

nvarchar(25)

电话号码

7

rd_email

nvarchar(25)

电子邮箱

8

rd_dateReg

datetime

读者登记日期/办证日期

9

rd_photo

image

读者照片

10

rd_status

nchar(2)

证件状态,3个:有效、挂失、注销

11

rd_borrowQty

Int

已借书数量(缺省值0)

12

rd_pwd

nvarchar (20)

读者密码(初值123456),可加密存储

13

rd_adminRoles

SmallInt

管理角色,0-读者、1-借书证管理、2-图书管理、4-借阅管理、8-系统管理,可组合

分析提示:(1)可将管理员另外建表,与读者信息分开单独进行设计。(2)单位rdDept可以采用名称,若采用代码则需另建一张表:单位代码与名称对照表,这样便于按单位统计。(3)管理角色(rdAdminRoles)也可设计为4个bit类型字段。

   3. 图书信息表(tb_book)

序号

字段名

数据类型

说明

1

bk_id

Int

图书序号【标识列,主键】

2

bk_code

Nvarchar (20)

图书编号或条码号(前文中的书号)

3

bk_name

Nvarchar(50)

书名

4

bk_author

Nvarchar(30)

作者

5

bk_press

Nvarchar(50)

出版社

6

bk_datePress

datetime

出版日期

7

bk_ISBN

Nvarchar (15)

ISBN书号

8

bk_catalog

Nvarchar(30)

分类号(如:TP316-21/123)

9

bk_language

SmallInt

语言,0-中文,1-英文,2-日文,3-俄文,

4-德文,5-法文

10

bk_pages

Int

页数

11

bk_price

Money

价格

12

bk_dateIn

DateTime

入馆日期

13

bk_brief

Text

内容简介

14

bk_cover

image

图书封面照片

15

bk_status

NChar(2)

图书状态,在馆、借出、遗失、变卖、销毁

说明:bk_code为前文中的书号,这里没有设计为关键字,而增加bkID字段作为表关键字,其原因为:防止新书入库时起始书号输入错误时,因关键字而不易修改。

  4. 借阅信息表(tb_borrow)

序号

字段名

数据类型

说明

1

bw_id

int

借书顺序号【主键】

2

bw_rd_id

Int

读者序号【外键tb_reader】

3

bw_bk_id

Int

图书序号【外键tb_book】

4

bw_idContinueTimes

Int

续借次数(第一次借时,记为0)

5

bw_idDateOut

DateTime

借书日期

6

bw_idDateRetPlan

DateTime

应还日期

7

bw_idDateRetAct

DateTime

实际还书日期

8

bw_idOverDay

Int

超期天数

9

bw_idOverMoney

Decimal(5,2)

超期金额(应罚款金额)

10

bw_idPunishMoney

Decimal(5,2)

罚款金额

11

bw_isHasReturn

Varchar(2)

是否已经还书,缺省为0-未还

12

bw_operatorLend

Nvarchar(20)

借书操作员

13

bw_operatorRet

Nvarchar(20)

还书操作员

分析提示:借阅信息即用于图书的借还管理,同时又是统计分析的主要信息来源,故要求保持其历史信息。设计时不能以(读者序号+图书序号)为关键字,否则读者不能第二次借阅同一本书了。


1.2 创建数据库

(1) 创建数据库:db_library;

(2) 创建登录名:root,密码:123456;

(3) 创建上述4张数据表及约束;

 (4) 表结构架构图如下:

 

  (5) 具体sql语句如下:

CREATE TABLE `tb_book` (

  `bk_id` int(11) NOT NULL AUTO_INCREMENT,

  `bk_code` varchar(20) NOT NULL,

  `bk_name` varchar(50) NOT NULL,

  `bk_author` varchar(30) NOT NULL,

  `bk_press` varchar(50) DEFAULT NULL,

  `bk_datePress` date DEFAULT NULL,

  `bk_ISBN` varchar(15) DEFAULT NULL,

  `bk_language` varchar(20) DEFAULT NULL,

  `bk_pages` int(11) DEFAULT NULL,

  `bk_price` decimal(5,2) DEFAULT NULL,

  `bk_dateIn` datetime DEFAULT NULL,

  `bk_brief` text,

  `bk_cover` longblob,

  `bk_status` char(2) NOT NULL,

  `bk_catalog` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`bk_id`)

) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

 

CREATE TABLE `tb_borrow` (

  `bw_id` bigint(20) NOT NULL AUTO_INCREMENT,

  `bw_rd_id` int(11) NOT NULL,

  `bw_bk_id` int(11) NOT NULL,

  `bw_idContinueTimes` int(11) DEFAULT NULL,

  `bw_idDateOut` datetime DEFAULT NULL,

  `bw_idDateRetPlan` datetime DEFAULT NULL,

  `bw_idDateRetAct` datetime DEFAULT NULL,

  `bw_idOverDay` int(11) DEFAULT NULL,

  `bw_idOverMoney` decimal(19,2) DEFAULT NULL,

  `bw_idPunishMoney` decimal(19,2) DEFAULT NULL,

  `bw_isHasReturn` varchar(255) DEFAULT NULL,

  `bw_operatorLend` varchar(255) DEFAULT NULL,

  `bw_operatorRet` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`bw_rd_id`,`bw_bk_id`),

  KEY `FKq20ewrvrofdxm6idxd6ldf64d` (`bw_bk_id`),

  KEY `bw_id` (`bw_id`),

  CONSTRAINT `FKcrf0u8bx7oa6ggwd1fm1wsc2c` FOREIGN KEY (`bw_rd_id`) REFERENCES `tb_reader` (`rd_id`),

  CONSTRAINT `FKq20ewrvrofdxm6idxd6ldf64d` FOREIGN KEY (`bw_bk_id`) REFERENCES `tb_book` (`bk_id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

CREATE TABLE `tb_reader` (

  `rd_id` int(11) NOT NULL AUTO_INCREMENT,

  `rd_name` varchar(255) DEFAULT NULL,

  `rd_sex` varchar(255) DEFAULT NULL,

  `rd_dept` varchar(255) DEFAULT NULL,

  `rd_phone` varchar(255) DEFAULT NULL,

  `rd_email` varchar(255) DEFAULT NULL,

  `rd_dateReg` datetime DEFAULT NULL,

  `rd_photo` longblob,

  `rd_status` varchar(255) DEFAULT NULL,

  `rd_borrowQty` int(11) DEFAULT NULL,

  `rd_pwd` varchar(255) DEFAULT NULL,

  `rd_adminRoles` int(11) DEFAULT NULL,

  `rd_type` int(11) DEFAULT NULL,

  PRIMARY KEY (`rd_id`),

  KEY `FKfw03j67ou6push07rmr9x9erw` (`rd_type`),

  CONSTRAINT `FKfw03j67ou6push07rmr9x9erw` FOREIGN KEY (`rd_type`) REFERENCES `tb_reader_type` (`type_id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

 

CREATE TABLE `tb_reader_type` (

  `type_id` int(11) NOT NULL AUTO_INCREMENT,

  `type_name` varchar(255) DEFAULT NULL,

  `type_canLendQty` int(11) DEFAULT NULL,

  `type_canLendDay` int(11) DEFAULT NULL,

  `type_canContinueTimes` int(11) DEFAULT NULL,

  `type_punishRate` decimal(19,2) DEFAULT NULL,

  `type_dateVaild` int(11) DEFAULT NULL,

  PRIMARY KEY (`type_id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;


1.3 系统实现

1.3.1 创建持久层类

ReaderType类:

Reader类:

Book类:

Borrow类:

其中构造方法、get/set方法省略。

 

1.3.2 建立Hibernate5的映射关系

包含一个hibernate5的核心映射,4个对应实体类的文件映射,共5个映射文件。

 

1.3.3 构建基本的页面结构

 

1.3.4 建立Struts2框架WEB层/Action&Interceptor

 

1.3.5 创建Service层控制前端/后端数据

 

1.3.6 创建DAO层进行数据服务端数据交互

 

1.3.7 创建WEB层/Interceptor权限管理模块

按照流程这一步才实现Interceptor,具体结构见3.4.


1.4  总结

1.4.1 局部问题总结

       在对Borrow表进行操作的时候一定要注意Borrow的特殊身份(Reader与Book的中间表),在Hibernate配置文件中中设置了Reader的inverse为false使的Reader拥有管理Book的权限,但是如果删除Reader下的Book就会导致Borrow表中的记录同时删除,也就不能再对这个Borrow操作了,最开始没有注意一直报空指针错误,找了半天还抽出模块测试都没有用,最后仔细分析报错和代码想到了这一点,在此列出警醒自己。

    由于之前对Mysql存储图片/text文件不够熟悉,这次做起来很是棘手;在百度上找了好久,各数不同很是苦恼,最后在大量资料下发现图片文件在Mysql下对应longblob对应java中的byte[]然后在图片文件转byte[]过程中一直出错再加上个人对文件流传输的不够理解走了很多弯路,具体的方法这里就不做过多介绍可以从源代码中得知,上传后的图片采用Tomcat的相对路径的形式存储再Tomcat中的指定文件夹image/下。

1.4.2整体总结

整体开发不够高效,还是因为前期开发中的思路不够明确,技术难点、重点不够清晰。需求分析、系统分析必不可少不能偷懒,好的前期分析,将事半功倍。总体上页面交互性不够好、页面友好型不够好,因为本人不喜欢前端设计,但是页面还是需要稍微优化一下,才能拿的出手!


GitHub源码:https://github.com/SCAsMessi/JavaStudy/tree/master/CSDN/Web%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%9B%BE%E4%B9%A6%E4%BF%A1%E6%81%AF%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F

                                                                                                                                 谢谢阅读!    ----知飞翀

猜你喜欢

转载自blog.csdn.net/biggerchong/article/details/84944648