XML“数据库”:简单的通讯录系统(用dom4j完成增删改查)

package hf.firstclass.dom4j;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;

/**
 *  编写一个通讯录程序       
 *  功能需求:
        1)增加联系人
        2)修改联系人
        3)删除联系人
        4)查询所有联系人(全部)
        5)退出系统
    要求:
        1)交互使用控制台进行交互
        2)联系人的数据存储到xml文件中(contact.xml)  (dom4j的操作)
        xml文件格式:
        <contact id="001" hobby="eat">
        <name>张三</name>
        <gender>男</gender>
        <age>22</age>
        <phone>17728394033</phone>
        <email>[email protected]</email>
        <address>130号</address>
        </contact>
 * @author LZK
 *
 */
 //运行的主程序
public class ContactSystem {
    public static void main(String[] args) throws Exception {
        //建立一个读取流,获取用户的输入
        BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
        //创建一个联系人操作对象
        OperatContact oper=new OperatContact();
        while(true){
            System.out.println("==========通信录系统=========");
            System.out.println("[1]增加联系人");
            System.out.println("[2]修改联系人");
            System.out.println("[3]删除联系人");
            System.out.println("[4]查询所有联系人");
            System.out.println("[5]退出系统");
            System.out.print("请输入需求数字:");
            String command=bufr.readLine();
            //添加联系人,并封装到Contact对象中。
            if("1".equals(command)){
                Contact con = new Contact();
                System.out.print("请输入联系人的姓名:");
                String name=bufr.readLine();
                con.setName(name);
                System.out.print("请输入联系人的性别:");
                String gender=bufr.readLine();
                con.setGender(gender);
                System.out.print("请输入联系人的年龄:");
                String age=bufr.readLine();
                con.setAge(age);
                System.out.print("请输入联系人的电话:");
                String phone=bufr.readLine();
                con.setPhone(phone);
                System.out.print("请输入联系人的email:");
                String email=bufr.readLine();
                con.setEmail(email);
                System.out.print("请输入联系人的地址:");
                String address=bufr.readLine();
                con.setAddress(address);
                //向XML文件中添加联系人
                oper.addContact(con);
                System.out.println("============添加成功!=============");
            }
            //修改联系人,并封装信息到对象
            else if("2".equals(command)){
                Contact con = new Contact();
                System.out.print("请输入你想要修改的联系人的id:");
                String id=bufr.readLine();
                con.setId(id);
                System.out.print("请修改联系人的姓名:");
                String name=bufr.readLine();
                con.setName(name);
                System.out.print("请修改联系人的性别:");
                String gender=bufr.readLine();
                con.setGender(gender);
                System.out.print("请修改联系人的年龄:");
                String age=bufr.readLine();
                con.setAge(age);
                System.out.print("请修改联系人的电话:");
                String phone=bufr.readLine();
                con.setPhone(phone);
                System.out.print("请修改联系人的email:");
                String email=bufr.readLine();
                con.setEmail(email);
                System.out.print("请修改联系人的地址:");
                String address=bufr.readLine();
                con.setAddress(address);
                //更新XML文件的联系人
                oper.updateContact(con);
                System.out.println("============修改成功!=============");
            }
            //删除联系人
            else if("3".equals(command)){
                System.out.print("请输入你要删除的联系人的id:");
                String id=bufr.readLine();
                oper.deleteContact(id);
                System.out.println("============删除成功!=============");
            }
            //查询联系人
            else if("4".equals(command)){
                List<Contact> conlist=oper.findAll();
                for(Contact con:conlist){
                    System.out.println(con);
                }
            }
            //退出系统
            else if("5".equals(command)){
                System.exit(0);
            }
        }   
    }
}

//将增删改查功能封装在一个类中

