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包

 

posted on 2019-01-02 15:04  从零开始-白  阅读(346)  评论(0编辑  收藏  举报