当前位置: 首页 > news >正文

【Scala】图书项目系统代码演练3.1/BookService

package org.app
package serviceimport models.{BookModel, BorrowRecordModel}import org.app.dao.{BookDAO, BorrowRecordDAO}import java.time.LocalDateTime
import scala.collection.mutable.ListBuffer// 图书业务逻辑层
class BookService {private val bookDAO = new BookDAO()private val borrowRecordDAO = new BorrowRecordDAO()// 查询所有的图书//  def searchBooks(query:String): 图书列表List(Book对象)def searchBooks(query:String):ListBuffer[BookModel] = {// 从文本文件中读取书本信息,并保存列表中,返回val books = bookDAO.loadBooks()query match {case "" => books // 没有条件,就返回全部case _ => books.filter(b => b.name.contains(query) || b.author.contains(query)) // 有条件,就过滤}}// 普通用户,借阅图书def borrowBook(username:String, bookId:Int):Boolean = {// (1)根据图书的ID,查询图书,判断图书是否存在val books = bookDAO.loadBooks()// 所有的借阅记录val records = borrowRecordDAO.loadBorrowRecords()val book = books.find(b => b.id == bookId)if(book.nonEmpty){val b = book.get//   (2)判断图书是否已经被借出if(b.available){// (3)借阅图书 更新这本书的状态b.available = false// 把更新之后的图书的信息写回txt文件bookDAO.saveBooks(books)// 添加一条借阅记录records += BorrowRecordModel(username, b.id,b.name, LocalDateTime.now().toString)// 写借阅记录回文件borrowRecordDAO.saveBorrowRecords(records)println("借阅成功,已保存借阅记录!")true} else {println("这本书被借走了")false}} else {println("没有找到这本书")false}}//普通用户,查询自己的借阅记录def queryBorrowedBooks(username: String):ListBuffer[BorrowRecordModel] = {//  1.把所有的记录全读出来val records = borrowRecordDAO.loadBorrowRecords()//  2.过滤出当前用户的借阅记录records.filter(r => r.userName == username)}// 普通用户.归还自己借的某一本书def returnBook(username: String, bookId: Int): Boolean = {// 1.确定这本书是他本人借的并处于没有归还的状态queryBorrowedBooks(username).find(r => r.bookID == bookId && r.returnDate.isEmpty) match {case Some(record) =>// 2.更新书的状态// 2.1 加载全部的书val books = bookDAO.loadBooks()// 2.2 选择当前这本书val b = books.find(_.id == bookId).getb.available = true// 2.3 把更新之后的状态写回.txt文件bookDAO.saveBooks(books)// 3.更新借阅记录的状态//        3.1 加载全部的借阅记录val records = borrowRecordDAO.loadBorrowRecords()//        3.2 找到当前这本书的借阅记录 bookID,userName,returnDate = Noneval r = records.find(r => r.bookID == bookId && r.userName == username && r.returnDate.isEmpty).getr.returnDate = Some(LocalDateTime.now().toString)//        3.3 把更新之后的状态写回.txt文件borrowRecordDAO.saveBorrowRecords(records)truecase None => false}}// 添加图书def addBook(book: BookModel): Unit = {// 1. 生成一个book ID// 查询所有图书. 找到最大的ID,+1var id = 1val books = bookDAO.loadBooks()if (books.nonEmpty) {id = books.map(_.id).max + 1}// 2. 更新IDval newBook = book.copy(id = id)// 3. 把新的图书添加到booksbooks += newBook// 4.写回到.txt中bookDAO.saveBooks(books)}
}

http://www.lryc.cn/news/512607.html

相关文章:

  • 人工智能基础软件-Jupyter Notebook
  • C++ 设计模式:模板方法(Template Method)
  • GDPU Vue前端框架开发 跨年大礼包
  • 搭建一个高效且安全的APP分发平台
  • Leetcode打卡:二叉树中的链表
  • 大数据技术-Hadoop(四)Yarn的介绍与使用
  • 算法 class 004(选择,冒泡,插入)
  • linux---awk命令详细教程
  • 一个通用的居于 OAuth2的API集成方案
  • STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
  • QML学习(五) 做出第一个简单的应用程序
  • 深入解析Android Framework中的android.location包:架构设计、设计模式与系统定制
  • 【C++11】类型分类、引用折叠、完美转发
  • mongodb(6.0.15)安装注意事项,重装系统后数据恢复
  • union的实际使用
  • EKF 自动匹配维度 MATLAB代码
  • Oracle复合索引规则指南
  • JS - Array Api
  • 【JS】for-in 和 for-of遍历对象的区别
  • 【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色
  • 深度学习blog- 数学基础(全是数学)
  • 最后100米配送
  • Linux的进程替换以及基础IO
  • 《计算机网络A》单选题-复习题库
  • 闲谭Scala(2)--安装与环境配置
  • Python基于卷积神经网络的车牌识别系统开发与实现
  • Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
  • Python 中的 with open:文件操作的最佳实践
  • 哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?
  • AI 智能助手对话系统