当前位置:   article > 正文

SSM图书管理系统(增强版,附源码)

ssm图书管理

系统原版功能(新人必看)

1、该系统分三种用户角色:普通用户、管理员、超星管理员,分别对应users、admins、sysadmin数据库表

 

b4a381e280afacf7e8137c9619c172f8.png

2、普通用户基本功能:查询书籍、借阅书籍、归还书籍

e0ad76c32d792bb54c9e2616cd7cf823.png

 

3、管理员基本功能:借书处理、还书处理

27295dc3b6847a1b47bd5748d578b41a.png

 

4、超级管理员功能:普通用户管理、书籍管理、类别管理

98d49aa4db8609d306a72422d44b8268.png


 

以上是给大家分享SSM图书管理系统项目的源码,热度较高,但我也发现功能并不是很全面,所以这次对系统进行了功能增强,以下是系统改动的几个方面

31641add5a8908efefa6afac23bb6fc2.png

1、数据库改动

  • users表添加了两个字段:major(专业)、gender(性别)

  • books表添加了一个字段:times(书籍被借次数)

  • 添加了log表,也就是记录日志的表

如果已经搭建过之前的项目,这里建议各位重新创建个数据库,名称为librarydb,避免跟之前的数据库冲突

2、普通用户页面,添加了个人中心菜单

个人中心,显示当前用户的基本信息,如用户名、密码、性别等属性,也可编辑修改

02c19f1d73feb13b5ff64f5b6e6c636e.png

3、超级管理员页面,添加了日志管理和图表分析菜单

日志管理,所有角色登录系统后都会记录下来,日志记录了用户名、用户角色、浏览器类型、用户IP、登录时间。
下载项目文件夹后你会发现比以前多了util包,该包下的BrowserUtil和IpUtil就是获取浏览器类型和IP的工具类
在查询方面,可根据用户名精准查询

3db84d1f2b28c678774f84be35e88d3d.png

图表分析,以书籍分类为准,统计每个分类下书籍的数目,使用到了Echats技术,功能效果如图

d53bc8b1f1a72184fe13c417fa63f772.png

Echarts官网:https://echarts.apache.org/zh/index.html

13fb09525b1222cb8b2928c5d3d233f5.png

关于修改

当然如果你先只添加以上的某个功能,可以找到对应页面的代码,改变你要显示的菜单即可,下面以超级管理员菜单对应的sysadmin/index.jsp文件为例:

  1. <script>
  2.     BUI.use('common/main',function(){
  3.         var config = [
  4.         {id:'1',menu:[
  5.                 {text:'系统管理',items:[
  6.                     {id:'3',text:'用户管理',href:'<%=request.getContextPath()%>/sysadmin/showUser'},
  7.                     {id:'12',text:'书籍管理',href:'<%=request.getContextPath()%>/sysadmin/show'},
  8.                     {id:'13',text:'类别管理',href:'<%=request.getContextPath()%>/sort/findAll'},
  9.                     {id:'14',text:'登录日志',href:'<%=request.getContextPath()%>/sysadmin/log'}
  10.                    ]
  11.                 },
  12.                 {
  13.                     text'图表管理'items: [
  14.                         {id'15'text'图表分析'href'<%=request.getContextPath()%>/sysadmin/chart'},
  15.                     ]
  16.                 }
  17.             ]
  18.         },
  19.     ];
  20.         new PageUtil.MainPage({
  21.             modulesConfig : config
  22.         });
  23.     });
  24. </script>

 

核心代码

