JavaWeb图书管理系统

目录

1、设计任务与目的

2、设计思路

3、概要设计

3.1系统结构图设计

3.2开发工具与运行环境

4、详细设计

4.1系统用户用例图

4.2用户登录用例图

4.3业务流程图

4.4数据流程图

4.5数据字典

4.6数据库介绍

4.7 E-R实体图设计

5、软件需求

 5.1系统登录模块

5.2添加图书信息模块

5.3  查看图书借阅记录模块

6、参考文献



  • 设计目的

通过项目驱动的学习和综合实训,熟练掌握运用Java语言进行桌面应用程序开发的基本知识和技能;熟练掌握JAVA的基本语法与JDBC数据库技术的应用;进一步熟悉MySQL Server数据库的数据库管理(数据库的创建、备份与恢复、函数与存储过程的应用、数据导入导出、作业的调度等)、表的设计(表的创建、修改、删除,字段的默认值、约束及关系等)、数据的查询处理(insert、update、delete、select语句的应用)等技术;并能结合数据库应用技术和软件工程技术进行桌面应用程序的开发。

  • 设计形式

以图书管理员项目为载体,充分了解项目开发流程,采用前后端分离技术,将项目进行拆分,利用MySQL数据库保存相关数据,利用servlet技术实现前后端数据传输。从而实现通信,从而达成完整的项目。

1、设计任务与目的

设计出Java图书管理系统

基础框架搭建

功能要求

  1. 对系统登陆后进行增删改查功能
  2. 主页面提供用户登录,包括用户名、密码,管理员可进行“登陆”和“修改户名,密码登陆
  3. 管理员系统管理、基础管理、读者管理、图书查询管理、借阅以及归还管理
  4. 普通用户:图书查询管理、个人信息修改、密码、借阅以及归还管理

2、设计思路

由于我们本次管理系统主要采用面向对象的设计模式,将项目进行模块化拆分,做到将复杂问题简单化,其中本项目主要涉及到了几个模块,主要是管理员操作模块,普通用户操作模块,以及登录注册模块。其中管理员和普通用户是很多地方都可以复用的。登录模块是管理员和普通用户共有的,其中的登录,修改个人信息,修改密码这些操作都可以单独封装以供调用。然后因为数据量比较大,所以我们还需要数据库的支持,我们需要建造一个数据库去保存及被调用相关数据信息。同时为保证美观及后期迭代优化的简易性,我们将项目进行前后端分类,前端主要利用jsp,后端利用java配合上mysql数据库,利用利用servlet技术实现前后端通信,达到最终的实现效果。

设计模式

设计模式是面向对象的程序设计人员用来解决编程问题的一种形式化表示。本系统开发采用目前一种目前广泛流行的软件设计模式MVC。MVC(Model-View - Controller)应用程序结构被用来分析分布式应用程序的特征。这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易。把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。如下图所示:

3概要设计

Java图书管理系统:

本图书管理系统总体上分为前台页面显示和后台管理

3.1系统结构图设计

3.2开发工具与运行环境

 PC机  IDEA2020.1   JDK1.8   tomcat8.5.57  MySQL5.7.16   windows10

4详细设计

4.1系统用户用例图

4.2用户登录用例图

4.3业务流程图

4.4数据流程图

4.5数据字典

4.5.1Admin 用户表

字段名

类型

说明

备注

aid

int(11)

用户id

PRIMARY KEY

NOTNULLAUTO_INCREMENT

username

varchar(20)

账号

CHARACTERSETgbkCOLLATE gbk_bin NOT NULL

name

varchar(20)

读者的姓名

DEFAULT NULL

password

varchar(64)

密码

DEFAULT NULL

email

varchar(255)

邮箱

DEFAULT NULL

phone

varchar(20)

手机号

DEFAULT NULL

status

int(2)

用来判断是管理员还是读者,读者的值为1,管理员为2

DEFAULT '1'

lend_num

int(11)

可借阅天数

DEFAULT NULL

max_num

int(11)

最大可借数

DEFAULT NULL

4.5.2 book书籍表

字段名

类型

说明

备注

bid

int(11)

Bookid

PRIMARY KEY

NOTNULLAUTO_INCREMENT

name

varchar(205)

图书名称

NOT NULL

card

varchar(205)

图书号

CHARACTER SET utf8 NOT NULL

UNIQUE KEY `ISBN`

autho

varchar(205)

作者

DEFAULT NULL

num

int(11)

图书数量

NOT NULL

press

varchar(205)

出版社

DEFAULT NULL

type

varchar(255)

图书的分类

DEFAULT NULL

4.5.3 booktype书籍分类表

字段名

类型

说明

备注

tid

int(11)

