XML文件作业---实现简单的通讯录功能(XML作为简单数据库)
项目整体视图:
对象类:Contact.java
package Test; /* * 联系人实体对象 */ public class Contact { private String id; private String name; private String gender; private int age; private String phone; private String email; private String qq; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getQq() { return qq; } public void setQq(String qq) { this.qq = qq; } @Override public String toString() { return "Contact [id=" + id + ",mame=" + name + ",gender=" + gender + ",age=" + age + ",phone=" + phone + ",email=" + email + ",qq=" + qq + "]"; } }
主程序:MainProgram.java
package Test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; public class MainProgram { @SuppressWarnings("null") public static void main(String[] args) { try { //接收用户输入的命令 // Scanner scanner = new Scanner(System.in); // String command = scanner.next(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ContactOperator operator = new ContactOperatorImpl(); while(true) { //1.看到菜单 printMenu(); //2.接收用户输入命令 String command = br.readLine(); //3.根据用户输入执行不同的操作 if("1".equals(command)) { //添加联系人 //获取用户输入的数据 Contact contact = new Contact(); //获取ID System.out.println("请输入编号:"); String id = br.readLine(); //获取姓名 System.out.println("请输入姓名"); String name = br.readLine(); //获取性别 System.out.println("请输入性别"); String gender = br.readLine(); //获取年龄 System.out.println("请输入年龄"); String age = br.readLine(); //获取电话 System.out.println("请输入手机号"); String phone = br.readLine(); //获取邮箱 System.out.println("请输入邮箱"); String email = br.readLine(); //获取QQ System.out.println("请输入QQ"); String qq = br.readLine(); //封装到对象 contact.setId(id); contact.setName(name); contact.setAge(Integer.parseInt(age)); contact.setGender(gender); contact.setEmail(email); contact.setPhone(phone); contact.setQq(qq); //调用添加联系人的方法 operator.addContact(contact); } else if("2".equals(command)) { //修改联系人 Contact contact = new Contact(); //获取ID System.out.println("请输入需要修改的编号:"); String id = br.readLine(); //获取姓名 System.out.println("请输入修改后的姓名"); String name = br.readLine(); //获取性别 System.out.println("请输入修改后的性别"); String gender = br.readLine(); //获取年龄 System.out.println("请输入修改后的年龄"); String age = br.readLine(); //获取电话 System.out.println("请输入修改后的手机号"); String phone = br.readLine(); //获取邮箱 System.out.println("请输入修改后的邮箱"); String email = br.readLine(); //获取QQ System.out.println("请输入修改后的QQ"); String qq = br.readLine(); //封装到对象 contact.setId(id); contact.setName(name); contact.setAge(Integer.parseInt(age)); contact.setGender(gender); contact.setEmail(email); contact.setPhone(phone); contact.setQq(qq); //调用修改联系人的方法 operator.updateContact(contact); } else if("3".equals(command)) { //删除联系人 System.out.println("请输入你要删除的编号:"); String id = br.readLine(); //调用删除联系人的方法 operator.deleteContact(id); } else if("4".equals(command)) { //查找所有联系人 List<Contact> list = operator.findAll(); //打印输出 for(Contact con : list) { System.out.println(con); } } else if("Q".equals(command)) { break; } else { System.out.println("输入有错误"); } } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } private static void printMenu() { //1.看到菜单 System.out.println("======================"); System.out.println("[1]添加联系人"); System.out.println("[2]修改联系人"); System.out.println("[3]删除联系人"); System.out.println("[4]查看所有联系人"); System.out.println("[Q]退出系统"); System.out.println("======================="); } }
定义联系人存放的方法的接口:ContactOperator.java
package Test; import java.util.List; /* * 该接口用于存放联系人相关操作方法 */ public interface ContactOperator { public void addContact(Contact contact);//添加联系人 public void updateContact(Contact contact);//修改联系人 public void deleteContact(String id);//删除联系人 public List<Contact> findAll();//查询所有联系人 }
上面接口方法的实现类:ContactOperatorImpl.java
package Test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; 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 ContactOperatorImpl implements ContactOperator { public void addContact(Contact contact) { try { /* * 需求:把contact对象保存到XML文件中 */ File file = new File("e:/contact.xml"); Document doc = null; Element rootElem = null; if(!file.exists()) { //如果没有XML文件,则创建XML文件 doc = DocumentHelper.createDocument(); //创建根标签 rootElem = doc.addElement("contactList"); } else { //如果有XML文件,则读取XML文件 doc = new SAXReader().read(file); //读取根标签 rootElem = doc.getRootElement(); } //添加contact标签 Element contactElem = rootElem.addElement("contact"); contactElem.addAttribute("id",contact.getId()); contactElem.addElement("name").setText(contact.getName()); contactElem.addElement("gender").setText(contact.getGender()); contactElem.addElement("age").setText(contact.getAge()+""); contactElem.addElement("phone").setText(contact.getPhone()); contactElem.addElement("email").setText(contact.getEmail()); contactElem.addElement("qq").setText(contact.getQq()); //把Document写到XML文件 XMLUtil.Writexml(doc); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } public void updateContact(Contact contact) { /* * 修改id值为2的联系人 * 1)查询id值为2的contact标签 * 2)修改contact标签中的内容 */ try { //1.读取XML文件 Document doc = XMLUtil.getDocument(); Element contactElem = (Element)doc.selectSingleNode("//contact[@id='"+contact.getId()+"']"); //2.修改contact标签中的内容 contactElem.element("name").setText(contact.getName()); contactElem.element("gender").setText(contact.getGender()); contactElem.element("age").setText(contact.getAge()+""); contactElem.element("email").setText(contact.getEmail()); contactElem.element("qq").setText(contact.getQq()); //把Document写到XML文件 XMLUtil.Writexml(doc); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } public void deleteContact(String id) { try { //1.读取XML文件 Document doc = XMLUtil.getDocument(); //2.查询需要删除id的contact Element contactElem = (Element)doc.selectSingleNode("//contact[@id='"+id+"']"); //3.删除标签 contactElem.detach(); //4.把Document写到XML文件 XMLUtil.Writexml(doc); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException(e); } } public List<Contact> findAll() { //1.读取XML文件 Document doc = XMLUtil.getDocument(); //2.创建List对象 List<Contact> list = new ArrayList<Contact>(); //3.读取contact标签 List<Element> conList = (List<Element>)doc.selectNodes("//contact"); for(Element e : conList) { //创建Contact对象 Contact c = new Contact(); c.setId(e.attributeValue("id")); c.setName(e.elementText("name")); c.setGender(e.elementText("gender")); c.setAge(Integer.parseInt(e.elementText("age"))); c.setEmail(e.elementText("email")); c.setPhone(e.elementText("phone")); c.setQq(e.elementText("qq")); //把contact对象放到list中 list.add(c); } return list; } }
package Test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class XMLUtil { /* * 用于读取XML文件 */ public static Document getDocument() { try { Document doc = new SAXReader().read(new File("e:/contact.xml")); return doc; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /* * 写出XML文件 */ public static void Writexml(Document doc) { try { //3.把Document写到XML文件 FileOutputStream out = new FileOutputStream("e:/contact.xml"); //书写格式(优美的格式) OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(out,format); writer.write(doc); writer.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } } }
接口方法实现的测试类:TestContactOperatorImpl.java
package Test; import java.util.List; import org.junit.Before; import org.junit.Test; /* * 联系人操作实现的测试类 */ public class TestContactOperatorImpl { ContactOperator operator = null; /* * 初始化对象实例 */ @Before public void init() { operator = new ContactOperatorImpl(); } @Test public void testAddContact() { Contact contact = new Contact(); contact.setId("4"); contact.setName("sb"); contact.setGender("男"); contact.setPhone("2333"); contact.setEmail("er"); contact.setQq("9777"); operator.addContact(contact); } @Test public void testUpdateContact() { Contact contact = new Contact(); contact.setId("3");//修改的ID值 contact.setName("李四"); contact.setGender("男"); contact.setAge(20); contact.setPhone("2333"); contact.setEmail("er"); contact.setQq("9777"); operator.updateContact(contact); } @Test public void testDeleteContact() { operator.deleteContact("2"); } @Test public void testFindAll() { List<Contact> list = operator.findAll(); for(Contact contact : list) { System.out.println(contact); } } }