一: 需求描述

学生成绩管理系统,使用xml存储学生信息,可以对学生信息进行增、删、删除操作。

主要目的:练习操作xml元素的增删改查

二:代码结构

1:xml存储数据如下

exam.xml

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
<student>
<name sid="111">李四</name>
<age>23</age>
<gender>男</gender>
</student>
<student>
<name sid="222">张三</name>
<age>21</age>
<gender>女</gender>
</student>
</students>

2:Student类封装学生信息

 /**
*
*/
package com.hlcui.entity; /**
* @author Administrator
*
*/
public class Student {
private int id;
private String name;
private int age;
private String gender; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} }

3:数据访问层,封装操作xml数据的方法

 /**
*
*/
package com.hlcui.dao; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import com.hlcui.entity.Student;
import com.hlcui.exception.NameNotFoundException;
import com.hlcui.utils.StudentUtils; /**
* @author Administrator
*
*/
public class StudentDAO {
// 添加学生信息
public void add(Student stu) {
try {
Document doc = StudentUtils.getDocument();
Element student = doc.createElement("student");
student.setAttribute("id", stu.getId() + ""); // 给学生元素添加属性 // 分别创建姓名、年龄、性别节点
Element name = doc.createElement("name");
name.setTextContent(stu.getName());
Element age = doc.createElement("age");
age.setTextContent(stu.getAge() + "");
Element gender = doc.createElement("gender");
gender.setTextContent(stu.getGender()); // 将姓名、年龄、性别节点添加到学生节点上
student.appendChild(name);
student.appendChild(age);
student.appendChild(gender); // 在将student节点添加到students节点上
doc.getElementsByTagName("students").item(0).appendChild(student);
StudentUtils.write2XML(doc);
System.out.println("添加成功!");
} catch (Exception e) {
e.printStackTrace();
}
} // 根据学生姓名查询学生信息
public Student find(String name) throws NameNotFoundException {
try {
Document doc = StudentUtils.getDocument();
NodeList list = doc.getElementsByTagName("student");
for (int i = 0; i < list.getLength(); i++) {
Element ele = (Element) list.item(i);
if (name.equals((ele.getElementsByTagName("name")).item(0)
.getTextContent())) {
Student stu = new Student();
stu.setId(Integer.parseInt(ele.getAttribute("id")));
stu.setName(name);
stu.setAge(Integer.parseInt((ele
.getElementsByTagName("age")).item(0)
.getTextContent()));
stu.setGender(ele.getElementsByTagName("gender").item(0)
.getTextContent());
return stu;
}
}
throw new NameNotFoundException(name + "不存在!!!");
} catch (NameNotFoundException e) {
throw e;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} // 根据id删除学生信息
public boolean delete(int id) {
try {
Document doc = StudentUtils.getDocument();
NodeList list = doc.getElementsByTagName("student");
for (int i = 0; i < list.getLength(); i++) {
Element ele = (Element) list.item(i);
if (String.valueOf(id).equals(ele.getAttribute("id"))) {
ele.getParentNode().removeChild(ele);
StudentUtils.write2XML(doc);
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}

4:自定义异常类,封装异常

 /**
*
*/
package com.hlcui.exception; /**
* @author Administrator
*
*/
public class NameNotFoundException extends Exception { /**
*
*/
private static final long serialVersionUID = 1L; /**
*
*/
public NameNotFoundException() {
} /**
* @param message
*/
public NameNotFoundException(String message) {
super(message);
} /**
* @param cause
*/
public NameNotFoundException(Throwable cause) {
super(cause);
} /**
* @param message
* @param cause
*/
public NameNotFoundException(String message, Throwable cause) {
super(message, cause);
} }

5:junit框架测试DAO方法

 /**
*
*/
package com.hlcui.test; import org.junit.Test; import com.hlcui.dao.StudentDAO;
import com.hlcui.entity.Student;
import com.hlcui.exception.NameNotFoundException; /**
* @author Administrator
*
*/
public class TestStudentDAO {
private StudentDAO dao = new StudentDAO(); @Test
public void testAdd() {
Student stu = new Student();
stu.setId(333);
stu.setName("王二");
stu.setAge(27);
stu.setGender("男");
dao.add(stu);
} @Test
public void testFind() throws NameNotFoundException {
String name = "王二";
Student stu = dao.find(name);
System.out.println("学号:" + stu.getId() + "\n姓名:" + stu.getName()
+ "\n年龄:" + stu.getAge() + "\n性别:" + stu.getGender()); } @Test
public void testDelete() {
int id = 333;
boolean flag = dao.delete(id);
System.out.println(flag ? "删除成功!!" : "删除失败!!");
}
}

6:封装操作dom文件功能方法

 /**
*
*/
package com.hlcui.utils; 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.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; /**
* @author Administrator
*
*/
public class StudentUtils { /* 获取Document对象* */
public static Document getDocument() throws Exception {
DocumentBuilderFactory sfb = DocumentBuilderFactory.newInstance();
DocumentBuilder db = sfb.newDocumentBuilder();
Document doc = db.parse("xml/exam.xml");
return doc;
} /* 将内存中的内容写到硬盘* */
public static void write2XML(Document doc) throws Exception {
TransformerFactory factory = TransformerFactory.newInstance();
Transformer tf = factory.newTransformer();
tf.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(
"xml/exam.xml")));
}
}

7:用户交互界面

 /**
*
*/
package com.hlcui.ui; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; import com.hlcui.dao.StudentDAO;
import com.hlcui.entity.Student;
import com.hlcui.exception.NameNotFoundException; /**
* @author Administrator 用户交互界面
*/
public class Main { public static StudentDAO dao = new StudentDAO(); /**
*
* @param args
*/
public static void main(String[] args) { System.out.println("请选择操作模式:a:添加用户 b:查找用户 c:删除用户 exit:退出系统");
BufferedReader br = null;
try {
while (true) {
br = new BufferedReader(new InputStreamReader(System.in));
String type = br.readLine();
if ("a".equals(type)) { // 录入数据
System.out.println("请输入学号:");
int id = Integer.parseInt(br.readLine());
System.out.println("请输入姓名:");
String name = br.readLine();
System.out.println("请输入年龄:");
int age = Integer.parseInt(br.readLine());
System.out.println("请输入性别:");
String gender = br.readLine();
// 封装数据
Student stu = new Student();
stu.setId(id);
stu.setName(name);
stu.setAge(age);
stu.setGender(gender); // 插入数据
dao.add(stu);
} else if ("b".equals(type)) {
System.out.println("请输入姓名:");
String name = br.readLine();
try {
Student stu = dao.find(name);
System.out.println("***********学生信息如下***********");
System.out.println("学号:" + stu.getId() + "\n姓名:"
+ stu.getName() + "\n年龄:" + stu.getAge()
+ "\n性别:" + stu.getGender());
} catch (NameNotFoundException e) {
System.out.println(e.getMessage());
}
} else if ("c".equals(type)) {
System.out.println("请输入学号:");
int id = Integer.parseInt(br.readLine());
boolean flag = dao.delete(id);
if (flag) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
} else if ("exit".equals(type.toLowerCase())) {
System.out.println("系统正在退出...");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
} else {
System.out.println("您的操作暂不支持,请重新输入:");
}
} } catch (IOException e) {
e.printStackTrace();
} finally {
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

代码均已经验证正确!

xml版本学生管理系统的更多相关文章

  1. 05_学生管理系统,xml读写,布局的综合应用

     最终要做的项目目标: 2.编写Android清单文件AndroidManifest.xml <?xml version="1.0" encoding="utf ...

  2. java版本的学生管理系统

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.awt.event.Ac ...

  3. C语言版本学生信息管理系统

    仍然有一些小bug,后续会发布OC完善版的图书馆管理系统,欢迎批评指正. #include <stdio.h> void menu_choose(); typedef struct { i ...

  4. 【IOS开发笔记02】学生管理系统

    端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...

  5. 史上最强学生管理系统之ArrayList版

    其实不管是网上或者培训班,都会有学生管理系统的最基础版本,本人也不过是照猫画虎,在某些细节方面进行了一些渲染,使这个最基本的小程序更加人性化和便于利于操作一点,个人愚见,大牛勿喷,欢迎转载(请注明出处 ...

  6. 史上最强学生管理系统之IO版

    既上一博发布的ArrayList版本之后,新一版的IO版又来了,其实只是在上一个版本里面添加了IO流的内容,将存入更改的信息更新到了文件中而已,这个版本网上仍然很多,本人只是在某些方面稍加修改,因为自 ...

  7. 学生管理系统(SSM简易版)总结

    之前用 Servlet + JSP 实现了一个简易版的学生管理系统,在学习了 SSM 框架之后,我们来对之前写过的项目重构一下! 技术准备 为了完成这个项目,需要掌握如下技术: Java 基础知识 前 ...

  8. 饮冰三年-人工智能-Python-26 Django 学生管理系统

    背景:创建一个简单的学生管理系统,熟悉增删改查操作 一:创建一个Django项目(http://www.cnblogs.com/wupeiqi/articles/6216618.html) 1:创建实 ...

  9. 学生管理系统(springMVC)

    <Java Web编程>课程设计                                                                               ...

随机推荐

  1. Spark计算工作流

    下图 中描述了 Spark 的输入.运行转换.输出.在运行转换中通过算子对 RDD进行转换.算子是 RDD 中定义的函数,可以对 RDD 中的数据进行转换和操作.‰ 输入:在 Spark 程序运行中, ...

  2. CalendarUtil

    package ch.makery.address.util; import java.text.ParseException; import java.text.SimpleDateFormat; ...

  3. 10个专属于移动app开发者的最佳移动JavaScript框架

    1.Titanium Mobile JavaScript Frameworks Titanium Mobile JavaScript框架是移动应用开发者(Android & iOS)首选的最优 ...

  4. UVALive 7456 Least Crucial Node (并查集)

    Least Crucial Node 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/C Description http://7 ...

  5. java assert的用法简介

    assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...

  6. 51单片机或PLC驱动3.5寸至52寸的数字TFTLCD屏、VGA接口显示器、电视机

    http://www.21easyic.com/yx/VGA%E6%8E%A7%E5%88%B6%E6%9D%BF.htm

  7. jeecms附件标签用法

    [#if content.attachments?size gt 0] [#list content.attachments as attach] <a id="attach${att ...

  8. 剑指OFFER之变态跳台阶(九度OJ1389)

    题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1 ...

  9. oracle备份恢复之rman恢复到异机

    注意事项: 1 此处实验环境为同平台,同字节序,同版本,源机器和目标机器相同的目录结构. 2 目标机器只需要安装oracle数据库软件即可. 3 第一次利用备份恢复测试环境,之后从源机器拷贝备份到目标 ...

  10. Date、String、Calendar、Timestamp类型之间的转化

    1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...