Day34:图书管理系统升级版本,使用XML存取数据

将之前的在文件中进行存取的操作,更新为使用dom4j技术解析XML文件实现,并且在退出时,选择保存到xml还是不保存。与之前的差别不大,比较简单易懂。直接上代码。

包结构如下:

在这里插入图片描述

Book.java

package com.biubiubiu.bookmgr.pojo;

import java.util.Date;

import com.biubiubiu.bookmgr.util.Utils;

/**
 * 图书类实体类bean
 * @author dell
 *
 */


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book implements Comparable<Book>{
	private String bookno;
	private String bookname;
	private Date booktime;
	
	@Override
	public int compareTo(Book o) {
		String one=Utils.dateToStr(this.getBooktime());
		String two=Utils.dateToStr(o.getBooktime());
		return one.compareTo(two);
	}
	
}

BookDAO.java

package com.biubiubiu.bookmgr.dao;

import java.util.List;

import com.biubiubiu.bookmgr.pojo.Book;

public interface BookDAO {

	// 查询图书
	List<Book> select();

	// 添加图书
	void add(Book book);

	// 修改图书
	Book update(int index, Book book);

	// 删除图书
	boolean delete(int index);

	// 根据图书编号返回下标
	int getIndex(String bookId);

}

BookDAOImpl.java

package com.biubiubiu.bookmgr.dao.daoimpl;

/**
 * 处理数据,具体实现
 */
import java.util.ArrayList;
import java.util.List;

import com.biubiubiu.bookmgr.dao.BookDAO;
import com.biubiubiu.bookmgr.pojo.Book;
import com.biubiubiu.bookmgr.util.Utils;

public class BookDAOImpl implements BookDAO {
	public static List<Book> books = new ArrayList<Book>();
	
	static {
		String bookstrs = Utils.readXML();
		String[] booksn = bookstrs.split("\n");
		for (String str : booksn) {
			String values[] = str.split(",");
			Book book = new Book(values[0], values[1], Utils.strToDate(values[2]));
			books.add(book);
		}
	}
	
	// 查询图书
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.dao.BookDAO#select()
	 */
	@Override
	public List<Book> select() {
		return books;
	}

	// 添加图书
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.dao.BookDAO#add(com.biubiubiu.bookmgr.pojo.Book)
	 */
	@Override
	public void add(Book book) {
		books.add(book);
		Utils.writeXML(book);
	}

	// 修改图书
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.dao.BookDAO#update(int, com.biubiubiu.bookmgr.pojo.Book)
	 */
	@Override
	public Book update(int index, Book book) {
		Book bookChange = books.set(index, book);
		return bookChange;
	}

	// 删除图书
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.dao.BookDAO#delete(int)
	 */
	@Override
	public boolean delete(int index) {
		return books.remove(index) != null ? true : false;
	}

	// 根据图书编号返回下标
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.dao.BookDAO#getIndex(java.lang.String)
	 */
	@Override
	public int getIndex(String bookId) {
		int index = -1;
		for (int i = 0; i < books.size(); i++) {
			if (books.get(i).getBookno().equalsIgnoreCase(bookId)) {
				index = i;
			}
		}
		return index;
	}

}

BookService.java

package com.biubiubiu.bookmgr.service;

import java.util.List;

import com.biubiubiu.bookmgr.pojo.Book;

public interface BookService {

	//查询图书数据业务(排序)
	List<Book> selectBooks();

	//添加图书数据操作
	String addBook(Book book);

	//更新图书数据操作
	String updateBook(int index, String type, String value);

	//删除图书数据操作
	String deleteBook(int index);

}

BookServiceImpl.java

package com.biubiubiu.bookmgr.service.serviceimpl;
/**
 * 业务层
 * @author 11142
 *
 */

import java.util.Collections;
import java.util.List;

import com.biubiubiu.bookmgr.dao.daoimpl.BookDAOImpl;
import com.biubiubiu.bookmgr.pojo.Book;
import com.biubiubiu.bookmgr.service.BookService;
import com.biubiubiu.bookmgr.util.ObjectFactory;
import com.biubiubiu.bookmgr.util.Utils;

public class BookServiceImpl implements BookService {
	BookDAOImpl bookDAOImpl;
	
	public BookServiceImpl() {
		bookDAOImpl = ObjectFactory.getInstance(Utils.B_D);
	}
	
	//查询图书数据业务(排序)
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.service.BookService#selectBooks()
	 */
	@Override
	public List<Book> selectBooks(){
		List<Book> booklist=bookDAOImpl.select();
		Collections.sort(booklist);
		return booklist;
	}
	
	//添加图书数据操作
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.service.BookService#addBook(com.biubiubiu.bookmgr.pojo.Book)
	 */
	@Override
	public String addBook(Book book) {
		String message = "";
		int index = bookDAOImpl.getIndex(book.getBookno());
		if(index == -1) {
			bookDAOImpl.add(book);
			message = "添加成功";
		}else {
			message="添加失败!图书编号已存在!";
		}
		return message;
	}
	
