基于javaWeb开发图书馆管理系统

图书管理系统 学 院: 数学与计算机学院 班 级: 物联网 11802 姓 名: 蒋光鑫 学 号: 1804240611 指导老师: 聂刚 完成日期: 2020 年 12 月 15 日 一

本文包含相关资料包-----> 点击直达获取<-------

图书管理系统

学 院: 数学与计算机学院
班 级: 物联网 11802
姓 名: 蒋光鑫
学 号: 1804240611
指导老师: 聂刚
完成日期: 2020 年 12 月 15 日

一、需求分析

设计一个图书馆图书管理系统,实现读者的“登录”、查询书籍、借阅书籍、查询历史、修改密码等功能。

1.1 用户登陆

​ 读者用浏览器进入登录页面,输入学号密码和相应的验证码,信息和数据库内的信息不符时,跳转至 error 页面,显示出错误信息,10s 后返回登录页面,再次等待用户输入提交信息;验证信息输入正确后进入图书管理主页面。

1.2 主页面

​ 显示图书馆的展示信息,主页面右上角显示出当前登录用户的信息,主页面用轮播图展示图书信息,页面下面设置检索书籍、还书、更多信息图块,当用户点击图块时,跳转至相应的页面;右上角设置安全退出按钮,当用户点击“安全退出”时,系统退出当前登录用户,清除 cookier 信息,跳转至登录页面。

1.3 检索书籍

​ 用户点击书籍检索,进入搜索页面,在搜索框内输入书籍名称或者 ID 查询数据库中的书籍,若无该书籍信息,则在搜索框下方显示出来,如果存在该书籍,跳转至结果页面,列表显示书籍的信息和借阅状态,支持模模糊查询。

用户点击查阅结果最后的“借阅”实现借阅该书籍功能。

1.4 还书

​ 用户点击“还书”,进入还书页面,输入待归还书籍的信息和借书用户信息,后端从数据库中查取检验信息,如果无误,给数据库修改信息,页面给出提示“还书成功!”

1.5 查询借阅历史

​ 在用户信息页面时,点击借阅历史,显示出当前用户的借阅图书历史,包括借阅书籍名称、借阅时间、还书时间等

1.6 修改密码

​ 用户点击修改密码,系统跳转至修改密码页面,输入新密码确认提交后,系统后端验证当前用户身份,如果身份无误,调用方法修改用户数据库信息,完成用户密码的修改。

二、系统设计

2.1 总体 ER 图

2.2 UML 时序图(Sequence Diagram)

2.3 UML 活动图(Activity Diagram)

2.3.1 登录

2.3.2 查书

2.3.3 还书

三、系统实现

3.1 项目结构

3.2 配置文件

3.2.1 jdbc.properties 文件

​ 该配置文件主要是以文件形式保存数据库的驱动类名称,连接数据库的 URL 地址,访问数据库的用户名及对应的密码,程序运行时会读取该文件相关信息,避免硬编码,当相关信息发生变化时,只需修改配置文件而不用修改源代码,增加程序的可扩展型。

c++ DBDRIVER=com.mysql.jdbc.Driver DBURL=jdbc: mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8 DBUSER=root PASSWORD=149920

3.2.2 包文件

3.3 VO 类 User.java

用户 vo 类,书籍 vo 类和下载 vo 类

