//建两个class
package com.itheima._09图书管理案例;
public class Book {
private String name;
private double price;
private String author;
public Book() {
}
public Book(String name, double price, String author) {
this.name = name;
this.price = price;
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
package com.itheima._09图书管理案例;
import java.util.*;
/**
目标:图书管理系统的开发。
业务需求分析:
(1)查看全部书籍。query
(2)添加书本信息。add
(3)删除书本信息。delete
(4)修改书本信息。update
(5)退出系统。 exit
书本信息的结构:
类型 书名 价格 作者
---------------------------------------------------
言情小说
《金梅》 99.9 阿猫
《红楼梦》 198.2 曹雪芹
武侠小说
《三少爷的剑》 98.2 古龙
《神雕侠侣》 98.2 金庸
------------------------------------------------------
分析:
(1)定义一个书本类。
(2)定义一个集合表示图书馆用于存储书本信息数据:Map<String,List<Book>>。
(3)展示操作界面。
(4)完成相应功能。
*/
public class BookSystem {
/**
1.定义一个集合表示图书馆用于存储书本信息数据:Map<String,List<Book>>。
使用Map集合,键是橱柜的栏目类型名称,值是橱柜的List集合对象存储书本信息
*/
public static final Map<String, List<Book>> BOOK_STORE = new HashMap<>();
public static final Scanner SYS_SCANNER = new Scanner(System.in);
public static void main(String[] args) {
/** 2.展示操作界面 :独立功能建立封装成方法调用 方便互相之间的逻辑调用 */
showCommand();
}
/**
* 展示操作界面的命令
*/
private static void showCommand() {
System.out.println("===============欢迎您进入系统===================");
System.out.println("(1)查看全部书籍。query");
System.out.println("(2)添加书本信息。add");
System.out.println("(3)删除书本信息。delete");
System.out.println("(4)修改书本信息。update");
System.out.println("(5)退出系统。 exit");
System.out.print("请您输入您的操作命令:");
String command = SYS_SCANNER.nextLine();
// 判断用户的命令是想干啥
switch (command){
case "query":
// 查看全部书籍
queryBooks();
break;
case "add":
// 添加书籍
addBook();
break;
case "delete":
// 删除书籍
break;
case "update":
// 修改书籍
updateBook();
break;
case "exit":
// 退出系统
System.out.println("退出成功,期待您下次光临!");
System.exit(0);
break;
default:
System.err.println("您的命令输入有无,请重新确认!");
}
showCommand(); // 调用自己
}
/**
修改书本信息。
*/
private static void updateBook() {
if(BOOK_STORE.size() == 0 ){
System.out.println("您现在根本没有任何栏目可以修改!");
}else{
queryBooks();
System.out.println("===============欢迎您进入修改书本业务=================");
while(true){
System.out.print("请您输入修改书本的栏目:");
String type = SYS_SCANNER.nextLine();
// 1.判断是否存在该栏目
if(BOOK_STORE.containsKey(type)){
while(true){
// 存在该栏目
// 2.请输入要修改的书名
System.out.print("请您输入修改书本的名称:");
String name = SYS_SCANNER.nextLine();
// 3.判断该栏目下是否存在该书本对象。
// 根据栏目和书名去栏目下查询出这本书对象
Book book = getBookByTypeAndName(type , name);
if(book == null){
System.err.println("您的输入的书名不存在,,请重新确认!");
}else{
// 书名正确了,开始正式修改
System.out.println("请您输入修改书本的新名称:");
String newName = SYS_SCANNER.nextLine();
System.out.println("请您输入修改书本的新价格:");
String newPrice = SYS_SCANNER.nextLine();
System.out.println("请您输入修改书本的新作者:");
String newAuthor = SYS_SCANNER.nextLine();
book.setName(newName);
book.setPrice(Double.valueOf(newPrice));
book.setAuthor(newAuthor);
queryBooks();
System.out.println("您修改的书本成功,请看如上信息确认!");
return; // 结束修改的方法!
}
}
}else{
// 不存在该栏目
System.err.println("您输入的栏目不存在,请重新确认!");
}
}
}
}
/**
* 在某个栏目下,根据书名查询出这本书对象返回!
* @param type 栏目名称
* @param name 书名称
* @return 书本对象
*/
public static Book getBookByTypeAndName(String type , String name){
// 1.先提取这个栏目的橱柜,根据栏目提取它的值
List<Book> books = BOOK_STORE.get(type);
for (Book book : books) {
// 如果本书的名称与要找的名称一样,该书就是我们要的,直接返回!
if(book.getName().equals(name)){
return book;
}
}
return null;// 没有这本书
}
/**
查询全部书本信息
Map<String, List<Book>> BOOK_STORE = {type1=[b1, b2, b3] , type2=[b1] }
*/
private static void queryBooks() {
System.out.println("===============欢迎您进入查询书本业务=================");
if(BOOK_STORE.size() == 0){
System.out.println("您的图书馆一本书都没有,请赶紧买书去!");
}else{
System.out.println("类型\t\t\t\t书名\t\t\t\t\t价格\t\t\t作者");
BOOK_STORE.forEach((type , books) -> {
System.out.println(type);
// 遍历该类型下的橱柜中的全部书本对象
for (Book book : books) {
System.out.println("\t\t\t\t"+book.getName()+"\t\t\t"+book.getPrice()+"\t\t"+book.getAuthor());
}
});
}
}
/**
添加书本信息数据
Map<String, List<Book>> BOOK_STORE = {type1=[] , }
*/
private static void addBook() {
System.out.println("===============欢迎您进入添加书本业务=================");
System.out.print("请您输入添加书本的栏目:");
String type = SYS_SCANNER.nextLine();
// 定义一个List集合用于指向栏目的橱柜
// 这个橱柜变量要根据栏目是否存在来确定是用已经存在的橱柜,还是创建一个新橱柜!
List<Book> books = null ;
// 1.判断是否存在该栏目。
if(BOOK_STORE.containsKey(type)) {
// 3.存在该栏目
// 直接得到该栏目存在的橱柜对象
books = BOOK_STORE.get(type);
}else{
// 2.该栏目是第一次添加。
// 为该栏目创建一个橱柜对象(List<Book>)
books = new ArrayList<>();
// 新橱柜和新栏目必须手工加入到图书馆!
BOOK_STORE.put(type , books);
}
System.out.println("请您输入添加书本的名称:");
String name = SYS_SCANNER.nextLine();
System.out.println("请您输入添加书本的价格:");
String price = SYS_SCANNER.nextLine();
System.out.println("请您输入添加书本的作者:");
String author = SYS_SCANNER.nextLine();
// 定义一个书本对象封装用户输入的书本信息。
Book book = new Book(name , Double.valueOf(price) , author);
books.add(book);
System.out.println("您添加在"+type+"下的书本"+book.getName()+"成功!");
}
}