标签:
本例分了两层的模式,即数据层和表现层
公共类: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(); } } }
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; } }
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 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>
标签:
原文地址:http://blog.csdn.net/x121850182/article/details/51901960