xml版本学生管理系统
一: 需求描述
学生成绩管理系统,使用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版本学生管理系统的更多相关文章
- 05_学生管理系统,xml读写,布局的综合应用
最终要做的项目目标: 2.编写Android清单文件AndroidManifest.xml <?xml version="1.0" encoding="utf ...
- java版本的学生管理系统
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.awt.event.Ac ...
- C语言版本学生信息管理系统
仍然有一些小bug,后续会发布OC完善版的图书馆管理系统,欢迎批评指正. #include <stdio.h> void menu_choose(); typedef struct { i ...
- 【IOS开发笔记02】学生管理系统
端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...
- 史上最强学生管理系统之ArrayList版
其实不管是网上或者培训班,都会有学生管理系统的最基础版本,本人也不过是照猫画虎,在某些细节方面进行了一些渲染,使这个最基本的小程序更加人性化和便于利于操作一点,个人愚见,大牛勿喷,欢迎转载(请注明出处 ...
- 史上最强学生管理系统之IO版
既上一博发布的ArrayList版本之后,新一版的IO版又来了,其实只是在上一个版本里面添加了IO流的内容,将存入更改的信息更新到了文件中而已,这个版本网上仍然很多,本人只是在某些方面稍加修改,因为自 ...
- 学生管理系统(SSM简易版)总结
之前用 Servlet + JSP 实现了一个简易版的学生管理系统,在学习了 SSM 框架之后,我们来对之前写过的项目重构一下! 技术准备 为了完成这个项目,需要掌握如下技术: Java 基础知识 前 ...
- 饮冰三年-人工智能-Python-26 Django 学生管理系统
背景:创建一个简单的学生管理系统,熟悉增删改查操作 一:创建一个Django项目(http://www.cnblogs.com/wupeiqi/articles/6216618.html) 1:创建实 ...
- 学生管理系统(springMVC)
<Java Web编程>课程设计 ...
随机推荐
- 使用Cygwin通过ssh命令行来访问Windows8
安装Cygwin可以参考<如何在Windows中通过Cygwin来使用Linux命令>. 在Win8下貌似有个bug,需要将cygwin\bin\mintty 修改为cygwin\bin\ ...
- codeforces 617BChocolate
B. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- HDU 1796How many integers can you find(简单容斥定理)
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- js面形对象(2)
1.原型与in操作符 有两种方式使用in操作符:单独使用和在for-in循环中使用.在单独使用时,in操作符会在通过对象能够访问给定属性时,返回true,无论该属性是存在实例或者是存在于原型 ...
- Elasticsearch简单介绍
如何对站内的数据进行检索? ElasticSearch是比较著名的一个分布式检索解决方案.传统的数据库例如mysql,oracle等,对一个关键词进行检索通常都是采用like的匹配,对性能或者数据量的 ...
- disque概要
做项目过程接触到disque,记录一下. disque是redis之父开源的基于内存的分布式作业队列,用c语言实现的非阻塞网络服务器. disque的设计目标:Its goal is to captu ...
- 剑指OFFER之矩形覆盖(九度OJ1390)
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入 ...
- 再次理解JavaScript原型链和匿名函数
<!--------------------------------------------- 1.演示匿名加载 2.js单进程执行流 3.原型链理解 a.__proto__:属性每个对象都有 ...
- Unity中关于等待的函数
public void InvokeRepating(string methodName,float time,float repeatRate); 语法 注: 1.methodeName为调用的方法 ...
- 栈的应用2——超级计算器(中缀与后缀表达式)C语言
输入中缀表达式输出结果(结果可以是小数,但输入必须是整数) #include<stdio.h> #include<stdlib.h> //需要两个栈,一个储存结果,一个储存运 ...