基于SSM的图书管理系统 您所在的位置:网站首页 黑马SiS系统 基于SSM的图书管理系统

基于SSM的图书管理系统

2023-11-22 21:01| 来源: 网络整理| 查看: 265

一、系统简介

该项目是基于Java的SSM框架实现的图书管理系统

二、技术实现

1.后台框架:Spring、SpringMVC、MyBatis、Ajax

2.UI界面:BootStrap

3.数据库:MySQL 5.7

4.加密:md5+随机盐

运行环境:

JDK 8

IntelliJ IDEA

Tomcat 9.0

MySQL 5.7

三、系统功能

系统共分为三种用户:

1.普通用户

书籍列表显示、书籍借阅、书籍归还,

2.管理员

用户管理(删除用户,修改用户名),图书管理(编辑,删除,添加)

四、表设计

一共有三张表,book用来存放书籍信息,

bookorder用来保存借书记录和借还状态,user用来保存管理员和用户信息

book表结构(status用来表示书的借还状态,0表示已还,1表示未还)

bookorder表结构

User表结构(grade用于区分角色身份,0是管理员,1是普通用户)

五、运行效果

系统登陆界面:

注册界面(分为管理员注册和普通用户注册)

管理员界面

图书管理界面

普通用户管理界面

普通用户界面

借还书籍操作界面

需求分析:

1.租书

首先输入借书人名称,然后输入要借阅的图书编号,显示该图书信息(已经借出的图书不显示),

2.还书

首先输入借书人名称,显示该借书人的借阅图书信息,已还图书不显示。在显示借阅图书信息后,可以选择还书。

3.租还查询

选择该选项后,显示某个用户所有借书信息,

图书类型管理 图书类型信息包括:编号、名称

4. 添加图书

接收用户输入的图书信息,写入数据库。

5. 修改图书

用户输入要修改图书编号,显示图书信息,然后修改图书,并保存到数据库中。

6.删除图书 

用户输入要删除图书编号,删除图书。

7. 查询全部图书

选择该选项后,首先显示所有图书信息

8.修改用户信息

管理员可以修改用户的名称

9.用户登录

10.用户注册

Entity实体类