分类的id

PRIMARY KEY

NOTNULLAUTO_INCREMENT

name

varchar(20)

分类的名称

NOT NULL

4.5.4 history借阅历史表

字段名

类型

说明

备注

hid

int(11)

借阅记录的id

PRIMARY KEY

NOTNULLAUTO_INCREMENT

aid

int(11)

读者的id

DEFAULT NULL

bid

int(11)

图书的id

DEFAULT NULL

card

char(255)

图书号

DEFAULT NULL

bookname

char(255)

图书名称

DEFAULT NULL

adminname

char(255)

读者的账号

DEFAULT NULL

username

char(255)

读者的姓名

DEFAULT NULL

begintime

char(255)

借阅时间

DEFAULT NULL

endtime

char(255)

要还书的时间

DEFAULT NULL

status

int(11)

表示借阅状态,1为正在借阅,2是已经还书

DEFAULT NULL

4.6数据库

4.6.1数据库简介

本数据库构建了四个表,分别是admin表,book表,booktype表,和history表。有数据自己表及其各表之间的关系可以得出:

  1. book和booktype是一对多的关系。
  2. Admin和history表是一对多的关系
  3. Book和history表是一对多的关系
  4. 由2,3可推出 admin表和book表是多对多的关系。

4.6.2数据库实现

SET FOREIGN_KEY_CHECKS=0;



-- ----------------------------

-- Table structure for `admin`

-- ----------------------------

DROP TABLE IF EXISTS `admin`;

CREATE TABLE `admin` (

  `aid` int(11) NOT NULL AUTO_INCREMENT,

  `username` varchar(20) CHARACTER SET gbk COLLATE gbk_bin NOT NULL,

  `name` varchar(20) DEFAULT NULL,

  `password` varchar(64) DEFAULT NULL,

  `email` varchar(255) DEFAULT NULL,

  `phone` varchar(20) DEFAULT NULL,

  `status` int(2) DEFAULT '1',

  `lend_num` int(11) DEFAULT NULL,

  `max_num` int(11) DEFAULT NULL,

  PRIMARY KEY (`aid`)

) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=gbk;



-- ----------------------------

-- Records of admin

-- ----------------------------

INSERT INTO `admin` VALUES ('1', '123', '12355678', '123', '12348', '1234558', '1', '0', '5');

INSERT INTO `admin` VALUES ('2', '13', '13', '13', '13', '13', '2', '13', '13');

INSERT INTO `admin` VALUES ('4', '456', '456', '456', '456', '456', '1', '30', '5');

INSERT INTO `admin` VALUES ('5', '543', '5', '5', '5', '5', '1', '5', '5');



-- ----------------------------

-- Table structure for `book`

-- ----------------------------

DROP TABLE IF EXISTS `book`;

CREATE TABLE `book` (

  `bid` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(205) NOT NULL,

  `card` varchar(205) CHARACTER SET utf8 NOT NULL,

  `autho` varchar(205) DEFAULT NULL,

  `num` int(11) NOT NULL,

  `press` varchar(205) DEFAULT NULL,

  `type` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`bid`),

  UNIQUE KEY `ISBN` (`card`)

) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=gbk;



-- ----------------------------

-- Records of book

-- ----------------------------

INSERT INTO `book` VALUES ('4', '12', '12', '1', '1', '1', '3234');

INSERT INTO `book` VALUES ('2', '5', '5', '5', '5', '5', '323');

INSERT INTO `book` VALUES ('3', '6', '6', '4', '4', '4', '53');

INSERT INTO `book` VALUES ('5', '9', '9', '9', '9', '9', '3234');



-- ----------------------------

-- Table structure for `booktype`

-- ----------------------------

DROP TABLE IF EXISTS `booktype`;

CREATE TABLE `booktype` (

  `tid` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) NOT NULL,

  PRIMARY KEY (`tid`)

) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=gbk;



-- ----------------------------

-- Records of booktype

-- ----------------------------

INSERT INTO `booktype` VALUES ('1', '3234');

INSERT INTO `booktype` VALUES ('2', '53');

INSERT INTO `booktype` VALUES ('4', '6');



-- ----------------------------

-- Table structure for `history`

-- ----------------------------

DROP TABLE IF EXISTS `history`;

CREATE TABLE `history` (

  `hid` int(11) NOT NULL AUTO_INCREMENT,

  `aid` int(11) DEFAULT NULL,

  `bid` int(11) DEFAULT NULL,

  `card` char(255) DEFAULT NULL,

  `bookname` char(255) DEFAULT NULL,

  `adminname` char(255) DEFAULT NULL,

  `username` char(255) DEFAULT NULL,

  `begintime` char(255) DEFAULT NULL,

  `endtime` char(255) DEFAULT NULL,

  `status` int(11) DEFAULT NULL,

  PRIMARY KEY (`hid`)

) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;



