基于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

相关推荐

发表回复

登录后才能评论