zoukankan      html  css  js  c++  java
  • 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>101440122@qq.com</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 + "]";
            }
    
    很多事情即将开始,很多人的命运即将改变
  • 相关阅读:
    Vue异步数据交互 promise axios async fetch
    JS数组或对象转为JSON字符换 JavaScript JSON.stringify()
    JS返回数组的最大值与最小值
    Error: Cannot find module './application'
    Express框架
    NodeJS项目制作流程
    模板引擎art-template
    基于NodeJS的网络响应原理与HTTP协议
    leetcode 953. 验证外星语词典 做题笔记
    leetcode 771. 宝石与石头 做题笔记
  • 原文地址:https://www.cnblogs.com/liuzk/p/12458950.html
Copyright © 2011-2022 走看看