学生信息管理系统java版xml存储数据
本系统所实现的需求图
源代码:
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.util.List;
import java.util.Scanner;
操作类:
- 操作类是为了方便main函数的调用,实现了管理员账号密码的判定,学生信息查询,学生信息的增加和删除,以及管理员要实现的修改学生信息的方法。一定要将查询方法、删除方法、增加、修改都写到CaoZuo类中。
public class CaoZuo {
//管理员
public void manager() { //定义菜单函数
int a;//定义switch语句变量
Scanner in = new Scanner(System.in);//实例化输入流对象
System.out.println("请输入账号");
String str = in.next();
System.out.println("请输入密码");
String str1 = in.next();
while (true) {
Manager m = new Manager();
if (m.getId().equals(str) && m.getPassword().equals(str1)) {
System.out.println("*********学生信息管理系统功能表*********");
System.out.println("***** 1.增加学生信息 *****");
System.out.println("***** 2.删除学生信息 *****");
System.out.println("***** 3.查看学生信息 *****");
System.out.println("***** 4.修改学生信息 *****");
System.out.println("**************************************");
System.out.print("请选择(0~4):");
a = in.nextInt();
while (a < 0 || a > 4) {
System.out.print("输入超出范围,请重新输入:");
a = in.nextInt();
}
switch (a) {
case 1:
try {
this.add();
} catch (Exception e) {
System.out.println("输入错误");
}
break;
case 2:
try {
this.delete();
} catch (Exception e) {
}
break;
case 3:
try {
this.look();
} catch (Exception e) {
e.printStackTrace();
}
break;
case 4:
try {
this.xiugai();
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
System.out.println("你输入的账号密码不正确,请重新输入");
}
}
}
查询方法:
- 实现学生信息的查询
//学生信息查询方法
public static void look() throws Exception {
Scanner sc = new Scanner(System.in);
for (; ; ) {
System.out.println("请输入你想查的学号");
String str1 = sc.next();
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document对象
Document document = reader.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
// 获取所有num xpath://num
List<Node> nums = document.selectNodes("//num");
// 遍历所有的num节点
boolean boo = false;
for (Node node : nums) {
// 得到num标签的内容
String str2 = node.getText();
if (str1.equals(str2)) {
Student.look(str1);
boo = str1.equals(str2);
break;
}
}
if (!boo) {
System.out.println("该学生学号不存在,请重新输入");
}
}
}
学生信息的删除方法:
- 实现了学生信息的删除,通过XML中的num标签来进行内容的删除,要实现遍历num标签。
//删除方法
public static void delete() throws Exception {
Scanner sc = new Scanner(System.in);
for (; ; ) {
System.out.println("请输入你要删除学生对应的学号");
String str1 = sc.next();
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document对象
Document document = reader.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
// 获取所有num xpath://num
List<Node> nums = document.selectNodes("//num");
// 遍历所有的num节点
boolean boo = false;
for (Node node : nums) {
// 得到num标签的内容
String str2 = node.getText();
if (str1.equals(str2)) {
Student.delect(str1);
boo = str1.equals(str2);
// 创建解析器
SAXReader reader1 = new SAXReader();
// 得到document对象
Document document1 = reader1.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
// 获取所有num xpath://num
List<Node> nums1 = document1.selectNodes("//num");
// 遍历所有的num节点
for (Node node1 : nums1) {
// 得到num标签的内容
String str3 = node1.getText();
if (!str1.equals(str3)) {
System.out.println("删除成功");
break;
}
}
break;
}
}
if (!boo) {
System.out.println("该学生学号不存在,请重新输入");
}
}
}
学生信息的添加:
//学生信息的添加
public static void add() throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你添加的学生信息");
System.out.println("请输入学生的学号");
String str1 = sc.next();
System.out.println("请输入学生的姓名");
String str2 = sc.next();
System.out.println("请输入学生的年龄");
String str3 = sc.next();
System.out.println("请输入学生的学院");
String str4 = sc.next();
System.out.println("请输入学生的班级");
String str5 = sc.next();
System.out.println("请输入学生的电话");
String str6 = sc.next();
System.out.println("请输入学生的入学时间");
String str7 = sc.next();
System.out.println("请输入学生的性别");
String str8 = sc.next();
System.out.println("请输入学生的专业");
String str9 = sc.next();
Student student = new Student(str1, str2, str3, str4, str5, str6, str7, str8, str9);
Student.add(student);
System.out.println("添加成功");
}
学生信息的修改:
//修改
public static void xiugai() throws Exception {
Scanner sc = new Scanner(System.in);
for (; ; ) {
System.out.println("请输入你想修改的学号");
String str1 = sc.next();
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document对象
Document document = reader.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
// 获取所有num xpath://num
List<Node> nums = document.selectNodes("//num");
// 遍历所有的num节点
boolean boo = false;
for (Node node : nums) {
// 得到num标签的内容
String str2 = node.getText();
if (str1.equals(str2)) {
Student.change(str1);
boo = str1.equals(str2);
break;
}
}
if (!boo) {
System.out.println("该学生学号不存在,请重新输入");
}
}
}
}
接下来我们实现和XML的搭建,设置解析器,连接XML,利用num标签遍历XML中的每一个num标签下所对应的内容,进行删除添加等等
源代码:
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
import java.util.List;
import java.util.Scanner;
- 接下来将增加,删除,以及查询等与XML连接搭建的方法全写入Student类中。
- 回写XML是为了设置数据存储到XML中的格式问题。
public class Student {
private String num; //学号
private String name; //姓名
private String age; //年龄
private String XueYuan; //学院
private String classId; //班级
private String phone; //电话
private String date; //入学时间
private String XingBie; //性别
private String ZhuanYe; //专业
public Student(String num, String name,
String age, String xueYuan,
String classId, String phone,
String date, String xingBie,
String zhuanYe) {
this.num = num;
this.name = name;
this.age = age;
XueYuan = xueYuan;
this.classId = classId;
this.phone = phone;
this.date = date;
XingBie = xingBie;
ZhuanYe = zhuanYe;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
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;
}
public String getXueYuan() {
return XueYuan;
}
public void setXueYuan(String xueYuan) {
XueYuan = xueYuan;
}
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getXingBie() {
return XingBie;
}
public void setXingBie(String xingBie) {
XingBie = xingBie;
}
public String getZhuanYe() {
return ZhuanYe;
}
public void setZhuanYe(String zhuanYe) {
ZhuanYe = zhuanYe;
}
/**
* 添加学生
*/
public static void add(Student student) throws Exception {
/**
* 创建解析器; 得到document; 获取到root节点;在根节点上面创建stu标签 ;在stu标签上面依次添加id name
* age;在id name age上面依次添加值 ;回写xml
*/
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document对象
Document document = reader.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
// 获取到root节点;
Element root = document.getRootElement();
// 在根节点上面创建stu标签
Element stu = root.addElement("stu");
// 在stu标签上面依次添加num....其他元素
Element num = stu.addElement("num");
Element name = stu.addElement("name");
Element age = stu.addElement("age");
Element xueyuan=stu.addElement("xueyuan");
Element classId=stu.addElement("classId");
Element phone=stu.addElement("phone");
Element date=stu.addElement("date");
Element XingBie=stu.addElement("XingBie");
Element ZhuanYe=stu.addElement("ZhuanYe");
// 在num name age上面依次添加值
num.setText(student.getNum());
name.setText(student.getName());
age.setText(student.getAge());
xueyuan.setText(student.getXueYuan());
classId.setText(student.getClassId());
phone.setText(student.getPhone());
date.setText(student.getDate());
XingBie.setText(student.getXingBie());
ZhuanYe.setText(student.getZhuanYe());
// 回写xml
// 设置XML文档格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1
outputFormat.setEncoding("UTF-8");
// outputFormat.setSuppressDeclaration(true); //是否生产xml头
outputFormat.setIndent(true); // 设置是否缩进
outputFormat.setIndent(" "); // 以四个空格方式实现缩进
outputFormat.setNewlines(true); // 设置是否换行
XMLWriter xmlWriter = null;
try {
xmlWriter = new XMLWriter(outputFormat);
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
try {
FileOutputStream fos = new FileOutputStream("students.xml");
xmlWriter.setOutputStream(fos);
xmlWriter.write(document);
xmlWriter.close();
System.out.println("写入完毕!");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据学生num删除学生
*/
public static void delect(String num) throws Exception {
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document对象
Document document = reader.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
// 获取所有num xpath://num
List<Node> nums = document.selectNodes("//num");
// 遍历所有的num节点
for (Node node : nums) {
// 得到num标签的内容
String str = node.getText();
if (str.equals(num)) {
// 如果内容匹配
// 得到该num的父标签,也就是这个学生的stu标签
Element stu = node.getParent();
// 在根节点下删掉这个元素
document.getRootElement().remove(stu);
}
}
// 回写xml
OutputStream fos = new FileOutputStream("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
OutputFormat outputFormat = new OutputFormat();
outputFormat.setEncoding("utf-8");
outputFormat.setIndent(true);
outputFormat.setNewlines(true);
XMLWriter xmlWriter = new XMLWriter(fos,outputFormat);
xmlWriter.setOutputStream(fos);
xmlWriter.write(document);
xmlWriter.close();
}
/**
* 根据学生的num查询学生,打印出学生的所有信息
*/
public static void look(String num) throws Exception {
// 创建解析器
SAXReader reader = new SAXReader();
// 得到document对象
Document document = reader.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
// 获取所有num xpath://num
List<Node> nums = document.selectNodes("//num");
// 遍历所有的id节点
for (Node node : nums) {
// 得到id标签的内容
String str = node.getText();
if (str.equals(num)) {
// 如果内容匹配
// 得到该id的父标签,也就是这个学生的stu标签
Element stu = node.getParent();
// 得到这个学生下面的所有标签
List<Node> list = stu.elements();
for (Node node2 : list) {
// 打印出各个标签的名字和内容
String name = node2.getName();
String text = node2.getText();
System.out.println(name + ":" + text);
}
}
}
}
//修改学生信息
public static void change(String xueHao) throws Exception {
Scanner sc=new Scanner(System.in);
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml");
Element rootelement = document.getRootElement();
List<Element> list = rootelement.elements();
Element element = null;
for (int i = 0; i < list.size(); i++) {
element = list.get(i);//获取根元素下的第i个子元素
List<Element> list1 = element.elements();//获取根元素下的第i个子元素的所有子元素
for (int j = 0; j < list1.size(); j++) {
if (list1.get(j).getText().equals(xueHao)) {
System.out.println("请选择所要修改的标签:" +
"1.num 2.name 3.age 4.xueyuan" +
" 5.classId 6.phone 7.date 8.XingBie 9.ZhuanYe");
int i1 = sc.nextInt();
switch ((i1 - 1)) {
case 0:
System.out.println("请输入你想改的内容");
int num = sc.nextInt();
list1.get((i1 - 1)).setText(String.valueOf(num));
System.out.println("修改成功");
break;
case 1:
System.out.println("请输入你想改的内容");
String name = sc.next();
list1.get((i1 - 1)).setText(name);
System.out.println("修改成功");
break;
case 2:
System.out.println("请输入你想改的内容");
String age = sc.next();
list1.get((i1 - 1)).setText(age);
System.out.println("修改成功");
break;
case 3:
System.out.println("请输入你想改的内容");
String xueyuan = sc.next();
list1.get((i1 - 1)).setText(xueyuan);
System.out.println("修改成功");
break;
case 4:
System.out.println("请输入你想改的内容");
String classId = sc.next();
list1.get((i1 - 1)).setText(classId);
System.out.println("修改成功");
break;
case 5:
System.out.println("请输入你想改的内容");
String phone = sc.next();
list1.get((i1 - 1)).setText(phone);
System.out.println("修改成功");
break;
case 6:
System.out.println("请输入你想改的内容");
String date = sc.next();
list1.get((i1 - 1)).setText(date);
System.out.println("修改成功");
break;
case 7:
System.out.println("请输入你想改的内容");
String XingBie = sc.next();
list1.get((i1 - 1)).setText(XingBie);
System.out.println("修改成功");
break;
case 8:
System.out.println("请输入你想改的内容");
String ZhuanYe = sc.next();
list1.get((i1 - 1)).setText(ZhuanYe);
System.out.println("修改成功");
break;
default:
System.out.println("输入错误");
break;
}
}
}
}
// 设置XML文档格式
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1
outputFormat.setEncoding("UTF-8");
// outputFormat.setSuppressDeclaration(true); //是否生产xml头
outputFormat.setIndent(true); // 设置是否缩进
outputFormat.setIndent(" "); // 以四个空格方式实现缩进
outputFormat.setNewlines(true); // 设置是否换行
XMLWriter xmlWriter = new XMLWriter(outputFormat);
OutputStream outputStream = new FileOutputStream(new File("D:\\idea2018Demo\\src\\XueShengGuanLi\\students.xml"));
xmlWriter.setOutputStream(outputStream);
xmlWriter.write(document);
xmlWriter.close();
outputStream.close();
}
}
接下来就是管理员的类Manager类,里面存储一下管理员的账号,密码。方便进行前面页面的进入进行判断是否登录成功。
public class Manager {
private String Id="admin";
private String password="1111";
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
最后我们来运行代码,设置main函数,前面的方法几乎全是static类型的,所以可以直接调用,选择管理员和学生。
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择你的身份:1.管理员 2.学生");
int i = sc.nextInt();
if (i == 1) {
//todo: 完成管理员的需求
CaoZuo c=new CaoZuo();
c.manager();
} else if (i == 2) {
//todo:遍历学生ID与输入ID进行对比
//todo:成功把对应ID的所有的信息遍历出来
//todo:提示没有当前学生
CaoZuo.look();
}
}
}
整个程序就到这里了。
运行测试: