//建两个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()+"成功!"); } }