public class Book {     private int bid;     private String bookname;     private String author;     private String detail;     private int status;//是否借出,1表示可以借,0表示不可借     private int price;     private String category;//种类 } public class BookOrder {     /**      * 借书订单表      */     private int orderid;     private int userid;     private int bid;     private int orderstatus;//借还状态 0表示已归还,1表示未归还 } public class User {     private int id;     private String username;     private String password;     private int grade;//角色 }

Controller层

@Controller @RequestMapping("/admin") public class AdminController {     @Autowired     private BookService bookService;     @Autowired     private UserService userService;     //跳转到图书管理页面     @RequestMapping("/bookManage.action")     public String skipBookManage(Model model){         List list = bookService.selectAllBook();         model.addAttribute("list",list);         return "bookManage";     }     //跳转到读者管理页面     @RequestMapping("/commonUserManage.action")     public String skipCommonUserManage(){         return "commonUserManage";     }     /**      * 读者操作      *  可以让读者跳转到图书馆,User.jsp      */     //读者跳转到图书馆     @RequestMapping("/user.action")     public String skipUser(Model model,@Param("id") String username) throws UnsupportedEncodingException {         //中文编码:         /**          * 在前端使用URL传递时,使用encodeURI(encodeURI(username))          * 后端解析使用java.net.URLDecoder.decode(username,"UTF-8");          */         username = java.net.URLDecoder.decode(username,"UTF-8");         System.out.println(username);         model.addAttribute("user", userService.getUserByUserName(username).get(0));         model.addAttribute("list",bookService.selectBookByStatus());         return "user";     }     //跳转到admin.jsp     @RequestMapping("/admin.action")     public String skipAdmin(){         return "admin";     } } @Controller @RequestMapping("/book") public class BookController {     @Autowired     private BookService bookService;     @Autowired     private BookOrderService bookOrderService;     //删除图书     @RequestMapping("/deleteById.action")     @ResponseBody     public Map deleyeById(@RequestParam("bid") int bid){         bookService.deleteBook(bid);         Map map = new HashMap();         map.put("msg","删除成功");         return map;     }     //添加图书     @RequestMapping("/addBook.action")     @ResponseBody     public int addBook(Book book){         bookService.addBook(book);         int i = bookService.selectLastNum();         return i;     }     //修改图书     @RequestMapping("/modify.action")     @ResponseBody     public int modifyBook(Book book){         System.out.println(book);         bookService.modifyBook(book);         return book.getBid();     }     //借书     /**      * 借书所要进行的操作:      *  将书籍状态改为0      *  在记录单上添加该用户的信息以及对应的书ID,并设置该订单状态为未完成(未还书,还书即算本次订单完成,未完成状态为1,完成状态为0)      * @param bid      */     @RequestMapping("/updateBookStatusToZero.action")     @ResponseBody     public int updateBookStatusToZero(@Param("id") int id ,@Param("bid") int bid){         bookService.updateBookStatusToZero(bid);         //借书订单添加用户以及对应的书籍ID         bookOrderService.addOrder(id,bid);         return bid;     }     //还书     @RequestMapping("/updateBookStatusToOne.action")     @ResponseBody     public int updateBookStatusToOne(@Param("bid") int bid){         //根据书籍的id更改书籍的状态为1         bookService.updateBookStatusToOne(bid);         //将订单的状态更改为0(我的借还中书籍的状态需要是1)         bookOrderService.updateOrderStatus(bid);         return bid;     } } @Controller @RequestMapping("/login") public class UserController {     @Autowired     private BookService bookService;     @Autowired     private BookOrderService bookOrderService;     @Autowired     private UserService userService;     //登录校验     @RequestMapping("/checkLogin.action")     public String checkLogin(@RequestParam("username")String username, @RequestParam("password")String password, Model model){         Map map = userService.checkLogin(username,password);//校验,返回不同的返回值和角色存入map集合         if(map.get("result").equals("login")){             model.addAttribute("msg","账号或密码错误");         }else if(map.get("result").equals("admin")) {             model.addAttribute("user",map.get("user"));//如果是管理员返回管理员管理初始界面,并把管理员存入Attribute         }else{//user             List list = bookService.selectBookByStatus();//如果是普通用户,返回书籍展示页面并把普通用户存入Attribute             model.addAttribute("list",list);             model.addAttribute("user",map.get("user"));         }         return (String)map.get("result");//返回角色信息或者错误信息,经过前端ajax判断,如果不是错误信息,跳转到user或者admin的action里     }    //用户注册功能实现     @RequestMapping(value = "/addUser.action")     @ResponseBody()     public Map addUser(User user, HttpServletRequest request, HttpServletResponse res) throws UnsupportedEncodingException {         Map map = new HashMap();         if(!userService.isInserUser(user)){//不可插入             map.put("isUse",false);             return map;         }         //对用户的密码进行md5加密         String pwd = SecureUtil.md5(user.getPassword() + user.getUsername());         user.setPassword(pwd);//把加密的密码设置给user         userService.addUser(user);//执行添加操作         map.put("msg",true);         return map;     }     //用户注册     //跳转到register.jsp     @RequestMapping("/register.action")     public String register(){         return "register";     }     /*//前端跳转到的页面,暂未启用     @RequestMapping("/admin.action")     public String admin(int id){//传递的参数仅为跳转那个页面         /*String result;         if(id == 1){             result = "bookManage";         }else if(id == 2){             result = "";         }         return result;         return "";     }*/     //获取所有的普通User     //跳转到getCommonUser.jsp     @RequestMapping("/getCommonUser.action")     public String getCommonUser(Model model){         model.addAttribute("list",userService.getCommonUser());         return "commonUserManage";     }     //删除某一个用户     //跳转到deleteUser.jsp     @RequestMapping("/deleteUser.action")     @ResponseBody     public Map deleteUser(@Param("id") int id){         userService.deleteUser(id);         Map map = new HashMap();         map.put("msg","删除成功!");         return map;     }     //修改一个用户     //跳转到modifyUser.jsp     @RequestMapping("/modifyUser.action")     @ResponseBody     public int modifyUser(User user){         System.out.println(user);         userService.modifyUser(user);         return user.getId();     }     //跳转到login.jsp     @RequestMapping("/login.action")     public String login(){         return "login";     }     //我的借还跳转     //跳转到myBorrow.jsp     @RequestMapping("/myBorrow.action")     public String myBorrow(Model model,int id){//一个参数为user 的id         List list = bookOrderService.myBorrow(id);         model.addAttribute("list",list);//传递的是我的借还的这个书籍id         model.addAttribute("user",userService.getUserById(id).get(0));         return "myBorrow";     }     //我的借还跳转到User.jsp     @RequestMapping("/user.action")     public String jumpUser(Model model,@Param("id") int id){         //该方法需要传递一个书籍状态为1的书籍列表,key为list         //还有一个是user的实例         //user实例的获取:         model.addAttribute("user",userService.getUserById(id).get(0));         List list = bookService.selectBookByStatus();         model.addAttribute("list",list);         return "user";     } }

Service层

public interface UserService {     //检查登录     public Map checkLogin(String username, String password);     //添加用户     public void addUser(User user);     //查询根据用户名是否有重名     public boolean isInserUser(User user);     //查询所有的普通用户     public List getCommonUser();     //删除用户     public void deleteUser(int id);     //修改用户     public void modifyUser(User user);     //根据id查询用户     public List getUserById(int id);     public List getUserByUserName(String username); } public interface BookService {     //查询所有书籍     public List selectAllBook();     //添加书籍     public int addBook(Book book);     //删除图书     public void deleteBook(int bid);     //修改图书     public void modifyBook(Book book);     //查询库存     public int selectBookNumByBookName(String bookname);     //根据作者名查询图书     public List selectBookByAuthor(String author);     //查询最后一个主键     public int selectLastNum();     //查询图书状态为1的图书list,即可借状态     public List selectBookByStatus();     //借书     public void updateBookStatusToZero(int bid);     //还书     public void updateBookStatusToOne(int bid); } public interface BookOrderService {     /**      * 添加图书订单      * 更改订单状态      */     public void addOrder(int userId, int bid);     public void updateOrderStatus(int bid);     //查询我的借还     public List myBorrow(int id); }

Dao层

public interface BookDao {     /**      * 书的操作:      *  查询所有图书      *  添加图书      *  删除图书      *  根据作者名查询图书      *      */     @Select("select * from book")     public List selectAllBook();     @Insert("insert into book(bookname,author,detail,status,price,category) value(#{bookname},#{author},#{detail},${status},${price},#{category})")     public void addBook(Book book);     //查找最后一条记录的主键     @Select("select max(bid) from book")     public List selectLastNum();     @Delete("delete from book where bid = #{bid}")     public void deleteBookById(int bid);     @Select("select count(*) from book where bookname like #{bookname}")     public int selectAllNum(String bookName);     @Select("select * from book where author like #{author}")     public List selectBookByAuthor(String author);     //根据状态查询书籍,查询书籍状态为1的书籍,可借状态     @Select("select * from book where status = 1")     public List selectBookByStatus();     //借书,即将书籍状态改为0     @Select("update book set status = 0 where bid = #{bid}")     public void updateBookStatusToZero(int bid);     //还书,即将书籍状态改为1     @Select("update book set status = 1 where bid = #{bid}")     public void updateBookStatusToOne(int bid);     //修改图书     @Update("update book set bookname=#{bookname},author=#{author},detail=#{detail},price=#{price},category=#{category} where bid = #{bid}")     public void modifyBook(Book book); } public interface BookOrderDao {     /**      * 图书订单Dao      * 新建图书订单,UserId,BookId,订单状态为1,(订单状态为0时表示已还)      * 还书操作:将订单状态置为0      */     //添加订单,当进行借书操作时需要     @Insert("insert into bookorder(userid,bid,orderstatus) values(${id},${bid},1)")     public void addOrder(@Param("id") int id, @Param("bid") int bid);     //将订单状态置为0,表示已还,当进行还书操作时需要     @Update("update bookorder set orderstatus = 0 where bid = #{bid}")     public void updataOrderStatus(int bid);     //根据userid查询对应的用户所有的订单     @Select("SELECT * FROM book where bid = ANY(SELECT bid from bookorder WHERE userid = #{id} and orderstatus = 1)")     public List selectOrder(int id);//用户的id } public interface UserDao {     /**      * 用户表操作的接口      *  方法有:      *      给定用户名,查询密码      *      添加用户      */     //获取用户     @Select("select * from user where username = #{username}")     public List getUser(String username);     @Insert("insert into user(username,password,grade) value(#{username},#{password},#{grade})")     public void addUser(User user);     //查询所有普通用户     @Select("select * from user where grade = 1")     public List getCommonUser();     //删除指定用户     @Delete("delete from user where id = #{id}")     public void deleteUser(int id);     @Update("update user set username = #{username},password = #{password} where id = #{id}")     public void modifyUser(User user);     //根据用户id获取用户信息     @Select("select * from user where id = #{id}")     public List getUserById(int id); }

ApplicationContext.xml配置

                                                                                                                                                                                                                    

Springmvc.xml配置

                                                                       

需要项目源码的可以点击个人主页资源下载,

也可以去我个人gitHub下载:GitHub - zhouwenhao123456/BookManage: 基于SSM的图书管理系统

当然,如果你觉得我的项目对你有帮助的话,

看个人心情适当打赏几块钱,请博主喝瓶可乐,hhhh~  

注意:开发软件IDEA,如果是ecplise的读者,需要上网查找IDEA转ecplise的方法



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有