本例分了两层的模式,即数据层和表现层
公共类: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文件:
<?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>