JavaWeb项目-图书管理系统

目 录

1、设计任务与目的……………………………………………………………….4
2、设计思路………………………………………………………………………4
3、概要设计………………………………………………………………………5
4、详细设计………………………………………………………………………5
5、软件需求………………………………………………………………………8
6、可行性研究……………………………………………………………………10
7、体会与心得……………………………………………………………………11
8、参考文献…………………………………………………………………….11

前 言
一、课程设计目的
1.掌握流行的信息系统开发方法
2.提高综合运用所学知识进行信息系统开发的能力
3. 提高使用Java语言进行编程的能力
4. 提高学生使用数据库技术解决现实问题的能力
5. 将Java与SQL相结合,提高大家进行综合开发的能力。
二、课程设计形式
导师线上授课,学生们在线完成代码敲写并将成功功能截图发至QQ群待老师验收检查,每日完成老师布置的作业。最后采用纂写实习报告以及答辩的形式完成项目。课堂上积极与老师沟通交流,老师讲一部分我们做一部分并验收,通过自身思考如继续遇到问题则可询问老师进行实操解答,以达到我们了解项目的实现过程并且可以自主独立实践项目的目的。
1、设计任务与目的
设计出Java图书管理系统,实现学生在线完成老师布置的试题。
基础框架搭建
功能要求
(1)对系统登陆后进行增删改查功能
(2)用主页面提供用户登录,包括用户名、密码,管理员可进行“登陆”和“修改”户名,密码登陆
(3)管理员系统管理、基础管理、读者管理、图书查询管理、借阅以及归还管理
(4)普通用户:图书查询管理、个人信息修改、密码、借阅以及归还管理

2、设计思路
2.1 技术路线
首先对图书管理系统进行开发设计,以便我们可以根据设计完成每个模块,采用了前后端分离的思想,前端+后端+数据库,后端采用了java经典的MVC三层架构进行设计,降低代码的冗余,方便我们后期对它的维护,分门别类的写好交互功能,可依据下面的软件体系结构设计进行功能代码编写,即连接数据库和CRUD等功能,实现前端执行对应操作,数据库可以实时变化。
利用IDEA完成前端页面的制作,以及连接数据库并且操作数据库,数据库则采用的是MYSQL,并且利用了Navicat Premium数据库可视化软件对数据进行操作,以及查看前端操作之后数据库的变化。
2.2 软件体系结构设计
2.2.1 功能结构
根据需求调研结果确定本系统主要包括以下功能模块,如图3.1所示。
在这里插入图片描述

图2-1 系统功能模块图

2.2.2JAVA经典MVC三层架构

在这里插入图片描述

图2-2 JAVA经典MVC三层架构图

3、概要设计
Java图书管理系统:

3.1 系统结构图设计

在这里插入图片描述

图3-1 系统结构功能图

3.2 开发工具及运行环境
图书管理系统运行所需的软件环境如下。
(1)操作系统:
应用服务器:Windows NT Server 2008以上版本
读者用PC机:windows XP和以上
(2)数据库管理系统:
MySQL 8.0.27
(3)网页浏览器:
应用服务器:Google Chrome
读者用PC机:Google Chrome或者Firefox
(4)开发环境:
IDEA
(5)数据库管理工具:
Navicat Premium 11.2
(6)运行环境:
Tomcat 9.0 + Apache

4、详细设计
4.1系统用户用例图
系统用户
在这里插入图片描述

4-1 系统用户用例图

4.2用户登录用例图
用户登录
在这里插入图片描述

4-2 用户登录用例图

4.3业务流程图
在这里插入图片描述

4-3 业务流程图

4.4数据流程图
顶层图:
在这里插入图片描述

4-4 数据流程图-顶层图

1层图
在这里插入图片描述

4-5 数据流程图-1层图

2层图
在这里插入图片描述

4-6 数据流程图-2层图

在这里插入图片描述

4-7 数据流程图-2层图

4.5数据字典
共有4个表
admin表:
在这里插入图片描述

图4-8 admin表

Book表:
在这里插入图片描述

