基於Java的簡單圖書館管理系統實現,圖書租借管理系統,租借系統,springboot圖書館管理系統,大學圖書管理系統,圖書借閱系統,圖書館借閱歸還系統。 ...
本章節給大家介紹一個基於Java簡單實現圖書館借書管理系統的設計與實現
項目概述
項目總體分為倆種角色,分別是管理員和閱讀者,管理員可以登錄系統中,進行圖書管理,上架下架圖書,對用戶進行管理、對讀者進行管理、查看借閱記錄管理等,讀者角色可以登錄系統查詢圖書信息、借閱和歸還圖書、查看個人借閱記錄、編輯個人信息等。
項目功能簡單,資料庫也只有4張表,分別為管理員表,讀者表,圖書表和借閱記錄表,但基本實現了圖書館對圖書借書的管理功能,大家可以在這個基礎上面靈活增加功能。
項目架構和內容獲取
採用B/S的架構實現,整體遵循MVC的設計思想,採用的是前後端分離的技術。
> 開發系統:Windows
> 架構模式:MVC/前後端分離
J> >DK版本:Java JDK1.8
> 開發工具: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
:
@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(); // 訪問數量加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, "暫未登錄!");
}
/**
* 獲取訪問數量
*
* @return 訪問數量
*/
@GetMapping("/visitCount")
public R visitCount() {
return result(LoginUser.getVisitCount());
}
}
- 完整項目獲取
瀏覽器輸入 projecthelp.top
部分功能展示
登錄頁面
管理員和讀者可以通過賬號密碼登錄系統中:
管理員角色
管理員首頁
管理員首頁展示了所有的借閱次數,總共訪問數,總共的圖書數量以及總共的讀者數量,同時還了圖表顯示:
圖書管理
管理員可以上架新的圖書,可以修改,刪除圖書:
讀者管理
管理員可以看到所有的系統讀者,還可以增加讀者,修改密碼等等:
借閱管理
管理員可以查看所有的系統圖書的借閱記錄:
讀者角色
圖書查詢
讀者可以通過圖書名稱或者圖書的作者查詢系統的圖書列表,對於未借閱的圖書,讀者可以點擊借閱即可借閱圖書,然後對於自己已借閱的圖書可以進行歸還:
查看自己的借閱記錄
對於讀者在系統上面的借閱記錄,可以在借閱管理進行查看:
個人信息
讀者可以在個人中心進行信息修改: