图书管理系统1.4

57 阅读2分钟

UI层的LibrarayPresentation

新建一个UI软件包,建立一个类,名为:presentation。

在这个类中,我们去实现一个专门用来显示游客的菜单的方法,并在main中调用,即可。

package ui

import models.{BookModel, UserModel}
import service.{BookService, UserService}

import scala.io.StdIn
import scala.io.StdIn.readLine

class LibrarayPresentation {

 private val BookService = new BookService()
 private val UserService = new UserService()

  // 辅助方法,输入图书的信息,返回一个BookModel对象
  private def inputBookInfo(): BookModel = {
    println("请输入图书的名称:")
    val name = readLine().trim
    println("请输入图书的作者:")
    val author = readLine().trim
    println("请输入图书是否可以外借 (true/false):")
    val available = StdIn.readBoolean()
    // 初始设置编号为0
    BookModel(0, name, author, available)
  }
  //显示游客的菜单
  def showVisistorMenu(): Unit = {
    var running = true
    while (running) {
      println("欢迎来到我的图书管理系统,请选择")
      println("1. 查看所有图书")
      println("2. 查询图书")
      println("3. 登录")
      println("4. 离开")

      // 获取用户的操作
      val choice = StdIn.readLine().trim
      choice match {
        case "1" =>
          // TODO 查看所有图书
          //调用业务逻辑层的方法
          val results = BookService.searchBooks("")
          if (results.nonEmpty) {
            results.foreach(println)
          } else {
            println("没有找到图书")
          }
        case "2" =>
          //提示用户输入查询关键字
          val query = readLine("请输入查询关键字(书名,作者):").trim
          //根据关键字去查询图书列表,找到满足条件的书
          val results = BookService.searchBooks(query)
          //显示出来
          if (results.nonEmpty) {
            println("========查询图书的结果=========")
            results.foreach(println)
          } else {
            println("没有找到图书")
          }
        case "3" =>
          println("请输入用户名:")
          val username = StdIn.readLine().trim
          println("请输入密码:")
          val password = StdIn.readLine().trim
          // 调用Service的方法,进行登录
          val userOpt = UserService.authenticateUser(username, password)
          if (userOpt.isEmpty) {
            println("用户名或密码错误")
          } else {
            println("登陆成功")
            //登录成功,显示登录用户的菜单
            val user = userOpt.get
            user.role match {
              case "管理员" => showAdminMenu(user)
              case "普通用户" => showUserModel(user)
            }
          }

        case "4" =>
          running = false
          println("感谢你的使用,下次再见")
        case _ => println("无效的选择")
      }
    }
  }

 //显示管理员的菜单
  def showAdminMenu(user:UserModel): Unit = {
    var running = true
    while (running) {
      println(s"欢迎管理员:${user.username},来到我的图书管理系统,请选择")
      println("1.添加图书")
      println("2. 查询图书")
      println("3. 添加用户")
      println("4. 退出")

      // 获取用户的操作
      val choice = StdIn.readLine().trim
      choice match {
        case "1" =>
        //1.获取图书信息-书名,作者,状态
        val book = inputBookInfo()
        //2.调用service层的方法,做添加到books.txt中操作
        BookService.addBook(book)
          println(s"《${book.name}》图书添加成功")
        case "2" => println("查询图书")
        case "3" =>
          // 1. 获取用户信息-用户名
          val username = StdIn.readLine("请输入用户名: ")
          // 2. 调用service层的方法,做添加到users.txt中操作
          if(UserService.addUser(username)){
            println("用户添加成功")
          } else {
            println("用户添加失败")
          }

        case "4" => running = false
        case _ => println("无效选择")
      }
    }
  }
 //显示登陆用户的菜单

    def showUserModel(user:UserModel): Unit = {
      var running = true
      while (running) {
        println(s"欢迎用户:${user.username},来到我的图书管理系统,请选择")
        println("1.借阅图书")
        println("2. 查询借阅记录")
        println("3. 还书")
        println("4. 退出")

        // 获取用户的操作
        val choice = StdIn.readLine().trim
        choice match {
          case "1" =>
          //UI:提示用户输入图书的ID,校验判断是不是整数
            try{
              val id = readLine("请输入图书的ID:").toInt
              BookService.borrowBook(user.username,id)
            }catch {
              case e:Exception =>
                println(e)
                println("输入的图书ID无效")
            }
          case "2" =>
            println("查询借阅图书")
            // 在BookService中实现根据用户名去查询借阅图书
            val borrowRecords = BookService.queryBorrowRecords(user.username)
            // 判断是否为空
            if(borrowRecords.isEmpty){
              println("没有借阅记录")
            } else {
              // 遍历借阅记录
              println("查询结果,一共借了?本书,还了?本,?本未还")
              for(record <- borrowRecords){
                println(record)
                val retrunDate = record.returnDate.getOrElse("未归还")
                println(s"书名:${record.bookName},借阅日期:${record.borrowDate},归还日期:$retrunDate")
              }
            }

          case "3" =>
            try {
              val id = readLine("请输入要归还的图书ID:").toInt
              if (BookService.returnBook(user.username, id)){
                println("归还图书成功")
              }else{
                println("归还图书失败")
              }
            } catch {
              case e:Exception =>
                println(e)
                println("输入的图书ID无效")
            }


          case "4" => running = false
          case _ => println("无效选择")
        }
      }
    }
  def showMenu():Unit = {
    showVisistorMenu()
  }
}

image.png