首页 > 代码库 > xml版本学生管理系统

xml版本学生管理系统

一: 需求描述

学生成绩管理系统,使用xml存储学生信息,可以对学生信息进行增、删、删除操作。

主要目的:练习操作xml元素的增删改查

二:代码结构

1:xml存储数据如下

exam.xml

 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <students> 3     <student> 4         <name sid="111">李四</name> 5         <age>23</age> 6         <gender></gender> 7     </student> 8     <student> 9         <name sid="222">张三</name>10         <age>21</age>11         <gender></gender>12     </student>13 </students>

2:Student类封装学生信息

 1 /** 2  *  3  */ 4 package com.hlcui.entity; 5  6 /** 7  * @author Administrator 8  *  9  */10 public class Student {11     private int id;12     private String name;13     private int age;14     private String gender;15 16     public int getId() {17         return id;18     }19 20     public void setId(int id) {21         this.id = id;22     }23 24     public String getName() {25         return name;26     }27 28     public void setName(String name) {29         this.name = name;30     }31 32     public int getAge() {33         return age;34     }35 36     public void setAge(int age) {37         this.age = age;38     }39 40     public String getGender() {41         return gender;42     }43 44     public void setGender(String gender) {45         this.gender = gender;46     }47 48 }

3:数据访问层,封装操作xml数据的方法

 1 /** 2  *  3  */ 4 package com.hlcui.dao; 5  6 import org.w3c.dom.Document; 7 import org.w3c.dom.Element; 8 import org.w3c.dom.NodeList; 9 10 import com.hlcui.entity.Student;11 import com.hlcui.exception.NameNotFoundException;12 import com.hlcui.utils.StudentUtils;13 14 /**15  * @author Administrator16  * 17  */18 public class StudentDAO {19     // 添加学生信息20     public void add(Student stu) {21         try {22             Document doc = StudentUtils.getDocument();23             Element student = doc.createElement("student");24             student.setAttribute("id", stu.getId() + ""); // 给学生元素添加属性25 26             // 分别创建姓名、年龄、性别节点27             Element name = doc.createElement("name");28             name.setTextContent(stu.getName());29             Element age = doc.createElement("age");30             age.setTextContent(stu.getAge() + "");31             Element gender = doc.createElement("gender");32             gender.setTextContent(stu.getGender());33 34             // 将姓名、年龄、性别节点添加到学生节点上35             student.appendChild(name);36             student.appendChild(age);37             student.appendChild(gender);38 39             // 在将student节点添加到students节点上40             doc.getElementsByTagName("students").item(0).appendChild(student);41             StudentUtils.write2XML(doc);42             System.out.println("添加成功!");43         } catch (Exception e) {44             e.printStackTrace();45         }46     }47 48     // 根据学生姓名查询学生信息49     public Student find(String name) throws NameNotFoundException {50         try {51             Document doc = StudentUtils.getDocument();52             NodeList list = doc.getElementsByTagName("student");53             for (int i = 0; i < list.getLength(); i++) {54                 Element ele = (Element) list.item(i);55                 if (name.equals((ele.getElementsByTagName("name")).item(0)56                         .getTextContent())) {57                     Student stu = new Student();58                     stu.setId(Integer.parseInt(ele.getAttribute("id")));59                     stu.setName(name);60                     stu.setAge(Integer.parseInt((ele61                             .getElementsByTagName("age")).item(0)62                             .getTextContent()));63                     stu.setGender(ele.getElementsByTagName("gender").item(0)64                             .getTextContent());65                     return stu;66                 }67             }68             throw new NameNotFoundException(name + "不存在!!!");69         } catch (NameNotFoundException e) {70             throw e;71         } catch (Exception e) {72             e.printStackTrace();73         }74         return null;75     }76 77     // 根据id删除学生信息78     public boolean delete(int id) {79         try {80             Document doc = StudentUtils.getDocument();81             NodeList list = doc.getElementsByTagName("student");82             for (int i = 0; i < list.getLength(); i++) {83                 Element ele = (Element) list.item(i);84                 if (String.valueOf(id).equals(ele.getAttribute("id"))) {85                     ele.getParentNode().removeChild(ele);86                     StudentUtils.write2XML(doc);87                     return true;88                 }89             }90         } catch (Exception e) {91             e.printStackTrace();92         }93         return false;94     }95 }

4:自定义异常类,封装异常

 1 /** 2  *  3  */ 4 package com.hlcui.exception; 5  6 /** 7  * @author Administrator 8  * 9  */10 public class NameNotFoundException extends Exception {11 12     /**13      * 14      */15     private static final long serialVersionUID = 1L;16 17     /**18      * 19      */20     public NameNotFoundException() {21     }22 23     /**24      * @param message25      */26     public NameNotFoundException(String message) {27         super(message);28     }29 30     /**31      * @param cause32      */33     public NameNotFoundException(Throwable cause) {34         super(cause);35     }36 37     /**38      * @param message39      * @param cause40      */41     public NameNotFoundException(String message, Throwable cause) {42         super(message, cause);43     }44 45 }

5:junit框架测试DAO方法

 1 /** 2  *  3  */ 4 package com.hlcui.test; 5  6 import org.junit.Test; 7  8 import com.hlcui.dao.StudentDAO; 9 import com.hlcui.entity.Student;10 import com.hlcui.exception.NameNotFoundException;11 12 /**13  * @author Administrator14  * 15  */16 public class TestStudentDAO {17     private StudentDAO dao = new StudentDAO();18 19     @Test20     public void testAdd() {21         Student stu = new Student();22         stu.setId(333);23         stu.setName("王二");24         stu.setAge(27);25         stu.setGender("男");26         dao.add(stu);27     }28 29     @Test30     public void testFind() throws NameNotFoundException {31         String name = "王二";32         Student stu = dao.find(name);33         System.out.println("学号:" + stu.getId() + "\n姓名:" + stu.getName()34                 + "\n年龄:" + stu.getAge() + "\n性别:" + stu.getGender());35 36     }37 38     @Test39     public void testDelete() {40         int id = 333;41         boolean flag = dao.delete(id);42         System.out.println(flag ? "删除成功!!" : "删除失败!!");43     }44 }

6:封装操作dom文件功能方法

 1 /** 2  *  3  */ 4 package com.hlcui.utils; 5  6 import java.io.FileOutputStream; 7 import java.io.IOException; 8  9 import javax.xml.parsers.DocumentBuilder;10 import javax.xml.parsers.DocumentBuilderFactory;11 import javax.xml.parsers.ParserConfigurationException;12 import javax.xml.transform.Transformer;13 import javax.xml.transform.TransformerConfigurationException;14 import javax.xml.transform.TransformerFactory;15 import javax.xml.transform.dom.DOMSource;16 import javax.xml.transform.stream.StreamResult;17 18 import org.w3c.dom.Document;19 20 /**21  * @author Administrator22  * 23  */24 public class StudentUtils {25 26     /* 获取Document对象* */27     public static Document getDocument() throws Exception {28         DocumentBuilderFactory sfb = DocumentBuilderFactory.newInstance();29         DocumentBuilder db = sfb.newDocumentBuilder();30         Document doc = db.parse("xml/exam.xml");31         return doc;32     }33 34     /* 将内存中的内容写到硬盘* */35     public static void write2XML(Document doc) throws Exception {36         TransformerFactory factory = TransformerFactory.newInstance();37         Transformer tf = factory.newTransformer();38         tf.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(39                 "xml/exam.xml")));40     }41 }

