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

来源:互联网 发布:手机淘宝链接怎么复制 编辑:程序博客网 时间:2024/05/22 08:20
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 + "]";        }
0 0
原创粉丝点击