图4-9 admin表

booktype表:
在这里插入图片描述

图4-10 booktype表

history表:
在这里插入图片描述

图4-11 history表

4.6数据库介绍
数据库采用了MYSQL 8.0.27版本,采用了数据库可视化软件Navicat Premium对数据库进行展示,数据库中共有四个表,分别为admin、book、booktype和history。
admin(用户表):该表有读者和管理员的账号、密码、电话和邮箱等信息,通过status的值区分该账号为读者或管理员。
book(图书表):该表有名字、id、分类、作者和数量等信息。
booktype(图书分类表):该表含有id、名字等信息。
history(历史信息表):该表存储了图书的具体信息以及借阅日期、归还日期、具体哪位读者借的等信息。
4.7 E-R实体图设计

在这里插入图片描述

图4-12 E-R实体设计图

5、软件需求
5.1 系统登录模块
在这里插入图片描述

图 5-1登陆流程图

具体运行效果如图5-2所示。
在这里插入图片描述

图5-2 登录界面

在这里插入图片描述

图5-3 登录后的界面

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

AdiminDao.class
    public boolean Login_verify(String username, String password) {
    
    
    Connection  conn=DBUtil.getConnectDb();
    String sql="select * from admin where username='"+username+"'and password='"+password+"'";
        PreparedStatement stm=null;
        ResultSet rs=null;
        try {
    
    
           stm =conn.prepareStatement(sql);
           rs= stm.executeQuery();
           if (rs.next()){
    
    
               return  true;
           }
        }catch (SQLException e){
    
    
            e.printStackTrace();
        }finally {
    
    
            DBUtil.CloseDB(rs,stm,conn);
        }
        return false;
    }
    //获取Admin的用户名和密码
    public AdminBean getAdminInfo(String username, String password) {
    
    
        AdminBean adminBean=new AdminBean();
        Connection  conn=DBUtil.getConnectDb();
        String sql="select * from admin where username='"+username+"'and password='"+password+"'";
        PreparedStatement stm=null;
        ResultSet rs=null;
        try {
    
    
            stm =conn.prepareStatement(sql);
            rs= stm.executeQuery();
            if (rs.next()){
    
    
                adminBean.setAid(rs.getInt("aid"));
                adminBean.setUsername(rs.getString("username"));
                adminBean.setName(rs.getString("name"));
                adminBean.setPassword(rs.getString("password"));
                adminBean.setEmail(rs.getString("email"));
                adminBean.setPhone(rs.getString("phone"));
                adminBean.setStatus(rs.getInt("status"));
                adminBean.setLend_num(rs.getInt("lend_mun"));
                adminBean.setMax_num(rs.getInt("max_num"));
            }
        }catch (SQLException e){
    
    
            e.printStackTrace();
        }finally {
    
    
            DBUtil.CloseDB(rs,stm,conn);
        }
        return adminBean;
    }
    //获取Admin的标识号
    public AdminBean get_AidInfo2(String aid) {
    
    
        AdminBean adminBean=new AdminBean();
        Connection  conn=DBUtil.getConnectDb();
        String sql="select * from admin where aid="+aid;
        PreparedStatement stm=null;
        ResultSet rs=null;
        try {
    
    
            stm =conn.prepareStatement(sql);
            rs= stm.executeQuery();
            if (rs.next()){
    
    
                adminBean.setAid(rs.getInt("aid"));
                adminBean.setUsername(rs.getString("username"));
                adminBean.setName(rs.getString("name"));
                adminBean.setPassword(rs.getString("password"));
                adminBean.setEmail(rs.getString("email"));
                adminBean.setPhone(rs.getString("phone"));
                adminBean.setStatus(rs.getInt("status"));
                adminBean.setLend_num(rs.getInt("lend_mun"));
                adminBean.setMax_num(rs.getInt("max_num"));
            }
        }catch (SQLException e){
    
    
            e.printStackTrace();
        }finally {
    
    
            DBUtil.CloseDB(rs,stm,conn);
        }
        return adminBean;
    }
