学生图书馆管理系统第二弹

一篇纯分享代码的文章(纯展示),文章的开头先说明一下本文章的代码来源于B站博主,更详细的请去B站观看

首先展示一下主播建的文件夹

没错主播为了写这个建立了三个文件夹,至于原因请参考上一篇文章。(在这里说一下请大家观看视频的时候尽量和B站的博主写的一样不要加入自己的小巧思)好了下面就是代码展示

复制代码
fan,123,普通用户
admin,123,管理员
chen,123,普通用户
TEST,123,普通用户
fain,123,普通用户
arduino 复制代码
1,心灵漏洞指南,老卡,true
2,乌托邦说明书,帕拉图,true
3,火星人成长日记,艾工,true
4,大胡子文豪外史,林老师,true
5,奶奶的回忆录像带,杨奶奶,true
6,清代职场达人笔记,张史官,true
7,心学使用手册,山叔,true
8,晚年打怪日志,戴奶奶,true
9,飞出山谷备忘录,塔拉,true
10,红猫时代的幕后笔记,傅教授,true
11,心灵漏洞指南,老卡,true
makefile 复制代码
fan,1,心灵漏洞指南,2026-01-03T20:24:24.926523400,2026-01-03T21:31:44.418616
java 复制代码
package org.app

import org.app.models.{BookModel, UserModel}
import org.app.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 showVisitorMenu(): 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 "普通用户" => showUserMenu(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("查询图书")
          // 提示用户输入查询关键字
          val query = readLine("请输入查询关键字(书名, 作者):").trim
          // 根据关键字去查询图书列表,找到满足条件的书
          val results = BookService.searchBooks(query)
          // 显示出来
          if(results.nonEmpty){
            println("======查询图书的结果=======")
            results.foreach(println)
          } else {
            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 showUserMenu(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" =>
          // 在BookService中实现根据用户名去查询借阅图书
          val borrowRecords = BookService.queryBorrowRecords(user.username)
          // 判断是否为空
          if(borrowRecords.isEmpty){
            println("没有借阅记录")
          } else {
            // 遍历借阅记录
            // println("查询结果,一共借了?本,换了?本,?本未归还")
            for(record <- borrowRecords){
              val returnDate = record.returnDate.getOrElse("未归还")
              println(s"书名:${record.bookName} 借阅时间:${record.borrowDate},归还日期:${returnDate}")
            }
          }
        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 = {
    showVisitorMenu()
  }
}
相关推荐
毕设源码-钟学长18 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
青春男大20 小时前
Redis和RedisTemplate快速上手
java·数据库·redis·后端·spring·缓存
张张努力变强21 小时前
C++ 类和对象(四):const成员函数、取地址运算符重载全精讲
开发语言·数据结构·c++·后端
不吃香菜学java1 天前
springboot左脚踩右脚螺旋升天系列-整合开发
java·spring boot·后端·spring·ssm
奋进的芋圆1 天前
Java 锁事详解
java·spring boot·后端
郑州光合科技余经理1 天前
技术架构:海外版外卖平台搭建全攻略
java·大数据·人工智能·后端·小程序·架构·php
科威舟的代码笔记1 天前
SpringBoot配置文件加载顺序:一场配置界的权力游戏
java·spring boot·后端·spring
血小板要健康1 天前
Spring IoC & DI (下)
java·前端·spring boot·后端·spring·servlet·java-ee
PP东1 天前
Flowable学习(一)——spring boot 部署
后端·学习·flowable
问今域中1 天前
Acwing的SpringBoot项目总结
java·spring boot·后端