package com.book;

 public class Book {
private int id; //图书编号
private String name; //图书名称
private String author; //图书作者
private int states; //书本借出状态 0可借阅 1已借出
private float price; //图书价格
private String date; //借出时间
private int count; //借出次数 public Book() {
} public Book(int id,String name, String author, int states, float price, String date, int count) {
this.id=id;
this.name = name;
this.author = author;
this.states = states;
this.price = price;
this.date = date;
this.count = count;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getStates() {
return states;
}
public void setStates(int states) {
this.states = states;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
} @Override
public String toString() {
return this.id + "\t\t" +(this.states==0? "可借阅":"已借出")+ "\t" + this.name + "\t"
+ this.date+ "\t" + this.count;
} }
 package com.book;

 import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import com.book.Book; public class XmlUtil { /**
* 解析xml, 并把xml中的图书转换成集合输出
* @return 图书集合
*/
public static List<Book> queryBooks(){
List<Book> booksList=new ArrayList<Book>();
SAXReader saxReader=new SAXReader();
try {
Document doc=saxReader.read(new File("books\\books.xml"));
//获取根节点
Element root=doc.getRootElement();
//返回集合
List<Element> eleBooks=root.elements("book");
//遍历集合,从集合里找到每一本书
for (Element eleBook : eleBooks) {
Book b=new Book();
b.setId(Integer.parseInt(eleBook.attributeValue("id"))); //赋值图书编号,是根据xml的book元素的id获得值
b.setName(eleBook.element("name").getText()); //赋值书名,根据book元素下的name元素获得文本内容
b.setAuthor(eleBook.element("author").getText()); //赋值作者,根据book元素下的author元素获得文本内容
b.setPrice(Float.parseFloat(eleBook.element("price").getText())); //赋值租金,根据book元素下的price元素获得文本内容
b.setStates(Integer.parseInt(eleBook.element("states").getText())); //赋值状态,根据book元素下的states元素获得文本内容
b.setCount(Integer.parseInt(eleBook.element("count").getText())); //赋值借出次数,根据book元素下的count元素获得文本内容
b.setDate(eleBook.element("date").getText()); //赋值借出时间,根据book元素下的date元素获得文本内容 booksList.add(b); //把赋值好的图书添加到ArrayList集合
} } catch (DocumentException e) {
e.printStackTrace();
}
return booksList;
} /**
* 把集合里的图书写入xml里
* @param books
* @return
*/
public static boolean saveBook(List<Book> books) {
SAXReader reader=new SAXReader();
Document doc =reader.getDocumentFactory().createDocument(); //创建一个新的xml文档
Element root=doc.addElement("books"); //新增根元素<books> for (Book book : books) {
Element eleBook=root.addElement("book");
eleBook.addAttribute("id", book.getId()+""); //新增属性id,添加节点文本内容
eleBook.addElement("name").setText(book.getName()); //新增name节点,添加节点文本内容
eleBook.addElement("author").setText(book.getAuthor()); //新增author节点,添加节点文本内容
eleBook.addElement("price").setText(book.getPrice()+""); //新增price节点,添加节点文本内容,float类型转String类型
eleBook.addElement("states").setText(book.getStates()+""); //新增states节点,添加节点文本内容
eleBook.addElement("count").setText(book.getCount()+""); //新增count节点,添加节点文本内容
eleBook.addElement("date").setText(book.getDate()==null?"":book.getDate()); //新增date节点,添加节点文本内容,三目运算符判断归还日期是否为空
} try {
//创建XML输出流对象,并设置xml对齐样式
XMLWriter writer=new XMLWriter(new FileOutputStream("books\\books.xml"),OutputFormat.createPrettyPrint());
//把内容写入xml文档
writer.write(doc);
//关闭输出流
writer.close();
} catch (UnsupportedEncodingException | FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
} /**
* 测试集合内容是否写入xml中
* @param args
*/
public static void main(String[] args) {
/* //创建ArrayList<Book>集合对象
List<Book> books=new ArrayList<Book>();
//往集合里添加新的图书
books.add(new Book(001,"失落邮寄","陈先生",0,15,"",8));
books.add(new Book(002,"人性的弱点","扎先生",1,20,"2018-12-22",18));
//调用方法,把集合里的图书写入xml里
boolean b=saveBook(books);
System.out.println(b);*/ //创建ArrayList<Book>集合对象,调用集合查询方法
List<Book> booksList=queryBooks();
//遍历每一本书,重写tostring方法输出book
for (Book book : booksList) {
System.out.println(book);
}
}
}
 package com.book;

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import com.book.Book;
import com.util.XmlUtil; public class BookManagement { /**
* 图书新增
* @param b
*/
public void addBook(Book b) {
//创建ArrayList<Book>集合对象,调用集合查询方法
List<Book> booksList=XmlUtil.queryBooks();
for (Book book : booksList) {
if(book.getName().equals(b.getName())) {
System.out.println("图书已存在,新增失败!");
return;
}
}
//判断图书编号,如果没有图书编号设置1,否则在最后一本图书的编号上加1
if(booksList.size()==0) {
b.setId(1);
}else {
b.setId(booksList.get(booksList.size()-1).getId()+1);
}
booksList.add(b); //在新增的图书添加到集合里 XmlUtil.saveBook(booksList); //调用保存方法把集合写入xml里
System.out.println("新增图书成功!");
} /**
* 图书查看,重写toString()方法
*/
public void queryBooks() {
List<Book> booksList=XmlUtil.queryBooks();
System.out.println("序号\t\t状态\t\t名称\t\t借出日期\t\t借出次数");
for (Book book : booksList) {
System.out.println(book);
}
} /**
* 图书删除
* @param name
*/
public void deleteBook(String name) {
List<Book> booksList=XmlUtil.queryBooks();
//遍历集合里的图书
for(int i=0;i<booksList.size();i++) {
//判断输入的图书名字是否存在集合里,且是否是可借阅状态
if(booksList.get(i).getName().equals(name) && booksList.get(i).getStates() == 0) {
booksList.remove(i); //删除图书
System.out.println("删除成功!");
XmlUtil.saveBook(booksList); //保存
return;
}else if(booksList.get(i).getName().equals(name) && booksList.get(i).getStates() == 1){
System.out.println("图书未归还不能删除!");
return;
}
}
System.out.println("你要删除的图书不存在!");
} /**
* 图书借出
* @param name
*/
public void loanBook(String name) {
queryBooks(); //查询所有图书
List<Book> booksList=XmlUtil.queryBooks();
//当前的日期
Date date=new Date();
//将日期和时间的格式变为我们要求的格式:年-月-日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sdate=sdf.format(date);
//检测图书是否存在
for (Book book : booksList) {
if(book.getName().equals(name) && book.getStates()==0) {
book.setStates(1);
book.setCount(book.getCount()+1);
book.setDate(sdate);
System.out.println("图书借阅成功!");
XmlUtil.saveBook(booksList); //保存
return;
}else if(book.getName().equals(name) && book.getStates()==1) {
System.out.println("你要借阅的图书已借出!");
return;
}
}
System.out.println("你要借阅的图书不存在!");
} /**
* 图书归还
* @param name
*/
public void giveBook(String name) {
List<Book> booksList=XmlUtil.queryBooks(); for (Book book : booksList) {
if(book.getName().equals(name) && book.getStates()==1) {
book.setStates(0);
try {
//当前的日期
Date date=new Date();
//将日期和时间的格式变为我们要求的格式:年-月-日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sdate=sdf.format(date);
Date passDate = sdf.parse(book.getDate()); //String类型转Date类型
long time = (date.getTime() - passDate.getTime())/1000/3600/24; //图书租赁的时间
System.out.println("\""+book.getName()+"\""+"归还成功!\n借出日期是:"+book.getDate()+"\n归还日期为:"+sdate+"\n应付租金:"+time+"元");
book.setDate(""); //清空图书借出时间
XmlUtil.saveBook(booksList); //保存
return;
} catch (ParseException e) {
e.printStackTrace();
}
}else if(book.getName().equals(name) && book.getStates()==0){
System.out.println("图书未借出,无需归还!");
return;
}
}
System.out.println("不存在你要归还的图书!");
}
}
 package com.book;

 import java.util.Scanner;

 import com.book.Book;
