实现简单的学生管理系统

使用xml当做数据,存储学生信息

** 创建一个xml文件,写一些学生信息

** 增加操作
1、创建解析器
2、得到document

3、获取到根节点
4、在根节点上面创建stu标签
5、在stu标签上面依次添加id name age
  ** addElement方法添加
6、在id name age上面依次添加值
  ** setText方法
7、回写xml

** 删除操作(根据id删除)
1、创建解析器
2、得到document
3、获取到所有的id
使用xpath //id 返回 list集合
4、遍历list集合
5、判断集合里面的id和传递的id是否相同
6、如果相同,把id所在的stu删除

** 查询操作(根据id查询)
1、创建解析器
2、得到document
3、获取到所有的id
4、返回的是list集合,遍历list集合
5、得到每一个id的节点
6、id节点的值
7、判断id的值和传递的id值是否相同
8、如果相同,先获取到id的父节点stu
9、通过stu获取到name age值

  ** 把这些值封装到一个对象里面 返回对象

stuService:主要类,用于操作学生基本信息类[添加、删除、查询]
Student:封装了学生基本信息
testStu:主函数,测试类
StudentUtils:封装的工具类[dom4j解析器,回写xml文件方法]
student.xml:数据的交换
导入:dom4j和XPath架包

整体结构:

e-code【stuService】

 package boom.service;

 import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Path;
import java.text.Format;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import boom.student.Student;
import boom.utils.StudentUtils; /***
* 操作学生基本信息类
* @author Administrator
*
*/
public class stuService {
/**
* 添加
* @param student
* @throws Exception
*/
public static void addStu(Student student) throws Exception{
/*// 创建解析器
SAXReader saxReader = new SAXReader();
// 得到document
Document document = saxReader.read("src/student.xml");*/
Document document = StudentUtils.getDocument(StudentUtils.PATH); // 得到根节点
Element root = document.getRootElement();
// 在根节点上创建stu标签
Element stu = root.addElement("stu");
// 在stu标签上创建学生属性
Element id1 = stu.addElement("id");
Element name1 = stu.addElement("name");
Element age1 = stu.addElement("age");
// 在id name age属性上设置属性值
id1.setText(student.getId());
name1.setText(student.getName());
age1.setText(student.getAge());
// 回写xml文件
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/student.xml"), format);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 删除学生(根据id删除)
* @param student
* @throws Exception
*/
public static void delStu(String id) throws Exception{
/*// 创建解析器
SAXReader saxReader = new SAXReader();
// 得到document
Document document = saxReader.read("src/student.xml");*/
Document document = StudentUtils.getDocument(StudentUtils.PATH); // 得到所有的id(XPath去获取)
List<Node> list = document.selectNodes("//id");
// 遍历list集合
for (Node node : list) {// node是每个id的元素
// 得到ID的值
String ID = node.getText();
// 判断ID是否与传递进来的id值是否
if(ID.equals(id)) { // id相同
// 得到stu的父节点
Element stu = node.getParent();
// 获取stu父节点(得到student根节点)
Element student = stu.getParent();
student.remove(stu);
}
}
// 回写xml文件
/*OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/student.xml"), format);
xmlWriter.write(document);
xmlWriter.close();*/
StudentUtils.xmlWriter(StudentUtils.PATH,document);
}
/**
* 查询学生(根据id)
* @param id
* @throws Exception
*/
public static Student getStu(String id) throws Exception{
// 创建解析器并得到document
Document document = StudentUtils.getDocument(StudentUtils.PATH);
// 获取所有的id
List<Node> list = document.selectNodes("//id");
// 创建student对象
Student student = new Student();
// 遍历list
for (Node node : list) {
// 的到id节点的值
String ID = node.getText();
// 判断id是否相同
if(ID.equals(id)) {
// 得到id的父节点stu
Element stu = node.getParent();
// 通过stu获取到name age值
String name = stu.element("name").getText();
String age = stu.element("age").getText();
// 对象里设置值
student.setId(id);
student.setName(name);
student.setAge(age);
}
}
// 返回
return student;
} }

e-code【Student】

 package boom.student;
/**
* 封装学生基本信息
* @author Administrator
*
*/
public class Student {
private String id;
private String name;
private String age; // 生成get set方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
} }

e-code【TestStu】

 package boom.test;

 import boom.service.stuService;
import boom.student.Student; public class TestStu { /**
* 测试类
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// testAdd();
// testDel();
testSelect();
}
/**
* 查询方法
* @throws Exception
*/
public static void testSelect() throws Exception{
Student stu = stuService.getStu("2015112402");
System.out.println(stu.toString());
}
/**
* 删除方法
* @throws Exception
*/
public static void testDel() throws Exception{
stuService.delStu("2015112403"); }
/**
* 添加方法
* @throws Exception
*/
public static void testAdd() throws Exception{
// 创建学生对象并设置值
Student stu = new Student();// 对象被封装在Student类里
stu.setId("2015112403");
stu.setName("大兄逮");
stu.setAge("18");
// 调用操作学生类[stuService]
stuService.addStu(stu);
} }

