# scala的case class练习题

17 阅读2分钟

题目

步骤任务:

  1. 使用 case class 创建图书信息类 Book:包含四个属性:ID,书名,作者,价格,数量。
  2. 创建一个名为 bookList 的可变 List,它只能用来保存 Book 的实例。
  3. 初始化三本不同的书(注意 id 不同就是不同的书),加入到 bookList 中。
  4. 添加一本已经存在的书。此时应该去修改 bookList 中对应书目的数量,而不是去添加一条新数据。
  5. 根据图书名称查询是否在列表中(通过遍历列表对比名称)
  6. 删除指定书名的书
  7. 删除指定 ID 的书
  8. 对于图书按价格从高到低排序。
  9. 遍历图书列表,并打印每本书的详细信息
  10. 计算全部总的金额
object caseclass01 {

  //1.使用case class创建图书信息类Book:包含四个属性:ID,书名,作者,价格,数量。
  case class Book(id:String,name:String,author:String,price:Double,amount:Int) {}

  def main(args: Array[String]): Unit = {

    //3.初始化三本不同的书(注意id不同就是不同的书),加入到bookList中。
    val book1 = Book("1","西游记","吴承恩",32.3,10)
    val book2 = Book("2","红楼梦","曹雪芹",35,9)
    val book3 = Book("3","水浒传","施耐庵",35.6,5)

    //2.创建一个名为bookList的可变List,它只能用来保存Book的实例。
    val bookList = scala.collection.mutable.ListBuffer(book1,book2,book3)

    //4.添加一本已经存在的书。此时应该去修改bookList中对应书目的数量,而不是去添加一条新数据。
    def add(newBook: Book): Unit = {
      val addBook = bookList.find(_.id == newBook.id)
      if (addBook.isDefined) {
        val updatedBook = addBook.get.copy(amount = addBook.get.amount + newBook.amount)
        val index = bookList.indexOf(addBook.get)
        bookList.update(index, updatedBook)
        println(s"书'${newBook.name}'已存在,数量更新为:${updatedBook.amount}")
      } else {
        bookList += newBook
        println(s"添加新书:${newBook.name}")
      }
    }
    add(Book("1", "西游记", "吴承恩", 32.3, 5))

    //5.根据图书名称查询是否在列表中(通过遍历列表对比名称)
    def searchbookByName(bookName:String):Boolean = {
      for (book <- bookList) {
        if (book.name == bookName) {
          return true
        }
      }
      false
    }
    println(s"'西游记':${searchbookByName("西游记")}")

    //6.删除指定书名的书
    def removeBookByName(bookName: String): Boolean = {
      val bookToRemove = bookList.find(_.name == bookName)
      if (bookToRemove.isDefined) {
        bookList -= bookToRemove.get
        println(s"成功删除书:${bookName}")
        true
      } else {
        println(s"未找到书:${bookName}")
        false
      }
    }
    removeBookByName("水浒传")

    //7.删除指定ID的书
    val id = "1"
    val rst = bookList.find(book=>book.id == id)
    if(rst.isDefined){
      bookList -= rst.get
      println(s"id为:${id} 的书删除成功")
    }

    //8.对于图书按价格从高到低排序。
    val sortList = bookList.sortBy(_.price) //降序
    //val sortList1 = bookList.sortWith((a,b)=>a.price>b.price) //升序

    //9.遍历图书列表,并打印每本书的详细信息
    bookList.foreach(ele =>{
      println(s"ID:${ele.id},书名:${ele.name},作者:${ele.author},价格:${ele.price},数量:${ele.amount}")
    })

    //10.计算全部总的金额
    var total:Double = 0
    bookList.foreach(ele =>{
      total += ele.price*ele.amount
    })
    println(s"总金额:${total}")
  }
}