基于springboot的中国国家图书馆管理系统项目(管理功能)
中国国家图书馆管理系统项目(模板)
- 中国国家图书馆管理系统项目介绍
- 项目背景
- 项目功能
- 项目技术
- 项目模块
- 项目要求
- 中国国家图书馆管理系统项目开发流程
- 第一节 登录
- 1. 持久层
- 2. 业务层
- 3. 控制层
- 4. 前端页面
- 第二节 注册
- 1. 持久层
- 2. 业务层
- 3. 控制层
- 4. 前端页面
- 第三节 后台系统
- 1. 持久层
- 2. 业务层
- 3. 控制层
- 4. 前端页面
- 第四节 前端展示
- 第五节 用户系统
- 第六节 租借记录
- 外星人商城项目总结
中国国家图书馆管理系统项目介绍
项目背景
中国国家图书馆公司(狗头)委托我开发一个一个专门的中国国家图书馆,出售外星人电子产品以及周边,实现了以下功能。
本项目尚未搭载了服务器,网址给定:
链接: 外星人官方网站.
项目功能
- 登录
- 注册
- 后台系统
- 前端展示
- 用户系统
- 租借记录
- 充值消费
项目技术
- 项目框架:springboot
- 数据库框架:mybaits
- 前端技术:JS、JQuery、Ajax
项目模块
持久层:依据业务要求规划相关的SQL语句,以及进行配置
业务层:核心功能控制、业务操作以及异常处理
控制层:接受请求,处理响应
前端开发:JS、JQuery、Ajax
单元测试:junit
项目要求
- JDK8
- maven3.6.1
- 数据库mysql5.1
- idea
中国国家图书馆管理系统项目开发流程
第一节 登录
1. 持久层
- 创建基本用户类
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {/*** id int not null primary key auto_increment,* username varchar(12), --用户名* password varchar(12) -- 密码*/private int id;private String username;private String password;private Double money;
}
- mapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><select id="logincheck" parameterType="user" resultType="user">select *from `ssm-library`.user<where><if test="username != null and username != ''">and `username` = #{username}</if><if test="password != null and password != ''">AND `password` = #{password}</if></where></select><select id="checkUserName" parameterType="String" resultType="String">select *from `ssm-library`.user<where><if test="username != null and username != ''">AND `username` = #{username}</if></where></select>
</mapper>
2. 业务层
- 登录功能的service接口和实现
public interface UserService {//登录验证User logincheck(User user);//注册void register(User user);//检查是否用户存在String checkUserName(String username);List<User> getAllUser();User getUserByName(String name);//条件查询List<User> conditionQuery(User user);}
- impl
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User logincheck(User user) {return userMapper.logincheck(user);}@Overridepublic void register(User user) {userMapper.register(user);}@Overridepublic String checkUserName(String username) {return userMapper.checkUserName(username);}@Overridepublic List<User> getAllUser() {return userMapper.getAllUser();}@Overridepublic User getUserByName(String name) {return userMapper.getUserByName(name);}@Overridepublic List<User> conditionQuery(User user) {return userMapper.conditionQuery(user);}
}
3. 控制层
//登录验证@RequestMapping("/login")public String login(@RequestParam("username") String username,@RequestParam("password") String password,Model model, HttpServletRequest request, User user) {Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken(username, password);redisTemplate.opsForValue().set(username, password);redisTemplate.opsForValue().set("username", username);
//这里使用token整合shiro实现权限-认证HttpSession session = request.getSession();session.setAttribute("UserSession", username);try {subject.login(token);model.addAttribute("username", username);if (("admin").equals(username)) {return "redirect:/admin/list";} else {return "redirect:/user/list";}} catch (UnknownAccountException e) {model.addAttribute("msg", "用户名错误");return "index";} catch (IncorrectCredentialsException e) {model.addAttribute("msg", "密码错误");return "index";}}
4. 前端页面
- 导入jsp依赖
<!-- 引入 jsp,--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><scope>runtime</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></dependency>
- 前端页面核心
<p text="${msg}" style="color: limegreen"></p>
<form class="form-signin" action="<%=request.getContextPath()%>/login"><img class="mb-4" src="<%=request.getContextPath()%>/resource/images/三井寿.jpg" alt="" width="100" height="150"><h1 class="h3 mb-3 font-weight-normal">请登录</h1><label for="username" class="sr-only">账号</label><input type="text" name="username" id="username" class="form-control" placeholder="账号" required="" autofocus=""><label for="password" class="sr-only">密码</label><input type="password" name="password" id="password" class="form-control" placeholder="密码" required=""><div class="checkbox mb-3"><label><input type="checkbox" value="remember-me"> 记住我</label></div><%-- <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>--%><%-- <a href="register.jsp" class="btn btn-lg btn-primary btn-block" type="submit">注册</a>--%><a href="register" type="submit" class="btn btn-primary btn-lg">注册</a><button type="submit" class="btn btn-primary btn-lg">登录</button><p class="mt-5 mb-3 text-muted">© 2021</p>
</form>
第二节 注册
1. 持久层
@Component
@Mapper
public interface UserMapper {//登录验证User logincheck(User user);//注册void register(User user);//检查是否用户存在String checkUserName(String username);List<User> getAllUser();User getUserByName(String name);//条件查询List<User> conditionQuery(User user);}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><insert id="register" parameterType="user">insert into `ssm-library`.user(username, password)value (#{username},#{password})</insert><select id="getUserByName" parameterType="String" resultType="user">select * from `ssm-library`.user where username=#{username}</select><select id="getAllUser" resultType="user">select * from `ssm-library`.user</select><!--根据条件查询--><select id="conditionQuery" resultType="user" parameterType="user">select * from `ssm-library`.user<where><if test="name != null and name != ''">username = #{username}</if><if test="author != null and author != ''">and password=#{password}</if></where></select></mapper>
2. 业务层
public interface UserService {//登录验证User logincheck(User user);//注册void register(User user);//检查是否用户存在String checkUserName(String username);List<User> getAllUser();User getUserByName(String name);//条件查询List<User> conditionQuery(User user);
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User logincheck(User user) {return userMapper.logincheck(user);}@Overridepublic void register(User user) {userMapper.register(user);}@Overridepublic String checkUserName(String username) {return userMapper.checkUserName(username);}@Overridepublic List<User> getAllUser() {return userMapper.getAllUser();}@Overridepublic User getUserByName(String name) {return userMapper.getUserByName(name);}@Overridepublic List<User> conditionQuery(User user) {return userMapper.conditionQuery(user);}// @Override
// public List<Book> conditionQuery(Book book) {
// return bookMapper.conditionQuery(book);
// }}
3. 控制层
//注册@RequestMapping("/registering")public String register(@RequestParam String username, @RequestParam String password, Model model) {User user = new User();String s = userService.checkUserName(username);if (s == null) {user.setUsername(username);user.setPassword(password);userService.register(user);return "redirect:/user/list";} else {model.addAttribute("fail", "该用户存在");System.out.println("该用户存在");return "register";}}
4. 前端页面
<body class="text-center" style="background: url(/resource/images/spyder.jpg)">
<form class="form-signin" action="${pageContext.request.contextPath}/registering"><img class="mb-4" src="<%=request.getContextPath()%>/resource/images/123.jpg" alt="" width="100" height="150"><h1 class="h3 mb-3 font-weight-normal">请登录</h1><label for="username" class="sr-only">账号</label><input type="text" name="username" id="username" class="form-control" placeholder="账号" required="" autofocus=""><label for="password" class="sr-only">密码</label><input type="password" name="password" id="password" class="form-control" placeholder="密码" required=""><div class="checkbox mb-3"><label><input type="checkbox" value="remember-me"> 记住我</label></div><button type="submit" class="btn btn-primary btn-lg">注册</button><a href="index" class="btn btn-primary btn-lg">登录</a><p class="mt-5 mb-3 text-muted">© 2021</p>
</form>
这里可以用Ajax去升级,以防代码的冗余;
第三节 后台系统
- 用户管理:User的增删改查
- 图书管理:图书的增删改查
1. 持久层
- mapper接口
@Mapper
public interface BookMapper {/*** * bookId int not null primary key auto_increment, --图书id* * name varchar(50), --图书名* * author varchar(50), --图书作者* * press varchar(50), --图书出版社* * price double(6, 2 --图书单价** @param book* @return*/// 增int addBook(Book book);// 删int deleteBook(int bookId);// 根据name查一个List<Book> queryBookByName(String BookName);// 改int updateBook(Book book);// 查所有List<Book> queryAllBook();// 根据id查一个Book queryBookById(int bookId);//条件查询List<Book> conditionQuery(Book book);//模糊查询List<Book> ListQuery(String value);//the number of Book// 增int addBookNum(String BookName);// 删int deleteBookNum(String BookName);// 改int updateBookNum(String BookName);}
- 持久层xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.BookMapper"><!-- `name`, `author`, `press`, `price`--><!--增--><insert id="addBook" parameterType="book">insert into `ssm-library`.book(name, author, press, price)values (#{name}, #{author}, #{press}, #{price})</insert><!--删--><delete id="deleteBook" parameterType="int">deletefrom `ssm-library`.bookwhere bookId = #{bookId}</delete><!--改--><update id="updateBook" parameterType="book">update `ssm-library`.bookset name=#{name},author=#{author},press=#{press},price=#{price}where bookId = #{bookId}</update><!--查所有--><select id="queryAllBook" resultType="book">select *from `ssm-library`.book</select><!--根据id查一个--><select id="queryBookById" resultType="book" parameterType="int">select *from `ssm-library`.bookwhere bookId = #{bookId}</select><!--根据name查一个--><select id="queryBookByName" resultType="book" parameterType="String">select *from `ssm-library`.bookwhere name = #{BookName}</select><!--根据条件查询--><select id="conditionQuery" resultType="Book" parameterType="Book">select * from `ssm-library`.book<where><if test="name != null and name != ''">name = #{name}</if><if test="author != null and author != ''">and author=#{author}</if><if test="press != null and press != ''">and press=#{press}</if></where></select><select id="ListQuery" resultType="Book">select * from `ssm-library`.book where NAME like '%#{value}%'</select><!-- 增减图书的数量--><!-- 如何选择合适的sql语句进行修改--><!--删--><delete id="addBookNum" parameterType="int">deletefrom `ssm-library`.bookwhere NAME = #{BookName}</delete></mapper>
2. 业务层
public interface BookService {// 增int addBook(Book book);// 删int deleteBook(int bookId);// 改int updateBook(Book book);// 查所有List<Book> queryAllBook();// 根据id查一个Book queryBookById(int bookId);// 根据name查一个List<Book> queryBookByName(String BookName);//条件查询List<Book> conditionQuery(Book book);//模糊查询List<Book> ListQuery(String value);//the number of Book// 增int addBookNum(String BookName);// 删int deleteBookNum(String BookName);// 改int updateBookNum(String BookName);
}
@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookMapper bookMapper;@Overridepublic int addBook(Book book) {return bookMapper.addBook(book);}@Overridepublic int deleteBook(int bookId) {return bookMapper.deleteBook(bookId);}@Overridepublic int updateBook(Book book) {return bookMapper.updateBook(book);}@Overridepublic List<Book> queryAllBook() {return bookMapper.queryAllBook();}@Overridepublic Book queryBookById(int bookId) {return bookMapper.queryBookById(bookId);}@Overridepublic List<Book> queryBookByName(String BookName) {return bookMapper.queryBookByName(BookName);}@Overridepublic List<Book> conditionQuery(Book book) {return bookMapper.conditionQuery(book);}@Overridepublic List<Book> ListQuery(String value) {return bookMapper.ListQuery(value);}@Overridepublic int addBookNum(String BookName) {return bookMapper.addBookNum(BookName);}@Overridepublic int deleteBookNum(String BookName) {return bookMapper.deleteBookNum(BookName);}@Overridepublic int updateBookNum(String BookName) {return bookMapper.updateBookNum(BookName);}}
3. 控制层
@Controller
public class AdminController {@Autowiredprivate BookService bookServiceImpl;@Autowiredprivate UserService userService;//查询所有user并分页显示@GetMapping("/users/list")public String queryAllUser(@RequestParam(value = "page", defaultValue = "1") Integer page,Model model) {//获取指定页数据,每页显示5条数据PageHelper.startPage(page, 5);//紧跟的第一个select方法被分页List<User> users = userService.getAllUser();System.out.println(users);model.addAttribute("users", users);//使用PageInfo包装数据 navigatePages表示导航标签的数量PageInfo pageInfo = new PageInfo(users, 5);model.addAttribute("pageInfo", pageInfo);return "admin/Usermanager";}@GetMapping("/admin/delete/{bookId}")public String deletebook(@PathVariable("bookId") int bookId) {int i = bookServiceImpl.deleteBook(bookId);return "redirect:/admin/list";}@RequestMapping("/register")public String register() {return "register"; // redirect 重定向/跳转}@GetMapping("/admin/toadd")public String toaddbook() {return "admin/add"; // redirect 重定向/跳转}@PostMapping("/admin/add")public String addbook(Book book) {int i = bookServiceImpl.addBook(book);return "redirect:/admin/list"; // redirect 重定向/跳转}@GetMapping("/queryBookById/{bookId}")public String querybookById(@PathVariable("bookId") int bookId, Model model) {Book book = bookServiceImpl.queryBookById(bookId);model.addAttribute("book", book);return "user/update"; //转发(默认为)}@PostMapping("/user/update")public String queryBookById(Book book) {System.out.println(book);int i = bookServiceImpl.updateBook(book);return "redirect:/user/list";}@GetMapping("/user/delete/{bookId}")public String deletebook(@PathVariable("bookId") int bookId) {int i = bookServiceImpl.deleteBook(bookId);return "redirect:/user/list";}@GetMapping("/conditionQuery")public String conditionQuery(Book book, Model model) {List<Book> books = bookServiceImpl.conditionQuery(book);model.addAttribute("books", books);return "user/list";}}
4. 前端页面
![在这里插入图片描述](https://img-blog.csdnimg.cn/225fc78f04b545769186e3fc796bf5ab.png
<div><p> 个人账户余额: ${user.money} 用户名: ${user.username} </p><a style="float: right;margin: 5px;" class="btn btn-primary"></a><a style="float: right;margin: 5px;" class="btn btn-primary"href="${pageContext.request.contextPath}/logout">注销</a><a href="/user/torecharge" class="btn btn-info">充值界面</a><a href="/single_user/list" class="btn btn-info">个人藏书室</a></div><div><form style="float: left;margin: 5px;" class="form-inline"action="${pageContext.request.contextPath}/conditionQuery" method="get"><div class="form-group"><label for="name">图书名</label><input type="text" name="name" class="form-control" id="name"></div><div class="form-group"><label for="author">图书作者</label><input type="text" name="author" class="form-control" id="author"></div><div class="form-group"><label for="press">图书出版社</label><input type="text" name="press" class="form-control" id="press"></div><button type="submit" class="btn btn-info">查询</button></form></div><table class="table table-striped"><tr><th>序号</th><th>图书名</th><th>图书作者</th><th>图书出版社</th><th>图书单价</th><th> 操作</th></tr><c:forEach items="${books}" var="book" varStatus="s"><tr><td>${s.count}</td><td>${book.name}</td><td>${book.author}</td><td>${book.press}</td><td>${book.price}</td><td>${book.bootNum}</td><td><%-- 这个方法需要修改--%><a href="${pageContext.request.contextPath}/single_user/purchase/${book.name}"class="btn btn-success">付费购买(下载)</a><a href="${pageContext.request.contextPath}/single_user/queryBookByName/${book.name}"class="btn btn-success" style="color: royalblue">试读借阅</a><%-- <a href="${pageContext.request.contextPath}/queryBookById/${book.bookId}" class="btn btn-success">归还</a>--%></td></tr></c:forEach></table>
<%--分页导航标签--%><div class="row"><div class="col-md-6">第${pageInfo.pageNum}页,共${pageInfo.pages}页,共${pageInfo.total}条记录</div><div class="col-md-6 offset-md-4"><nav aria-label="Page navigation example"><ul class="pagination pagination-sm"><li class="page-item"><a class="page-link"href="${pageContext.request.contextPath}/user/list?page=1">首页</a></li><c:if test="${pageInfo.hasPreviousPage}"><li class="page-item"><a class="page-link"href="${pageContext.request.contextPath}/user/list?page=${pageInfo.pageNum-1}">上一页</a></li></c:if><c:forEach items="${pageInfo.navigatepageNums}" var="page"><c:if test="${page==pageInfo.pageNum}"><li class="page-item active"><a class="page-link" href="#">${page}</a></li></c:if><c:if test="${page!=pageInfo.pageNum}"><li class="page-item"><a class="page-link"href="${pageContext.request.contextPath}/user/list?page=${page}">${page}</a></li></c:if></c:forEach><c:if test="${pageInfo.hasNextPage}"><li class="page-item"><a class="page-link"href="${pageContext.request.contextPath}/user/list?page=${pageInfo.pageNum+1}">下一页</a></li></c:if><li class="page-item"><a class="page-link"href="${pageContext.request.contextPath}/user/list?page=${pageInfo.pages}">末页</a></li></ul></nav></div></div>
第四节 前端展示
第五节 用户系统
第六节 租借记录
外星人商城项目总结
基于springboot的中国国家图书馆管理系统项目(管理功能)相关推荐
- SpringBoot实现代码生成器——基于SpringBoot和Vue的后台管理系统项目系列博客(十)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- SpringBoot实现1对1、1对多、多对多关联查询——基于SpringBoot和Vue的后台管理系统项目系列博客(十八)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- SpringBoot实现分页查询——基于SpringBoot和Vue的后台管理系统项目系列博客(七)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- 基于Springboot实现医院HIS信息管理系统
基于Springboot实现医院HIS信息管理系统 项目编号:BS-YL-012 开发工具:IDEA .ECLIPSE 数据库:MYSQL5.7 JAVA: JDK1.8 MAVEN环境 系统主要实现 ...
- 【JAVA程序设计】(C00072)基于Springboot的网上点餐管理系统
基于Springboot的网上点餐管理系统 项目简介 项目获取 开发环境 项目技术 运行截图 项目简介 基于springboot网上点餐系统共分为二个角色:系统管理员.用户 管理员角色包含以下功能: ...
- 基于Springboot 的实验室检测信息管理系统
源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 基于Springboot 的实验室检测信息管理系统 用户管理:管理员与使用者权限不一样,管理员具有查 ...
- (免费分享)基于Springboot的个人健康监控管理系统 毕业论文+项目源码
项目介绍: (免费分享)基于Springboot的个人健康监控管理系统 毕业论文+项目源码 系统说明: 摘要 本项目提供一种健康监控管理系统,包括身体指标获取模块和健康报告生成模块,其中,身体指标获取 ...
- java项目-第97期基于springboot的企业ERP物流管理系统-springboot毕业设计
java项目-第97期基于springboot的企业ERP物流管理系统 [源码请到资源专栏下载] 1.项目简述 该项目是一款基于springboot的企业ERP物流管理系统,分为很多角色,包含:管理员 ...
最新文章
- Struts 2 --ONGL介绍
- oracle中sp,sp是什么?
- 使用ABAP代码返回S/4HANA Material上维护的Attachment明细
- javax.xml.bind.UnmarshalException: 意外的元素 (uri:, local:xml)。所需元素为(none)
- Levko and Permutation CodeForces - 361B 思维 数论
- 计算机 教育 研究生分数查询,专业硕士在考试结束之后几周内可以去查分呢现在只能是通过电脑来查分了吗...
- Icon+启动图尺寸
- 基于python的智能风扇设计_智能风扇设计毕业设计
- 【比赛经验】陈成龙博士Kaggle计算机编程竞赛数据挖掘经验分享
- 中国教育与软件企业的共同误区
- Android 网络评分机制
- 2021高考成绩河北查询时间,2021年高考成绩什么时候出来-2021高考成绩公布时间...
- 什么是瑞利分布和准静态平坦衰落信道?
- 笔记本计算机故障与诊断,笔记本电脑维护与故障诊断
- etf基金代码大全_再谈深得我心的指数基金:纳指ETF
- Android 源码编译make的错误处理
- Linux内核同步原语之信号量(Semaphore)
- vue3 watch 监听多值以及深度监听用法
- 8086指令系统中的寻址方式
- 快应用开发必备工具下载