简易的图书管理系统
目标:图书管理系统的开发。
业务需求分析:
(1)查看全部书籍。query
(2)添加书本信息。add
(3)删除书本信息。delete
(4)修改书本信息。update
(5)退出系统。 exit书本信息的结构:
类型 书名 价格 作者
---------------------------------------------------
言情小说
《金瓶梅》 99.9 阿猫
《红楼梦》 198.2 曹雪芹
武侠小说
《三少爷的剑》 98.2 古龙
《神雕侠侣》 98.2 金庸
------------------------------------------------------
分析:
(1)定义一个书本类。
(2)定义一个集合表示图书馆用于存储书本信息数据:Map<String,List>。
(3)展示操作界面。
(4)完成相应功能。
示例图
示例代码
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; } /** * 获取 * @return name */ public String getName() { return name; } /** * 设置 * @param name */ public void setName(String name) { this.name = name; } /** * 获取 * @return price */ public double getPrice() { return price; } /** * 设置 * @param price */ public void setPrice(double price) { this.price = price; } /** * 获取 * @return author */ public String getAuthor() { return author; } /** * 设置 * @param author */ public void setAuthor(String author) { this.author = author; } @Override public String toString() { return "Book{name = " + name + ", price = " + price + ", author = " + author + "}"; }}
方法实现:
public class BookSystem { /** 1.定义一个集合表示图书馆用于存储书本信息数据:Map<String,List>。 使用Map集合,键是橱柜的栏目类型名称,值是橱柜的List集合对象存储书本信息 */ public static final Map<String, List> 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": // 删除书籍 deleteBook(); break; case "update": // 修改书籍 updateBook(); break; case "exit": // 退出系统 System.out.println("退出成功,期待您下次光临!"); System.exit(0); break; default: System.err.println("您的命令输入有无,请重新确认!"); } showCommand(); // 调用自己 } /** * 删除书本信息 */ private static void deleteBook() { if (BOOK_STORE.size() == 0) { System.err.println("你没有书可以修改,赶紧去买书!"); } else { queryBooks(); System.out.println("================进入删除书本业务======================"); while (true){ System.out.println("请输入你要删除书的栏目"); String type = SYS_SCANNER.nextLine(); if (BOOK_STORE.containsKey(type)){ while (true){ //存在该栏目 //请输入要修改的书名 System.out.println("请输入要删除书本的名称"); String name = SYS_SCANNER.nextLine(); //判断该栏目下是否存在该书本 //根据栏目和书名去栏目下查询出这本书对象 Book book = getBookByTypeAndName(type,name); if (book == null) {System.err.println("您的输入的书名不存在,请重新确认"); }else {//有这本书//应该取出这个栏目的橱柜集合List books = BOOK_STORE.get(type);books.remove(book);queryBooks();System.err.println("删除成功!");return; //结束修改方法 } } }else { //不存在该栏目 System.err.println("您的栏目输入有误,请确认!"); } } } } /** 修改书本信息。 */ 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 books = BOOK_STORE.get(type); for (Book book : books) { // 如果本书的名称与要找的名称一样,该书就是我们要的,直接返回! if(book.getName().equals(name)){ return book; } } return null;// 没有这本书 } /** 查询全部书本信息 Map<String, List> 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_STORE = {type1=[] , } */ private static void addBook() { System.out.println("===============欢迎您进入添加书本业务================="); System.out.print("请您输入添加书本的栏目:"); String type = SYS_SCANNER.nextLine(); // 定义一个List集合用于指向栏目的橱柜 // 这个橱柜变量要根据栏目是否存在来确定是用已经存在的橱柜,还是创建一个新橱柜! List books = null ; // 1.判断是否存在该栏目。 if(BOOK_STORE.containsKey(type)) { // 3.存在该栏目 // 直接得到该栏目存在的橱柜对象 books = BOOK_STORE.get(type); }else{ // 2.该栏目是第一次添加。 // 为该栏目创建一个橱柜对象(List) 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()+"成功!"); }}