	//更新图书数据操作
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.service.BookService#updateBook(int, java.lang.String, java.lang.String)
	 */
	@Override
	public String updateBook(int index, String type, String value) {
		String message = "修改成功~";
		Book book  = bookDAOImpl.select().get(index);
		if(type.equalsIgnoreCase("a")) {
			book.setBookno(value);
		}else if (type.equalsIgnoreCase("b")) {
			book.setBookname(value);
		}else if (type.equalsIgnoreCase("c")) {
			book.setBooktime(Utils.strToDate(value));
		}else {
			message = "你的输入有误~";
		}
		Utils.updateXML();
		return message;
	}
	
	//删除图书数据操作
	/* (non-Javadoc)
	 * @see com.biubiubiu.bookmgr.service.BookService#deleteBook(int)
	 */
	@Override
	public String deleteBook(int index) {
		String message = "删除成功";
		Book book  = bookDAOImpl.select().get(index);
		bookDAOImpl.books.remove(book);
		Utils.updateXML();
		return message;
	} 
	
}

BookAction.java

package com.biubiubiu.bookmgr.action;

import java.util.List;
/**
 * 界面层
 */
import java.util.Scanner;


import com.biubiubiu.bookmgr.pojo.Book;
import com.biubiubiu.bookmgr.service.BookService;
import com.biubiubiu.bookmgr.util.Utils;
import com.biubiubiu.bookmgr.util.ObjectFactory;

public class BookAction {
	BookService bookServiceImpl ;
	
	public BookAction() {
		bookServiceImpl = ObjectFactory.getInstance(Utils.B_S);
	}

	public void menu() {
		System.out.println("1.显示所有图书");
		System.out.println("2.添加图书");
		System.out.println("3.修改图书");
		System.out.println("4.删除图书");
		System.out.println("0.退出系统");
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入:>>");
		try {
			int n = sc.nextInt();
			switch (n) {
			case 1:
				selectBook();
				break;
			case 2:
				addBook();
				break;
			case 3:
				updateBook();
				break;
			case 4:
				delectBook();
				break;
			case 0:
				if (exit()) {
					return;
				}
				break;
			default:
				System.out.println("输入的序号有误,请重新输入!");
			}
		} catch (Exception e) {
			System.out.println("请输入合法序号!");
		}
		menu();
	}

	/**
	 * 查询图书
	 */
	public void selectBook() {
		List<Book> booksList = bookServiceImpl.selectBooks();
		if(booksList.isEmpty()) {
			System.out.println("暂时没有图书信息~");
		}else {
			for (int i=0; i<booksList.size(); i++) {
				System.out.println((i+1) + "、  " + booksList.get(i).getBookno() + "," + booksList.get(i).getBookname() + "," + Utils.dateToStr(booksList.get(i).getBooktime()));
			}
			System.out.println();
		}
	}

	/**
	 * 添加图书
	 */
	public void addBook() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入图书编号:");
		String bId = sc.nextLine();
		System.out.println("请输入图书名称:");
		String bName = sc.nextLine();
		System.out.println("请输入图书创建日期(yyyy-MM-dd HH:mm:ss):");
		String bDate = sc.nextLine();
		Book book = new Book(bId, bName, Utils.strToDate(bDate));
		String message= bookServiceImpl.addBook(book);
        System.out.println(message);
	}

	/**
	 * 更新图书
	 */
	public void updateBook() {
		selectBook();
		Scanner sc = new Scanner(System.in);
		System.out.println("请选择你要更新的图书序号:");
		int id = sc.nextInt();
		if(id<=0 || id>bookServiceImpl.selectBooks().size()) {
			System.out.println("你要更新的图书不存在~");
		}else {
			int index = id - 1;
			System.out.println("请选择要修改的类型:a.图书编号 b.图书名称  c.图书日期");
			String type = sc.next();
			System.out.println("请输入修改后的数据:");
			Scanner scd = new Scanner(System.in);
			String value = scd.nextLine();
			String message = bookServiceImpl.updateBook(index, type, value);
			System.out.println(message);
		}
	}
	/**
	 * 删除图书
	 */
	public void delectBook() {
		selectBook();
		Scanner sc = new Scanner(System.in);
		System.out.println("请选择你要删除的图书序号:");
		int id = sc.nextInt();
		if(id<=0 || id>bookServiceImpl.selectBooks().size()) {
			System.out.println("你要删除的图书不存在~");
		}else {
			int index = id - 1;
			String message = bookServiceImpl.deleteBook(index);
			System.out.println(message);
		}
	}
	/**
	 * 退出
	 * @return
	 */
	
	public boolean exit() {
		System.out.println("确定退出吗?(y/任意键返回)");
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		if (s.equalsIgnoreCase("y")) {
			System.out.println("是否保存更新到XML文件并退出?(y/任意键返回)");
			String string = sc.next();
			if(string.equalsIgnoreCase("y")) {
				Utils.saveXML(false);
				System.out.println("已更新XML,成功退出~");
				return true;
			}else {
				System.out.println("程序退出成功!");
				return false;
			}
		} else {
			System.out.println("取消了退出,程序继续运行~");
			return false;
		}
	}
}

