Java项目:ssm情缘图书馆管理系统

作者主页:夜未央5788

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

功能介绍

基于SSM的情缘图书馆管理系统。SSM框架,适合java初学者。

主要功能包括:

图书编目管理:图书编目、编目维护;

图书信息管理:图书录入、图书信息;

图书借阅管理:借阅图书、借阅信息、归还、续借;

读者管理:办证、读者信息、读者类别、证件操作;

系统管理:权限信息、用户权限;

软件架构

1. SSM+Tomcat8.5+Maven3.6.3+JDK1.8+MySQL5.7

运行截图

 

 

 

 

 

 

 

相关代码 

package com.chen.PLoveLibrary.controller;

import java.util.List;

import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.chen.PLoveLibrary.domain.BookClass;
import com.chen.PLoveLibrary.parameter.Parameter;
import com.chen.PLoveLibrary.service.BookClassService;

/**
 * @类 名: BookClassContorller @功能描述: TODO 图书编目控制器 @作者信息: 陈强 @创建时间:
 *    2018年4月22日下午2:30:29 @修改备注:
 */
@Controller
@RequestMapping("/bookClass")
@RequiresRoles(value={"BookManager","SysManager","Manager"},logical=Logical.OR)
public class BookClassContorller {
	@Autowired
	private BookClassService bookClassService;

	/**
	 * @Title : comeBookClassJSp
	 * @功能描述: TODO 进入到图书编目的页面
	 * @开发者:陈强 @参数: @return
	 * @返回类型:String
	 * @throws :
	 */
	@RequestMapping("/toBookClass")
	@RequiresPermissions(value={"bookClass:toBookClass","iterm:all"},logical=Logical.OR)
	public String comeBookClassJSp() {
		return "WEB-INF/bookJsp/bookClass";
	}