7:用户交互界面

 1 /** 2  *  3  */ 4 package com.hlcui.ui; 5  6 import java.io.BufferedReader; 7 import java.io.IOException; 8 import java.io.InputStreamReader; 9 10 import com.hlcui.dao.StudentDAO;11 import com.hlcui.entity.Student;12 import com.hlcui.exception.NameNotFoundException;13 14 /**15  * @author Administrator 用户交互界面16  */17 public class Main {18 19     public static StudentDAO dao = new StudentDAO();20 21     /**22      * 23      * @param args24      */25     public static void main(String[] args) {26 27         System.out.println("请选择操作模式:a:添加用户    b:查找用户    c:删除用户   exit:退出系统");28         BufferedReader br = null;29         try {30             while (true) {31                 br = new BufferedReader(new InputStreamReader(System.in));32                 String type = br.readLine();33                 if ("a".equals(type)) {34 35                     // 录入数据36                     System.out.println("请输入学号:");37                     int id = Integer.parseInt(br.readLine());38                     System.out.println("请输入姓名:");39                     String name = br.readLine();40                     System.out.println("请输入年龄:");41                     int age = Integer.parseInt(br.readLine());42                     System.out.println("请输入性别:");43                     String gender = br.readLine();44                     // 封装数据45                     Student stu = new Student();46                     stu.setId(id);47                     stu.setName(name);48                     stu.setAge(age);49                     stu.setGender(gender);50 51                     // 插入数据52                     dao.add(stu);53                 } else if ("b".equals(type)) {54                     System.out.println("请输入姓名:");55                     String name = br.readLine();56                     try {57                         Student stu = dao.find(name);58                         System.out.println("***********学生信息如下***********");59                         System.out.println("学号:" + stu.getId() + "\n姓名:"60                                 + stu.getName() + "\n年龄:" + stu.getAge()61                                 + "\n性别:" + stu.getGender());62                     } catch (NameNotFoundException e) {63                         System.out.println(e.getMessage());64                     }65                 } else if ("c".equals(type)) {66                     System.out.println("请输入学号:");67                     int id = Integer.parseInt(br.readLine());68                     boolean flag = dao.delete(id);69                     if (flag) {70                         System.out.println("删除成功!");71                     } else {72                         System.out.println("删除失败!");73                     }74                 } else if ("exit".equals(type.toLowerCase())) {75                     System.out.println("系统正在退出...");76                     try {77                         Thread.sleep(3000);78                     } catch (InterruptedException e) {79                         e.printStackTrace();80                     }81                     break;82                 } else {83                     System.out.println("您的操作暂不支持,请重新输入:");84                 }85             }86 87         } catch (IOException e) {88             e.printStackTrace();89         } finally {90             if (null != br) {91                 try {92                     br.close();93                 } catch (IOException e) {94                     e.printStackTrace();95                 }96             }97         }98     }99 }

代码均已经验证正确!

xml版本学生管理系统