LoginServlet.class
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    
    
    private static final long serialVersionUID = 1L;
    public LoginServlet() {
    
    
    }
    Protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

        //登录的判断
        PrintWriter out = response.getWriter();
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取账号和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        AdminDao userDao = new AdminDao();
        //对账号和密码进行判断
        boolean result = userDao.Login_verify(username, password);
        HttpSession session = request.getSession();
        //判断输入正确
        if (result) {
    
    
            AdminBean adminBean = new AdminBean();
            AdminDao adminDao = new AdminDao();
            //更加账号和密码查找出读者的信息
            adminBean = adminDao.getAdminInfo(username, password);
            //将aid存入session中
            session.setAttribute("aid", "" + adminBean.getAid());
            //设置session的失效时间
            session.setMaxInactiveInterval(6000);
            //根据status的值来判断是管理员,还是读者,status=1为读者
            if (adminBean.getStatus() == 1) {
    
    
                response.sendRedirect("/index2.jsp");
            } else {
    
    
                response.sendRedirect("/admin.jsp");
            }

        } else {
    
    
            //没有找到对应的账号和密码,返回重新登录
            session.setAttribute("state", "密码错误");
            response.sendRedirect("/login.jsp");
        }
    }
}
  1. 2 添加图书信息模块
    在这里插入图片描述
图5-4 添加信息

在这里插入图片描述

图5-5 添加后结果图

在这里插入图片描述

图5-6 数据库变化图

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

BookDao.class
public static void addBook(String card, String name, String type, String autho, String press, int num) {
    
    
        Connection conn = DBUtil.getConnectDb();
        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();
        }
    }
AddBookServlet.class
@WebServlet("/AddBookServlet")
//添加图书
public class AddBookServlet extends HttpServlet {
    
    
    private  static  final  long serialVersionUID =1L;
    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 bookdao = new BookDao();
        BookDao.addBook(card,name, type,autho,press,num);
        response.sendRedirect("admin_book.jsp");
    }
} 

  1. 3 查看图书借阅记录模块
    在这里插入图片描述
图5-7 读者借阅记录

在这里插入图片描述

图5-8 管理员借阅记录

在这里插入图片描述

图5-9 数据库-借阅信息

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