	/** 
	   * @Title : InsertBookClass 
	   * @功能描述: TODO 插入数据
	   * @开发者:陈强  
	   * @参数: @param bookClass
	   * @参数: @param br
	   * @参数: @param model
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping(value ="/insertBookClass", method = { RequestMethod.POST, RequestMethod.GET })
	@RequiresPermissions(value={"bookClass:insertBookClass","iterm:all"},logical=Logical.OR)
	public String InsertBookClass(@Validated BookClass bookClass, BindingResult br, Model model) {

		if (br.hasErrors()) {
			String Message = null;
			List<ObjectError> errors = br.getAllErrors();
			for (ObjectError objectError : errors) {

				model.addAttribute("message", Message + objectError.getDefaultMessage());
			}
			return "error";
		}
		bookClassService.insertBookClass(bookClass);
		model.addAttribute("bkCatalog",bookClass.getBkCatalog());
		model.addAttribute("bkClassName", bookClass.getBkClassName());
		return "WEB-INF/bookJsp/bookClass";
	}
	/** 
	   * @Title : BookClassInfo 
	   * @功能描述: TODO
	   * @开发者:陈强  
	   * @参数: @param parameter
	   * @参数: @param model
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping("/selectBookClass")
	@RequiresPermissions(value={"bookClass:selectBookClass","iterm:all"},logical=Logical.OR)
	public String BookClassInfo(Parameter parameter,Model model)
	{
		int count=bookClassService.getCount(parameter);
		int start=parameter.getStart();
		if(start<0) start=0;
		if(start>count)start-=10;
		int end= start+10;
		parameter.setStart(start);
		parameter.setEnd(end);
		List<BookClass> bookClassList= bookClassService.selectBookClassByID(parameter);
		model.addAttribute("bookClassList", bookClassList);
		model.addAttribute("start", start);
		
		
		return "WEB-INF/bookJsp/bookClassInfo";
	}
	/** 
	   * @Title : DeleteBookClass 
	   * @功能描述: TODO 删除信息
	   * @开发者:陈强  
	   * @参数: @param bookClass
	   * @参数: @param ra
	   * @参数: @param parameter
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping("/deleteBookClass")
	@RequiresPermissions(value={"bookClass:deleteBookClass","iterm:all"},logical=Logical.OR)
	public String DeleteBookClass(BookClass bookClass ,RedirectAttributes ra,Parameter parameter)
	{
		bookClassService.deleteBookClassByID(bookClass);
		ra.addAttribute("start",parameter.getStart());
		return "redirect:/bookClass/selectBookClass";
	}
	/** 
	   * @Title : EditBookClass 
	   * @功能描述: TODO 编辑信息
	   * @开发者:陈强  
	   * @参数: @param parameter
	   * @参数: @param ra
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping("/editBookClass")
	@RequiresPermissions(value={"bookClass:editBookClass","iterm:all"},logical=Logical.OR)
	public String EditBookClass(Parameter parameter,Model model)
	{
		BookClass bookClass=bookClassService.findBookClassByID(parameter);
		model.addAttribute("BookClass", bookClass);
		model.addAttribute("start", parameter.getStart());
		return "WEB-INF/bookJsp/bookClassInfo";
	}
	
	/** 
	   * @Title : UpdateBookClass 
	   * @功能描述: TODO 更新信息
	   * @开发者:陈强  
	   * @参数: @param parameter
	   * @参数: @param ra
	   * @参数: @param bookClass
	   * @参数: @param br
	   * @参数: @param model
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping( value="/updateBookClass",method={ RequestMethod.POST, RequestMethod.GET } )
	@RequiresPermissions(value={"bookClass:updateBookClass","iterm:all"},logical=Logical.OR)
	public String UpdateBookClass(Parameter parameter,RedirectAttributes ra,@Validated BookClass bookClass,BindingResult br,Model model)
	{

		if (br.hasErrors()) {
			String Message = null;
			List<ObjectError> errors = br.getAllErrors();
			for (ObjectError objectError : errors) {

				model.addAttribute("message", Message + objectError.getDefaultMessage());
			}
			return "error";
		}
		bookClassService.updateBookClass(bookClass);
		ra.addAttribute("start", parameter.getStart());
		return "redirect:/bookClass/selectBookClass";
		
	}

}

BookController

package com.chen.PLoveLibrary.controller;


import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.chen.PLoveLibrary.domain.Book;
import com.chen.PLoveLibrary.domain.BookClass;
import com.chen.PLoveLibrary.parameter.Parameter;
import com.chen.PLoveLibrary.service.BookClassService;
import com.chen.PLoveLibrary.service.BookService;
import com.chen.PLoveLibrary.util.DateExchangeUtil;
import com.chen.PLoveLibrary.util.ExportExcelUtil;

/**
   * @类 名: BookController
   * @功能描述: TODO 图书控制层
   * @作者信息: 陈强
   * @创建时间: 2018年4月24日下午8:33:59
   * @修改备注:
   */
@Controller
@RequestMapping("/book")
@RequiresRoles(value={"BookManager","SysManager","Manager"},logical=Logical.OR)
public class BookController {
	@Autowired
	private BookService bookService;//图书服务
	@Autowired
	private BookClassService bookClassService;//图书编目服务
	/** 
	   * @Title : intoBook 
	   * @功能描述: TODO 进入图书信息录入的界面
	   * @开发者:陈强  
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequiresPermissions(value={"book:toBook","iterm:all"},logical=Logical.OR)
	@RequestMapping("/toBook")
	public String intoBook(Model model)
	{
		List<BookClass> bookClassList=bookClassService.selectAllBkCatalog();
		model.addAttribute("classList",bookClassList);
		return "WEB-INF/bookJsp/book";
	}
	/** 
	   * @Title : InsertBook 
	   * @功能描述: TODO 保存图书信息
	   * @开发者:陈强  
	   * @参数: @param book
	   * @参数: @param br
	   * @参数: @param datePress
	   * @参数: @param dateIn
	   * @参数: @param file
	   * @参数: @param request
	   * @参数: @param response
	   * @参数: @param model
	   * @参数: @return
	   * @参数: @throws ParseException
	   * @参数: @throws IllegalStateException
	   * @参数: @throws IOException 
	   * @返回类型:String 
	   * @throws :
	   */
	@SuppressWarnings("unused")
	@RequestMapping(value="/insertBook",method={RequestMethod.POST,RequestMethod.GET})
	@RequiresPermissions(value={"book:insertBook","iterm:all"},logical=Logical.OR)
	public String InsertBook(@Validated Book book,BindingResult br,@RequestParam("DatePress")String datePress,
			@RequestParam("DateIn")String dateIn,@RequestParam(value="file",required=false)MultipartFile file,
			HttpServletRequest request,HttpServletResponse response,Model model) throws ParseException, IllegalStateException, IOException
	{
		book.setBkDatePress(DateExchangeUtil.StringToDate(datePress));
		book.setBkDateIn(DateExchangeUtil.StringToDate(dateIn));
		if(br.hasErrors())
		{
			List<ObjectError> errors=br.getAllErrors();
			for(ObjectError error:errors)
			{
				model.addAttribute("message",error.getDefaultMessage());
			}
			return "error";
		}
		
		String path=request.getSession().getServletContext().getRealPath("upload")+"/book";
		String fileName=file.getOriginalFilename();
		String fileType=file.getContentType();
		File targetFile = new File(path, fileName);   
		if(file==null)
		{
			book.setBkCover("upload/book/empty.jpg");
		}
		else
		{
			if(fileType.equals("image/jpeg")  ||fileType.equals("image/pjpeg")||fileType.equals("image/gif"))
			{
				book.setBkCover("upload/book/"+fileName);
				 file.transferTo(targetFile);  
			}
			else
			{
				book.setBkCover("upload/book/empty.jpg");
			}
			
		}
		bookService.insertBook(book);
		return "redirect:/book/toBook";
	}
	
