1、以如下格式的exam.xml文件为例
exam.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<exam>
<student examid="222" idcard="111">
<name>张三</name>
<location>沈阳</location>
<grade>89.00</grade>
</student>
<student examid="444" idcard="333">
<name>李四</name>
<location>大连</location>
<grade>97.00</grade>
</student>
</exam>
2、编程实现如下功能
3、实现学生信息的添加
4、实现学生信息的查询
5、实现学生的删除功能
添加数据:
查询数据:
开发顺序:先写javabean,再写Dao用到的工具类、Dao ,最后写界面层Main。
不同模块的程序,要放在不同的包里:
- 实体javabean:放在domain包。
- Dao:放在dao包。dao操作xml文档必定会有重复代码:得到document、更新xml文档。将他们抽取到工具类XmlUtils里。
- 工具类XmlUtils:放在utils工具包中。
- 界面Main:放在main包。
Student.java
package cn.mengmei.domain;
public class Student {
private String idcard;
private String examid;
private String name;
private String location;
private Double grade;
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
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;
}
public Double getGrade() {
return grade;
}
public void setGrade(Double grade) {
this.grade = grade;
}
}
XMLUtils.java
package cn.mengmei.utils;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class XMLUtils {
public static Document document() throws SAXException, IOException, ParserConfigurationException {
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("src/exam.xml");
return document;
}
public static void updateXML(Document document) throws TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError {
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document), new StreamResult("src/exam.xml"));
}
}
StudentDao.java
package cn.mengmei.dao;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import cn.mengmei.domain.Student;
import cn.mengmei.utils.XMLUtils;
public class StudentDao {
public void add(Student student) {
try {
Document document = XMLUtils.document();
Element stuNode = document.createElement("student");
stuNode.setAttribute("idcard", student.getIdcard());
stuNode.setAttribute("examid", student.getExamid());
Element nameNode = document.createElement("name");
nameNode.setTextContent(student.getName());
Element locNode = document.createElement("location");
locNode.setTextContent(student.getLocation());
Element graNode = document.createElement("grade");
graNode.setTextContent(student.getGrade()+"");
stuNode.appendChild(nameNode);
stuNode.appendChild(locNode);
stuNode.appendChild(graNode);
document.getDocumentElement().appendChild(stuNode);
XMLUtils.updateXML(document);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void delete(String name){
try {
Document document = XMLUtils.document();
NodeList nameList = document.getElementsByTagName("name");
for(int i=0;i<nameList.getLength();i++){
Node nameNode = nameList.item(i);
if(nameNode.getTextContent().equals(name)){
Node stuNode = nameNode.getParentNode();
stuNode.getParentNode().removeChild(stuNode);
XMLUtils.updateXML(document);
return;
}
}
throw new RuntimeException("-------对不起,你要删除的学生信息不存在!------"); //异常也是一种返回值。
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public Student find(String examid){
Document document = null;
try {
document = XMLUtils.document();
NodeList stuList = document.getElementsByTagName("student");
Student student = null;
for(int i=0;i<stuList.getLength();i++){
Element stuNode = (Element)stuList.item(i);
if(Integer.parseInt(stuNode.getAttribute("examid")) == Integer.parseInt(examid)){
student = new Student();
student.setName(stuNode.getElementsByTagName("name").item(0).getTextContent());
student.setIdcard(stuNode.getAttribute("idcard"));
student.setExamid(stuNode.getAttribute("examid"));
student.setLocation(stuNode.getElementsByTagName("location").item(0).getTextContent());
student.setGrade(Double.parseDouble(stuNode.getElementsByTagName("grade").item(0).getTextContent()));
}
}
return student;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Main.java
package cn.mengmei.main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import cn.mengmei.dao.StudentDao;
import cn.mengmei.domain.Student;
public class Main {
public static void main(String[] args) {
System.out.println("添加用户:(a) 删除用户:(b) 查询成绩:(c)");
System.out.print("请输入操作类型:");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String item = null;
try {
item = reader.readLine();
} catch (IOException e1) {
System.out.println("--------对不起,读取类型失败!--------");
}
String name = null;
String idcard = null;
String examid = null;
String location = null;
String grade = null;
Student student = null;
StudentDao dao = null;
switch (item) {
case "a":
try {
System.out.print("请输入学生姓名:");
name = reader.readLine();
System.out.print("请输入学生身份证号:");
idcard = reader.readLine();
System.out.print("请输入学生准考证号:");
examid = reader.readLine();
System.out.print("请输入学生所在地:");
location = reader.readLine();
System.out.print("请输入学生成绩:");
grade = reader.readLine();
student = new Student();
student.setName(name);
student.setIdcard(idcard);
student.setExamid(examid);
student.setLocation(location);
student.setGrade(Double.parseDouble(grade));
dao = new StudentDao();
dao.add(student);
System.out.println("-----------添加数据成功-----------");
} catch (Exception e) {
System.out.println("-----------对不起,添加数据失败!-----------");
}
break;
case "b":
try {
System.out.print("请输入要删除的学生姓名:");
name = reader.readLine();
dao = new StudentDao();
dao.delete(name);
System.out.println("------对已成功删除学生信息------");
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case "c":
try {
System.out.print("请输入要查询的学生准考证号:");
examid = reader.readLine();
dao = new StudentDao();
student = dao.find(examid);
if(student!=null){
System.out.println("姓名:"+student.getName());
System.out.println("身份证号:"+student.getIdcard());
System.out.println("准考证号:"+student.getExamid());
System.out.println("所在地:"+student.getLocation());
System.out.println("成绩:"+student.getGrade());
}else{
System.out.println("--------对不起,没有查询到此学生!-------");
}
} catch (Exception e) {
System.out.println("------对不起,查询失败!------");
}
break;
default:
System.out.println("-------非法类型-------");
break;
}
}
}