e-code【StudentUtils】

 package boom.utils;

 import java.io.FileOutputStream;

 import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class StudentUtils {
public static final String PATH = "src/student.xml"; // 返回document
public static Document getDocument(String path) {
try {
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document
Document document = reader.read(path);
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} // 回写xml的方法
public static void xmlWriter(String path, Document document) {
try {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path),format);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

student,xml

XML基础综合案例【三】的更多相关文章

  1. 好客租房40-react组件基础综合案例-案例需求分析

    实现 案例的数据 渲染评论列表 有评论 没有评论 暂无评论 获取评论信息 包括评论人和受控组件 发表评论 更新评论 //导入react import React from 'react' import ...

  2. 好客租房43-react组件基础综合案例-4获取评论信息

    获取评论信息 1使用受控组件方式创建表单 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // ...

  3. 好客租房44-react组件基础综合案例-5发表评论-1

    发表评论 1给按钮绑定点击事件 2在事件处理程序中 通过state获取评论信息 3将评论信息添加到state中 并调用setState()方法更新数据 //导入react import React f ...

  4. 好客租房45-react组件基础综合案例-6边界问题

    边界问题 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // 约定1:类组件必须以大写字母开头 ...

  5. 好客租房41-react组件基础综合案例-渲染列表数据

    1渲染列表 在state定义数据 进行数据渲染 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 ...

  6. 好客租房42-react组件基础综合案例-渲染列表无数据并优化

    渲染列表评论 1判断列表数据的长度是否为0 2如果为0 则渲染暂无评论 //导入react import React from 'react' import ReactDOM from 'react- ...

  7. spring基础:什么是框架,框架优势,spring优势,耦合内聚,什么是Ioc,IOC配置,set注入,第三方资源配置,综合案例spring整合mybatis实现

    知识点梳理 课堂讲义 1)Spring简介 1.1)什么是框架 源自于建筑学,隶属土木工程,后发展到软件工程领域 软件工程中框架的特点: 经过验证 具有一定功能 半成品 1.2)框架的优势 提高开发效 ...

  8. springAop:Aop(Xml)配置,Aop注解配置,spring_Aop综合案例,Aop底层原理分析

    知识点梳理 课堂讲义 0)回顾Spring体系结构 Spring的两个核心:IoC和AOP 1)AOP简介 1.1)OOP开发思路 OOP规定程序开发以类为模型,一切围绕对象进行,OOP中完成某个任务 ...

  9. Java11-java基础语法(十)类设计综合案例

    Java11-java语法基础(十)类设计综合案例 一.类综合设计方法 1.类设计步骤 (1)分析数据成员 (2)分析成员方法和构造方法 (3)画出类图 (4)编码测试 2.具体问题 1)分析数据成员 ...

随机推荐

  1. R语言常用包简介

  2. SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)

    JSR 303是针对bean数据校验提出的一个规范.使用注解方式实现数据校验. 每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践 笔者上面提到的J ...

  3. koa2中间件

    在我看来,前端框架的中间件的思想来源于传统后端的切面编程(AOP)思想,比如我们常见的身份校验(JWT). axios的拦截器也是基于这种程序设计模式的. 在koa中,实际上是由一个数组对象来保存所有 ...

  4. SpringBoot: 3.SpringBoot整合filter(转)

    整合方式一:通过注解扫描完成 Filter 组件的注册 1.编写filter package com.bjsxt.filter; import javax.servlet.*; import java ...

  5. SSD是什么

    SSD即固态硬盘,相较于HDD(机械硬盘),硬件上最主要的区别就是存储介质发生了改变,SSD采用NAND Flash作为存储介质,而HDD采用磁盘作为存储介质.虽然这两种存储介质都是非易失性的,但是他 ...

  6. C#中的索引器(Indexers)

    前两天刚刚学习完了属性,这两天又搂完了索引器,发现两者非常的相似,但是相似之外还有一些不同之处.今天就来总结一下索引器--Indexers 索引器的作用及格式 索引器的作用就是能够使类或者结构体的实例 ...

  7. 【VS开发】socket编程原理

    socket编程原理 1.问题的引入 1) 普通的I/O操作过程: UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-rea ...

  8. maven运行工程

    1.cd到工程目录下,执行打包命令-----mvn package 2.cd到工程的target目录执行运行命令 java -classpath myapp-1.0-SNAPSHOT.jar cn.m ...

  9. android简易跑马灯

    重点:焦点的选择(返回true使得焦点不被选择) MarqueeText.java package com.example.demo02; import android.content.Context ...

  10. CentoS里Tomcat端口开放

    1.发现安装好tomcat后,发现无法访问tomcat首页,后来发现防火墙没有开放8080端口. 需注意的是:CentOS 7防火墙换用Friewalld了,所以要用以下命令将端口号加进防火墙: fi ...