	/** 
	   * @Title : FindBookInfo 
	   * @功能描述: TODO 图书信息展示
	   * @开发者:陈强  
	   * @参数: @param parameter url传递的参数
	   * @参数: @param model
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping(value="/findBookInfo",method={RequestMethod.POST,RequestMethod.GET})
	@RequiresPermissions(value={"book:findBookInfo","iterm:all"},logical=Logical.OR)
	public String FindBookInfo(Parameter parameter,Model model)
	{
		int count=bookService.getCounts(parameter);
		int start=parameter.getStart();
		if(start<0)start=0;
		if(start>count)start-=10;
		int end=start+10;
		parameter.setStart(start);
		parameter.setEnd(end);
		List<Book>bookList=this.bookService.selectBook(parameter);
		model.addAttribute("BookList",bookList);
		model.addAttribute("parameter", parameter);
		return "WEB-INF/bookJsp/bookInfo";
	}
	/** 
	   * @Title : DeleteBook 
	   * @功能描述: TODO 删除图书
	   * @开发者:陈强  
	   * @参数: @param parameter  
	   * @参数: @param ra
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping("/deleteBook")
	@RequiresPermissions(value={"book:deleteBook","iterm:all"},logical=Logical.OR)
	public String DeleteBook(Parameter parameter ,RedirectAttributes ra)
	{
		
		bookService.deleteBookByID(parameter.getBkID());
		ra.addAttribute("start", parameter.getStart());
		return "redirect:/book/findBookInfo";
	}
	/** 
	   * @Title : SearchBook 
	   * @功能描述: TODO 查找图书
	   * @开发者:陈强  
	   * @参数: @param parameter
	   * @参数: @param ra
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequiresPermissions(value={"book:searchBook","iterm:all"},logical=Logical.OR)
	@RequestMapping(value="/searchBook",method={RequestMethod.POST,RequestMethod.GET})
	public String SearchBook(Parameter parameter,RedirectAttributes ra)
	{
		System.out.println(parameter.getBkName());
		ra.addAttribute("start", parameter.getStart());
		ra.addAttribute("bkName", parameter.getBkName());
		return "redirect:/book/findBookInfo";
	}
	/** 
	   * @Title : EditBook 
	   * @功能描述: TODO 跳转到图书信息编辑界面
	   * @开发者:陈强  
	   * @参数: @param parameter
	   * @参数: @param model
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequiresPermissions(value={"book:editBook","iterm:all"},logical=Logical.OR)
	@RequestMapping("/editBook")
	public String EditBook(Parameter parameter,Model model)
	{
		List<Book> bookList=bookService.selectBook(parameter);
		model.addAttribute("book", bookList.get(0));
		List<BookClass> bookClassList=bookClassService.selectAllBkCatalog();
		model.addAttribute("classList",bookClassList);
		return "WEB-INF/bookJsp/bookEdit";
	}
	@SuppressWarnings("unused")
	@RequiresPermissions(value={"book:updateBook","iterm:all"},logical=Logical.OR)
	@RequestMapping(value="/updateBook",method={RequestMethod.POST,RequestMethod.GET})
	public String updateBook(@Validated Book book,BindingResult br,@RequestParam("DatePress")String datePress,
			@RequestParam("DateIn")String dateIn,@RequestParam(value="file",required=false)MultipartFile file,
			HttpServletRequest request,HttpServletResponse response,Model model) throws ParseException, IllegalStateException, IOException
	{
		book.setBkDatePress(DateExchangeUtil.StringToDate(datePress));
		book.setBkDateIn(DateExchangeUtil.StringToDate(dateIn));
		if(br.hasErrors())
		{
			List<ObjectError> errors=br.getAllErrors();
			for(ObjectError error:errors)
			{
				model.addAttribute("message",error.getDefaultMessage());
			}
			return "error";
		}
		
		String path=request.getSession().getServletContext().getRealPath("upload")+"/book";
		String fileName=file.getOriginalFilename();
		String fileType=file.getContentType();
		File targetFile = new File(path, fileName);   
		if(file==null)
		{
			book.setBkCover("upload/book/empty.jpg");
		}
		else
		{
			if(fileType.equals("image/jpeg")  ||fileType.equals("image/pjpeg")||fileType.equals("image/gif"))
			{
				book.setBkCover("upload/book/"+fileName);
				 file.transferTo(targetFile);  
			}
			else
			{
				book.setBkCover("upload/book/empty.jpg");
			}
			
		}
		bookService.updateBookByID(book);
		return "index";
	}
	/** 
	   * @Title : ExportExcel 
	   * @功能描述: TODO 导出数据
	   * @开发者:陈强  
	   * @参数: @param parameter
	   * @参数: @param request
	   * @参数: @param response
	   * @参数: @return 
	   * @返回类型:String 
	   * @throws :
	   */
	@RequestMapping("/exportBook")
	public String ExportExcel(Parameter parameter,HttpServletRequest request,HttpServletResponse response)
	{
		System.out.println(parameter.getStart());
		parameter.setEnd(parameter.getStart()+10);
		List<Book> bookList=bookService.selectBook(parameter);
		
		ExportExcelUtil ex = new ExportExcelUtil();
		String title="图书信息表";
		String[] headers ={"图书序号","图书编号","书名","作者","出版社","出版日期","ISBN书号","分类号","语言","页数","价格","入馆日期","内容简介","图书状态","图书封面"};
		List<String[]> dataset=new ArrayList<String[]>();
		for(int i=0;i<bookList.size();i++)
		{
			Book book=bookList.get(i);
			dataset.add(new String[]{book.getBkID(),book.getBkCode(),book.getBkName(),book.getBkAuthor(),
					book.getBkPress(),DateExchangeUtil.DateToString(book.getBkDatePress()),
					book.getBkISBN(),book.getBkCatalog(),book.getBkLanguage(),Integer.toString(book.getBkPages()),
					book.getBkPrice(),DateExchangeUtil.DateToString(book.getBkDateIn()),book.getBkBrief(),book.getBkStatus(),book.getBkCover()});
			
		}
		OutputStream out = null;//创建一个输出流对象 
		try { 
			
			out = response.getOutputStream();//
			response.setHeader("Content-disposition","attachment; filename="+"book.xls");//filename是下载的xls的名,建议最好用英文 
			response.setContentType("application/msexcel;charset=UTF-8");//设置类型 
			response.setHeader("Pragma","No-cache");//设置头 
			response.setHeader("Cache-Control","no-cache");//设置头 
			response.setDateHeader("Expires", 0);//设置日期头  
			String rootPath = request.getSession().getServletContext().getRealPath("/");
			ex.exportExcel(rootPath,title,headers, dataset, out);
			out.flush();
		} catch (IOException e) { 
			e.printStackTrace(); 
		}finally{
			try{
				if(out!=null){ 
					out.close(); 
				}
			}catch(IOException e){ 
				e.printStackTrace(); 
			} 
		}
		return "";
	}
}

如果也想学习本系统,下面领取。关注并回复:033ssm 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜未央5788

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值