c++ public class Book { //书编号ID private String bookID; //书名,汉字 private String bookName; //书籍分类 private String bookCategory; //书籍简介 private String bookIntroduction; public class User { private String userName; private String password; private String chrName; }

3.4 DAO 接口类

3.5 控制器 Controller

3.5.1 登录控制器

c++ public class LoginController extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String userName = request.getParameter("userName"); String password = request.getParameter("password"); String vcode= request.getParameter("vcode"); String autoLogin = request.getParameter("autoLogin"); HttpSession session = request.getSession(); String saveVcode = (String) session.getAttribute("verifyCode"); String forwardPath = ""; //比较输入的验证码和生成的验证码是否一样 if(!vcode.equalsIgnoreCase(saveVcode)) { request.setAttribute("info", "验证码不正确!"); forwardPath = "/error.jsp"; } else { //验证码正确 UserDao userDao = new UserDao(); User user = userDao.get(userName); if(user==null) { //用户名不存在! request.setAttribute("info", "你输入的用户名不存在!"); forwardPath="error.jsp"; } else { if(!user.getPassword().equals(password)) { request.setAttribute("info", "你输入的密码不正确!"); forwardPath="error.jsp"; } else { if("on".equalsIgnoreCase(autoLogin)) { Cookie cookie=new Cookie("username",userName); cookie.setPath("/"); cookie.setMaxAge(60*60*24*7); response.addCookie(cookie); } session.setAttribute("currentUser", user); forwardPath="/main.jsp"; } } } RequestDispatcher rd = request.getRequestDispatcher(forwardPath); rd.forward(request,response); }

3.5.2 借书功能控制器

c++ @WebServlet(urlPatterns ="/borrowbook.do") public class BorrowController extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String borrowbookID = request.getParameter("borrowbookID"); String borrowbookName = request.getParameter("borrowbookName"); String borrowuserName = request.getParameter("borrowuserName"); String borrowchaName = request.getParameter("borrowchaName"); String borrowtime = request.getParameter("borrowtime"); String returntime = request.getParameter("returntime"); //HttpSession session = request.getSession(); String forwardPath = ""; //User user = (User) request.getSession().getAttribute("userName"); //Book book = (Book) request.getSession().getAttribute("bookName"); if(borrowbookName!=null) { if(borrowbookID!=null) { BorrowDao borrowDao = new BorrowDao(); boolean flag =borrowDao.borrow(borrowbookID, borrowbookName, borrowuserName, borrowchaName, borrowtime, returntime); if(flag==true) { request.setAttribute("info", "借书成功!"); request.setAttribute("path", "searchResult.jsp"); forwardPath = "searchResult.jsp"; } } } RequestDispatcher rd = request.getRequestDispatcher(forwardPath); rd.forward(request,response); } }

3.5.3 修改密码控制器

c++ @WebServlet(urlPatterns ="/changepassword.do") public class ChangePasswordController extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String userName = request.getParameter("userName"); String oldpassword = request.getParameter("oldpassword"); String newpassword = request.getParameter("newpassword"); HttpSession session = request.getSession(); String forwardPath = ""; //HttpSession session = request.getSession(); //User user = (User) request.getSession().getAttribute("userName"); if(oldpassword.equals(newpassword)) { request.setAttribute("info", "新旧密码相同,不能修改"); request.setAttribute("path", "ChangePassword.jsp"); forwardPath = "ChangePassword.jsp"; } else { UserDao userDao = new UserDao(); boolean flag =userDao.changepassword(newpassword,userName); if(flag==true) { request.setAttribute("info", "修改成功!"); request.setAttribute("path", "ChangePassword.jsp"); forwardPath = "ChangePassword.jsp"; } else { request.setAttribute("info", "修改失败,请重试!"); request.setAttribute("path", "ChangePassword.jsp"); forwardPath = "ChangePassword.jsp"; } } RequestDispatcher rd = request.getRequestDispatcher(forwardPath); rd.forward(request,response); }

3.6 过滤器 filter 文件

c++ public class PermissionFilter implements Filter { private String notCheckPath;//不需要过滤额请求地址,从web.xml文件中读取 @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) req; String path = request.getServletPath(); System.out.println("请求地址url-pattern:"+path); if(notCheckPath.indexOf(path) == -1) { HttpSession session = request.getSession(); if(session.getAttribute("currentUse") == null) { request.setAttribute("info", "没有权限访问"); request.getRequestDispatcher("/error.jsp").forward(request, resp); } else {//已经登录,直接放行 String value=null; Boolean flag=false; Cookie[] cookie=request.getCookies(); for(Cookie a:cookie) { if(a.getName().equals("username")) { flag=true; value=a.getValue(); break; } } System.out.println(value); if(flag) { User user=null; try { //user=dao.getUser(value); } catch (Exception e) { // TODO Auto-generated catch block printStackTrace(); } System.out.println(user); session.removeAttribute("currentUser"); String chr=user.getChrName(); session.setAttribute("currentUser", chr); } else { request.setAttribute("info", "没有权限访问"); request.getRequestDispatcher("/error.jsp").forward(request, resp); } chain.doFilter(req, resp); } } else { //地址不需要过滤的,直接放行 chain.doFilter(req, resp); } } @Override public void init(FilterConfig config) throws ServletException { // 从web.xml配置文件中的filter中读取名为notCheckPath的初始值 notCheckPath = config.getInitParameter("notCheckPath"); } }

3.7 前端界面 HTML、CSS、js 文件

四、系统测试

​ 登录页面,输入学号、密码和验证码正确后进入主页面,支持 7 天免登录

​ 主页面,上方导航栏,页面主题使用轮播图显示图书馆信息,下方有检索、还书、信息展示栏

​ 检索书籍页面,使用书籍 ID 作为检索关键词

​ 检索结果显示,table 显示,最后“借阅”可直接跳转至借书页面

​ 借书页面,自动填入所查询书籍信息,提交后给出成功提示

​ 还书页面,输入书籍 ID 和用户 ID 即可查询借阅信息,完成还书

​ 用户页面,页面可以再完善,目前可以实现修改密码和查询历史功能

​ 修改密码页面,填入密码信息后系统自动检验用户身份,完成密码修改

五、系统总结

​ 做这个图书管理系统时遇到的主要问题是浏览器请求的转发处理,在映射地址正确的情况下,浏览器访问客户端时总会出现请求不存在的问题,通过网上查询资料,我通过多次重启 Tomcat 服务器解决了问题,可能是服务器对于项目部署没有更新的问题。

​ 目前这个图书馆管理系统还有很大的不足,查询功能目前只能使用图书完整的 ID 查询,不能使用模糊查询,返回结果不能完整显示,系统用户交互页面设计的不够合理,页面和后端处理都还有待完善的部分,整个项目我没有使用框架结构,所以做起来的进度也是比较慢;另外完整的图书管理系统还应该有验证用户身份的功能,设置管理员、普通用户和游客三种不同的身份,由于时间和个人能力的原因,暂时还没有实现,后期会慢慢完善该系统功能。因为我只熟悉掌握了前面的内容,后面的框架知识我还没有掌握,所以我自评 80 分。

​ 通过学习 Web 应用开发这门课程,我对于 Web 有了更加全面系统的认识,对于 Web 前端设计 ,后端处理以及前后端的交互过程有了全面的了解,使用 Java 语言对于上学期的 Java 学习进行了巩固,整体来说,课程具有综合性,我从这门课中学到了很多计算机 Web 方面的知识,最后感谢聂刚老师这学期对于我们学习的指导,感谢在 Web 学习帮助我的同学!

参考文献

  • 基于JSP的艺术院校图书管理系统的设计与实现(西安电子科技大学·王擒龙)
  • 大同实验小学图书馆借还系统的设计与实现(电子科技大学·王洪宇)
  • 基于校园一卡通的图书管理系统的设计与实现(电子科技大学·陆瑶)
  • 基于.NET的图书管理系统的设计与实现(安徽大学·陈龙)
  • 高校图书管理系统的设计与实现(东北大学·黄鑫)
  • 某学院图书馆信息管理系统的设计与实现(山东大学·齐燕)
  • 基于SSH框架的图书馆管理系统分析与设计(云南大学·郑晨)
  • 湖南工业职业技术学院图书馆管理系统的设计与实现(电子科技大学·周全)
  • 湖南工业职业技术学院图书馆管理系统的设计与实现(电子科技大学·周全)
  • 基于J2EE架构的某学院图书管理信息系统设计与开发(电子科技大学·戴杰)
  • 基于WEB的图书管理系统的设计与开发(大连理工大学·邬金池)
  • 基于B/S架构的图书管理系统(山东大学·彭鹏)
  • 基于SSH框架的图书馆管理系统分析与设计(云南大学·郑晨)
  • 湖南工业职业技术学院图书馆管理系统的设计与实现(电子科技大学·周全)
  • 基于SSH架构的高校自助化图书管理系统的设计与实现(大连理工大学·杨议)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码向导 ,原文地址:https://m.bishedaima.com/yuanma/35752.html

相关推荐

  • 基于SpringBoot框架的医疗挂号管理系统

    这是一套采用Java编程语言,基于SpringBoot框架构建的医疗预约管理系统源代码,项目中融入了Vue技术,开发工具为Idea或Eclipse,此系统适用于毕业设计或课程实践
    2024年05月23日
    2 1 1
  • 基于Python设计的信息检索系统

    基于Python设计的信息检索系统 【实验目的】: 开发一款针对英文文本的信息检索系统,可以实现建立索引表,布尔查询,通配符查询, 短语查询等功能
    2024年05月14日
    4 1 1
  • 基于Python的信息检索课程设计

    基于Python的信息检索课程设计 sdu视点新闻 全站爬虫爬取+索引构建+搜索引擎查询练习程序 爬虫功能使用Python的scrapy库实现
    2024年05月14日
    3 1 1
  • 学生评奖评优管理系统

    这是一个🔥🔥基于SpringBoot框架的学生评奖评优管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于Python实现书店销售管理系统

    书店销售管理管理子系统 一,设 计 总 说 明 现在社会随着计算机技术迅速发展与技术的逐渐成熟,信息技术已经使人们的生活发生深刻的变化,生活中的各种服务系统也使人们在生活中的联系日常销售活动方式发生了很大的变化
    2024年05月14日
    6 1 1
  • 网上摄影工作室

    这是一个🔥🔥基于SpringBoot框架的网上摄影工作室设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • java+swing实现推箱子小游戏课程设计源码

    在计算机科学领域,游戏设计一直是一个备受关注的话题,随着计算机技术的不断发展,人们对于游戏的需求也越来越高,《java+swing实现推箱子小游戏课程设计源码》是一个旨在使用Java语言和Swing框架实现的推箱子小游戏项目
    2024年05月07日
    5 1 1
  • 基于python + dlib实现人脸识别

    python 进行人脸识别 人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异,一般在 0,6 以下都可以被认为是同一张脸 人脸识别的主要步骤 获得人脸图片 将人脸图片转为 128D 的矩阵(这个也就是人脸特征的一种数字化表现) 保存人脸 128D 的特征到文件中 获取其他人脸转为 128D 特征通过欧式距离算法与我们保存的特征对比
    2024年05月14日
    2 1 1
  • 网上商城系统

    这是一个🔥🔥基于SpringBoot框架的网上商城系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于python实现的CS通信和P2P通信

    基于python实现的CS通信和P2P通信 一,实验要求 C/S通信实现要求 两台计算机分别模拟服务器,客户端 通过编程实现服务器端
    2024年05月14日
    1 1 1

发表回复

登录后才能评论