-- ----------------------------

-- Records of history

-- ----------------------------

INSERT INTO `history` VALUES ('1', '1', '2', '5', '5', '123', '123', '2018-2-10', '2018-3-10', '0');

INSERT INTO `history` VALUES ('2', '1', '3', '6', '6', '123', '123', '2018-2-10', '2018-2-10', '0');

INSERT INTO `history` VALUES ('3', '1', '2', '5', '5', '123', '1235567', '2018-2-11', '2018-2-11', '0');

INSERT INTO `history` VALUES ('4', '4', '3', '6', '6', '456', '456', '2018-2-11', '2018-2-12', '0');

INSERT INTO `history` VALUES ('5', '1', '4', '1', '1', '123', '1235567', '2018-2-12', '2018-2-12', '0');

4.7 E-R实体图设计

5软件需求

 5.1系统登录模块

图 5-1登陆流程图

具体运行效果如图5-2所示。

        

图5-2登陆页面

5.2添加图书信息模块

其代码关键程序代码如下所录:

1添加图书类型: 

@WebServlet("/AddBookTypeServlet")

public class AddBookTypeServlet extends HttpServlet{

    public AddBookTypeServlet() {

        }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            request.setCharacterEncoding("UTF-8");

            response.setContentType("text/html;charset=UTF-8");

            String name = request.getParameter("name");

            TypeDao typeDao= new TypeDao();

            typeDao.addBookType(name);

            response.sendRedirect("/admin_booktype.jsp");

        }

    }
addBookType方法实现:

public void addBookType(String name) {

    Connection conn=DBUtil.getConnection();

    String sql="insert into  booktype(name) values(?)";

    int rs=0;

    PreparedStatement stm = null;

    try {

        stm = conn.prepareStatement(sql);

        stm.setString(1,name);

        rs = stm.executeUpdate();

    } catch (SQLException e) {

        e.printStackTrace();

    }

}

(2)添加图书:

@WebServlet("/AddBookServlet")

public class AddBookServlet extends HttpServlet {

    public AddBookServlet() {

    }



    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");

        response.setContentType("text/html;charset=UTF-8");

        String card = request.getParameter("card");

        String name = request.getParameter("name");

        String type = request.getParameter("type");

        String autho = request.getParameter("autho");

        String press = request.getParameter("press");

        int num = Integer.parseInt(request.getParameter("num"));

        BookDao typeDao= new BookDao();

        typeDao.addBook(card,name,type,autho,press,num);

        response.sendRedirect("/admin_book.jsp");

    }

}

addBook方法实现:

public void addBook(String card, String name, String type, String autho, String press, int num) {

    Connection conn = DBUtil.getConnection();

    String sql = "insert into  book(card,name,type,autho,press,num) values(?,?,?,?,?,?)";

    int rs = 0;

    PreparedStatement stm = null;

    try {

        stm = conn.prepareStatement(sql);

        stm.setString(1, card);

        stm.setString(2, name);

        stm.setString(3, type);

        stm.setString(4, autho);

        stm.setString(5, press);

        stm.setInt(6, num);

        rs = stm.executeUpdate();

    } catch (SQLException e) {

        e.printStackTrace();

    }

}

5.3  查看图书借阅记录模块

其代码关键程序代码如下所录:

public ArrayList<BookBean> getLikeList(String name) {

    ArrayList<BookBean> tag_ArrayList = new ArrayList<BookBean>();

    Connection conn = DBUtil.getConnection();

    String sql = "select * from book where name like '%" + name + "%'";

    PreparedStatement stm = null;

    ResultSet rs = null;

    try {

        stm = conn.prepareStatement(sql);

        rs = stm.executeQuery();

        while (rs.next()) {

            BookBean tag = new BookBean();

            tag.setBid(rs.getInt("bid"));

            tag.setName(rs.getString("name"));

            tag.setCard(rs.getString("card"));

            tag.setAutho(rs.getString("autho"));

            tag.setType(rs.getString("type"));

            tag.setPress(rs.getString("press"));

            tag.setNum(rs.getInt("num"));

            tag_ArrayList.add(tag);

        }

    } catch (SQLException e) {

        e.printStackTrace();

    }

    return tag_ArrayList;

}

6、参考文献

[1]李钟尉,《JAVA开发实战1200例》(第一卷),清华出版社,2011

[2]曲培新,《JAVA项目开发案例精粹》,电子工业出版社2010

[3]宛延周,《JAVA编程技巧》,机械工业出版社,2005

  • 8
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值