一: 需求描述

学生成绩管理系统,使用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. 第二百六十六天 how can I 坚持

    有些小郁闷,上班没事干,技术.要买房,还要结婚,买了房哪还有彩礼钱,还得借钱,愁人. 该咋办,毕梦琪. 哎.今天还和程秀通说好的去看房呢,整天犹豫不定的.烦. 今天平安夜啊.吃了个苹果,一生平平安安, ...

  2. Spring+Quartz 整合一:常规整合

    步骤一: 定时任务需要一个配置文件(spring-mvc-timeTask.xml 随便起名),将其在web.xml中加载 <context-param> <param-name&g ...

  3. ubuntu 备份安装程序列表

    一般情况下,我们重装ubuntu的系统会做如下几个事情 1)修改默认的程序更新源 2)开始根据需求安装软件. 3)配置文件(如vim/tmux等) 对于步骤,只需要cp /etc//etc/apt/s ...

  4. Spring Data JPA教程, 第七部分: Pagination(未翻译)

    The previous part of my Spring Data JPA tutorialdescribed how you can sort query results with Spring ...

  5. Java日期处理类

    1.Date java.util.Date 2.Calendar 日历类,通过getInstance()获取实例对象,可以获取年月日时分秒 3.SimpleDateFormat 日期格式化,forma ...

  6. 去除Linq to Sql 查询结果中的空格

    原来的写法: Dim db = From city In DataContext1.AddressCity Where city.ProvinceID = dgvAddress(2, e.RowInd ...

  7. Thinkphp框架 -- 短信接口验证码

    我用的是一款名叫 短信宝 的应用,新注册的用户可以免费3条测试短信,发现一个BUG,同个手机可以无限注册,自己玩玩还是可以的. 里面的短信接口代码什么信息都没有,感觉看得不是很明白,自己测试了一遍,可 ...

  8. CSS 布局总结——变宽度布局

    变宽度布局 1-2-1 等比例变宽 总宽度设置 width: 85%; min-width: 650px; (关于IE6的min-width支持,可用) content 设置 width: 66%;  ...

  9. 查看数量linux下查看cpu物理个数和逻辑个数

    首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 hadoop@chw-desktop3:~$ cat /proc/cpuinfo processor : 0 vendor_id : Gen ...

  10. Codeforces Gym 100637G G. #TheDress 暴力

    G. #TheDress Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100637/problem/G ...