33基于Java簡單實現(xiàn)圖書館借書管理系統(tǒng)

本章節(jié)給大家介紹一個基于Java簡單實現(xiàn)圖書館借書管理系統(tǒng)的設(shè)計與實現(xiàn)

項目概述

項目總體分為倆種角色,分別是管理員和閱讀者,管理員可以登錄系統(tǒng)中,進行圖書管理,上架下架圖書,對用戶進行管理、對讀者進行管理、查看借閱記錄管理等,讀者角色可以登錄系統(tǒng)查詢圖書信息、借閱和歸還圖書、查看個人借閱記錄、編輯個人信息等。

項目功能簡單,數(shù)據(jù)庫也只有4張表,分別為管理員表,讀者表,圖書表和借閱記錄表,但基本實現(xiàn)了圖書館對圖書借書的管理功能,大家可以在這個基礎(chǔ)上面靈活增加功能。


image.png

項目架構(gòu)

采用B/S的架構(gòu)實現(xiàn),整體遵循MVC的設(shè)計思想,采用的是前后端分離的技術(shù)。

開發(fā)系統(tǒng):Windows
架構(gòu)模式:MVC/前后端分離
JDK版本:Java JDK1.8
開發(fā)工具:idea或者eclipse
數(shù)據(jù)庫版本: mysql
數(shù)據(jù)庫可視化工具: navicat
后端:java,spring,springmvc,springboot,mybatis,tomcat等
前端:html,css,javascript,vue等
# ------------------------------------------
# 詳細源碼查看:http://projecthelp.top
# ------------------------------------------

項目實現(xiàn)

所有的代碼文件都有詳細的注釋,不用擔(dān)心看不懂代碼的。

  • BookController圖書的控制器類:
@RestController
@RequestMapping("/book")
public class BookController extends BaseController {
    @Resource
    private BookService bookService;

    /**
     * 分頁查詢所有數(shù)據(jù)
     *
     * @param page 分頁對象
     * @param book 查詢實體
     * @return 所有數(shù)據(jù)
     */
    @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));
    }

    /**
     * 根據(jù)圖書編號批量刪除圖書
     *
     * @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的實現(xiàn)類:
@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;
    }

    /**
     * 借閱圖書
     * 根據(jù)圖書的isbn編號借閱圖書
     * 如果當(dāng)前圖書未被借閱(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);

        // 更新借閱記錄狀態(tài)
        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;

    }
}
  • 系統(tǒng)登錄處理控制器LoginController:
@RestController
public 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(); // 訪問數(shù)量加1
            return result(uuid, "登錄成功!");
        } 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, "暫未登錄!");
    }

    /**
     * 獲取訪問數(shù)量
     *
     * @return 訪問數(shù)量
     */
    @GetMapping("/visitCount")
    public R visitCount() {
        return result(LoginUser.getVisitCount());
    }
}

部分功能展示

登錄頁面

管理員和讀者可以通過賬號密碼登錄系統(tǒng)中:


image.png

管理員角色

管理員首頁

管理員首頁展示了所有的借閱次數(shù),總共訪問數(shù),總共的圖書數(shù)量以及總共的讀者數(shù)量,同時還了圖表顯示:


image.png

圖書管理

管理員可以上架新的圖書,可以修改,刪除圖書:


image.png

讀者管理

管理員可以看到所有的系統(tǒng)讀者,還可以增加讀者,修改密碼等等:


image.png

借閱管理

管理員可以查看所有的系統(tǒng)圖書的借閱記錄:


image.png

讀者角色

圖書查詢

讀者可以通過圖書名稱或者圖書的作者查詢系統(tǒng)的圖書列表,對于未借閱的圖書,讀者可以點擊借閱即可借閱圖書,然后對于自己已借閱的圖書可以進行歸還:


image.png

查看自己的借閱記錄

對于讀者在系統(tǒng)上面的借閱記錄,可以在借閱管理進行查看:


image.png

個人信息

讀者可以在個人中心進行信息修改:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容