做問卷的幾個(gè)網(wǎng)站如何優(yōu)化關(guān)鍵詞的排名
【1A536】圖書管理系統(tǒng)匯報(bào)
- 項(xiàng)目介紹
- 1.用戶登錄注冊(cè)功能
- 1. 1用戶角色管理
- 2.圖書管理功能
- 2.1 添加圖書
- 2.2 編輯圖書
- 2.3 刪除圖書
- 3.圖書搜索和篩選
- 3.1 圖書搜索
- 3.2 圖書篩選
- 4.圖書借閱、圖書歸還
- 4.1 圖書借閱
- 4.2 圖書歸還
- 5.用戶信息管理
- 5.1上傳頭像
- 5.2修改頭像
- 5.3 修改密碼
項(xiàng)目介紹
本項(xiàng)目提供用戶和管理員兩種角色,支持圖書的添加、編輯、刪除、搜索和篩選功能,同時(shí)具備用戶信息管理和借閱功能,確保圖書管理高效便捷。
1.用戶登錄注冊(cè)功能
注冊(cè)部分(前端代碼):
注冊(cè)部分(后端代碼):
//用戶注冊(cè)@PostMapping("/register")public Result register(@RequestBody User registerUser){System.out.println("register");// 查詢用戶QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();queryWrapper1.eq("user_name", registerUser.getUserName());User userone = userService.getOne(queryWrapper1); // 調(diào)用 getOne 方法if (userone != null) {return Result.error("用戶名已存在");}QueryWrapper<User> queryWrapper2 = new QueryWrapper<>();queryWrapper2.eq("user_email", registerUser.getUserEmail());User usertwo = userService.getOne(queryWrapper2); // 調(diào)用 getOne 方法if (usertwo != null) {return Result.error("郵箱已存在");}// 加密String md5Pwd = Md5Util.getMD5String(registerUser.getUserPassword());User user = new User();user.setUserName(registerUser.getUserName());user.setUserPassword(md5Pwd);user.setUserEmail(registerUser.getUserEmail());user.setUserRole("user");user.setUserStatus("0");// 調(diào)用插入數(shù)據(jù)的方法userService.save(user);UserStatistics userStatistics = new UserStatistics();userStatistics.setUserName(user.getUserName());userStatistics.setActivityCount(0);iUserStatisticsService.save(userStatistics);return Result.success();}
登錄部分(前端代碼):
登錄部分(后端代碼):
@PostMapping("/login")public Result<String> login(@RequestBody User user){LambdaQueryWrapper<User> wrapper=new LambdaQueryWrapper<>();wrapper.eq(User::getUserName,user.getUserName()).eq(User::getUserPassword, Md5Util.getMD5String(user.getUserPassword()));User userOne = userService.getOne(wrapper);if(userOne!=null){if(userOne.getUserStatus().equals("1")) return Result.error("用戶已被封禁");HashMap<String, Object> claims = new HashMap<>();claims.put("userId",user.getUserId());claims.put("userName",user.getUserName());String token = JwtUtil.genToken(claims);redisTemplate.opsForValue().set(token,userOne,30, TimeUnit.MINUTES);return Result.success(token);}else{return Result.error("用戶名密碼錯(cuò)誤");}}
1. 1用戶角色管理
功能介紹:
- 系統(tǒng)支持用戶和管理員兩種角色,不同角色有不同的權(quán)限。
- 管理員可以添加、編輯和刪除圖書,普通用戶只能借閱圖書。
前端代碼:
roleCheck
函數(shù)用于檢查當(dāng)前用戶的登錄狀態(tài)和角色信息。它通過發(fā)送一個(gè) HTTP GET 請(qǐng)求到后端 API 獲取用戶數(shù)據(jù),并根據(jù)返回的數(shù)據(jù)進(jìn)行相應(yīng)的處理。如果用戶未登錄或請(qǐng)求失敗,將重定向到首頁;如果用戶已登錄且請(qǐng)求成功,則更新用戶的角色、名稱和頭像URL,并將其存儲(chǔ)在本地存儲(chǔ)中。
后端代碼:
2.圖書管理功能
2.1 添加圖書
- 功能介紹:通過抽屜組件實(shí)現(xiàn),用戶可以填寫圖書的詳細(xì)信息并保存。
前端代碼:
后端代碼:
2.2 編輯圖書
- 功能介紹:點(diǎn)擊表格中的“編輯”按鈕,彈出抽屜組件,預(yù)填當(dāng)前圖書的信息,用戶可以進(jìn)行修改。
前端代碼:
當(dāng)點(diǎn)擊edit后,彈出抽屜,進(jìn)行圖書編輯,當(dāng)點(diǎn)擊提交時(shí),調(diào)用點(diǎn)擊事件的confirmClick方法進(jìn)行提交表
后端代碼:
2.3 刪除圖書
- 功能介紹:點(diǎn)擊表格中的“刪除”按鈕,彈出確認(rèn)框,確認(rèn)后刪除圖書。
前端代碼:
主要看這個(gè)handleDelete
方法,獲取行內(nèi)元素row的id字段以及token作為deleteBook
的參數(shù)。所以deleteBook
才是刪除圖書的關(guān)鍵,下面可以發(fā)現(xiàn),發(fā)通過axios
發(fā)了一個(gè)delete請(qǐng)求,請(qǐng)求體參數(shù)就是id和token
后端代碼:
查看后端代碼發(fā)現(xiàn),請(qǐng)求參數(shù)正是id跟token,通過對(duì)用戶進(jìn)行校驗(yàn)判斷用戶權(quán)限,權(quán)限通過后刪除圖書。
3.圖書搜索和篩選
3.1 圖書搜索
- 功能介紹:通過輸入框輸入圖書名或ISBN,實(shí)時(shí)過濾顯示結(jié)果。
搜索功能的實(shí)現(xiàn),@input是當(dāng)輸入框的值發(fā)生變化時(shí),觸發(fā) inputValue
方法,重點(diǎn)看該方法,它用于處理輸入框值變化時(shí)的邏輯,根據(jù)輸入的值過濾圖書數(shù)據(jù)。
3.2 圖書篩選
- 功能介紹:通過下拉選擇框選擇圖書狀態(tài)(全部、可借閱、不可借閱),動(dòng)態(tài)更新表格數(shù)據(jù)。
這里@change
屬性: 監(jiān)聽選擇框值的變化,觸發(fā)handleSelectChange
方法。
4.圖書借閱、圖書歸還
4.1 圖書借閱
- 功能介紹:用戶可以點(diǎn)擊圖書列表中的“借閱”按鈕,借閱圖書。借閱成功后,圖書狀態(tài)會(huì)更新為“不可借閱”。
后端代碼
@PostMapping("/borrow/{id}")public Result borrowBook(@PathVariable String id, String token){Book byId = bookService.getById(id);User user = checkInfo(token);if (user == null){return Result.error("用戶未登錄,無權(quán)限");}LambdaQueryWrapper<Book> userBorrowedBooksQuery = new LambdaQueryWrapper<>();userBorrowedBooksQuery.eq(Book::getBookBorrower, user.getUserName()).eq(Book::getBookStatus, "0"); // 假設(shè) "0" 表示已借出Long borrowedBooksCount = bookService.count(userBorrowedBooksQuery);if (borrowedBooksCount >= 3) {return Result.error("您已達(dá)到最大借書數(shù)量,無法再借書");}LambdaQueryWrapper<BookStatistics> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(BookStatistics::getBookName,byId.getBookName());BookStatistics stats = IBookStatisticsService.getOne(queryWrapper);if(stats==null){return Result.error("該書不存在");}stats.setBorrowCount(stats.getBorrowCount() + 1);IBookStatisticsService.updateById(stats);UpdateWrapper<Book> wrapper = new UpdateWrapper<>();wrapper.eq("book_id",id).set("book_borrower",user.getUserName()).set("book_status","0").set("book_borrowtime",LocalDate.now().toString()).set("book_returntime", LocalDate.now().plus(30, ChronoUnit.DAYS).toString());boolean update = bookService.update(wrapper);return Result.success(update);}
前端代碼
4.2 圖書歸還
- 功能介紹:用戶可以點(diǎn)擊圖書列表中的“借閱”按鈕,借閱圖書。借閱成功后,圖書狀態(tài)會(huì)更新為“不可借閱”。
前端代碼
后端代碼
@PutMapping("/backBook/{id}")public Result<String> backBook(@PathVariable String id,String token){User user = checkInfo(token);if(user==null){return Result.error("用戶未登錄,無權(quán)限");}UpdateWrapper<Book> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("book_id",id).set("book_status","1").set("book_borrower","").set("book_borrowtime","").set("book_returntime","");boolean update = bookService.update(updateWrapper);QueryWrapper<Book> queryWrapper = new QueryWrapper<>();queryWrapper.eq("book_id",id);Book book = bookService.getOne(queryWrapper);Record newRecord = new Record();LocalDate now = LocalDate.now();newRecord.setRecordBookname(book.getBookName());newRecord.setRecordBorrower(user.getUserName());newRecord.setRecordBookisbn(book.getBookIsbn());newRecord.setRecordAuthor(book.getBookAuthor());newRecord.setRecordPress(book.getBookPress());newRecord.setRecordBorrowtime(now.toString());newRecord.setRecordRemandtime(now.plusMonths(1).toString());boolean save = recordService.save(newRecord);if(update&&save){LambdaQueryWrapper<UserStatistics> queryWrapper1 = new LambdaQueryWrapper<>();queryWrapper1.eq(UserStatistics::getUserName,user.getUserName());UserStatistics getOne = iUserStatisticsService.getOne(queryWrapper1);if(getOne==null){return Result.error("該用戶不存在");}getOne.setActivityCount(getOne.getActivityCount() + 1);iUserStatisticsService.updateById(getOne);return Result.success("還書成功");}else {return Result.error("還書失敗");}}
5.用戶信息管理
5.1上傳頭像
要做頭像上傳,就得有存儲(chǔ)的地方,阿里云OSS對(duì)象存儲(chǔ)正好滿足我們的需求。
通過阿里云官網(wǎng),可查看找到OSS對(duì)象存儲(chǔ)工具類
- ENDPOINT:阿里云 OSS 的服務(wù)端點(diǎn)。
- ID:阿里云 Access Key ID。
- KEY:阿里云 Access Key
Secret。 BUCKET_NAME:存儲(chǔ)容器名稱。
后端代碼:
前端代碼:
5.2修改頭像
- 功能介紹:用戶可以通過上傳圖片來修改自己的頭像,上傳成功后自動(dòng)刷新頁面。
后端代碼:
前端代碼:
主要就是這個(gè)avatarUpload
方法上傳頭像,查看該方法發(fā)現(xiàn)
5.3 修改密碼
- 功能介紹:用戶可以點(diǎn)擊菜單中的“修改密碼”選項(xiàng),彈出對(duì)話框進(jìn)行密碼修改。
前端代碼:
后端代碼: