作者主页:夜未央5788
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
项目介绍
本系统是基于SSM和bootstrap进行开发的项目。主要也是为了完成学校的学习任务,整体可能没有那么完美,练练手倒还行。
该项目主要分为管理员与普通用户两种角色。
普通用户主要功能包括:图书查看、下订单、订单查看;
管理员主要功能包括:图书管理、订单管理、处理订单等;
由于本程序规模不大,可供课程设计、期末作业等之用,由于该项目界面较少,暂不适合做毕业设计之用,若想作为毕业设计,需要自行补充功能,完善内容。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 8.0版本;
6.是否Maven项目:是;
技术栈
1. 后端:Spring+SpringMVC+Mybatis
2. 前端:JSP+bootstrap
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;需要首先执行bookManager.sql,再执行insertBookData.sql;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中config.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入http://localhost:8080/manager/index.jsp 登录 注:Tomcat中配置项目路径必须为manager
管理员:Chris 密码:123456
普通用户:chris 密码:123
运行截图
相关代码
图书控制器
package controller;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import po.*;
import service.BookService;
import service.ChangeBookService;
import service.StorageService;
import utils.BookChangeStuation;
import utils.SessionString;
import javax.servlet.http.HttpSession;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//这个对象是用来进行分页的
@Controller
public class BookController {
@Autowired
private BookService bookService;
@Autowired
private StorageService storageService;//增加库存
//对于图书的管理
@Autowired
private ChangeBookService changeBookService;
//通过查询获取部分的相应图书
@RequestMapping(value = "/BookQuery")
public String getSomeBooks(@RequestParam Map<String,Object> map, HttpSession httpSession){
//注意两个分页的必要参数,page和limit
List<Map<String,Object>> list = bookService.selectBookPageWhere(map);
PageInfo<Map<String ,Object>> pageInfo = new PageInfo<Map<String,Object>>();
map.put("list",list);
//聚合数目最大值
map.put("total",pageInfo.getTotal());
httpSession.setAttribute(SessionString.BOOK_LIST,list);
//通过Session进行判定,如果是user那就跳转到user的界面,反之就是manager的界面
Manager manager = (Manager) httpSession.getAttribute(SessionString.Manager_SESSION);
if(manager != null){
return "/managerJsp/manager";
}else{
return "/userJsp/user";
}
}
//通过查询获取全部图书
@RequestMapping(value = "/BookAll")
public String getAllBooks(@RequestParam Map<String,Object> map, HttpSession httpSession){
//注意两个分页的必要参数,page和limit
List<Map<String,Object>> list = bookService.selectAllBook(map);
PageInfo<Map<String ,Object>> pageInfo = new PageInfo<Map<String,Object>>();
map.put("list",list);
//设置page和limit
map.put("page",0);
map.put("limit",0);
//聚合数目最大值
map.put("total",pageInfo.getTotal());
httpSession.setAttribute(SessionString.BOOK_LIST,list);
//通过Session进行判定,如果是user那就跳转到user的界面,反之就是manager的界面
Manager manager = (Manager) httpSession.getAttribute(SessionString.Manager_SESSION);
if(manager != null){
return "/managerJsp/manager";
}else{
return "/userJsp/user";
}
}
//通过id获取图书信息
@RequestMapping("/book/getBookById")
@ResponseBody
public Book getBookById(Integer id){
Book book = bookService.selectBookById(id);
return book;
}
//更新图书
@RequestMapping("/book/update")
@ResponseBody
public String updateBook(Book book,HttpSession session){
//增加
Book book1 = bookService.selectBookById(book.getId());
boolean flag = changeBook(BookChangeStuation.UPDATE_BOOK,session,book);
int rows = bookService.updateBook(book);
if(rows > 0 && flag ){
return "OK";
}else{
return "FAIL";
}
}
//删除图书
@RequestMapping("book/delete")
@ResponseBody
public String deleteBook(Integer id,HttpSession session){
Book book = bookService.selectBookById(id);
boolean flag = changeBook(BookChangeStuation.DELETE_BOOK,session,book);
int rows = bookService.deleteBook(id);
if(rows > 0 && flag){
return "OK";
}else{
return "FAIL";
}
}
//增加图书
@RequestMapping("/book/create")
@ResponseBody
public String createBook(Book book){
int num = book.getStorage().getNum();
Storage storage = new Storage();
storage.setNum(num);
int row = storageService.insertStorage(storage);
int rows = bookService.insertBook(book);
//主要就是这里进行图书库存的增加,获取book然后得到id,设置自己的
Book book1 = bookService.selectBookByBook(book);
int rows2 = bookService.updateBookStorageId(book1);
if(rows > 0 && row > 0 && rows2 > 0){
return "OK";
}else{
return "FAIL";
}
}
//图书管理方法,参数method为行为
public boolean changeBook(String method,HttpSession session,Book book){
Manager manager = (Manager) session.getAttribute(SessionString.Manager_SESSION);
ChangeBook changeBook = new ChangeBook();
changeBook.setBook_id(book.getId());
changeBook.setManager_id(manager.getId());
//时间
Date date = new Date();
Timestamp timestamp = new Timestamp(date.getTime());
changeBook.setChange_time(timestamp);
//情况更改
changeBook.setSituation(new BookChangeStuation().toStuation(book,method));
int rows_change = changeBookService.insertChange(changeBook);
return rows_change > 0;
}
}
管理控制器
package controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import po.Manager;
import service.ManagerService;
import utils.SessionString;
import javax.servlet.http.HttpSession;
@Controller
public class ManagerController {
@Autowired
private ManagerService managerService;
@RequestMapping(value = "/loginManager.action",method = RequestMethod.POST)
public String login(String manager_name, String manager_password, HttpSession httpSession) {
Manager manager = managerService.findManagerByNameAndPassword(manager_name,manager_password);
if(manager != null){
httpSession.setAttribute(SessionString.Manager_SESSION,manager);
return "redirect:/BookAll";//跳转到管理者界面。
}else{
httpSession.setAttribute(SessionString.MSG,"您的管理者的登录信息有误,请重新输入~");
return "managerLogin";
}
}
//使用get方法进行登录
@RequestMapping(value = "/loginManager.action" ,method = RequestMethod.GET)
public String toLogin() {
return "managerLogin";
}
//管理者进行退出登录
@RequestMapping("/logoutManager.action")
public String logOut(HttpSession httpSession){
httpSession.invalidate();
return toLogin();
}
//图书列表跳转
@RequestMapping(value = "/bookList",method = RequestMethod.GET)
public String showBookList(){
return "forward:/BookAll";
}
}
订单控制器
package controller;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import po.*;
import service.DeliveryService;
import service.OrderService;
import service.StorageService;
import utils.SessionString;
import utils.TimeStampFactory;
import javax.servlet.http.HttpSession;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Controller
public class OrderController {
@Autowired
private OrderService orderService;//订单
@Autowired
private DeliveryService deliveryService;//出库
@Autowired
private StorageService storageService;//库存修改
@RequestMapping("/newOrder")
@ResponseBody
@Transactional
public String addNewOrder(Delivery delivery, HttpSession session){
//首先出库,然后在变成订单
//时间
delivery.setTime_delivery(TimeStampFactory.getSystemTime());
int row = deliveryService.insertDelivery(delivery);
//库存减少
Storage storageOrigin = storageService.findStorageById(delivery.getStorage().getId());
int booknum = storageOrigin.getNum();
storageOrigin.setNum(booknum-delivery.getNum());
int row3 = storageService.updateStorageNum(storageOrigin);
//再读取该delivery然后将读取出来
Delivery delivery1 = deliveryService.selectDelivery(delivery);
//添加一个订单
Order order = new Order();
order.setDelivery(delivery1);
//获取user
User user = (User) session.getAttribute(SessionString.USER_SESSION);
order.setUser(user);
//新建一个订单
int row2 = orderService.insertOneOrder(order);
if(row > 0 && row2 > 0 && row3 > 0){
return "OK";
}else{
return "FAIL";
}
}
//进行读取所有的订单,展示到前端。
@RequestMapping("orderList")
public String getAllOrder(@RequestParam Map<String,Object> map, HttpSession httpSession){
//注意两个分页的必要参数,page和limit
List<Map<String,Object>> list = orderService.selectAllOrder(map);
PageInfo<Map<String ,Object>> pageInfo = new PageInfo<Map<String,Object>>();
map.put("list",list);
//设置page和limit
map.put("limit",0);
map.put("page",0);
//聚合数目最大值
map.put("total",pageInfo.getTotal());
httpSession.setAttribute(SessionString.ORDER_LIST,list);
//通过Session进行判定,如果是user那就跳转到user的界面,反之就是manager的界面
Manager manager = (Manager) httpSession.getAttribute(SessionString.Manager_SESSION);
if(manager != null){
return "/managerJsp/managerOrder";
}else{
return "/userJsp/userOrder";
}
}
//删除订单
@RequestMapping("order/delete")
@ResponseBody
public String deleteOrder(Integer id){
int rows = orderService.deleteOrder(id);
if(rows > 0 ){
return "OK";
}else{
return "FAIL";
}
}
//处理订单
@RequestMapping("order/update")
@ResponseBody
public String updateOrder(Integer id,HttpSession session){
Manager manager = (Manager) session.getAttribute(SessionString.Manager_SESSION);
Order order = new Order();
order.setId(id);
order.setManager(manager);
order.setTime_order(TimeStampFactory.getSystemTime());
int rows = orderService.updateOrderAll(order);
if(rows > 0 ){
return "OK";
}else{
return "FAIL";
}
}
//查询部分的订单
@RequestMapping("order/query")
public String queryOrder(@RequestParam Map<String,Object> map, HttpSession httpSession){
//注意两个分页的必要参数,page和limit
List<Map<String,Object>> list = orderService.selectOrderPageWhere(map);
PageInfo<Map<String ,Object>> pageInfo = new PageInfo<Map<String,Object>>();
map.put("list",list);
//聚合数目最大值
map.put("total",pageInfo.getTotal());
httpSession.setAttribute(SessionString.BOOK_LIST,list);
//通过Session进行判定,如果是user那就跳转到user的界面,反之就是manager的界面
Manager manager = (Manager) httpSession.getAttribute(SessionString.Manager_SESSION);
if(manager != null){
return "/managerJsp/managerOrder";
}else{
return "/userJsp/userOrder";
}
}
}
用户控制器
package controller;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import po.User;
import service.UserService;
import utils.SessionString;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService userService;
//登录检测
@RequestMapping(value = "/userLogin.action",method = RequestMethod.POST)
public String login( String username, String password, Model model, HttpSession httpSession){
//model是用于数据传递
User user = userService.findUserByNameAndPassword(username,password);
if(user != null){
httpSession.setAttribute(SessionString.USER_SESSION,user);
return "forward:/BookAll";//返回到用户购书的界面
}else{
httpSession.setAttribute(SessionString.MSG,"账号或密码有误,请重新输入!");
return "userLogin";
}
}
//直接进行登录验证
@RequestMapping(value = "/userLogin.action",method = RequestMethod.GET)
public String toLogin(){
return "userLogin";
}
//用户注册
@RequestMapping(value = "/userRegister.action")
public String register(User user,HttpSession httpSession){
//添加好数据后,跳转到数据
int row = userService.addNewUser(user);
if(row > 0){
httpSession.setAttribute(SessionString.MSG,"你已经注册成功可以进行登录!");
return "userLogin";//返回登录的页面
}else{
return "ok";//返回注册错误的页面
}
}
//用户退出
@RequestMapping(value = "/logoutUser.action")
public String logout(HttpSession httpSession){
httpSession.invalidate();
return "userLogin";
}
}
图片上传控制器
package controller;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
@Controller
public class PictureUploadController {
@RequestMapping(value = "/pictureUpload")
public String handlePic(@RequestParam("name") String name,
@RequestParam("uploadPic") MultipartFile uploadPic,
HttpServletRequest request) {
// 判断所上传文件是否存在
if (!uploadPic.isEmpty()) {
//循环输出上传的文件
// 设置上传文件的保存地址目录
String dirPath = "S:\\Study\\JavaEEFinalExam2021\\BookManager\\src\\main\\webapp\\images\\books\\";
File filePath = new File(dirPath);
// 如果保存文件的地址不存在,就先创建目录
if (!filePath.exists()) {
filePath.mkdirs();
}
//上传文件
try {
uploadPic.transferTo(new File(dirPath + name+".jpg"));
} catch (IOException e) {
e.printStackTrace();
return "redirect:/BookAll";
}
}
return "redirect:/BookAll";
}
}
如果也想学习本系统,下面领取。关注并回复:178ssm