1 package com.book; 2 3 public class Book { 4 private int id; //图书编号 5 private String name; //图书名称 6 private String author; //图书作者 7 private int states; //书本借出状态 0可借阅 1已借出 8 private float price; //图书价格 9 private String date; //借出时间 10 private int count; //借出次数 11 12 public Book() { 13 } 14 15 public Book(int id,String name, String author, int states, float price, String date, int count) { 16 this.id=id; 17 this.name = name; 18 this.author = author; 19 this.states = states; 20 this.price = price; 21 this.date = date; 22 this.count = count; 23 } 24 25 public int getId() { 26 return id; 27 } 28 29 public void setId(int id) { 30 this.id = id; 31 } 32 33 public String getName() { 34 return name; 35 } 36 public void setName(String name) { 37 this.name = name; 38 } 39 public String getAuthor() { 40 return author; 41 } 42 public void setAuthor(String author) { 43 this.author = author; 44 } 45 public int getStates() { 46 return states; 47 } 48 public void setStates(int states) { 49 this.states = states; 50 } 51 public float getPrice() { 52 return price; 53 } 54 public void setPrice(float price) { 55 this.price = price; 56 } 57 public String getDate() { 58 return date; 59 } 60 public void setDate(String date) { 61 this.date = date; 62 } 63 public int getCount() { 64 return count; 65 } 66 public void setCount(int count) { 67 this.count = count; 68 } 69 70 @Override 71 public String toString() { 72 return this.id + "\t\t" +(this.states==0? "可借阅":"已借出")+ "\t" + this.name + "\t" 73 + this.date+ "\t" + this.count; 74 } 75 76 }
1 package com.book; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.UnsupportedEncodingException; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 import org.dom4j.Document; 12 import org.dom4j.DocumentException; 13 import org.dom4j.Element; 14 import org.dom4j.io.OutputFormat; 15 import org.dom4j.io.SAXReader; 16 import org.dom4j.io.XMLWriter; 17 18 import com.book.Book; 19 20 public class XmlUtil { 21 22 /** 23 * 解析xml, 并把xml中的图书转换成集合输出 24 * @return 图书集合 25 */ 26 public static List<Book> queryBooks(){ 27 List<Book> booksList=new ArrayList<Book>(); 28 SAXReader saxReader=new SAXReader(); 29 try { 30 Document doc=saxReader.read(new File("books\\books.xml")); 31 //获取根节点 32 Element root=doc.getRootElement(); 33 //返回集合 34 List<Element> eleBooks=root.elements("book"); 35 //遍历集合,从集合里找到每一本书 36 for (Element eleBook : eleBooks) { 37 Book b=new Book(); 38 b.setId(Integer.parseInt(eleBook.attributeValue("id"))); //赋值图书编号,是根据xml的book元素的id获得值 39 b.setName(eleBook.element("name").getText()); //赋值书名,根据book元素下的name元素获得文本内容 40 b.setAuthor(eleBook.element("author").getText()); //赋值作者,根据book元素下的author元素获得文本内容 41 b.setPrice(Float.parseFloat(eleBook.element("price").getText())); //赋值租金,根据book元素下的price元素获得文本内容 42 b.setStates(Integer.parseInt(eleBook.element("states").getText())); //赋值状态,根据book元素下的states元素获得文本内容 43 b.setCount(Integer.parseInt(eleBook.element("count").getText())); //赋值借出次数,根据book元素下的count元素获得文本内容 44 b.setDate(eleBook.element("date").getText()); //赋值借出时间,根据book元素下的date元素获得文本内容 45 46 booksList.add(b); //把赋值好的图书添加到ArrayList集合 47 } 48 49 } catch (DocumentException e) { 50 e.printStackTrace(); 51 } 52 return booksList; 53 } 54 55 /** 56 * 把集合里的图书写入xml里 57 * @param books 58 * @return 59 */ 60 public static boolean saveBook(List<Book> books) { 61 SAXReader reader=new SAXReader(); 62 Document doc =reader.getDocumentFactory().createDocument(); //创建一个新的xml文档 63 Element root=doc.addElement("books"); //新增根元素<books> 64 65 for (Book book : books) { 66 Element eleBook=root.addElement("book"); 67 eleBook.addAttribute("id", book.getId()+""); //新增属性id,添加节点文本内容 68 eleBook.addElement("name").setText(book.getName()); //新增name节点,添加节点文本内容 69 eleBook.addElement("author").setText(book.getAuthor()); //新增author节点,添加节点文本内容 70 eleBook.addElement("price").setText(book.getPrice()+""); //新增price节点,添加节点文本内容,float类型转String类型 71 eleBook.addElement("states").setText(book.getStates()+""); //新增states节点,添加节点文本内容 72 eleBook.addElement("count").setText(book.getCount()+""); //新增count节点,添加节点文本内容 73 eleBook.addElement("date").setText(book.getDate()==null?"":book.getDate()); //新增date节点,添加节点文本内容,三目运算符判断归还日期是否为空 74 } 75 76 try { 77 //创建XML输出流对象,并设置xml对齐样式 78 XMLWriter writer=new XMLWriter(new FileOutputStream("books\\books.xml"),OutputFormat.createPrettyPrint()); 79 //把内容写入xml文档 80 writer.write(doc); 81 //关闭输出流 82 writer.close(); 83 } catch (UnsupportedEncodingException | FileNotFoundException e) { 84 e.printStackTrace(); 85 return false; 86 } catch (IOException e) { 87 e.printStackTrace(); 88 return false; 89 } 90 return true; 91 } 92 93 /** 94 * 测试集合内容是否写入xml中 95 * @param args 96 */ 97 public static void main(String[] args) { 98 /* //创建ArrayList<Book>集合对象 99 List<Book> books=new ArrayList<Book>(); 100 //往集合里添加新的图书 101 books.add(new Book(001,"失落邮寄","陈先生",0,15,"",8)); 102 books.add(new Book(002,"人性的弱点","扎先生",1,20,"2018-12-22",18)); 103 //调用方法,把集合里的图书写入xml里 104 boolean b=saveBook(books); 105 System.out.println(b);*/ 106 107 //创建ArrayList<Book>集合对象,调用集合查询方法 108 List<Book> booksList=queryBooks(); 109 //遍历每一本书,重写tostring方法输出book 110 for (Book book : booksList) { 111 System.out.println(book); 112 } 113 } 114 }
1 package com.book; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 import java.util.List; 7 8 import com.book.Book; 9 import com.util.XmlUtil; 10 11 public class BookManagement { 12 13 /** 14 * 图书新增 15 * @param b 16 */ 17 public void addBook(Book b) { 18 //创建ArrayList<Book>集合对象,调用集合查询方法 19 List<Book> booksList=XmlUtil.queryBooks(); 20 for (Book book : booksList) { 21 if(book.getName().equals(b.getName())) { 22 System.out.println("图书已存在,新增失败!"); 23 return; 24 } 25 } 26 //判断图书编号,如果没有图书编号设置1,否则在最后一本图书的编号上加1 27 if(booksList.size()==0) { 28 b.setId(1); 29 }else { 30 b.setId(booksList.get(booksList.size()-1).getId()+1); 31 } 32 booksList.add(b); //在新增的图书添加到集合里 33 34 XmlUtil.saveBook(booksList); //调用保存方法把集合写入xml里 35 System.out.println("新增图书成功!"); 36 } 37 38 /** 39 * 图书查看,重写toString()方法 40 */ 41 public void queryBooks() { 42 List<Book> booksList=XmlUtil.queryBooks(); 43 System.out.println("序号\t\t状态\t\t名称\t\t借出日期\t\t借出次数"); 44 for (Book book : booksList) { 45 System.out.println(book); 46 } 47 } 48 49 /** 50 * 图书删除 51 * @param name 52 */ 53 public void deleteBook(String name) { 54 List<Book> booksList=XmlUtil.queryBooks(); 55 //遍历集合里的图书 56 for(int i=0;i<booksList.size();i++) { 57 //判断输入的图书名字是否存在集合里,且是否是可借阅状态 58 if(booksList.get(i).getName().equals(name) && booksList.get(i).getStates() == 0) { 59 booksList.remove(i); //删除图书 60 System.out.println("删除成功!"); 61 XmlUtil.saveBook(booksList); //保存 62 return; 63 }else if(booksList.get(i).getName().equals(name) && booksList.get(i).getStates() == 1){ 64 System.out.println("图书未归还不能删除!"); 65 return; 66 } 67 } 68 System.out.println("你要删除的图书不存在!"); 69 } 70 71 /** 72 * 图书借出 73 * @param name 74 */ 75 public void loanBook(String name) { 76 queryBooks(); //查询所有图书 77 List<Book> booksList=XmlUtil.queryBooks(); 78 //当前的日期 79 Date date=new Date(); 80 //将日期和时间的格式变为我们要求的格式:年-月-日 81 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 82 String sdate=sdf.format(date); 83 //检测图书是否存在 84 for (Book book : booksList) { 85 if(book.getName().equals(name) && book.getStates()==0) { 86 book.setStates(1); 87 book.setCount(book.getCount()+1); 88 book.setDate(sdate); 89 System.out.println("图书借阅成功!"); 90 XmlUtil.saveBook(booksList); //保存 91 return; 92 }else if(book.getName().equals(name) && book.getStates()==1) { 93 System.out.println("你要借阅的图书已借出!"); 94 return; 95 } 96 } 97 System.out.println("你要借阅的图书不存在!"); 98 } 99 100 /** 101 * 图书归还 102 * @param name 103 */ 104 public void giveBook(String name) { 105 List<Book> booksList=XmlUtil.queryBooks(); 106 107 for (Book book : booksList) { 108 if(book.getName().equals(name) && book.getStates()==1) { 109 book.setStates(0); 110 try { 111 //当前的日期 112 Date date=new Date(); 113 //将日期和时间的格式变为我们要求的格式:年-月-日 114 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 115 String sdate=sdf.format(date); 116 Date passDate = sdf.parse(book.getDate()); //String类型转Date类型 117 long time = (date.getTime() - passDate.getTime())/1000/3600/24; //图书租赁的时间 118 System.out.println("\""+book.getName()+"\""+"归还成功!\n借出日期是:"+book.getDate()+"\n归还日期为:"+sdate+"\n应付租金:"+time+"元"); 119 book.setDate(""); //清空图书借出时间 120 XmlUtil.saveBook(booksList); //保存 121 return; 122 } catch (ParseException e) { 123 e.printStackTrace(); 124 } 125 }else if(book.getName().equals(name) && book.getStates()==0){ 126 System.out.println("图书未借出,无需归还!"); 127 return; 128 } 129 } 130 System.out.println("不存在你要归还的图书!"); 131 } 132 }
1 package com.book; 2 3 import java.util.Scanner; 4 5 import com.book.Book; 6 import com.book.service.BookManagement; 7 8 public class BookMain { 9 public static void main(String[] args) { 10 Scanner input=new Scanner(System.in); 11 BookManagement bm=new BookManagement(); 12 int zero =-1; 13 do { 14 System.out.println("欢迎使用迷你图书管理器\n------------------------------------------"); 15 System.out.println("1、新增图书\n2、查看图书\n3、删除图书\n4、借出图书\n5、归还图书\n6、退出系统\n------------------------------------------"); 16 System.out.print("请选择:"); 17 int choose=input.nextInt(); 18 switch(choose) { 19 case 1: 20 //新增图书 21 Book b=new Book(); 22 System.out.print("请输入图书的名称:"); 23 b.setName(input.next()); 24 System.out.print("请输入图书的作者:"); 25 b.setAuthor(input.next()); 26 System.out.print("请输入图书价格:"); 27 b.setPrice(input.nextFloat()); 28 bm.addBook(b); 29 break; 30 case 2: 31 //查看图书 32 bm.queryBooks(); 33 break; 34 case 3: 35 //删除图书 36 System.out.print("请输入要删除的图书名称:"); 37 String name = input.next(); 38 bm.deleteBook(name); 39 break; 40 case 4: 41 //借出图书 42 System.out.print("请输入要借阅图书的名称:"); 43 name=input.next(); 44 bm.loanBook(name); 45 break; 46 case 5: 47 //归还图书 48 System.out.print("请输入要归还的图书名称:"); 49 name=input.next(); 50 bm.giveBook(name); 51 break; 52 case 6: 53 //退出系统 54 System.out.println("欢迎再次使用!"); 55 return; 56 } 57 System.out.print("输入0返回:"); 58 zero = input.nextInt(); 59 }while(zero==0); 60 System.out.println("谢谢使用!"); 61 } 62 }
需要注意的是创建项目后首先要导入这个jar包