1、以如下格式的exam.xml文件为例
<?xmlversion="1.0"encoding="UTF-8"standalone="no"?>
<exam>
studentidcard="111"examid="222">
name>张三</location>沈阳grade>89student>
"333""444">李四>大连>97>
>
2、编程实现如下功能
3、实现学生信息的添加
4、实现学生信息的查询
之所以能把XML当做是数据库,是因为XML可以体现数据之间的关系,可以完成整个数据库单独模块内容的操作!利用三层架构,将程序的功能拆分,某部分代码负责某部分的功能实现!
将整个程序进行拆分:可以分为:Utils工具类UI界面设计DAO具体操作:增删改查数据库XML文档!(可以试试txt文本当做数据库,要想办法构建数据之间的联系,方便于整体操作!)备注:在实际的代码实现阶段,还会需要一个测试类,方便于在整个程序还没有完成的时候对程序的部分功能进行测试,做一步,测试一步,以免整个程序完成后由于页面太多或者是代码量太大给查找错误造成更大的负担!所以这里会多一个测试类!
XmlUtils类:工具类:得到Document对象和更新文档这些工具性质的操作!
package@H_403_442@com.itheima.utils;
import@H_403_442@javax.xml.parsers.DocumentBuilder;
import@H_403_442@javax.xml.parsers.DocumentBuilderFactory;
import@H_403_442@javax.xml.transform.Transformer;
import@H_403_442@javax.xml.transform.TransformerFactory;
import@H_403_442@javax.xml.transform.dom.DOMSource;
import@H_403_442@javax.xml.transform.stream.StreamResult;
import@H_403_442@org.w3c.dom.Document;
/**
*工具类:
*得到document对象
*更新XML文档
*/
public@H_403_442@class@H_403_442@XmlUtils{
@H_403_442@ static@H_403_442@DocumentgetDocument()throws@H_403_442@Exception{
@H_403_442@ @H_403_442@ //获得Document对象
@H_403_442@ @H_403_442@ @H_403_442@DocumentBuilderdb=DocumentBuilderFactory.@H_403_442@newInstance@H_403_442@().newDocumentBuilder();
@H_403_442@ @H_403_442@ @H_403_442@Documentdocument=db.parse("src/exam.xml"@H_403_442@);
@H_403_442@ @H_403_442@ return@H_403_442@document;
@H_403_442@
@H_403_442@ @H_403_442@ //更新XML文档
@H_403_442@ static@H_403_442@void@H_403_442@write2xml(Documentdocument)throws@H_403_442@Exception{
@H_403_442@ @H_403_442@ @H_403_442@Transformerts=TransformerFactory.@H_403_442@newInstance@H_403_442@().newTransformer();
@H_403_442@ @H_403_442@ @H_403_442@ts.transform(new@H_403_442@DOMSource(document),new@H_403_442@StreamResult("src/exam.xml"@H_403_442@));
@H_403_442@}
@H_403_442@
Student对象类:对象数据的存储或传递
package@H_403_442@com.itheima.domain;
//代表学生的JavaBean
class@H_403_442@Student{
@H_403_442@ private@H_403_442@Stringidcard@H_403_442@;//身份证号
@H_403_442@ examid@H_403_442@;//准考证号
@H_403_442@ location@H_403_442@;
@H_403_442@ private@H_403_442@float@H_403_442@grade@H_403_442@;
@H_403_442@ public@H_403_442@StringgetIdcard(){
@H_403_442@ @H_403_442@ return@H_403_442@idcard@H_403_442@;
@H_403_442@ void@H_403_442@setIdcard(Stringidcard){
@H_403_442@ @H_403_442@ this@H_403_442@.idcard@H_403_442@=idcard;
@H_403_442@ public@H_403_442@StringgetExamid(){
@H_403_442@ @H_403_442@ examid@H_403_442@;
@H_403_442@ void@H_403_442@setExamid(Stringexamid){
@H_403_442@ @H_403_442@ examid@H_403_442@=examid;
@H_403_442@ public@H_403_442@StringgetName(){
@H_403_442@ @H_403_442@ name@H_403_442@;
@H_403_442@ void@H_403_442@setName(Stringname){
@H_403_442@ @H_403_442@ name@H_403_442@=name;
@H_403_442@ public@H_403_442@StringgetLocation(){
@H_403_442@ @H_403_442@ location@H_403_442@;
@H_403_442@ void@H_403_442@setLocation(Stringlocation){
@H_403_442@ @H_403_442@ location@H_403_442@=location;
@H_403_442@ float@H_403_442@getGrade(){
@H_403_442@ @H_403_442@ grade@H_403_442@;
@H_403_442@ void@H_403_442@setGrade(float@H_403_442@grade){
@H_403_442@ @H_403_442@ grade@H_403_442@=grade;
@H_403_442@ @Override
@H_403_442@ public@H_403_442@StringtoString(){
@H_403_442@ @H_403_442@ return@H_403_442@"姓名:"@H_403_442@+name@H_403_442@+"\t身份证号:"@H_403_442@+idcard@H_403_442@+"\t准考证号:"@H_403_442@+examid@H_403_442@+"\t地址:"@H_403_442@+location@H_403_442@+"\t成绩:"@H_403_442@+grade@H_403_442@;
@H_403_442@}
StudentDao对象类:最核心的部分,增删改查的功能实现部分!
package@H_403_442@com.itheima.dao;
import@H_403_442@org.w3c.dom.Document;
import@H_403_442@org.w3c.dom.Element;
import@H_403_442@org.w3c.dom.Node;
import@H_403_442@org.w3c.dom.NodeList;
import@H_403_442@com.itheima.domain.Student;
import@H_403_442@com.itheima.utils.XmlUtils;
class@H_403_442@StudentDao{
@H_403_442@ boolean@H_403_442@addStudent(Studentstudent){
@H_403_442@ @H_403_442@ boolean@H_403_442@result=true@H_403_442@;
@H_403_442@ @H_403_442@ try@H_403_442@{
@H_403_442@ @H_403_442@ @H_403_442@ //1、得到document对象
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Documentdocument=XmlUtils.@H_403_442@getDocument@H_403_442@();
@H_403_442@ @H_403_442@ @H_403_442@ //2、创建学生节点,并设置其属性<studentexamid="222"idcard="111">
@H_403_442@ @H_403_442@ @H_403_442@ElementstudentE=document.createElement("student"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@studentE.setAttribute("idcard"@H_403_442@,student.getIdcard());
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@studentE.setAttribute("examid"@H_403_442@,student.getExamid());
@H_403_442@ @H_403_442@ @H_403_442@ //3、创建name节点,并设置其主题内容<name>张三丰</name>
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ElementnameE=document.createElement("name"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@nameE.setTextContent(student.getName());
@H_403_442@ @H_403_442@ @H_403_442@ //4、创建location节点,并设置其主题内容<location>郑州</location>
@H_403_442@ @H_403_442@ElementloactionE=document.createElement("location"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@loactionE.setTextContent(student.getLocation());
@H_403_442@ @H_403_442@ @H_403_442@ //5、创建grade节点,并设置其主题内容<grade>100</grade>
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ElementgradeE=document.createElement("grade"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@gradeE.setTextContent(student.getGrade()+""@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ //6、建立他们之间的关系
@H_403_442@ @H_403_442@ @H_403_442@ /**
*<exam>
<studentexamid="222"idcard="111">
<name>张三</name><location>沈阳</location><grade>89</grade></student>*/
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@studentE.appendChild(nameE);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@studentE.appendChild(loactionE);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@studentE.appendChild(gradeE);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@document.getElementsByTagName("exam"@H_403_442@).item(0).appendChild(studentE);
@H_403_442@ @H_403_442@ @H_403_442@ //7、更新XML文档
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@XmlUtils.@H_403_442@write2xml@H_403_442@(document);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@result=true@H_403_442@;
@H_403_442@ @H_403_442@ @H_403_442@}catch@H_403_442@(Exceptione){
@H_403_442@ @H_403_442@ @H_403_442@ throw@H_403_442@new@H_403_442@RuntimeException(e);
@H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ return@H_403_442@result;
@H_403_442@
@H_403_442@ boolean@H_403_442@removeStudent(Stringname){
@H_403_442@ @H_403_442@ false@H_403_442@;
@H_403_442@ @H_403_442@ try@H_403_442@{
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Documentdocument=XmlUtils.@H_403_442@getDocument@H_403_442@();
@H_403_442@ @H_403_442@ @H_403_442@ //1、得到name节点
@H_403_442@ @H_403_442@NodeListlist=document.getElementsByTagName("name"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ //2、循环遍历所有的name节点,比对主体内容与参数是否匹配
@H_403_442@ @H_403_442@ @H_403_442@ for@H_403_442@(int@H_403_442@i=0;i<list.getLength();i++){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Nodenode=list.item(i);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ if@H_403_442@(node.getTextContent().equals(name.trim())){
@H_403_442@ @H_403_442@ //3、是的话得到爷爷删除爸爸,因为这里是根据姓名进行查找的!@H_403_442@ @H_403_442@ @H_403_442@
@H_403_442@ node.getParentNode().getParentNode().removeChild(node.getParentNode());
@H_403_442@ @H_403_442@ @H_403_442@ //4、更新XML文档,返回true
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@XmlUtils.@H_403_442@write2xml@H_403_442@(document);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@result=true@H_403_442@;
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ @H_403_442@}return@H_403_442@result;
@H_403_442@ public@H_403_442@StudentqueryStudent(Stringexamid){
@H_403_442@ @H_403_442@ @H_403_442@Studentstudent=null@H_403_442@;
@H_403_442@ @H_403_442@ //1、得到name节点
@H_403_442@NodeListlist=document.getElementsByTagName("student"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ int@H_403_442@i=0;i<list.getLength();i++){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Nodenode=list.item(i);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Elemente=(Element)node;
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ if@H_403_442@(e.getAttribute("examid"@H_403_442@).equals(examid.trim())){//忽略前端和尾部的空白!
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ //3、匹配的话,创建student对象
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student=new@H_403_442@Student();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ //4、获取数据并封装到Student对象中
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setExamid(examid);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setIdcard(e.getAttribute("idcard"@H_403_442@));//得到节点的属性或者内容,赋给student对象
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setName(e.getElementsByTagName("name"@H_403_442@).item(0).getTextContent());
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setLocation(e.getElementsByTagName("location"@H_403_442@).item(0).getTextContent());
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setGrade(Float.@H_403_442@parseFloat@H_403_442@(e.getElementsByTagName("grade"@H_403_442@).item(0).getTextContent()));
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@}catch@H_403_442@(Exceptione){
@H_403_442@ @H_403_442@ new@H_403_442@RuntimeException(e);
@H_403_442@ @H_403_442@ return@H_403_442@student;//返回student对象,覆写它的toString方法
@H_403_442@}
StudentDaoTest:写程序过程中的测试类(此处并没有用到Junit)!
package@H_403_442@com.itheima.test;
import@H_403_442@com.itheima.dao.StudentDao;
class@H_403_442@StudentDaoTest{
@H_403_442@ void@H_403_442@main(String[]args){
@H_403_442@ @H_403_442@ /*Students=newStudent();
s.setExamid("123");
s.setGrade(100f);
s.setIdcard("124");
s.setLocation("北京");
s.setName("章泽天");*/
@H_403_442@ @H_403_442@ @H_403_442@StudentDaosd=new@H_403_442@StudentDao();
@H_403_442@ @H_403_442@ //sd.addStudent(s);
@H_403_442@ @H_403_442@ //Students=sd.queryStudent("444");
@H_403_442@ @H_403_442@ //System.out.println(s);
@H_403_442@ @H_403_442@ //sd.removeStudent("章泽天");
@H_403_442@ @H_403_442@ @H_403_442@System.out@H_403_442@.println(sd.queryStudent("222"@H_403_442@));
@H_403_442@}
Main:主页UI类(虽然这里界面仍然是控制台)
package@H_403_442@com.itheima.ui;
import@H_403_442@java.io.BufferedReader;
import@H_403_442@java.io.InputStreamReader;
import@H_403_442@com.itheima.dao.StudentDao;
import@H_403_442@com.itheima.domain.Student;
class@H_403_442@Main{
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System.out@H_403_442@.println("a、添加学生\tb、删除学生\tc、查询学生"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入操作类型:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ //2、接收用户的输入
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ try@H_403_442@{
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@StudentDaodao=new@H_403_442@StudentDao();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@BufferedReaderbr=new@H_403_442@BufferedReader(new@H_403_442@InputStreamReader(System.in@H_403_442@));
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringoperation=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ //3、对用户输入的内容进行判断
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ if@H_403_442@("a"@H_403_442@.equals(operation)){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ //添加操作
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入学生姓名:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringname=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入学生准考证号:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringexamid=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入学生身份证号:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringidcard=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入学生地址:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringlocation=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入学生成绩:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringgrade=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Studentstudent=new@H_403_442@Student();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setExamid(examid);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setGrade(Float.@H_403_442@parseFloat@H_403_442@(grade));
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setIdcard(idcard);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setLocation(location);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@student.setName(name);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ boolean@H_403_442@result=dao.addStudent(student);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ if@H_403_442@(result){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."---添加成功---"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}else@H_403_442@{
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."---添加失败---"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}else@H_403_442@"b"@H_403_442@.equals(operation)){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ //删除
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入要删除的学生姓名:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringname=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ boolean@H_403_442@result=dao.removeStudent(name);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ "---删除成功---"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}"---删除失败或者学生不存在---"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}"c"@H_403_442@.equals(operation)){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ //查询
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."请输入准考证号:"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Stringexamid=br.readLine();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@Students=dao.queryStudent(examid);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ if@H_403_442@(s==null@H_403_442@){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."学生不存在"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}out@H_403_442@.println(s);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}else@H_403_442@{
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."你火星来的"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}catch@H_403_442@(Exceptione){
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@e.printStackTrace();
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@System."程序忙,请重新启动"@H_403_442@);
@H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@ @H_403_442@}
@H_403_442@}
这个程序最重要的还是XML节点操作的应用,顺带的加上了简单的三层构架!工具类,业务实现(实际操作)类,UI类!