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