get_HistoryListInfo(BookDao.class
public ArrayList<HistoryBean> get_HistoryListInfo(int status, String aid) {
    
    
        ArrayList<HistoryBean> tag_Array = new ArrayList<HistoryBean>();
        Connection conn = DBUtil.getConnectDb();
        String sql = "select * from history where aid='" + aid + "' and status='"+ status +"'";
        PreparedStatement stm = null;
        ResultSet rs = null;
        try {
    
    
            stm = conn.prepareStatement(sql);
            rs = stm.executeQuery();
            while (rs.next()) {
    
    
                HistoryBean tag = new HistoryBean();
                tag.setHid(rs.getInt("hid"));
                tag.setAid(rs.getInt("aid"));
                tag.setCard(rs.getString("bid"));
                tag.setBookname(rs.getString("bookname"));
                tag.setAdminname(rs.getString("adminname"));
                tag.setUsername(rs.getString("username"));
                tag.setBegintime(rs.getString("begintime"));
                tag.setEndtime(rs.getString("endtime"));
                tag.setStatus(rs.getInt("status"));
                tag_Array.add(tag);
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();

        } finally {
    
    
            DBUtil.CloseDB(rs, stm, conn);
            return tag_Array;

        }
    }

get_HistoryListInfo2(BookDao.class
public ArrayList<HistoryBean> get_HistoryListInfo2(int status) {
    
    
        ArrayList<HistoryBean> tag_Array=new ArrayList<HistoryBean>();
        Connection conn = DBUtil.getConnectDb();
        String sql = "select * from history where status='"+status+"'";
        PreparedStatement stm = null;
        ResultSet rs = null;
        try {
    
    
            stm = conn.prepareStatement(sql);
            rs = stm.executeQuery();
            while (rs.next()) {
    
    
                HistoryBean tag = new HistoryBean();
                tag.setHid(rs.getInt("hid"));
                tag.setAid(rs.getInt("aid"));
                tag.setBid(rs.getInt("bid"));
                tag.setCard(rs.getString("card"));
                tag.setBookname(rs.getString("bookname"));
                tag.setAdminname(rs.getString("adminname"));
                tag.setUsername(rs.getString("username"));
                tag.setBegintime(rs.getString("begintime"));
                tag.setEndtime(rs.getString("endtime"));
                tag.setStatus(rs.getInt("status"));
                tag_Array.add(tag);
            }
        }catch(SQLException e){
    
    
            e.printStackTrace();
        }finally {
    
    
            DBUtil.CloseDB(rs, stm, conn);
        }return tag_Array;
    }
borrowServlet.class
@WebServlet("/borrowServlet")
public class borrowServlet extends HttpServlet {
    
    
    private static final long serialVersionUID = 1L;

    public borrowServlet() {
    
    
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        BookDao bookDao=new BookDao();
        int tip=Integer.parseInt(request.getParameter("tip"));
        //管理员
        if (tip==2) {
    
    
            int hid=Integer.parseInt(request.getParameter("hid"));
            int show=Integer.parseInt(request.getParameter("show")) ;
            bookDao.borrowBook2(hid);
            if (show==2){
    
    
                response.sendRedirect("admin_borrow.jsp");
            }else{
    
    
                response.sendRedirect("borrow.jsp");
            }
        }else{
    
    
            //读者
            int bid=Integer.parseInt(request.getParameter("bid"));
            HttpSession session=request.getSession();
            String aid=(String) session.getAttribute("aid");
            AdminDao adminDao=new AdminDao();
            AdminBean admin =new AdminBean();
            admin=adminDao.get_AidInfo2(aid);
            bookDao.borrowBook(bid,admin);
            response.sendRedirect("select.jsp");
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
    }
}

6、可行性研究
(1)经济可行性
由于图书管理系统开发人员较少,维护人员也较少,成本较低,在经济上的投入甚微,系统建成之后将为今后图书管理提供很大的方便,估算新系统的开发费用和今后的运行、维护费用,估计新系统将获得的效益,并将费用与效益进行比较,对今后使用十分有利。
(2)技术可行性
技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否满足开发的需求等。本图书管理系统用的是JAVA开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:由于目前单机模式相对发展成熟,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。
(3)操作可行性
网站能被图书馆管理员、学生以及职工快速接受。 在图书馆中安装的PC机被图书馆管理员所使用,他们通过PC机向服务器发出修改,删除,更新图书等信息,服务器及时响应,数据库马上修改相应的信息。读者也可以进入网站进行借阅图书,查看相关信息。
开发该项目只需要一台电脑,一个程序员即可,网上有充分的资源进行利用,操作性很强也很方便。

7、体会与心得
为期两个星期的javaweb图书管理系统实习结束了,在这短短的两周时间内,跟着老师一起开发项目,老师真的是手把手教我们,也非常的热心,我很高兴可以遇到这样的老师。回顾这两周所做过的工作和努力,感觉到收获不少,这里面除了实习本身的内容外,还包括许许多多超乎实习本身意义之外的东西。
虽然是线上授课,但舍友也在身边,我们会共同讨论很多问题,研究项目的每一步,保证我自己学懂学会的,甚至可以帮别人解决问题。团队协作能力和独立思考以及解决问题的能力得到很大地提升。
在我以前的学习的项目中没有这次这么系统完整,最多就是设计一些小程序,但是这次的实习不一样,可以说我觉得实习给我带来的最大的帮助就是使我对这门课程有了更多的兴趣,以及编程能力得到了更大的提升,有时候我自己都会感到很奇怪为什么自己会突然迷上了编程,近乎痴迷的爱,以前下了课堂书本就扔的远远的,但是自从学了java我就开始期盼着最后的实习,可以自己独立设计出一套系统之类的程序,所以我上课充满了激情,下了课有时我还喜欢自己在电脑上捣鼓捣鼓一些程序,去做一些小小的钻研。从以前的“惧怕”上课到现在的“期盼”上此次我们实习的内容是基于java和MYSQL的数据库应用系统开发一个图书管理系统,根据图书管理系统的需求设计出图书管理系统的具体功能然后再编写代码。但唯一不同的是,这次图书管理系统的开发是由老师带着我们开发,我们了解到了项目的每一个过程。
就这样在实习的最后时间内,我终于完成了自己的图书管理系统,当看着自己设计的图书管理系统编译成功和运行时,心里的那种喜悦和无比的成就感简直就是“无与伦比”的。有的时候我发现实习的作用真的是无可替代的,我一直在说学校里能够安排每学期的实习真的是很正确的一个决 定,有的时候我们甚至会有一种感觉, 就是感觉到最后几周的实习所学到的知识甚至比我们平常在课堂上学到的知识要多,因为平常我们所学的知识都仅 仅是局限于书本或者老师的讲授,而实习的时候我们实际操作过程会遇到的种种问题可能都是课堂上所未涉及到的。还有一个比较明显的收获就是可能平常我们上课学习的时候都只是按照现成的代码直接去输入,所以并没有什么特别大的收获。但是不同的是,随着实习的深入我们渐渐地对于平常我们所不能理解的代码慢慢的有了认识,逐渐的我们开始不需要书本,不需要笔记了,我们可以自己敲出那一段段代码,再到后来我们可以对于一些平常我们所没有讲过的一些功能实现所需要的代码可 以自己去钻研初来,可以说这真的有点“不可思议”。如果没有这次的实习,我们可能都无法发现这些问题的所在,所以仅仅学习理论的东西只会将我们“束之高阁”,通过这次实习,最主要的是让我们学会去发现问题,在编译发现问题的过程中学会自己去解决问题,最后解决问题 所得到的收获包括成功后的喜悦感都将是属于真正我们自己的东西,成为我们的一笔宝贵的财富和经验,是一笔潜 在的能源,受益无穷。
8、参考文献
[1]Java技术与数字图书馆[J]. 汪丽华,孙娇梅. 现代图书情报技术. 1999(04)
[2]Java技术在图像处理领域的应用[J]. 安国艳. 电子技术与软件工程. 2021(23)
[3]Java编程语言在大数据开发中的应用[J]. 王茹葳. 电子技术. 2022(01)
[4]基于Java的金融消费者投诉审计小助手的设计和实现[J]. 王春山,孙欣. 金融科技时代. 2022(02)
[5]《Java程序设计》的软件开发实践能力教学资源建设[J]. 杨鑫. 中国新通信. 2021(24)
[6]基于Java的企业人力资源管理系统的设计与实现[J]. 张军. 中国信息化. 2022(03)
[7]JAVA与人工智能相结合在网络教学中的应用[J]. 陈艳平. 黑龙江科学. 2021(03)
[8]基于计算机软件开发的Java编程语言分析[J]. 王红娟. 电脑知识与技术. 2021(05)
[9]面向Java程序设计的在线考试与练习系统[J]. 陈敏,汤慧仪. 吉首大学学报(自然科学版). 2020(05)
[10]基于网络爬虫的Java行业的就业分析[J]. 吴薛凯,刘天波,胡文馨. 科技资讯. 2021(02)
[11]基于UML和Java的图书管理系统的设计与实现[J]. 齐燕. 电子技术与软件工程. 2020(20)
[12]多媒体交互技术在图书管理系统中的应用[J]. 于航,王昊天. 电脑编程技巧与维护. 2020(02)
[13]高校移动图书管理系统的设计与实现[J]. 魏李方. 电子技术与软件工程. 2020(02)
[14]基于UML和Java的图书管理系统建模与实现[J]. 汪琪. 计算机产品与流通. 2019(07)
[15]基于UML和Java的图书管理系统建模与实现[J]. 张政,蒋永辉. 电脑知识与技术. 2019(01)

猜你喜欢

转载自blog.csdn.net/weixin_47725255/article/details/125858260