模块化编程,不能再在main函数中一锅端。
xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><exam>
<student examid="222" idcard="111">
<name>张三</name>
<location>沈阳</location>
<grade>89</grade>
</student>
<student examid="444" idcard="333">
<name>李四</name>
<location>大连</location>
<grade>97</grade>
</student>
</exam>
最先进行编写的模块是 Javabean
不同模块的程序写在不同的包里面
封装数据的实体一般为domain 域对象
DAO层一般有接口和该接口的实现类! 接口用于规范实现类! 实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时 直接调用公共类DAO类!
dao(Data access object 数据访问对象)用于操作xml文档,StudentDao。 Javabean student封装Java数据。Main与用户打交道。
DAO共同的代码要抽取出来形成工具类。工具类所有的方法都是静态的。
utils则是提供工具方法,一般为静态,防止调用麻烦。
任何东西加字符串都是字符串 double+""
SHIFT+F6 重构-重命名
intellij的输出:
System.out.println; //输出后光标位于下一行
System.out.print; //输出光标位于本行
输入流:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String type = br.readLine();
type.equalsIgnoreCase("a") //不区分大小写的比较
xml的添加:
public void add(Student student){
try {
Document document = XmlUtilsByJaxp.getDocument();
Element student_node = document.createElement("student");
student_node.setAttribute("examid", student.getExamid());
student_node.setAttribute("idcard", student.getIdcard());
Element name = document.createElement("name");
name.setTextContent(student.getName());
Element location = document.createElement("location");
location.setTextContent(student.getLocation());
Element grade = document.createElement("grade");
grade.setTextContent(student.getGrade()+"");
student_node.appendChild(name);
student_node.appendChild(location);
student_node.appendChild(grade);
document.getElementsByTagName("exam").item(0).appendChild(student_node);
XmlUtilsByJaxp.write2Xml(document);
} catch (Exception e) {
throw new RuntimeException(e);
}
从下往上的设计思想。
xml的查找:
通过准考证号(examid)来进行学生信息的查找。 examid是student的一个属性,通过匹配来进行查找。
public Student find(String examid){
try {
Document document = XmlUtilsByJaxp.getDocument();
Student student = new Student();
NodeList list = document.getElementsByTagName("student");
for (int i=0;i<list.getLength();i++){
Element student_node = (Element) list.item(i);
String s_examid = student_node.getAttribute("examid");
if (s_examid.equals(examid)){
//get
student.setExamid(student_node.getAttribute("examid"));
student.setIdcard(student_node.getAttribute("idcard"));
student.setName(student_node.getElementsByTagName("name").item(0).getTextContent());
student.setLocation(student_node.getElementsByTagName("location").item(0).getTextContent());
student.setGrade(Double.parseDouble(student_node.getElementsByTagName("grade").item(0).getTextContent()));
return student;
}
}
return null;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
找到返回该对象(student),没找到返回NULL。
xml的删除:
通过姓名来删除。
dao中的删除:
public void delete(String name){
try {
Document document = XmlUtilsByJaxp.getDocument();
NodeList list = document.getElementsByTagName("name");
for (int i=0; i < list.getLength(); i++){
Node item = list.item(i);
if (item.getTextContent().equals(name)){
item.getParentNode().getParentNode().removeChild(item.getParentNode());
XmlUtilsByJaxp.write2Xml(document);
return;
}
}
throw new RuntimeException("对不起,您要删除的学生不存在");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
删除学生
try {
System.out.print("请输入删除的学生姓名:");
String name = br.readLine();
StudentDaoByDom4j dao = new StudentDaoByDom4j();
dao.delete(name);
System.out.println("恭喜你,删除成功");
} catch (Exception e) {
System.out.println(e.getMessage());
}
有时在开发时不允许改变,团队开发,只能实现方法,不能改变方法声明,异常也是一种返回。