XML小项目------DOM操作联系人(非图形界面版)

本例分了两层的模式,即数据层和表现层

公共类:DocumentFactory.java

package cn.hncu.contact.common;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

public class DocumentFactory {
	private static Document dom=null;
	private static File file;
	static{
		file=new File("xml/users.xml");
		try {
			DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
			DocumentBuilder db=dbf.newDocumentBuilder();
			dom=db.parse(file);
		} catch (Exception e) {
			throw new RuntimeException("解析出错"+e.getMessage(), e);
		}
	}
	
	private DocumentFactory(){
	}
	
	public static Document getDocument(){
		return dom;
	}
	
	public static void save(){
		try {
			TransformerFactory tff=TransformerFactory.newInstance();
			Transformer trans=tff.newTransformer();
			trans.transform(new DOMSource(dom), new StreamResult(file));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


工具类:  IDGenerate.java

package cn.hncu.contact.utils;

import java.util.UUID;

public class IDGenerate {
	private IDGenerate(){
	}
	public static String getID(){
		String uuid=UUID.randomUUID().toString();
		uuid=uuid.replace("-", "");
		return uuid;
	}
}


表现层:ContactAction.java

package cn.hncu.contact.cmd;

import java.util.List;
import java.util.Map;
import java.util.Scanner;

import org.w3c.dom.Element;

import cn.hncu.contact.dao.dao.ContactDAO;
import cn.hncu.contact.dao.factory.ContactDAOFactory;

public class ContactAction {
	private Scanner input=null;
	private ContactDAO dao=null;
	private Element currentUser=null;
	private String delIds[]=null;
	
	public ContactAction() {
		input=new Scanner(System.in);
		dao=ContactDAOFactory.getContactDAO();
		
		while (true) {
			System.out.println("1:登录");
			System.out.println("2:注册");
			System.out.println("0:退出");
			String option = input.nextLine();
			if ("1".equals(option)) {
				login();
			} else if ("2".equals(option)) {
				reg();
			} else if ("0".equals(option)) {
				System.out.println("已安全退出");
				break;
			}
		}
	}

	private void login() {
		System.out.println("请输入用户名");
		String name=input.nextLine();
		System.out.println("请输入密码");
		String pwd=input.nextLine();
		Element res=(Element) dao.login(name,pwd);
		if (res==null){
			System.out.println("登录失败!");
		} else {
			System.out.println("登陆成功,请选择操作");
			currentUser=res;
			operation();
		}
	}
	
	private void operation() {
		List<Map<String, String>> list=dao.queryAllContacts(currentUser);
		delIds=new String[list.size()];
		int i=1;
		for (Map<String, String>map:list){
			String id=map.get("id");
			delIds[i-1]=id;
			i++;
		}
		System.out.println("1: 显示所有联系人");
		System.out.println("2: 添加联系人");
		System.out.println("3: 删除联系人");
		System.out.println("4: 修改联系人");
		System.out.println("5: 切换账号");
		String sel=input.nextLine();
		if ("1".equals(sel)){
			showAllContacts(list);
		} else if("2".equals(sel)){
			addContact();
		} else if("3".equals(sel)){
			delContact();
		} else if("4".equals(sel)){
			updateContact();
		} else if("5".equals(sel)){
			return;
		}
		operation();
	}

	private void updateContact() {
		System.out.println("请输入要修改联系人的姓名");
		String name=input.nextLine();
		boolean boo=dao.checkElement(currentUser,name);
		if (!boo){
			System.out.println("无该联系人");
		} else {
			System.out.println("请输入更新的信息");
			System.out.println("姓名");
			String newName=input.nextLine();
			System.out.println("年龄");
			String newAge=input.nextLine();
			System.out.println("电话");
			String newTel=input.nextLine();
			dao.update(currentUser, name, newName,newAge,newTel);
			System.out.println("修改成功");
		}
	}

	private void delContact() {
		System.out.println("请输入要删除的联系人的序号");
		int num=input.nextInt();
		input.nextLine();
		Element eDelContact=dao.del(currentUser,delIds[num-1]);
		if (eDelContact==null){
			System.out.println("要删除的联系人不存在");
		} else {
			String name=eDelContact.getElementsByTagName("name").item(0).getTextContent();
			System.out.println(name+"已经被删除!");
		}
	}

	private void addContact() {
		System.out.println("请输入联系人的信息");
		System.out.println("姓名:");
		String name = input.nextLine();
		System.out.println("电话:");
		String tel = input.nextLine();
		System.out.println("性别:");
		String sex = input.nextLine();
		dao.add(currentUser,name,tel,sex);
		System.out.println("添加成功");
	}

	private void showAllContacts(List<Map<String, String>> list) {
		System.out.println("序号\t姓名\t性别\t电话");//表头
		System.out.println("--------------------------------");
		int i=1;
		for (Map<String, String>map:list){
			String name=map.get("name");
			String sex=map.get("sex");
			String tel=map.get("tel");
			System.out.println((i++)+"\t"+name+"\t"+sex+"\t"+tel);
		}
	}

	private void reg() {
		System.out.println("请输入注册用户名:");
		String regName = input.nextLine();
		boolean boo=dao.checkName(regName);
		if (!boo){
			System.out.println("该用户名已存在,请重新注册");
			reg();
		} else {
			System.out.println("请输入注册密码:");
			String pwd1 = input.nextLine();
			System.out.println("请再一次输入注册密码:");
			String pwd2 = input.nextLine();
			if (!pwd1.equals(pwd2)){
				System.out.println("两次密码不一致,请重新注册");
				reg();
			} else {
				dao.reg(regName,pwd1);
				System.out.println("注册成功");
			}
		}
	}
	
	public static void main(String[] args) {
		new ContactAction();
	}
}


数据层:

dao:ContactDAO.java

package cn.hncu.contact.dao.dao;

import java.util.List;
import java.util.Map;

import org.w3c.dom.Element;

public interface ContactDAO {
	Element login(String name, String pwd);

	List<Map<String, String>> queryAllContacts(Element currentUser);

	void add(Element user, String name, String tel, String sex);

	Element del(Element currentUser, String string);

	void reg(String regName, String pwd1);

	boolean checkName(String regName);

	boolean checkElement(Element currentUser, String name);

	void update(Element currentUser, String oldName, String newName, String newAge, String newTel);

}
factory:ContactDAOFactory.java

package cn.hncu.contact.dao.factory;

import cn.hncu.contact.dao.dao.ContactDAO;
import cn.hncu.contact.dao.impl.ContactDAOImpl;

public class ContactDAOFactory {
	public static ContactDAO getContactDAO(){
		return new ContactDAOImpl();
	}
}
impl:ContactDAOImpl.java

package cn.hncu.contact.dao.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import cn.hncu.contact.common.DocumentFactory;
import cn.hncu.contact.dao.dao.ContactDAO;
import cn.hncu.contact.utils.IDGenerate;

public class ContactDAOImpl implements ContactDAO{
	private Document dom=DocumentFactory.getDocument();
	private Element currentUser=null;
	Element root=(Element) dom.getFirstChild();
	
	@Override
	public Element login(String name, String pwd) {
		NodeList list=root.getElementsByTagName("user");
		for (int i=0;i<list.getLength();i++){
			Element e=(Element) list.item(i);
			if (e.getAttribute("name").equalsIgnoreCase(name)&&e.getAttribute("pwd").equals(pwd)){
				return e;
			}
		}
		return null;
	}

	@Override
	public List<Map<String, String>> queryAllContacts(Element user) {
		currentUser=user;
		List<Map<String, String>> list=new ArrayList<Map<String,String>>();
		NodeList nodelist=currentUser.getElementsByTagName("contact");
		for (int i=0;i<nodelist.getLength();i++){
			Map<String, String> map=new HashMap<String, String>();
			Element eElement=(Element) nodelist.item(i);
			try {
				String id=eElement.getAttribute("id");
				map.put("id", id);
				String name=eElement.getElementsByTagName("name").item(0).getTextContent();
				map.put("name", name);
				String age=eElement.getElementsByTagName("age").item(0).getTextContent();
				map.put("age", age);
				String tel=eElement.getElementsByTagName("tel").item(0).getTextContent();
				map.put("tel", tel);
				String sex=eElement.getElementsByTagName("sex").item(0).getTextContent();
				map.put("sex", sex);
			} catch (Exception e) {
			}
			list.add(map);
		}
		return list;
	}

	@Override
	public void add(Element user, String name, String tel, String sex) {
		currentUser=user;
		Element newContact=dom.createElement("contact");
		newContact.setAttribute("id", IDGenerate.getID());
		
		Element eName=dom.createElement("name");
		eName.setTextContent(name);
		newContact.appendChild(eName);
		
		Element eTel=dom.createElement("tel");
		eTel.setTextContent(tel);
		newContact.appendChild(eTel);
		
		Element eSex=dom.createElement("sex");
		eSex.setTextContent(sex);
		newContact.appendChild(eSex);
		
		currentUser.appendChild(newContact);
		DocumentFactory.save();
	}

	@Override
	public Element del(Element user, String idStr) {
		currentUser=user;
		NodeList list=currentUser.getElementsByTagName("contact");
		for (int i=0;i<list.getLength();i++){
			Element eContact=(Element) list.item(i);
			String id=eContact.getAttribute("id");
			if (id.equals(idStr)){
				currentUser.removeChild(eContact);
				DocumentFactory.save();
				return eContact;
			}
		}
		return null;
	}

	@Override
	public void reg(String regName, String pwd1) {
		Element newUser=dom.createElement("user");
		newUser.setAttribute("name", regName);
		newUser.setAttribute("pwd", pwd1);
		root.appendChild(newUser);
		DocumentFactory.save();
	}

	@Override
	public boolean checkName(String regName) {
		NodeList list=dom.getElementsByTagName("user");
		for (int i=0;i<list.getLength();i++){
			Element eUser=(Element) list.item(i);
			if (regName.equalsIgnoreCase(eUser.getAttribute("name"))){
				return false;
			}
		}
		return true;
	}

	@Override
	public boolean checkElement(Element user, String name) {
		currentUser=user;
		NodeList list=currentUser.getElementsByTagName("name");
		for (int i=0;i<list.getLength();i++){
			Element e=(Element) list.item(i);
			if (name.equalsIgnoreCase(e.getTextContent())){
				return true;
			}
		}
		return false;
	}
	
	private String getContactId(String oldName){
		NodeList list=currentUser.getElementsByTagName("contact");
		for (int i=0;i<list.getLength();i++){
			Element e=(Element) list.item(i);
			if (e.getElementsByTagName("name").item(0).getTextContent().equalsIgnoreCase(oldName)){
				return e.getAttribute("id");
			}
		}
		return null;
	}
	
	@Override
	public void update(Element user, String oldName, String newName, String newAge, String newTel) {
		this.currentUser=user;
		String contactId=getContactId(oldName);
		
		NodeList list=currentUser.getElementsByTagName("contact");
		for (int i=0;i<list.getLength();i++){
			Element eContact=(Element) list.item(i);
			if (contactId.equals(eContact.getAttribute("id"))){
				
				Element eName=(Element) eContact.getElementsByTagName("name").item(0);
				eName.setTextContent(newName);
				
				Element eAge=(Element) eContact.getElementsByTagName("age").item(0);
				if (eAge==null){
					eAge=dom.createElement("age");
					eContact.appendChild(eAge);
				}
				eAge.setTextContent(newAge);
				
				Element eTel=(Element) eContact.getElementsByTagName("tel").item(0);
				if (eTel==null){
					eTel=dom.createElement("eTel");
					eContact.appendChild(eTel);
				}
				eTel.setTextContent(newTel);
				DocumentFactory.save();
				break;
			}
		}
		
	}
}


xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><contacts>
	<user name="Jack" pwd="1234">
		<contact id="a001">
			<name>Tom</name>
			<age>20</age>
			<sex>Male</sex>
			<tel>13838384380</tel>
		</contact>
		<contact id="a002">
			<name>Rose</name>
			<age>19</age>
			<sex>Female</sex>
			<tel>13811111111</tel>
		</contact>
	</user>
	<user name="Tom" pwd="4321">
		<contact id="b001">
			<name>Jack</name>
			<age>21</age>
			<sex>Male</sex>
			<tel>13822222222</tel>
		</contact>
		<contact id="b002">
			<name>Rose</name>
			<age>19</age>
			<sex>Female</sex>
			<tel>13811111111</tel>
		</contact>
		<contact id="b1dcc603c9684019b68fe7fc85b547dc">
			<name>xx</name>
			<tel>22222222222</tel>
			<sex>male</sex>
			<age>22</age>
		</contact>
	</user>
	<user name="Rose" pwd="1111">
		<contact id="c001">
			<name>Tom</name>
			<age>20</age>
			<sex>Male</sex>
			<tel>13838384380</tel>
		</contact>
		<contact id="c002">
			<name>Jack</name>
			<age>21</age>
			<sex>Male</sex>
			<tel>13822222222</tel>
		</contact>
	</user>
</contacts>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值