模拟火车票软件(练习DOM4J对XML的读写等操作)
模拟火车票软件,是我自己的练习题,没有整理和注释,只做以后查看之用。与此有关的文件有tickets.xsd,tickets.xml存储车票,Ticket.java声明车票,StoreException.java包装异常,TestTicket.java测试类等不再写入。

package ticket.dom4j.wkjava;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

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 org.xml.sax.SAXException;

public class TicketXMLDAO {

private Document doc;
private String filename = "tickets.xml";
private SimpleDateFormat dateFmt = new SimpleDateFormat(
"yyyy-MM-dd");

public TicketXMLDAO() throws StoreException {
super();
try {
doc = load(filename);
} catch (Exception e) {
e.printStackTrace();
throw new StoreException(e);
}
}

private Document load(String xmlfile)
    throws SAXException, FileNotFoundException, DocumentException {

    SAXReader reader = new SAXReader(true);
    reader.setFeature(
"http://apache.org/xml/features/validation/schema",true);
    return reader.read(new FileInputStream(xmlfile));
}

public void store(String filename) throws IOException {
     Writer out = new OutputStreamWriter(new FileOutputStream(filename),
"utf-8");
    OutputFormat format = OutputFormat.createPrettyPrint();
    XMLWriter writer = new XMLWriter(out, format);
    writer.write(this.doc);
    out.close();
}

public Ticket insertTicket(Ticket ticket) throws StoreException {
String xpath =
"/tickets";
        Element tickets = (Element)doc.selectSingleNode(xpath);
        ticket.setId(getNextID());
        Element t = tickets.addElement(
"ticket");
        t.addAttribute(
"id", ticket.getId() );
        t.addElement(
"from").addText(ticket.getFrom());
        t.addElement(
"to").addText(ticket.getTo());
        t.addElement(
"price").addText(ticket.getPrice()+"");
        t.addElement(
"start").addText(dateFmt.format(ticket.getStart()));
        
        try {
store(filename);
} catch (IOException e) {
e.printStackTrace();
throw new StoreException(e);
}

return ticket;
    }

private String getNextID() {
String xpath =
"/tickets/ticket";
List list = doc.selectNodes(xpath);

int idValue = 0;
for (Iterator i = list.iterator();i.hasNext();){
Element t = (Element)i.next();
String id = t.attributeValue(
"id");
int value = Integer.parseInt(id.substring(1));
idValue = value>idValue? value : idValue;
}
idValue++;
return
"T" + idValue;
}

public Ticket updateTicket(Ticket ticket) throws StoreException {
String xpath =
"/tickets/ticket[@id = \" " + ticket.getId() + " \"]";
        Element t = (Element)doc.selectSingleNode(xpath);
        t.addElement(
"from").setText(ticket.getFrom());
        t.addElement(
"to").setText(ticket.getTo());
        t.addElement(
"price").setText(ticket.getPrice()+"");
        t.addElement(
"start").setText(dateFmt.format(ticket.getStart()));
        
        try {
store(filename);
} catch (IOException e) {
e.printStackTrace();
throw new StoreException(e);
}

return ticket;
    }

public Ticket removeTicket(Ticket ticket) throws StoreException{
String xpath =
"/tickets/ticket[@id = \" " + ticket.getId() + " \"]";
        Element t = (Element)doc.selectSingleNode(xpath);
        Element parent = t.getParent();
        parent.remove(t);
        try {
store(filename);
} catch (IOException e) {
e.printStackTrace();
throw new StoreException(e);
}
return ticket;
}

public Ticket findTicket(String id) throws StoreException {
String xpath =
"/tickets/ticket[@id = \" " + id + " \"]";

Ticket ticket = null;        
Element t = (Element)doc.selectSingleNode(xpath);

if(t==null)
return ticket;
ticket = new Ticket();
ticket.setId(t.attributeValue(
"id"));
        ticket.setFrom(t.elementText(
"from"));
        ticket.setTo(t.elementText(
"to"));
        ticket.setPrice(Double.parseDouble(t.elementText(
"price")));
        try {
ticket.setStart(dateFmt.parse(t.elementText(
"start")));
} catch (ParseException e) {
e.printStackTrace();
throw new StoreException(e);
}
        
return ticket;
    }

public List findTickets() throws StoreException {
List list = new ArrayList();
//String xpath = "/tickets/ticket";
List tickets = doc.getRootElement().elements();

for (Iterator i = list.iterator();i.hasNext();){
Element t = (Element)i.next();
Ticket ticket = new Ticket();
ticket.setId(t.attributeValue(
"id"));
        ticket.setFrom(t.elementText(
"from"));
        ticket.setTo(t.elementText(
"to"));
        ticket.setPrice(Double.parseDouble(t.elementText(
"price")));
        try {
ticket.setStart(dateFmt.parse(t.elementText(
"start")));
} catch (ParseException e) {
e.printStackTrace();
throw new StoreException(e);
}
list.add(ticket);
}
return list;
    }

public List findTicketByFrom(String from) throws StoreException {
List list = new ArrayList();
String xpath =
"/tickets/ticket[from=\""+from+"\"]";

List tickets = doc.selectNodes(xpath);

for (Iterator i = list.iterator();i.hasNext();){
Element t = (Element)i.next();
Ticket ticket = new Ticket();
ticket.setId(t.attributeValue(
"id"));
        ticket.setFrom(t.elementText(
"from"));
        ticket.setTo(t.elementText(
"to"));
        ticket.setPrice(Double.parseDouble(t.elementText(
"price")));
        try {
ticket.setStart(dateFmt.parse(t.elementText(
"start")));
} catch (ParseException e) {
e.printStackTrace();
throw new StoreException(e);
}
list.add(ticket);
}
return list;
    }

}
weiking   2006-04-20 12:29:55 评论:0   阅读:1618   引用:0

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

用,就用的漂亮点。文章嘛,借花献佛喽。