ペット管理システム
1.ペット管理システム
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とリフレクションの使用の全内容です。