package hf.firstclass.dom4j;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.dom4j.Document;
import org.dom4j.Element;
public class OperatContact {
    /**
     * 添加联系人 要求id要唯一
     * @param con
     */
    public void addContact(Contact con) {
            //读取XML文件
            File file=new File("./src/contact.xml");
            Document doc=Dom4jUtil.getDocument(file);
            //添加信息
            Element rootEle=doc.getRootElement();
            //根据根节点添加contact节点
            Element conEle=rootEle.addElement("contact");
            //编号使用UUID算法生成一个随机且唯一的字符串
            conEle.addAttribute("id", UUID.randomUUID().toString());
            conEle.addElement("name").addText(con.getName());
            conEle.addElement("gender").addText(con.getGender());
            conEle.addElement("age").addText(con.getAge());
            conEle.addElement("phone").addText(con.getPhone());
            conEle.addElement("email").addText(con.getEmail());
            conEle.addElement("address").addText(con.getAddress());
            //将xml文件写入到磁盘中
            Dom4jUtil.writeXML(file, doc);
    }
    /**
     * 修改联系人
     * @param con
     */
    public void updateContact(Contact con) {
            //读取XML文件
            File file=new File("./src/contact.xml");
            Document doc=Dom4jUtil.getDocument(file);
            String id=con.getId();
            //XPath技术,快速找出联系人
            Element conEle=(Element) doc.selectSingleNode("//contact[@id='"+id+"']");
            conEle.element("name").setText(con.getName());
            conEle.element("gender").setText(con.getGender());
            conEle.element("age").setText(con.getAge());
            conEle.element("phone").setText(con.getPhone());
            conEle.element("email").setText(con.getEmail());
            conEle.element("address").setText(con.getAddress());
            //将xml文件写入到磁盘中
            Dom4jUtil.writeXML(file, doc);
    }
    /**
     * 根据id删除联系人
     * @param id 
     */
    public void deleteContact(String id) {
        //读取XML文件
        File file=new File("./src/contact.xml");
        Document doc=Dom4jUtil.getDocument(file);
        //Xpath技术,快速找出联系人
        Element conEle=(Element) doc.selectSingleNode("//contact[@id='"+id+"']");
        doc.getRootElement().remove(conEle);
        //将xml文件写入到磁盘中
        Dom4jUtil.writeXML(file, doc);
    }
    /**
     * 查询联系人
     * @return XML文件所有联系人的集合
     */
    public List<Contact> findAll() {
        //定义一个集合用于装所有的联系人信息
        List<Contact> conList=new ArrayList<Contact>();
        //读取XML文件
        File file=new File("./src/contact.xml");
        Document doc=Dom4jUtil.getDocument(file);
        //获得XML文件中联系人列表
        List<Element> list=doc.getRootElement().elements("contact");
        //遍历联系人列表
        for(Element conEle:list){
            Contact con=new Contact();
            con.setId(conEle.attributeValue("id"));
            con.setName(conEle.elementText("name"));
            con.setGender(conEle.elementText("gender"));
            con.setAge(conEle.elementText("age"));
            con.setPhone(conEle.elementText("phone"));
            con.setEmail(conEle.elementText("email"));
            con.setAddress(conEle.elementText("address"));
            //每封装一个联系人信息,就添加到集合中
            conList.add(con);
        }
        return conList;
    }
}

//将重复用到的程序抽取出来,单独建工具类

    public class Dom4jUtil {
    /**
     * 读取XML文件
     * @param f 要读取的XML文件
     * @return  Document 文件
     */
    public static Document getDocument(File f){
        try {
            Document doc=new SAXReader().read(f);
            return doc;
        } catch (DocumentException e) {
            //由于函数有返回值,需要进行处理,将其转换为运行时异常
            throw new RuntimeException();
        }
    }
    /**
     * 将修改好的文件写入到源文件中
     * @param f 要写入的文件
     * @param doc 写入的文档
     */
    public static void writeXML(File f,Document doc){
        try {

            OutputStream ops=new FileOutputStream(f);
            OutputFormat format=OutputFormat.createPrettyPrint();
            format.setEncoding("utf-8");
            XMLWriter writer = new XMLWriter(ops,format);
            writer.write(doc);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


/**
 * 定义一个联系人的类
 * 用于存储联系人全部信息,id 姓名 性别 年龄 电话 邮件 地址
 * @author Administrator
 *
 */

package hf.firstclass.dom4j;
    public class Contact {
        private String id;
        private String name;
        private String gender;
        private String age;
        private String phone;
        private String email;
        private String address;
        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 String getAge() {
            return age;
        }
        public void setAge(String 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 getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        @Override
        public String toString() {
            return "Contact [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + ", phone=" + phone
                    + ", email=" + email + ", address=" + address + "]";
        }
发布了48 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_36599216/article/details/53467361