scala的case class练习题

36 阅读1分钟

image.png

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}")
  }
}

运行结果如图:

image.png