DOM4J实现图书管理系统(综合应用)

本文介绍了一个简单的图书管理系统,该系统使用Java实现,在控制台环境下提供图书的增删改查功能。系统通过对XML文件的操作来保存和读取图书数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现控制台下控制图书的增删改查的功能,说白了就是对xml文件内容的增删改查.直接上代码吧.

项目结构如下:


主程序入口:

package xmlbooksys;

import java.util.Scanner;

public class AppMain {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		BookDao bookDao = new BookDao();
		System.out.println("欢迎使用累死你活该图书系统");
		while (true) {
			System.out.println("请选择功能: A(添加)   B(查看所有图书)   C(删除)   D(更新)  E(退出系统)");
			String option = sc.next();
			if (option.equalsIgnoreCase("A")) {
				bookDao.addBook();
			} else if (option.equalsIgnoreCase("B")) {
				bookDao.showBook();
			} else if (option.equalsIgnoreCase("C")) {
				bookDao.removeBook();
			} else if (option.equalsIgnoreCase("D")) {
				bookDao.updateBook();
			} else if (option.equalsIgnoreCase("E")) {
				System.exit(0);
			} else {
				System.out.println("你的输入有误!!请重新输入!!");
			}
		}
	}
}

图书CRUD操作类

package xmlbooksys;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class BookDao {
	private static String option; // 记录用户的选择
	private static Scanner sc = new Scanner(System.in); // 记录用户的输入
	private static Document document = null;
	static {
		try {
			File file = new File("books.xml");
			if (file.exists()) {
				document = new SAXReader().read(file);
			} else {
				Element rootEle = DocumentHelper.createElement("书架");
				document = DocumentHelper.createDocument(rootEle);
			}

		} catch (Exception e) {

		}
	}

	// 刷新当前xml文件
	private static void writeXml() throws Exception {
		// 创建格式化对象,并指定xml的编码格式
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("gbk");
		// 使用document对象更新xml目标文件
		FileWriter fileWriter = new FileWriter("books.xml");// 文件输入字符流
		XMLWriter xmlwriter = new XMLWriter(fileWriter, format);
		xmlwriter.write(document);
		xmlwriter.close();

	}

	// 添加图书
	public void addBook() throws Exception {
		System.out.println("——>你选则了添加图书功能");
		System.out.println("请输入书的编号");
		String id = sc.next();
		System.out.println("请输入书名");
		String name = sc.next();
		System.out.println("请输入价格");
		String price = sc.next();
		System.out.println("请输入出版社名字");
		String publish = sc.next();
		System.out.println("请输入出版日期");
		String date = sc.next();
		// 获取根节点
		Element rootEle = document.getRootElement();
		// 添加子节点
		Element bookEle = rootEle.addElement("书");
		bookEle.addElement("书号").setText(id);
		bookEle.addElement("书名").setText(name);
		bookEle.addElement("价格").setText(price);
		bookEle.addElement("出版社").setText(publish);
		bookEle.addElement("日期").setText(date);
		System.out.println("添加图书成功!!");
		writeXml();
	}

	// 显示book
	StringBuilder sb = null;// 添加一个字符串缓冲区

	public void showBook() throws Exception {

		System.out.println("——>你选择了查看图书的功能");
		Element rootEle = document.getRootElement();
		// 通过根节点获取所有书子节点
		List<Element> bookEles = rootEle.elements("书");
		int count = 0;
		for (Element item : bookEles) {
			sb = new StringBuilder();
			sb.append("========第" + (++count) + "本书=======\r\n");
			sb.append("书号:" + item.elementText("书号"));
			sb.append(" 书名:" + item.elementText("书名"));
			sb.append(" 价格:" + item.elementText("价格"));
			sb.append(" 出版社:" + item.elementText("出版社"));
			sb.append(" 日期:" + item.elementText("日期") + "\r\n");
			System.out.println(sb.toString());
			sb = null;
		}
		if (count == 0) {
			System.out.println("当前还没有图书,赶紧添加吧!!");
		}
	}

	// 删除书 根据书名删除
	public void removeBook() throws Exception {
		System.out.println("——>你选择了删除图书的功能");
		System.out.println("请输入你要删除的书名");
		String name = sc.next();
		// 获取当前需要操作的图书的书节点
		Element currentBookNode = null;
		outer: while (true) {
			// 获取所有的书节点
			List<Element> bookEles = document.getRootElement().elements("书");
			// 遍历所有的书节点
			for (Element bookItem : bookEles) {
				// 判断书名节点的内容是否与用户输入的内容相同
				if (name.equals(bookItem.elementText("书名"))) {
					currentBookNode = bookItem;
					break outer;
				}
			}

			System.out.println("不存在" + name + "请重新输入,返回上级输入Q");
			name = sc.next();
			if (name.equalsIgnoreCase("q")) {
				return;
			}
		}

		if (null != currentBookNode) {
			// 如果内容相同,则开始删除图书
			document.getRootElement().remove(currentBookNode);
			writeXml();// 操作完后刷新xml文件
			System.out.println("删除图书成功...");

		}
	}

	// 更新book
	public void updateBook() throws Exception { // 更新价格、 出版日期、 名字

		System.out.println("——>你选则了更新功能");
		System.out.println("请输入你要更新的书号");
		String id = sc.next();
		// 获取当前需要操作的图书的书节点
		Element currentBookNode = null;
		List<Element> bookEles = document.getRootElement().elements("书");

		outer: while (true) {
			for (Element bookEle : bookEles) {
				if (id.equals(bookEle.elementText("书号"))) {
					currentBookNode = bookEle;
					break outer;
				}
			}

			System.out.println("书号" + id + "不存在请重新输入,返回上级输入Q");
			id = sc.next();
			if (id.equalsIgnoreCase("q")) {
				return;
			}
		}

		if (null != currentBookNode) {
			System.out.println("请选择更新方式: 【1】更新价格  【2】更新出版日期   【3】更新名字");
			while (true) {
				option = sc.next();
				if (option.equalsIgnoreCase("1")) {
					System.out.println("请输入新的价格");
					String price = sc.next();
					currentBookNode.element("价格").setText(price);
					break;
				} else if (option.equalsIgnoreCase("2")) {
					System.out.println("请输入新的出版日期");
					String date = sc.next();
					currentBookNode.element("日期").setText(date);
					break;
				} else if (option.equalsIgnoreCase("3")) {
					System.out.println("请输入新的名字");
					String name = sc.next();
					currentBookNode.element("书名").setText(name);
					break;
				} else {
					System.out.println("输入有误,请重新选择!!");
				}
			}

			// 更新完后需要重新写入数据
			writeXml();
			System.out.println("修改成功");
		}

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值