xml基础知识(4)

实例:通过xml完成简单的学生成绩管理


需求:功能一览:
添加用户(a) 删除用户(b) 查询用户(c)
请输入操作类型:


添加功能模块:
添加用户(a) 删除用户(b) 查询用户(c)
请输入操作类型:
请输入学生姓名:
请输入学生准考证号:
请输入学生身份证号:
请输入学生所在地:
请输入学生成绩:
---------------添加数据成功-----------------------------------


查询功能模块:
添加用户(a) 删除用户(b) 查询用户(c)
请输入操作类型:
请输入学生准考证号:
您查询的学生信息为:
---------------查询数据成功-----------------------------------


删除功能模块:
添加用户(a) 删除用户(b) 查询用户(c)
请输入操作类型:
请输入删除的学生姓名:
---------------已成功删除-----------------------------------





具体代码:


考试xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<exam>
<student examid="222" idcast="111">
<name>张三</name>
<location>北京</location>
<grade>89</grade>
</student>


<student examid="444" idcast="333">
<name>李四</name>
<location>上海</location>
<grade>91</grade>
</student>
</exam>


工具包:(用于解析文件,以及将修改的文件写入xml)
package utils;


import java.io.FileOutputStream;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;


import org.w3c.dom.Document;


public class XmlUtils {


//xml路径  
public static String fileName = "src/exam.xml";

/**
* 解析xml文件
* @return
* @throws Exception
*/
public static Document getDocument() throws Exception{

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(fileName);
}

/**
* 将修改的文件写入xml中
* @param document
* @throws Exception
*/
public static void write2xml(Document document) throws Exception{
 
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream(fileName)));
}
}


model包:
package model;


public class StudentModel {


private String idcast;
private String examid;
private String name;
private String location;
private double grade;

public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
public String getIdcast() {
return idcast;
}
public void setIdcast(String idcast) {
this.idcast = idcast;
}
public String getExamid() {
return examid;
}
public void setExamid(String examid) {
this.examid = examid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}




}


dao包:
package dao;


import org.w3c.dom.Document;


import org.w3c.dom.Element;
import org.w3c.dom.NodeList;


import exception.StudentNotExistException;


import utils.XmlUtils;
import model.StudentModel;


public class StudentDao {


public void addData(StudentModel s) {

try {
//解析文件
Document document = XmlUtils.getDocument();

//创建student元素
Element studentData = document.createElement("student");
studentData.setAttribute("idcast", s.getIdcast());
studentData.setAttribute("examid", s.getExamid());

//创建student的子元素
Element studentName = document.createElement("name");
Element studentLocation = document.createElement("location");
Element studentGrade = document.createElement("grade");

//给子元素添加内容
studentName.setTextContent(s.getName());
studentLocation.setTextContent(s.getLocation());
studentGrade.setTextContent(s.getGrade()+"");

//将子元素放到student下面
studentData.appendChild(studentName);
studentData.appendChild(studentLocation);
studentData.appendChild(studentGrade);

//将student元素放进exam中
document.getElementsByTagName("exam").item(0).appendChild(studentData);

//更改xml文件
XmlUtils.write2xml(document);
} catch (Exception e) {
throw new RuntimeException(e);
}



}

public StudentModel selectData(String examid) {

try {
//解析xml文件
Document document = XmlUtils.getDocument();

//获取所有的学生信息
NodeList list = document.getElementsByTagName("student");

for(int i=0;i<list.getLength();i++){
Element studentData = (Element)list.item(i);
//挑选出准开征号相同的ID的学生,输出
if(studentData.getAttribute("examid").equals(examid)){
StudentModel student = new StudentModel();
student.setIdcast(studentData.getAttribute("idcast"));
student.setExamid(examid);
student.setName(studentData.getElementsByTagName("name").item(0).getTextContent());
student.setLocation(studentData.getElementsByTagName("location").item(0).getTextContent());
student.setGrade(Double.parseDouble(studentData.getElementsByTagName("grade").item(0).getTextContent()));
return student;
}
}
return null;
} catch (Exception e) {
throw new RuntimeException(e); 
}


}

public void deleteData(String name) throws StudentNotExistException {

try {
//解析xml文件
Document document = XmlUtils.getDocument();

//挑选出姓名是指定姓名的学生,删除
NodeList list = document.getElementsByTagName("name");
for(int i=0;i<list.getLength();i++){
Element studentName = (Element)list.item(i);
//删除操作
if(studentName.getTextContent().equals(name)){
studentName.getParentNode().getParentNode().removeChild(studentName.getParentNode());
//更改xml文件
XmlUtils.write2xml(document);
return;
}
}
throw new StudentNotExistException(name + "不存在");
}catch (StudentNotExistException e) {
throw e ; 
}
catch (Exception e) {
throw new RuntimeException(e); 
}

}

}


exception包:(删除时加入输入错误数据需要抛出异常)
package exception;


public class StudentNotExistException extends Exception {


public StudentNotExistException() {
// TODO Auto-generated constructor stub
}


public StudentNotExistException(String message) {
super(message);
// TODO Auto-generated constructor stub
}


public StudentNotExistException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}


public StudentNotExistException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}


}


用于界面交互的UI包:
package UI;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


import model.StudentModel;


import dao.StudentDao;
import exception.StudentNotExistException;


public class Main {


/**
* @param args
*/
public static void main(String[] args) throws IOException {
try {

System.out.println("添加学生(a)    删除学生(b)    查找学生(c)");
System.out.println("请输入操作类型:");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String type = br.readLine();

if("a".equals(type)){

System.out.println("请输入学生姓名:");
String name = br.readLine();

System.out.println("请输入学生准考证号:");
String examid = br.readLine();

System.out.println("请输入学生身份证号:");
String idcast = br.readLine();

System.out.println("请输入学生所在地:");
String location = br.readLine();

System.out.println("请输入学生成绩:");
String grade = br.readLine();

StudentModel s = new StudentModel();
s.setIdcast(idcast);
s.setExamid(examid);
s.setName(name);
s.setLocation(location);
s.setGrade(Double.parseDouble(grade));

StudentDao dao = new StudentDao();
dao.addData(s);

System.out.println("添加成功");

}else if ("b".equals(type)) {

System.out.println("请输入要删除的学生姓名:");
String name = br.readLine();

try {
StudentDao dao = new StudentDao();
dao.deleteData(name);
System.out.println("删除成功");
} catch (StudentNotExistException e) {
System.out.println("您要删除的用户不存在");
}

}else if ("c".equals(type)) {

System.out.println("请输入要查找的学生准考证号:");
String idcast = br.readLine();

StudentDao dao = new StudentDao();
dao.selectData(idcast);
System.out.println("查找成功");


}else {
System.out.println("不支持您的操作");
}

} catch (Exception e) {
e.printStackTrace();
System.out.println("对不起,出错了");
}


}


}


测试用的test包:
package test;


import model.StudentModel;


import org.junit.Test;
import dao.StudentDao;
public class xmlTest {


@Test
public void testAdd() throws Exception{
StudentDao dao = new StudentDao();
StudentModel student = new StudentModel();
student.setIdcast("993");
student.setExamid("999");
student.setName("aaa");
student.setLocation("天津");
student.setGrade(21);
dao.addData(student);
}

@Test
public void testSelectData(){
StudentDao dao = new StudentDao();
dao.selectData("222");
}

@Test
public void testDeleteData() throws Exception{
StudentDao dao = new StudentDao();
dao.deleteData("aserfwer");
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值