基于Java简单实现图书馆借书管理系统

发布时间:2023-05-05 09:23:46

本章介绍了基于Java简单实现图书馆借书管理系统的设计和实现

项目概述

项目一般分为管理员和读者两个角色,管理员可以登录系统、图书管理、书架、用户管理、读者管理、查看借阅记录管理等,读者角色可以登录系统查询图书信息、借阅和归还图书、查看个人借阅记录、编辑个人信息等。

项目功能简单,数据库只有管理员表、读者表、图书表和借阅记录表四张表,但基本实现了图书馆借书的管理功能,可以在此基础上灵活增加功能。

33基于Java简单实现图书馆借书管理系统_数据库

获取项目结构和内容

采用B/S架构实现,整体遵循MVC设计理念,采用前后分离技术。

 

开发系统:Windows架构模式:MVC分离JDK版本的前后端:Java JDK1.开发工具:idea或eclipse数据库版本: Mysql数据库可视化工具: navicat后端:java,spring,springmvc,springboot,mybatis,tomcat等前端:html,css,javascript,更详细的内容如vue可查看:http://projecthelp.top

 

项目实现

所有代码文件都有详细的注释,不用担心看不懂代码。

  • BookController图书控制器类别:
@RestController@RequestMapping("/book")public class BookController extends BaseController {    @Resource    private BookService bookService;    /**     * 对所有数据进行分页查询     *     * @param page 分页对象     * @param book 查询实体     * @return 所有数据     */    @GetMapping("/list")    public R selectAll(Page<Book> page, Book book) {        return result(this.bookService.page(page, book));    }    /**     * 添加图书     *     * @param book 图书     * @return 是否成功添加     */    @PostMapping("/add")    public R addBook(@RequestBody Book book) {        return result(bookService.save(book));    }    /**     * 修改图书     *     * @param book 图书     * @return 修改成功与否     */    @PostMapping("/update")    public R updateBook(@RequestBody Book book) {        return result(bookService.updateById(book));    }    /**     * 根据图书编号批量删除图书     *     * @param isbns 图书编号表     * @return 删除成功与否     */    @GetMapping("/delete")    public R deleteBook(@RequestParam List<String> isbns) {        return result(bookService.removeByIds(isbns));    }    //======================= 读者操作界面 ======================    /**     * 借阅图书     *     * @param isbn     图书编号     * @param readerId 读者编号     * @return 借阅成功吗?     */    @GetMapping("/lendBook")    public R lendBook(String isbn, Long readerId) {        return result(bookService.lendBook(isbn, readerId));    }    /**     * 归还图书     *     * @param isbn     图书编号     * @param readerId 读者编号     * @return 是否成功归还     */    @GetMapping("/returnBook")    public R returnBook(String isbn, Long readerId) {        return result(bookService.returnBook(isbn, readerId));    }}
  • 图书service的实现类:
@Service("bookService")public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {    @Resource    private LendRecordService lendRecordService;    /**     * 分页查询图书     *     * @param page 分页     * @param book 查询信息     * @return 图书列表,图书总计     */    @Override    public Map<String, Object> page(Page<Book> page, Book book) {        String author = book.getAuthor();        String bookName = book.getBookName();        QueryWrapper<Book> wrapper = new QueryWrapper<>();        wrapper.lambda().like(!StringUtils.isEmpty(author), Book::getAuthor, author)                .like(!StringUtils.isEmpty(bookName), Book::getBookName, bookName);        Page<Book> selectPage = this.baseMapper.selectPage(page, wrapper);        Map<String, Object> map = new HashMap<>();        map.put("list", selectPage.getRecords());        map.put("total", selectPage.getTotal());        return map;    }    /**     * 借阅图书     * 根据图书的isbn编号借阅图书     * 若当前图书未借阅(status为0),修改status为1,同时,还增加了一个新的借阅记录     *     * @param isbn     图书编号     * @param readerId 读者编号     * @return 借阅成功吗?     */    @Override    public boolean lendBook(String isbn, Long readerId) {        Book book = this.baseMapper.selectById(isbn);        book.setStatus("1");        int res = this.baseMapper.updateById(book);        // 新的借阅记录        LendRecord lendRecord = new LendRecord();        lendRecord.setIsbn(isbn);        lendRecord.setReaderId(readerId);        lendRecord.setLendDate(new Date());        boolean save = lendRecordService.save(lendRecord);        return res == 1 && save;    }    /**     * 归还图书     *     * @param isbn     图书编号     * @param readerId 读者编号     * @return 是否成功归还     */    @Override    public boolean returnBook(String isbn, Long readerId) {        Book book = this.baseMapper.selectById(isbn);        book.setStatus("0");        int res = this.baseMapper.updateById(book);        // 更新借阅记录状态        QueryWrapper<LendRecord> wrapper = new QueryWrapper<>();        wrapper.lambda().eq(LendRecord::getStatus, "0").eq(LendRecord::getIsbn, isbn).eq(LendRecord::getReaderId, readerId);        LendRecord lendRecord = lendRecordService.getOne(wrapper);        lendRecord.setReturnDate(new Date());        lendRecord.setStatus("1");        boolean update = lendRecordService.update(lendRecord, wrapper);        return res == 1 && update;    }}
  • 系统登录处理控制器LoginController:
@RestControllerpublic class LoginController extends BaseController {    @Resource    private AdminService adminService;    @Resource    private ReaderService readerService;    /**     * 登录     *     * @param loginBody 登录信息     * @return 随机字符串uuid     */    @PostMapping("/login")    public R login(@RequestBody LoginBody loginBody) {        String username = loginBody.getUsername();        String password = loginBody.getPassword();        String role = loginBody.getRole();        Object user = null;        if (!StringUtils.isEmpty(role)) {            if ("reader".equals(role)) {                // 读者登录                QueryWrapper<Reader> wrapper = new QueryWrapper<>();                wrapper.lambda().eq(Reader::getUsername, username).eq(Reader::getPassword, password);                user = readerService.getOne(wrapper);            } else if ("admin".equals(role)) {                // 管理员登录                QueryWrapper<Admin> wrapper = new QueryWrapper<>();                wrapper.lambda().eq(Admin::getUsername, username).eq(Admin::getPassword, password);                user = adminService.getOne(wrapper);            }        }        if (user != null) { // 登录成功            String uuid = UUIDUtils.getUUID();            Long userId = "admin".equals(role) ? ((Admin) user).getId() : ((Reader) user).getReaderId();            LoginUser.addUser(uuid, role, userId);            LoginUser.addVisitCount(); // 访问数量加1            return result(uuid, 成功登录!");        } else {            return result(R.ERROR, “登录失败!");        } else {            return result(R.ERROR, “登录失败! 帐号或密码错误!");        }    }    /**     * 获取用户信息     *     * @param token 令牌     * @return 用户信息     */    @GetMapping("/getInfo")    public R getInfo(String token) {        if (!StringUtils.isEmpty(token)) {            User u = LoginUser.getUserByToken(token);            if (u != null) {                // token验证成功                String role = u.getRole();                Long userId = u.getUserId();                Object user = null;                if ("reader".equals(role)) {                    // 获取读者信息                    QueryWrapper<Reader> wrapper = new QueryWrapper<>();                    wrapper.lambda().eq(Reader::getReaderId, userId);                    user = readerService.getOne(wrapper);                } else if ("admin".equals(role)) {                    // 获取管理员信息                    QueryWrapper<Admin> wrapper = new QueryWrapper<>();                    wrapper.lambda().eq(Admin::getId, userId);                    user = adminService.getOne(wrapper);                }                return result(user);            }        }        return result(R.SUCCESS, "未登录!");    }    /**     * 访问次数     *     * @return 访问数量     */    @GetMapping("/visitCount")    public R visitCount() {        return result(LoginUser.getVisitCount());    }}
  • 获取完整的项目
浏览器输入 projecthelp.top
部分功能显示登录页面

管理员和读者可以通过帐户密码登录系统:

33基于Java简单实现图书馆借书管理系统_spring_02

管理员角色管理员主页

管理员的主页显示了所有的借阅次数、总访问次数、书籍总数和读者总数。同时,图表显示:

33基于Java简单实现图书馆借书管理系统_ssm_03

图书管理

管理员可以上架新书,修改和删除书籍:

 

读者管理

管理员可以看到所有系统读者,也可以添加读者,修改密码等。

33基于Java简单实现图书馆借书管理系统_ssm_05

借阅管理

管理员可以查看系统图书的所有借阅记录:

33基于Java简单实现图书馆借书管理系统_ssm_06

查询读者角色图书

读者可以通过图书名称或图书作者查询系统的图书列表。对于未借阅的书籍,读者可以点击借阅借阅书籍,然后返回借阅的书籍:

33基于Java简单实现图书馆借书管理系统_图书租借_07

查看自己的借阅记录

对于系统上读者的借阅记录,可以在借阅管理中查看:

33基于Java简单实现图书馆借书管理系统_数据库_08

个人信息

读者可以在个人中心修改信息:

33基于Java简单实现图书馆借书管理系统_图书租借_09

上一篇 java学习笔记(一)
下一篇 如何在 Java 中求一个数的平方根?

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题