Start.java

package com.biubiubiu.bookmgr.start;
/**
 * 程序测试
 * @author 11142
 *
 */

import com.biubiubiu.bookmgr.action.BookAction;

public class Start {
	public static void main(String[] args) {
		BookAction bookAction = new BookAction();
		bookAction.menu();
	}
}

ObjectFactory.java

package com.biubiubiu.bookmgr.util;

import java.util.HashMap;
import java.util.Map;

public class ObjectFactory {
	
	private static Map<String, Object> mapobject = new HashMap<String, Object>();
	
	public static <E> E getInstance(String key) {
		E obj = null;
		try {
			if(mapobject.containsKey(key)) {
				obj = (E) mapobject.get(key);
			}else {
				obj = (E)Class.forName(Utils.getValue(key)).newInstance();
				mapobject.put(key, obj);
			}
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return obj;
	}
}

Utils.java

package com.biubiubiu.bookmgr.util;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
 * 工具类
 */
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.biubiubiu.bookmgr.dao.daoimpl.BookDAOImpl;
import com.biubiubiu.bookmgr.pojo.Book;



public class Utils {
	
	public final static String B_D = "bookDAOImpl";
	public final static String B_S = "bookServiceImpl";
	static Map<String, String> map = new HashMap<String, String>();
	static {
		map.put("bookDAOImpl", "com.biubiubiu.bookmgr.dao.daoimpl.BookDAOImpl");
		map.put("bookServiceImpl", "com.biubiubiu.bookmgr.service.serviceimpl.BookServiceImpl");
	}
	public static String getValue(String key) {
		return map.get(key);
	} 
	
	/**
	 * 把字符串转为日期
	 * @param str
	 * @return
	 */
	public static Date strToDate(String str) {
		Date date = null;
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			date = df.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}


	/**
	 * 日期转为字符串
	 * @param date
	 * @return
	 */
	public static String dateToStr(Date date) {
		String str = "";
		SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		str = ft.format(date);
		return str;
	}
	
	public static Document document = null;
	/**
	 * 解析XML,读取数据操作
	 * @return
	 */
	public static String readXML() {
		StringBuilder sb = new StringBuilder();
		try {
			InputStream is = BookDAOImpl.class.getClassLoader().getResourceAsStream("book.xml");
			SAXReader saxReader = new SAXReader();
			document = saxReader.read(is);
			Element root = document.getRootElement();
			List<Element> sonEles = root.elements();
			for (Element element : sonEles) {
				String str1 = element.attributeValue("bookno")+",";
				List<Element> bronds = element.elements();
				for (int i=0; i<bronds.size(); i++) {
					if(i==bronds.size()-1) {
						str1 += bronds.get(i).getText() +"\n";
					}else {
						str1 += bronds.get(i).getText() +",";
					}
				}
				sb.append(str1);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	/**
	 * 写入数据
	 * @param bookno
	 * @param bookname
	 * @param booktime
	 */
	public static void writeXML(Book book) {
		Element root = document.getRootElement();
		Element id = root.addElement("book");
		id.addAttribute("bookno", book.getBookno());
		Element name = id.addElement("bookname");
		name.addText(book.getBookname());
		Element time = id.addElement("booktime");
		time.addText(Utils.dateToStr(book.getBooktime()));
	}
	
	/**
	 * 修改删除操作
	 */
	public static void updateXML() {
		Element root = document.getRootElement();
		List<Element> elements = root.elements();
		for (Element element : elements) {
			element.getParent().remove(element);
		}
		for(int i=0; i<BookDAOImpl.books.size(); i++) {
			writeXML(BookDAOImpl.books.get(i));;
		}
//		saveXML(false);
	} 
	
	
	/**
	 * 保存XML文件
	 * @param isAppend
	 */
	public static void saveXML(boolean isAppend) {
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter writer = null;
		try {
			String path = "E:\\JAVA\\JAVA_WorkSpace\\KGC_Senior\\Senior1028\\src\\main\\resources\\book.xml";
			writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path, isAppend)),format);
			writer.write(document);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}

book.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- 图书列表-->
<books> 
  <book bookno="s004">
    <bookname>MySQL数据库</bookname>
    <booktime>2015-10-03 12:00:00</booktime>
  </book>
  <book bookno="s003">
    <bookname>Spring从入门到精通</bookname>
    <booktime>2015-11-03 12:00:00</booktime>
  </book>
  <book bookno="s002">
    <bookname>java案例大全</bookname>
    <booktime>2015-12-01 12:00:00</booktime>
  </book>
  <book bookno="s001">
    <bookname>java从入门到精通</bookname>
    <booktime>2015-12-03 12:00:00</booktime>
  </book>
</books>

发布了108 篇原创文章 · 获赞 39 · 访问量 9365

猜你喜欢

转载自blog.csdn.net/qq_40246175/article/details/102791593
今日推荐