Scala项目---图书借阅系统(二)

软件包dao

package org.app
package dao

import models.BookModel

import scala.collection.mutable.ListBuffer

//图书,数据操作
class BookDAO {
  //加载图书,从文件中读入
  def loadBooks(): ListBuffer[BookModel] = {
    val books = new ListBuffer[BookModel]()
    val source =scala.io.Source.fromFile("books.txt")
    for (line <- source.getLines()){
      val Array(id, name, author,available) = line.split(",")
      //
       books += BookModel(id.toInt, name, author, available.toBoolean)
    }
    //关闭连接
    source.close()
    books
  }

//保存图书,将图书写入文件
def saveBooks(books:ListBuffer[BookModel]):Unilt ={
	val writer = new java.io.PrintWriter(new java.io.File("books.txt"))
	for(book <- books){
	writer.println(book.id + "," + book.name + "," + book.author + "," + book.available )
}
writer.close()
}
}

软件包service代码

软件包service代码

package org.app
package service

import org.app.dao.BookDAO
import org.app.models.BookModel

import scala.collection.mutable.ListBuffer



//图书业务逻辑层
class BookService {
    private val bookDAO = new BookDAO()
  //查询所有图书
//  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 ={
//service//1,根据图书的·ID查询图书,判断图书书否存

 val books =  bookDAO.loadBooks()
 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)

//添加一条借书的记录
println("借阅成功")
true
}else{
println("这本书被借走了")
 false
}
}else {
false

}
}

软件包model

软件包models里的代码

package org.app
package models

//图书类
//id,书名,作者,available:是否外借
case class BookModel(id:Int,name:String,author:String,val available:Boolean) {
	override def toString:String ={
		val availableStr = if(available)"可外借"else"已借出"
		s"编号: $id \t $name \t $author \t $availableStr)"

}

软件包ui

ui软件包里的代码

package org.app
package UI

import org.app.service.BookService


import scala.io.StdIn

class Library {
  private val BookService = new BookService()
  private val UserService = new UserService()

  def showMenu(): Unit = {
    showVisitorMenu()
  }

  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" =>
          println("查看所有图书")
          //TODO 查看所有图书
         val results = BookService.searchBooks("")
          if (results.nonEmpty){
            results.foreach(println)
          }else{
            println("没有找到图书")
          }
        case "2" => println("查询图书")
//提示用户输入关键字
val query = readLine("请输入查询关键字(书名,作者):").trim
//根据关键字查询图书列表,找到满足条件的书
val results = BooksService.searchBooks("query")
//显示出来
 if (results.nonEmpty){
		println("====查询图书的结果:====')
            results.foreach(println)
          }else{
            println("没有找到图书")
          }

        case "3" => 
	//调用Service的方法,进行登录
	println("请输入用户名:")
	val username = StdIn.readLine().trim
	println("请输入密码:")
	val password = StdIn.readLine().trim
	val userOpt =	UserService.authenticateUser(username,password)
	if(userOpt.isEmpty){
		println("用户名或密码错误")
}else{
println("登陆成功")

val user = userOpt.get
user.role match{
case "管理员" => showAdminMenu()
case "普通用户" => showUserMenu()
}
}
   case "4" =>
          running = false
          println("感谢你的使用,下次再见")
        case _ => println("无效的选择")
      }
    }
  }

//显示管理员的菜单

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

 val choice = StdIn.readLine().trim
      choice match {
case "1" =>println("添加图书")
case"2" =>println("查询图书")
case"4" => running = false
case _ => println("无效的选择")

//登陆成功,显示登录用户的菜单

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

 val choice = StdIn.readLine().trim
      choice match {
case "1" =>println("借阅图书")

//UI:提示用户输入图书ID,判断是不是整数
try{
val id = readLine("请输入图书ID").toInt
println(id)
BookService.borrowBook(user.username,id)
} catch {
case e:Exception => println("输入的图书ID无效")
}

//service//1,根据图书的·ID查询图书,判断图书书否存
//2.判断图书是否被借出
//3.借阅图书
//更新这本书的状态
//添加一条借书的记录
//dao:(1)读入图书借阅记录  (2)写入图书借阅记录
//model:借阅记录(用户名,书名,id)

case"2" =>println("查询图书")
case"4" => running = false
case _ => println("无效的选择")


println("借阅图书")

}
}
}
def showMenu(): Unit = {
showVisitorMenu()
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值