您的位置:首页 > 其它

XML---学生成绩管理系统 之 DOM解析 [方立勋视频讲解]

2014-12-16 16:59 381 查看
考生成绩管理系统

可以参考我的有道笔记: http://note.youdao.com/share/?id=711382e33ea8329db35bd4cc5a623b07&type=note
也可直接下载源码: http://download.csdn.net/detail/iknownu/8266553



0、先把思路定下,自下而上构思



0、分析xml 文档



1、daomain/bean/entity


================================

package cn.itcast.domain;

/**

* 2014-12-16 16:10:37

* Student属性 是XML文档的标签

* @author yungcs

*

*/

public class Student {

private String idcard; //属性1

private String examid; //属性2

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;

}







}

==================================

2、XmlUtils工具类
======================================

package cn.itcast.utils;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

//工具包挺长是静态方法

/**

*

* 2014-12-16 下午04:18:50

* @author yungcs

* Xml工具类

*/

public class XmlUtils {



private static String filename = "src/exam.xml";

/**

* 将xml转成document

* @return

* @throws Exception

*/

public static Document getDocument() throws Exception{



DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //接口要不是调用静态方法,要不就newinstance

DocumentBuilder builder = factory.newDocumentBuilder();



return builder.parse(filename);

}



//thinking in java spring

/**

* 将document转成xml

*/

public static void write2Xml(Document document) throws Exception{



TransformerFactory factory = TransformerFactory.newInstance();

Transformer tf = factory.newTransformer();



tf.transform(new DOMSource(document), new StreamResult(filename));

}



}

=========================================

3、StudentDao
============================

package cn.itcast.dao;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

import cn.itcast.domain.Student;

import cn.itcast.exception.StudentNotExitsException;

import cn.itcast.utils.XmlUtils;

/**

*

* 2014-12-16 下午04:22:31

* TODO 操作 对xml进行增删查

* @author yungcs

*/

public class StudentDao {



/**

* 增加学生 根据学生对象 [Student] 增加

*/

public void add(Student s){



try {

Document document = XmlUtils.getDocument();//将xml转成document



//创建出用于封装学生姓名、所在地和成绩的标签

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.write2Xml(document);//将document转成xml





} catch (Exception e) {



// System.out.println("=="+e);

//[!!!!!!注意!!!!!!!]

//将运行时异常转成编译时异常,并且在括号内传入异常参数

//这样是为了把异常的种类报告给上一级

throw new RuntimeException(e); //uncheck exception(运行时异常)

}





}



/**

* 查询学生 根据 [examid] 查询

*/

public Student find(String examid){

try {

Document document = XmlUtils.getDocument();

NodeList list = document.getElementsByTagName("student");

for(int i=0; i<list.getLength();i++){

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("location").item(0).getTextContent());

s.setGrade(Double.parseDouble(student_tag.getElementsByTagName("grade").item(0).getTextContent()));



return s;

}

}



} catch (Exception e) {

throw new RuntimeException(e); //uncheck exception(运行时异常)

}



return null;

}

/**

* 删除学生 根据姓名 [name] 删

*/

public void delete(String name) throws StudentNotExitsException{

try {

Document document = XmlUtils.getDocument();



NodeList list = document.getElementsByTagName("name");



for(int i=0; i<list.getLength(); i++){

if(list.item(i).getTextContent().equals(name)){

list.item(i).getParentNode().getParentNode().removeChild(list.item(i).getParentNode());



XmlUtils.write2Xml(document);

return;

}

}

throw new StudentNotExitsException(name+"不存在");

}catch (StudentNotExitsException e) {

throw e; //uncheck exception(运行时异常)

}

catch (Exception e) {

throw new RuntimeException(e); //uncheck exception(运行时异常)

}



}

}

======================================



4、自定义异常

===============================

package cn.itcast.exception;

/**

* 2014-12-16 16:11:24

* 异常统一在一个包类内存放

* @author yungcs

*

*/

public class StudentNotExitsException extends Exception {

public StudentNotExitsException() {

// TODO Auto-generated constructor stub

}

public StudentNotExitsException(String message) {

super(message);

// TODO Auto-generated constructor stub

}

public StudentNotExitsException(Throwable cause) {

super(cause);

// TODO Auto-generated constructor stub

}

public StudentNotExitsException(String message, Throwable cause) {

super(message, cause);

// TODO Auto-generated constructor stub

}

}

=========================

记得勾选倒数第二栏

5、测试类

=================================

package junit.test;

import org.junit.Test;

import cn.itcast.dao.StudentDao;

import cn.itcast.domain.Student;

import cn.itcast.exception.StudentNotExitsException;

/**

* 2014-12-16 16:12:42

* StudentDao 的一个测试类

* @author yungcs

*

*/

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");



// System.out.println("--"+dao.find("121").getGrade());

}



@Test

public void testDelete() throws StudentNotExitsException{

StudentDao dao = new StudentDao();

dao.delete("aa");

// dao.delete("eee");

// System.out.println("--"+dao.find("121").getGrade());

}

}

==================================

6、主UI程序

====================================

package cn.itcast.UI;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import cn.itcast.dao.StudentDao;

import cn.itcast.domain.Student;

import cn.itcast.exception.StudentNotExitsException;

/**

* XML---学生成绩管理系统 之 DOM解析

* 2014-12-16 下午04:29:12

* TODO UI界面设计

* @author yungcs

*/

public class Main {



/**

* @param args

* @throws IOException

*/

public static void main(String[] args) {



try {

System.out.println("添加学生(a) 删除学生(b) 查找学生(c)");

System.out.print("请输入操作类型:");



//读取键盘输入的文字

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String type = br.readLine();



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



System.out.print("请输入学生的姓名:");

String name = br.readLine();



System.out.print("请输入学号:");

String examid = br.readLine();



System.out.print("请输入***号:");

String idcard = br.readLine();



System.out.print("请输入学生所在地:");

String location = br.readLine();



System.out.print("请输入学生成绩:");

String grade = br.readLine();



Student s = new Student();



s.setExamid(examid);

s.setGrade(Double.parseDouble(grade));

s.setIdcard(idcard);

s.setLocation(location);

s.setName(name);



StudentDao dao = new StudentDao();

dao.add(s);

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



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



System.out.print("请输入要删除的学生:");

String name = br.readLine();



try {

StudentDao dao = new StudentDao();

dao.delete(name);

System.out.println("删除成功!!!");

} catch (StudentNotExitsException e) {

System.out.println("您要删除的用户不存在!!!");

}





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

//自己写了

}else{

System.out.println("不支持您的操作!!");

}



} catch (IOException e) {

e.printStackTrace(); //

System.out.println("对不起,出错了!");

}





}

}

===========================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: