本项目是在学习之余写的,主要用来练习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个小时左右设计完成。

基于XML数据库的学生信息管理系统的设计与实现的更多相关文章

  1. 基于JSP+Servlet的学生信息管理系统

    JavaWeb期末项目,一个基于JSP和Servlet的学生信息管理系统实现,前端用了bootstrap和一些自定义的css样式,数据库用了mysql 传送门: GitHub 实现功能 登录(教师, ...

  2. Linux下基于shell脚本实现学生信息管理系统

    #该管理系统是参考两位博主(时间有点远了,我忘了,请博主看到后联系我)后自行修改添加的.登录过程还有很多不完善,我就抛砖引玉啦. 废话不多,直接上码! #!/bin/bash# 学生管理系统# @ve ...

  3. 基于数据库MySQL的简易学生信息管理系统

    通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...

  4. 基于Spring MVC + Spring + MyBatis的【学生信息管理系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45603211 练习点设计: 模糊查询.删除.新增 一.语言和环境 实现语言:JAVA ...

  5. asp.net+sql数据库学生信息管理系统

    一款学生信息管理系统送给大家. 功能部分: 1.教师管理(添加,修改,删除,查看) 2.学生管理(添加,修改,删除,查看) 3.班级管理(添加,修改,删除,查看) 4.学生成绩管理(添加,修改,删除, ...

  6. 学生信息管理系统总结——student数据库中表关系分析

    说到关系,那就不得不提两个东西: 1.E-R图,也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型 2.关系模 ...

  7. 基于数组或链表的学生信息管理系统(小学期C语言程序实训)

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  8. Android(java)学习笔记195:学生信息管理系统案例(SQLite + ListView)

    1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...

  9. Android(java)学习笔记188:学生信息管理系统案例(SQLite + ListView)

    1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...

随机推荐

  1. 对C#中的web访问mysql数据库的一些知识点进行了整理归纳总结

    基本对比 使用方式 使用场合 优缺点 是否需要安装 需要的dll网址 引用方式 程序内引用 程序初期确定使用MySql,前期添加引用 大多数情况下使用在类文件内,多数使用于aspx,ashx等带有后置 ...

  2. LINQ语句

    http://wenku.baidu.com/link?url=hPKqDWql7DNr6W2MsINakjRYYNXmXywB_U3h9FFMeFjcToYpusI2fYKgHjZSRq7r3ULG ...

  3. Linux下实现C++类的动态链接

    1. 背景 在java中,jvm支持类的动态链接(Class.forName(String className)),用起来也很方便.动态链接是实现IOC(Inversion of Control,控制 ...

  4. 正确认识Android的内存管理机制,合理关闭进程 (一)

    随着大家收货后会有很多乐粉晒内存,为啦方便大家,在网上搜集了一些相关Andriod管理的相关机制合理管理内存,整理下发个贴. 首先要知道Android系统是基于Linux 2.6内核开发的开源操作系统 ...

  5. 深入理解Java虚拟机 - Java体系

    使用JAVA已经快三年了,但说来惭愧,一直以来认为Java就是Java语言本身,最多再包括一个JVM,对于整个Java的体系结构还是不甚明了,现在有时间把<深入理解Java虚拟机>这本书读 ...

  6. bzoj2818gcd

    原理很简单 题解我就不自己写了…… 做这题的时候,懂得了一个非常重要的转化:求(x, y) = k, 1 <= x, y <= n的对数等于求(x, y) = 1, 1 <= x, ...

  7. php网页显示正方形图片缩略图

    需求是这样的:原始图片的大小是不定的,类似800*600.1000*756,现有一个页面要以正方形(60*60)显示这些图片,注意:图片只能在内存处理,不能缩小后保存到本地磁盘. 解决办法: html ...

  8. UVA 10585 Center of symmetry

    题意:给出一个点集,问这个集合有没有中心点使点集对称,这个点可以是点集中的点也可以不是点集的点. 解法:一开始我枚举每两个点连线的中点……结果T了orz当时也不知道怎么想的…… 将点按横坐标排序,如果 ...

  9. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.10

    Every $k\times k$ positive matrix $A=(a_{ij})$ can be realised as a Gram matrix, i.e., vectors $x_j$ ...

  10. WebDriver 运行模式下使用rc 代码

    selenium2 对之前的rc 代码提供了兼容性接口,如果你之前的code 都是用rc 写,而现在又想摆脱要每次启动server,你只需要 略做修改即可.代码如下: public class Tes ...