学生信息管理系统java版xml存储数据

学生信息管理系统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();
        }
    }
}

整个程序就到这里了。

运行测试:
运行测试

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值