import com.book.service.BookManagement; public class BookMain {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
BookManagement bm=new BookManagement();
int zero =-1;
do {
System.out.println("欢迎使用迷你图书管理器\n------------------------------------------");
System.out.println("1、新增图书\n2、查看图书\n3、删除图书\n4、借出图书\n5、归还图书\n6、退出系统\n------------------------------------------");
System.out.print("请选择:");
int choose=input.nextInt();
switch(choose) {
case 1:
//新增图书
Book b=new Book();
System.out.print("请输入图书的名称:");
b.setName(input.next());
System.out.print("请输入图书的作者:");
b.setAuthor(input.next());
System.out.print("请输入图书价格:");
b.setPrice(input.nextFloat());
bm.addBook(b);
break;
case 2:
//查看图书
bm.queryBooks();
break;
case 3:
//删除图书
System.out.print("请输入要删除的图书名称:");
String name = input.next();
bm.deleteBook(name);
break;
case 4:
//借出图书
System.out.print("请输入要借阅图书的名称:");
name=input.next();
bm.loanBook(name);
break;
case 5:
//归还图书
System.out.print("请输入要归还的图书名称:");
name=input.next();
bm.giveBook(name);
break;
case 6:
//退出系统
System.out.println("欢迎再次使用!");
return;
}
System.out.print("输入0返回:");
zero = input.nextInt();
}while(zero==0);
System.out.println("谢谢使用!");
}
}

