一: 需求描述

学生成绩管理系统,使用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. matlab中的字符串数组与函数调用

    1, matlab中的字符串就是1维字符数组,即如: a = 'dddssd'; b = 'lsde'; c = [a, b]; 当然也可以: c= strcat(a, b); 2, matlab中的 ...

  2. MLlib 中的聚类和分类

    聚类和分类是机器学习中两个常用的算法,聚类将数据分开为不同的集合,分类对新数据进行类别预测,下面将就两类算法进行介绍. 1. 聚类和分类(1)什么是聚类 聚类( Clustering)指将数据对象分组 ...

  3. thymeleaf中的th:assert用法

    th:assert 断言标签 th:assert属性可以指定一个以逗号分隔的表达式对其进行评估并生产适用于每一个评价,如果不抛出异常 <div th:assert="${onevar} ...

  4. [iOS 多线程 & 网络 - 1.2] - 多线程GCD

    A.GCD基本使用 1.GCD的概念 什么是GCD全称是Grand Central Dispatch,可译为"牛逼的中枢调度器"纯C语言,提供了非常多强大的函数GCD的优势GCD是 ...

  5. [iOS基础控件 - 6.9.1] 聊天界面Demo 代码

    框架:   所有代码文件:   Model: // // Message.h // QQChatDemo // // Created by hellovoidworld on 14/12/8. // ...

  6. Quality Center11初始化失败

    打开start_a.jsp页面总是闪退,原因如下: 初始化失败因为证书签名过期了.把IE选项里证书检查的三项勾掉就好了(检查发行商的证书是否吊销.检查服务器证书吊销.检查已下载的程序的签名)

  7. linux svn使用

    SVN是一种版本管理系统,前身是CVS,是开源软件的基石.即使在沟通充分的情况下,多人维护同一份源代码的一定也会出现混乱的情况,版本管理系统就是为了解决这些问题. SVN中的一些概念 : a. rep ...

  8. Codeforces Round #353 (Div. 2) C. Money Transfers (思维题)

    题目链接:http://codeforces.com/contest/675/problem/C 给你n个bank,1~n形成一个环,每个bank有一个值,但是保证所有值的和为0.有一个操作是每个相邻 ...

  9. Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)

    认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什 ...

  10. Oracle-11g-R2(11.2.0.3.x)RAC Oracle Grid & Database 零宕机方式回滚 PSU(自动模式)

    回滚环境: 1.源库版本: Grid Infrastructure:11.2.0.3.15 Database:11.2.0.3.15 2.目标库版本: Grid Infrastructure:11.2 ...