日志实体类:

  1. package com.xian.pojo;
  2. import com.fasterxml.jackson.annotation.JsonFormat;
  3. import java.sql.Timestamp;
  4. import java.time.LocalDate;
  5. import java.time.LocalDateTime;
  6. import java.util.Date;
  7. //登录日志实体类
  8. public class Log {
  9. private Integer id;
  10. private String code;
  11. private String role;
  12. private String browser;
  13. private Timestamp datetime;
  14. private String ip;
  15. // 页面数据
  16. private int start;
  17. // 当前页数
  18. private int currentPage;
  19. public Log() {}
  20. public Log(Integer id, String code, String role, String browser, Timestamp datetime, String ip) {
  21. this.id = id;
  22. this.code = code;
  23. this.role = role;
  24. this.browser = browser;
  25. this.datetime = datetime;
  26. this.ip = ip;
  27. }
  28. public Integer getId() {
  29. return id;
  30. }
  31. public void setId(Integer id) {
  32. this.id = id;
  33. }
  34. public String getCode() {
  35. return code;
  36. }
  37. public void setCode(String code) {
  38. this.code = code;
  39. }
  40. public String getRole() {
  41. return role;
  42. }
  43. public void setRole(String role) {
  44. this.role = role;
  45. }
  46. public String getBrowser() {
  47. return browser;
  48. }
  49. public void setBrowser(String browser) {
  50. this.browser = browser;
  51. }
  52. public Date getDatetime() {
  53. return datetime;
  54. }
  55. public void setDatetime(Timestamp datetime) {
  56. this.datetime = datetime;
  57. }
  58. public String getIp() {
  59. return ip;
  60. }
  61. public void setIp(String ip) {
  62. this.ip = ip;
  63. }
  64. public int getStart() {
  65. return start;
  66. }
  67. public void setStart(int start) {
  68. this.start = start;
  69. }
  70. public int getCurrentPage() {
  71. return currentPage;
  72. }
  73. public void setCurrentPage(int currentPage) {
  74. this.currentPage = currentPage;
  75. }
  76. @Override
  77. public String toString() {
  78. return "Log{" +
  79. "id=" + id +
  80. ", code='" + code + '\'' +
  81. ", role='" + role + '\'' +
  82. ", browser='" + browser + '\'' +
  83. ", datetime=" + datetime +
  84. ", ip='" + ip + '\'' +
  85. '}';
  86. }
  87. }

控制层PageController,当请求/login时,而且用户成功登录,就会调用LogService的redcord方法,对登录日志保存到数据库

  1. package com.xian.controller;
  2. @Controller
  3. public class PageController {
  4. @Autowired
  5. private BooksService bookService;
  6. @Autowired
  7. private AdminService adminService;
  8. @Autowired
  9. private SysAdminService sysAdminService;
  10. @Autowired
  11. private SortService sortService;
  12. @Autowired
  13. private LogService logService;
  14. @RequestMapping("/index")
  15. public String toIndex() {
  16. return "login";
  17. }
  18. @RequestMapping("/login")
  19. public String login(Users user, int loginType, Model model, HttpServletRequest request, HttpSession session) {
  20. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  21. Timestamp timestamp = null;
  22. try {
  23. Date date = sdf.parse(sdf.format(new Date()));
  24. timestamp = new Timestamp(date.getTime());
  25. }catch (Exception e){
  26. e.printStackTrace();
  27. }
  28. // 普通用户
  29. if (loginType == 1) {
  30. Users users = bookService.selectUser(user);
  31. if (users != null) {
  32. logService.record(new Log(null,user.getCode(),"普通用户", BrowserUtil.getBrower(request),timestamp, IpUtil.getIpAddr(request)));
  33. session.setAttribute("user", users);
  34. return "redirect:/user/index";
  35. } else {
  36. model.addAttribute("msg", "账号或密码错误");
  37. return "login";
  38. }
  39. } else if (loginType == 2) {
  40. Admin admin = adminService.getAdmin(user);
  41. if (admin != null) {
  42. session.setAttribute("admin", admin);
  43. logService.record(new Log(null,admin.getCode(),"管理员", BrowserUtil.getBrower(request), timestamp, IpUtil.getIpAddr(request)));
  44. return "redirect:/admin/index";
  45. } else {
  46. model.addAttribute("msg", "账号或密码错误");
  47. return "login";
  48. }
  49. } else if (loginType == 3) {
  50. SysAdmin sysAdmin = sysAdminService.getSysAdmin(user);
  51. if (sysAdmin != null) {
  52. session.setAttribute("sysAdmin", sysAdmin);
  53. logService.record(new Log(null,sysAdmin.getCode(),"超级管理员", BrowserUtil.getBrower(request),timestamp, IpUtil.getIpAddr(request)));
  54. return "redirect:/sysadmin/index";
  55. } else {
  56. model.addAttribute("msg", "账号或密码错误");
  57. return "login";
  58. }
  59. }
  60. return "login";
  61. }
  62. }

 

如何获取源码?

进入《亦码》小橙序,查看SSM源码分类下即可获得

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/740384
推荐阅读
相关标签
  

闽ICP备14008679号