zoukankan      html  css  js  c++  java
  • 基于XML数据库的学生信息管理系统的设计与实现

    本项目是在学习之余写的,主要用来练习MVC+DAO的分层设计思想,项目基于一个简单的XML学生数据库,使用XML作为数据库的原因是其十分的小巧与方便,使用dom4j即可进行方便的解析。因为这段时间课程一直比较密集,在Java相关内容的学习上比较滞后。希望用这个小项目来练一练久矣不写代码的手,也作为研一一个月来的学习小结吧。不废话了,具体内容如下:


    项目说明:

    本项目提供简单的用户界面(命令行),实现对XML数据库中学生数据的增删改查操作。项目要求使用分层设计思想,为什么要分层?分层可以将不同的代码块分离出来,避免不同功能的代码耦合,为程序扩展和维护提供方便。使用分层,也可以简单化一个系统的设计过程。

    DB: students.xml
    - Entity: Student 类 (packet: cn.myseu.test.stuMana.entity)
    - Dao: StudentDao 类,完成具体的增删改查操作 (packet: cn.myseu.test.stuMana.dao)
    - UI: StudentUI 类,实现用户输入操作  (packet: cn.myseu.test.stuMana.ui)
    - SMS 类,提供主函数和用户界面  ( packet: cn.myseu.test.stuMana )


    数据库如下:student.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <students> 
      <student id="133122"> 
        <name>well</name>  
        <age>22</age> 
      </student> 
    </students>
    


    设计Student类完成对数据库中数据的封装

    package cn.myseu.test.stuMana.entity;
    
    public class Student {
    	private String id;
    	private String name;
    	private String age;
    	
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	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;
    	}
    	
    	
    }
    


    设计StudentDao类完成对XML数据库的增删改查操作(这里将公操作进行了抽取,分布为getDocument()和write2xml())

    package cn.myseu.test.stuMana.dao;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    import cn.myseu.test.stuMana.entity.Student;
    
    public class StudentDao {
    	
    	/**
    	 * Add a new student to the database
    	 * @param s
    	 * @return
    	 * @throws Exception 
    	 */
    	public boolean create(Student s) throws Exception{
    		boolean flag = false;
    		if(s!=null){
    			Document doc = getDocument();
    			Element root = doc.getRootElement();
    			Element newElement = root.addElement("student");
    			newElement.addAttribute("id", s.getId());
    			newElement.addElement("name").setText(s.getName());
    			newElement.addElement("age").setText(s.getAge());
    			write2xml(doc);
    			flag = true;
    		}
    		return flag;
    	}
    	
    	/**
    	 * delete a student from the xml-database
    	 * @param id  the student_id you want to delete
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean delete(String id) throws Exception{
    		boolean flag = false;
    		Document doc = getDocument();
    		String xpath = "//student[@id='"+id+"']";
    		Element element = (Element) doc.selectSingleNode(xpath);
    		if(element!=null){
    			element.getParent().remove(element);
    			write2xml(doc);
    			flag = true;
    		}else
    			System.out.println("ID is not existed!");
    		return flag;
    	}
    	
    	/**
    	 * search the information of a specified student
    	 * @param id
    	 * @throws Exception
    	 */
    	public void check(String id) throws Exception{
    		Document doc = getDocument();
    		String xpath = "//student[@id='"+id+"']";
    		Element element = (Element) doc.selectSingleNode(xpath);
    		if(element!=null){
    			System.out.println("stu_id:"+element.attributeValue("id"));
    			System.out.println("stu_name:"+element.elementText("name"));
    			System.out.println("stu_age:"+element.elementText("age"));
    		}else
    			System.out.println("ID is not existed!");
    	}
    	
    	/**
    	 * update a specified student
    	 * @param s
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean update(Student s) throws Exception{
    		boolean flag = false;
    		Document doc = getDocument();
    		String xpath = "//student[@id='"+s.getId()+"']";
    		Element element = (Element) doc.selectSingleNode(xpath);
    		if(element!=null){			
    			element.element("name").setText(s.getName());
    			element.element("age").setText(s.getAge());
    			write2xml(doc);
    			flag = true;
    		}
    		else
    			System.out.println("ID is not existed!");
    		return flag;
    	}
    
    	/*
    	 * the public function
    	 * getDocument() & write2xml
    	 */
    	private void write2xml(Document doc) throws FileNotFoundException,
    			UnsupportedEncodingException, IOException {
    		OutputStream os = new FileOutputStream(new File("src/cn/myseu/test/stuMana/db/students.xml"));
    		OutputFormat format = OutputFormat.createPrettyPrint();
    		XMLWriter xw = new XMLWriter(os,format);
    		xw.write(doc);
    		xw.close();
    	}
    
    	private Document getDocument() throws DocumentException {
    		SAXReader sr = new SAXReader();
    		Document doc = sr.read(new File("src/cn/myseu/test/stuMana/db/students.xml"));
    		return doc;
    	}
    	
    }
    


    设计StudentUI类,完成系统功能:

    package cn.myseu.test.stuMana.ui;
    
    import java.util.Scanner;
    
    import cn.myseu.test.stuMana.dao.StudentDao;
    import cn.myseu.test.stuMana.entity.Student;
    
    public class StudentUI {
    	
    	public void create() throws Exception{
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("Input stu_id:");
    		String id = scanner.nextLine();
    		System.out.println("Input stu_name:");
    		String name = scanner.nextLine();
    		System.out.println("Input stu_age:");
    		String age = scanner.nextLine();
    		
    		Student s = new Student();
    		s.setId(id);
    		s.setName(name);
    		s.setAge(age);
    		
    		StudentDao stuDao = new StudentDao();
    		boolean flag = stuDao.create(s);
    		if(flag)
    			System.out.println("Your create operation is successful!");
    		else
    			System.out.println("Your create operation is failed!");
    	}
    	
    	public void delete() throws Exception{
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("Input the stu_id of the student who you want to delete:");
    		String id = scanner.nextLine();
    		StudentDao stuDao = new StudentDao();
    		boolean flag = stuDao.delete(id);
    		if(flag)
    			System.out.println("Your delete operation is successful!");
    		else
    			System.out.println("Your delete operation is failed!");
    	}
    	
    	public void check() throws Exception{
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("Input the stu_id of the student who you want to get:");
    		String id = scanner.nextLine();
    		StudentDao stuDao = new StudentDao();
    		stuDao.check(id);
    	}
    	
    	public void update() throws Exception{
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("Input the stu_id of the student who you want to update:");
    		String id = scanner.nextLine();
    		System.out.println("The new name:");
    		String name = scanner.nextLine();
    		System.out.println("The new age:");
    		String age = scanner.nextLine();
    		Student s = new Student();
    		s.setId(id);
    		s.setAge(age);
    		s.setName(name);
    		StudentDao stuDao = new StudentDao();
    		boolean flag = stuDao.update(s);
    		if(flag)
    			System.out.println("Your delete operation is successful!");
    		else
    			System.out.println("Your delete operation is failed!");
    	}
    }
    


    设计SMS类,提供系统菜单和用户输入输出:

    package cn.myseu.test.stuMana;
    
    import java.util.Scanner;
    
    import cn.myseu.test.stuMana.ui.StudentUI;
    
    public class SMS {
    	public static void main(String[] args) throws Exception {
    		System.out.println("========================================");
    		System.out.println("====== Student Management System =======");
    		System.out.println("====== Version 1.0 Author:Well   =======");
    		System.out.println("========================================");
    		System.out.println("1.create a new student");
    		System.out.println("2.delete a student from the system");
    		System.out.println("3.search information of a student");
    		System.out.println("4.update information of a student");
    		System.out.println("========================================");
    		System.out.println("Please input your operation number:");
    		
    		Scanner scanner = new Scanner(System.in);
    		StudentUI sui = new StudentUI();
    		
    		int num = Integer.parseInt(scanner.nextLine());
    		switch(num){
    			case 1:
    				sui.create();break;
    			case 2:
    				sui.delete();break;
    			case 3:
    				sui.check();break;
    			case 4:
    				sui.update();break;
    			default:
    				System.out.println("You should input form [1-4]");;break;
    		}
    	}
    }
    


    最后,简单而丑陋的系统运行界面如下:



    最后,这个简单丑陋的系统仅仅是练习和复习相关的知识所用。但我认为也是一个非常简单的分层设计思想的很好的体现。系统简单容易上手。大概用了3个小时左右设计完成。

  • 相关阅读:
    你好,2021!
    庚子走,辛丑来,愿一切安好!
    花魂鸟魂总难留,鸟自无言花自羞
    熟悉的小胡同
    夜半听鼾声
    写在儿子22岁生日
    vue配置Azure Artifacts npm包源
    RabbitMQ出错:AMQP close-reason, initiated by Peer, code=530的解决办法
    .NET MVC存储图片到数据库的解决方案
    EF Core解决报错’EntityTypeBuilder未包含“ToTable”的定义‘的方法
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3365960.html
Copyright © 2011-2022 走看看