版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
一要求分析
设计一个通讯录程序
联系人的属性要求 : 编号 姓名 性别 年龄 电话 邮箱
要求 :
1) 交互使用控制台
2) 数据存储到xml文件
二思路
启动程序后 , 在控制台上显示选项菜单
1 添加联系人
2 修改联系人
3 删除联系人
4 查询所有联系人
Q 退出程序
用户根据需求选择对应的功能 .
三程序编写
package cn.softbreezee.Case; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class ContactDemo {	public static void main(String[] args) throws Exception {	SAXReader reader = new SAXReader();	Document doc = reader.read(new File("./src/contact/cc.xml"));	Element rootEle = doc.getRootElement();	BufferedReader bufr = new BufferedReader(new InputStreamReader(	System.in));	System.out.println("【1】添加联系人");	System.out.println("【2】修改联系人");	System.out.println("【3】删除联系人");	System.out.println("【4】查询所有联系人");	System.out.println("【Q】退出程序");	System.out.println("-----------------------------------------");	String line = null;	while ((line = bufr.readLine()) != null) {	if ("Q".equals(line)) {	break;	} else if ("1".equals(line)) {	addContact(rootEle);	} else if ("2".equals(line)) {	changeContact(rootEle);	} else if ("3".equals(line)) {	delContact(rootEle);	} else if ("4".equals(line)) {	StringBuilder sb = new StringBuilder();	checkContact(rootEle,sb);	System.out.println(sb);	} else {	System.out.println("输入格式错误,请重新输入!!!");	}	}	FileOutputStream fos = new FileOutputStream("./src/contact/cc.xml");	OutputFormat format = OutputFormat.createPrettyPrint();	format.setEncoding("utf-8");	XMLWriter writer = new XMLWriter(fos, format);	writer.write(doc);	writer.flush();	writer.close();	}	private static void delContact(Element rootEle) throws Exception {	BufferedReader bufr = new BufferedReader(new InputStreamReader(	System.in));	System.out.println("请输入要删除的编号");	String id = bufr.readLine();	Node node = rootEle.selectSingleNode("Contact[@id='"+id+"']");	node.detach();	System.out.println("删除成功!!");	}	private static void changeContact(Element rootEle) throws Exception {	BufferedReader bufr = new BufferedReader(new InputStreamReader(	System.in));	System.out.println("请输入要修改的编号");	String id = bufr.readLine();	Node node = rootEle.selectSingleNode("Contact[@id='"+id+"']");	System.out.println("请输入姓名");	String name = bufr.readLine();	node.selectSingleNode("name").setText(name);	System.out.println("请输入性别");	String gender = bufr.readLine();	node.selectSingleNode("gender").setText(gender);	System.out.println("请输入年龄");	String age = bufr.readLine();	node.selectSingleNode("age").setText(age);	System.out.println("请输入电话");	String del = bufr.readLine();	node.selectSingleNode("del").setText(del);	System.out.println("请输入QQ邮箱");	String email = bufr.readLine();	node.selectSingleNode("email").setText(email);	System.out.println("修改完毕!!!");	}	private static void checkContact(Element rootEle,StringBuilder sb) {	Listlist = rootEle.elements();	for(Element ele:list){	if("Contact".equals(ele.getName()))	sb.append("编号"+":"+ele.attributeValue("id")+"\t");	else	sb.append(ele.getName()+":"+ele.getText()+"\t");	checkContact(ele,sb);	}	}	private static void addContact(Element ele) throws Exception {	BufferedReader bufr = new BufferedReader(new InputStreamReader(	System.in));	System.out.println("请输入编号");	String id = bufr.readLine();	System.out.println("请输入姓名");	String name = bufr.readLine();	System.out.println("请输入性别");	String gender = bufr.readLine();	System.out.println("请输入年龄");	String age = bufr.readLine();	System.out.println("请输入电话");	String del = bufr.readLine();	System.out.println("请输入QQ邮箱");	String email = bufr.readLine();	Element contact = ele.addElement("Contact");	contact.addAttribute("id", id);	contact.addElement("name").addText(name);	contact.addElement("gender").addText(gender);	contact.addElement("age").addText(age);	contact.addElement("del").addText(del);	contact.addElement("email").addText(email);	System.out.println("添加完成!");	} }
四总结
该程序以熟练xml文件语法, Xpath语法, DOM解析方式以及工具包dom4j操作为主 , 简单实现联系人的增删改查 . 代码复用性低 , 查询所有联系人后没有换行 , 删除以及修改都是通过id的方法等不少地方需要改进 !