Java中利用Xml和反射实现宠物的管理系统

一、宠物管理系统

1.代码

宠物管理系统主界面代码:

@Test//宠物管理系统
    public void admin() throws Exception {
    
    
        Scanner sc=new Scanner(System.in);
        System.out.println("请选择功能:1.领养宠物  2.捐献宠物");
        if(sc.nextInt()==1){
    
    //领养
            adoptPet();
        }else{
    
    //捐献
            donatePet();
        }

    }

捐献宠物功能代码:

 @Test//捐献功能
    public void donatePet() throws Exception {
    
    
        String animalType = getAnimalType();
        Scanner sc=new Scanner(System.in);
        System.out.println("请选择您要捐献的宠物类型:"+animalType+",或其它类型");
        String petType = sc.next();
        Document doc = getDoc();
        Element root = doc.getRootElement();
        Element animal;
        if(animalType.contains(petType)){
    
    //捐献已经有的宠物
            animal= root.element(petType);
        }else {
    
     //捐献新物种
             animal = root.addElement(petType);
        }
        System.out.println("请输入宠物的名字:");
        String name = sc.next();
        animal.addElement("name").setText(name);

        //写入xml并输出
        writeAndPrintXml(doc);
    }

领养宠物功能代码:

 @Test//领养功能----领养宠物种类动态化,并删除xml中对应的宠物标签
    public void adoptPet() throws Exception {
    
    
        //从xml中获取宠物的种类
        String animals=getAnimalType();
        Scanner sc=new Scanner(System.in);
        System.out.println("请选择您要领养的宠物类型:"+animals);
        String name = sc.next();
        //删除对应的宠物标签
        Document doc = getDoc();
        Element root = doc.getRootElement();
        // 查找根节点下的子节点 element() elements()
        Element animal = root.element(name);
        List <Element> name1 = animal.elements("name");
        String names="";
        for (int i = 0; i < name1.size(); i++) {
    
    
            names+=name1.get(i).getText();
            if(i < name1.size()-1){
    
    
                names+=",";
            }
        }
        System.out.println("请选择您要领养的宠物名称:"+names);
        String petName = sc.next();
        for (int i = 0; i < name1.size(); i++) {
    
    
            if(petName.equals(name1.get(i).getText()) ){
    
    
                //删除
                animal.remove(name1.get(i));
                break;
            }
        }
        //写入xml并输出
        writeAndPrintXml(doc);
    }

封装新的dom树覆盖原来dom树的方法代码:

//封装方法--新的dom覆盖原来的dom,并在控制台输出
    public void writeAndPrintXml(Document doc) throws Exception {
    
    
        //新的dom树覆盖旧的dom树
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/work/two/animal.xml"), OutputFormat.createPrettyPrint());
        xmlWriter.write(doc);
        xmlWriter.close();

        //dom树在控制台输出
        XMLWriter xmlWriter2 = new XMLWriter(System.out, OutputFormat.createPrettyPrint());
        xmlWriter2.write(doc);
        xmlWriter2.close();
    }

封装根节点的方法代码:

//封装一个获取根节点的方法
    public Element getRoot()throws Exception{
    
    
        // 1.创建解析器
        SAXReader reader = new SAXReader();
        // 解析xml文档,得到document对象
        Document document = reader.read("src/work/two/animal.xml");
        // 根据document对象获取根节点
        return document.getRootElement();
    }

封装并获取一个新的dom树代码:

//封装一个获取dom树
    public Document getDoc()throws Exception{
    
    
        // 1.创建解析器
        SAXReader reader = new SAXReader();
        // 解析xml文档,得到document对象
        return reader.read("src/work/two/animal.xml");

    }

从Xml文档中获取宠物的种类代码:

//从xml中获取宠物的种类,并返回一个字符串
    private String getAnimalType() throws DocumentException {
    
    
        // 1.创建解析器
        SAXReader reader = new SAXReader();
        // 解析xml文档,得到document对象
        Document document = reader.read("src/work/two/animal.xml");
        // 根据document对象获取根节点
        Element root = document.getRootElement();
        List<Element> animals = root.elements();
        String names="";
        for (int i = 0; i < animals.size(); i++) {
    
    
            names+=animals.get(i).getName();
            if(i<animals.size()-1)
                names+=",";
        }
        return names;
    }

原始版本的领养宠物代码:

@Test//原始版本
    public void test1() throws Exception {
    
    
        Scanner sc=new Scanner(System.in);
        System.out.println("请选择您要领养的宠物:狗狗,企鹅,大象");
        String name = sc.next();
        Animal animal = getAnimal(name);
        System.out.println(animal);
    }

根据宠物的类型返回对象代码:

//根据宠物类型名,返回一个对象
    public Animal getAnimal(String name) throws Exception {
    
    
        // 1.创建解析器
        SAXReader reader = new SAXReader();
        // 解析xml文档,得到document对象
        Document document = reader.read("src/work/two/animal.xml");
        // 根据document对象获取根节点
        Element root = document.getRootElement();
        // 查找根节点下的子节点 element() elements()
        Element animal = root.element(name);
        String className = animal.element("class").getText();
        //2.使用反射创建对象
        return (Animal) Class.forName(className).newInstance();
    }
}

在这里插入图片描述

在这里插入图片描述

总结

以上就是今天利用xml和反射实现宠物的管理系统的全部内容,主要是利用了xml的增加删除的功能。

猜你喜欢

转载自blog.csdn.net/StruggleBamboo/article/details/112031991
今日推荐