package dao
import org.w 3c.dom .Document
import org.w 3c.dom .Element
import org.w 3c.dom .NodeList
import utils.XmlUtils
import domain.Student
import exception.StudentNotExistException
public class StudentDao {
public void add (Student s){
try {
Document document = XmlUtils.getDocument ()
//创建封装学生信息的标签
Element student_tag = document.createElement ("student" )
student_tag.setAttribute ("idcard" , s.getIdcard ())
student_tag.setAttribute ("examid" , s.getExamid ())
//创建用于封装学生姓名所在地和成绩的标签
Element name = document.createElement ("name" )
Element location = document.createElement ("location" )
Element grade = document.createElement ("grade" )
name.setTextContent (s.getName ())
location.setTextContent (s.getLocation ())
grade.setTextContent (s.getGrade ()+"" )
student_tag.appendChild (name)
student_tag.appendChild (location)
student_tag.appendChild (grade)
//封装挂到文档上
document.getElementsByTagName ("exam" ).item (0 ).appendChild (student_tag)
//更新内存
XmlUtils.write 2Xml(document)
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e)
}
}
public Student find(String examid){
try {
Document document = XmlUtils.getDocument ()
NodeList list = document.getElementsByTagName ("student" )
for(int i=0
Element student_tag = (Element) list.item (i)
if(student_tag.getAttribute ("examid" ).equals (examid)){
//找到了匹配的学生
Student s = new Student()
s.setExamid (examid)
s.setIdcard (student_tag.getAttribute ("idcard" ))
s.setName (student_tag.getElementsByTagName ("name" ).item (0 ).getTextContent ())
s.setLocation (student_tag.getElementsByTagName ("grade" ).item (0 ).getTextContent ())
s.setGrade (Double.parseDouble (student_tag.getElementsByTagName ("grade" ).item (0 ).getTextContent ()))
return s
}
}
return null
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e)
}
}
public void delete(String name) throws StudentNotExistException{
try {
Document document = XmlUtils.getDocument ()
NodeList list = document.getElementsByTagName ("name" )
for(int i = 0
if(list.item (i).getTextContent ().equals (name)){
list.item (i).getParentNode ().getParentNode ().removeChild (list.item (i).getParentNode ())
XmlUtils.write 2Xml(document)
return
}
}
throw new StudentNotExistException(name+"is not exist!" )
}catch(StudentNotExistException e){
throw e
}
catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e)
}
}
}
package 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;
}
}
package exception;
public class StudentNotExistException extends Exception {
public StudentNotExistException () {
}
public StudentNotExistException (String message) {
super (message);
}
public StudentNotExistException (Throwable cause) {
super (cause);
}
public StudentNotExistException (String message, Throwable cause) {
super (message, cause);
}
public StudentNotExistException (String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super (message, cause, enableSuppression, writableStackTrace);
}
}
package test;
import org.junit.Test;
import dao.StudentDao;
import domain.Student;
import exception.StudentNotExistException;
public class StudentDaoTest {
@Test
public void testAdd (){
StudentDao dao = new StudentDao();
Student s = new Student();
s.setExamid("121" );
s.setGrade(89 );
s.setIdcard("121" );
s.setLocation("北京" );
s.setName("aa" );
dao.add(s);
}
@Test
public void testFind (){
StudentDao dao = new StudentDao();
dao.find("121" );
}
@Test
public void testDelelte () throws StudentNotExistException{
StudentDao dao = new StudentDao();
dao.delete("aa" );
}
}
package ui
import java.io .BufferedReader
import java.io .IOException
import java.io .InputStreamReader
import dao.StudentDao
import domain.Student
import exception.StudentNotExistException
public class Main {
public static void main(String[] args) {
System.out .println ("添加用户(a) 删除用户(b) 查找学生" )
System.out .print ("请输入操作类型:" )
BufferedReader br = new BufferedReader(new InputStreamReader(System.in ))
try {
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 idcard = br.readLine ()
System.out .println ("请输出所在地" )
String location = br.readLine ()
System.out .println ("请输出成绩" )
String grade = br.readLine ()
Student s = new Student()
s.setName (name)
s.setIdcard (idcard)
s.setExamid (examid)
s.setLocation (location)
s.setGrade (Double.parseDouble (grade))
StudentDao dao = new StudentDao()
dao.add (s)
}else if("b" .equals (type)){
System.out .println ("请输入删除学生" )
String name = br.readLine ()
StudentDao dao = new StudentDao()
try {
dao.delete (name)
System.out .println ("删除成功" )
} catch (StudentNotExistException e) {
// TODO Auto-generated catch block
System.out .println ("删除的用户不存在" )
}
}else if("c" .equals (type)){
}else{
System.out .println ("不支持的操作" )
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace ()
System.out .println ("输入出错" )
}
}
}
package utils
import java.io .FileNotFoundException
import java.io .FileOutputStream
import java.io .IOException
import javax.xml .parsers .DocumentBuilder
import javax.xml .parsers .DocumentBuilderFactory
import javax.xml .parsers .ParserConfigurationException
import javax.xml .transform .Transformer
import javax.xml .transform .TransformerConfigurationException
import javax.xml .transform .TransformerException
import javax.xml .transform .TransformerFactory
import javax.xml .transform .dom .DOMSource
import javax.xml .transform .stream .StreamResult
import org.w 3c.dom .Document
import org.xml .sax .SAXException
import com .sun .xml .internal .bind .unmarshaller .DOMScanner
public class XmlUtils {
private static String filename = "src/exam.xml"
public static Document getDocument() throws ParserConfigurationException, SAXException, IOException{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ()
DocumentBuilder builder = factory.newDocumentBuilder ()
return builder.parse (filename)
}
public static void write2Xml(Document docum) throws FileNotFoundException, TransformerException{
TransformerFactory factory = TransformerFactory.newInstance ()
Transformer tf = factory.newTransformer ()
tf.transform (new DOMSource(docum), new StreamResult(new FileOutputStream(filename)))
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <exam >
<student examid ="222" idcard ="111" >
<name > 张三</name >
<location > 沈阳</location >
<grade > 89</grade >
</student >
<student examid ="444" idcard ="333" >
<name > 李四</name >
<location > 大连</location >
<grade > 97</grade >
</student >
</exam >