需要注意的是创建项目后首先要导入这个jar包

xml和集合混合使用-图书管理器的更多相关文章

  1. 查询集 QuerySet和管理器Manager

    查询集 QuerySet 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据. ...

  2. django的模型类管理器-----------数据库操作的封装

    模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...

  3. DVD管理器集合版

    利用所学的集合写出的DVD管理系统,运用到了所学到集合基础. import java.text.ParseException; import java.text.SimpleDateFormat; i ...

  4. 运用集合来做一个DVD管理器(全代码)

    package DVD;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Array ...

  5. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  6. C#查询XML解决“需要命名空间管理器”问题

    在查询xml时有时会遇到带有前缀的xml,例如:"<ows:Keyword></ows:Keyword>" 这时像往常一样查询就会报错,类似于"需 ...

  7. WCF 服务的集合管理器的设计

    今天是2019年2月1日,时间过得针对,马上就年底了,当前新年也离我们越来越近了.在此,我也祝福经常浏览我博客的朋友们“新年快乐.阖家欢乐”,来年有一个好彩头.在即将结束这一年之计,写今年的最后一片文 ...

  8. 元数据管理器中存在错误。 实例化来自文件“\\?\C:\Program Files\Microsoft SQL Server\MSAS11.MSSQLSERVER\OLAP\Data\Tfs_Analysis.0.db\vDimTestCaseOverlay.874.dim.xml”的元数据对象时出错。

    一.发现问题 启动SQLSERVER的数据分析服务失败 查看系统日志错误如下: 双击错误后显示详细错误: 元数据管理器中存在错误. 实例化来自文件“\\?\C:\Program Files\Micro ...

  9. Spring jdbctemplate和事务管理器 全注解配置 不使用xml

    /** * spring的配置类,相当于bean.xml */@Configuration//@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans ...

随机推荐

  1. scikit-learn中的岭回归(Ridge Regression)与Lasso回归

    一.岭回归模型 岭回归其实就是在普通最小二乘法回归(ordinary least squares regression)的基础上,加入了正则化参数λ. 二.如何调用 class sklearn.lin ...

  2. mysql中的enum型

    enum设置后 值只能是给出的值中的其中一个 mysql> create table enum(e enum('1','2','3','4','5','6','7','8','9','10')) ...

  3. selenium===介绍

    selenium 是支持java.python.ruby.php.C#.JavaScript . 从语言易学性来讲,首选ruby ,python 从语言应用广度来讲,首选java.C#.php. 从语 ...

  4. x64dbg

    https://x64dbg.com/ https://github.com/x64dbg/x64dbg https://sourceforge.net/projects/x64dbg/files/s ...

  5. Jquery屏蔽浏览器的F1-F12快捷键,在IE,GOOGLE下测试均无问题

    在网上找了找,很多都是js实现的,东找西找,再加上自己的想法也勉强的完成了,直接看代码 <script type="text/javascript" src="Sc ...

  6. App推广

    一行业常见名词解释 开发商:也叫CP,即Content Provider内容提供商的英文首字母缩写. 发行商(运营商):即代理CP开发出来的产品. 渠道:拥有用户,能够进行流量分发的公司,即可成为渠道 ...

  7. Bootstrap框架的简介

    一.Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序而设计的一套前端工具包. 它支持响应式布局, ...

  8. 使用dpkg命令卸载已经安装的软件包

    如何在Ubuntu中使用dpkg命令卸载软件 http://jingyan.baidu.com/article/f54ae2fc2724a71e92b849c4.html sudo dpkg -i x ...

  9. Go语言表组测试示例

    比基本测试多个循环... package main import ( "testing" "net/http" ) const checkMark = &quo ...

  10. [BZOJ4025] 二分图 LCT/(线段树分治+并查集)

    4025: 二分图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2667  Solved: 989[Submit][Status][Discuss] ...