随着不断的学习,我们有不同的手段和方法来对数据进行存储,今天我们将xml 文件当做数据存储方式(基于DOM4J)来进行数据的存储。这里我建了三个xml文件来存放数据:food.xml、order.xml、orderDetail.xml。
<?xml version="1.0" encoding="UTF-8"?>
<foods>
<food id="1">
<name>醋溜白菜</name>
<price>15.00</price>
<praise>25</praise>
</food>
<food id="2">
<name>鱼香肉丝</name>
<price>25.00</price>
<praise>31</praise>
</food>
<food id="3">
<name>糖醋排骨</name>
<price>35.00</price>
<praise>66</praise>
</food>
</foods>
<?xml version="1.0" encoding="UTF-8"?>
<orders>
<order id="1">
<name>张三</name>
<address>弘阳</address>
<phone>123456</phone>
</order>
<order id="2">
<name>张三</name>
<address>海南</address>
<phone>123</phone>
</order>
</orders>
<?xml version="1.0" encoding="UTF-8"?>
<details>
<detail id="1">
<userName>张三</userName>
<foodName>鱼香肉丝</foodName>
<price>25.00</price>
<count>2</count>
<sumPrice>50.00</sumPrice>
<time>12点</time>
<state>未签收</state>
</detail>
<detail id="2">
<userName>张三</userName>
<foodName>糖醋排骨</foodName>
<price>35.00</price>
<count>3</count>
<sumPrice>105.00</sumPrice>
<time>15点</time>
<state>未签收</state>
</detail>
</details>
接下来是java代码的编写:
public class SqlReader {
private String name;
Scanner input = new Scanner(System.in);
SAXReader saxReader = new SAXReader();
public void myInfo(){ //个人信息
try {
Document document = saxReader.read("src/main/resources/order.xml");
System.out.print("请输入你的姓名:");
this.name = input.next();
System.out.print("请输入你的地址:");
String address = input.next();
System.out.print("请输入你的电话:");
String phone = input.next();
Element orders = document.getRootElement();
List<Element> order = orders.elements("order");
String no = order.get(order.size()-1).attributeValue("id");
Integer count = new Integer(no)+1;
//添加信息
Element addOrder = orders.addElement("order");
addOrder.addAttribute("id", count+"");
addOrder.addElement("name").addText(this.name);
addOrder.addElement("address").addText(address);
addOrder.addElement("phone").addText(phone);
saveOrder(document);
} catch (DocumentException e) {
e.printStackTrace();
}
}
//打印菜单
public void showFood(){
try {
Document document = saxReader.read("src/main/resources/food.xml");
Element root = document.getRootElement();
List<Element> food = root.elements("food");
for(Element e:food){
String id = e.attributeValue("id");
String name = e.element("name").getTextTrim();
String price = e.element("price").getTextTrim();
String praise = e.element("praise").getTextTrim();
System.out.printf("序号:%s 菜名:%s 单价:%s 点赞数:%s",id,name,price,praise+"\n");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
//我要点餐
public void order(){
try {
Document document = saxReader.read("src/main/resources/food.xml");
System.out.print("请输入菜品的序号:");
int no = input.nextInt();
System.out.print("请输入份数:");
int count = input.nextInt();
System.out.print("请输入送餐时间:");
int time = input.nextInt();
if(time<8||time>22){
System.out.println("不在送餐时间范围内,请重新输入!");
System.out.print("请输入送餐时间:");
time = input.nextInt();
}
Element root = document.getRootElement();
List<Element> food = root.elements("food");
String foodName = null;
String price = null;
for(Element e:food) {
String id = e.attributeValue("id");
if(id.equals(no+"")) {
foodName = e.element("name").getTextTrim();
price = e.element("price").getTextTrim();
}
}
Integer sum = new Integer(price.substring(0,price.length()-3));
int sumPrice = sum * count;
String sumPrice2 = String.valueOf(sumPrice)+".00";
System.out.println("");
System.out.println("订餐成功!");
System.out.printf("您订的是:%s %s份 总价:%s 送餐时间:%s点",foodName,count,sumPrice2,time+"\n");
Document document2 = saxReader.read("src/main/resources/orderDetail.xml");
Element details = document2.getRootElement();
List<Element> detail = details.elements("detail");
String s = detail.get(detail.size()-1).attributeValue("id");
Integer num = new Integer(s)+1;
String nu = String.valueOf(num);
Element addDetail = details.addElement("detail");
addDetail.addAttribute("id",nu);
addDetail.addElement("userName").addText(this.name);
addDetail.addElement("foodName").addText(foodName);
addDetail.addElement("price").addText(price);
addDetail.addElement("count").addText(count+"");
addDetail.addElement("sumPrice").addText(sumPrice2);
addDetail.addElement("time").addText(time+"点");
addDetail.addElement("state").addText("未签收");
saveDetail(document2);
} catch (DocumentException e) {
e.printStackTrace();
}
}
//查看餐袋
public void query(){
try {
Document document = saxReader.read("src/main/resources/orderDetail.xml");
Element details = document.getRootElement();
List<Element> detail = details.elements("detail");
for(Element e:detail){
if(e.element("userName").getTextTrim().equals(this.name)){
String id = e.attributeValue("id");
String userName = e.element("userName").getTextTrim();
String foodName = e.element("foodName").getTextTrim();
String price = e.element("price").getTextTrim();
String count = e.element("count").getTextTrim();
String sumPrice = e.element("sumPrice").getTextTrim();
String time = e.element("time").getTextTrim();
String state = e.element("state").getTextTrim();
System.out.printf("序号:%s %s %s %s %s份 总价:%s 送餐时间:%s 订单状态:%s",
id,userName,foodName,price,count,sumPrice,time,state+"\n");
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
//签收订单
public void sign(){
try {
Document document = new SAXReader().read("src/main/resources/orderDetail.xml");
System.out.print("请输入订单序号:");
int no = input.nextInt();
boolean flag = false;
Element details = document.getRootElement();
List<Element> detail = details.elements("detail");
for(Element e:detail){
if(e.attributeValue("id").equals(no+"")){
flag = true;
if(e.element("state").getTextTrim().equals("未签收")){
e.element("state").setText("已签收");
System.out.println("订单签收成功!");
break;
}else{
System.out.println("该订单已签收,不能再次签收!");
break;
}
}
}
saveDetail(document);
if(!flag){
System.out.println("该订单不存在!");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
//删除订单
public void delete(){
try {
Document document = saxReader.read("src/main/resources/orderDetail.xml");
System.out.print("请输入订单序号:");
int no = input.nextInt();
boolean flag = false;
Element details = document.getRootElement();
List<Element> detail = details.elements("detail");
for(Element e:detail){
if(e.attributeValue("id").equals(no+"")){
flag = true;
if(e.element("state").getTextTrim().equals("已签收")){
e.getParent().remove(e);
System.out.println("删除成功!");
break;
}else{
System.out.println("该订单未签收,不能删除!");
break;
}
}
}
saveDetail(document);
if(!flag){
System.out.println("该订单不存在!");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
//我要点赞
public void praise(){
try {
Document document = saxReader.read("src/main/resources/food.xml");
System.out.print("请输入菜品序号:");
int no = input.nextInt();
boolean flag = false;
Element root = document.getRootElement();
List<Element> food = root.elements("food");
for(Element e:food){
if(e.attributeValue("id").equals(no+"")){
flag = true;
String praise = e.element("praise").getTextTrim();
Integer newPraise = new Integer(praise)+1;
String newPraise2 = String.valueOf(newPraise);
e.element("praise").setText(newPraise2);
System.out.println("点赞成功!");
break;
}
}
saveFood(document);
if(!flag){
System.out.println("该菜品不存在!");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
//保存信息
public void saveFood(Document document){
OutputFormat oft = OutputFormat.createPrettyPrint();
XMLWriter writer = null;
try {
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/main/resources/food.xml")),oft);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void saveOrder(Document document){
OutputFormat oft = OutputFormat.createPrettyPrint();
XMLWriter writer = null;
try {
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/main/resources/order.xml")),oft);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void saveDetail(Document document){
OutputFormat oft = OutputFormat.createPrettyPrint();
XMLWriter writer = null;
try {
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/main/resources/orderDetail.xml")),oft);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class Run {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
SqlReader s = new SqlReader();
System.out.println("*****欢迎使用吃货联盟系统******");
s.myInfo();
int num =0;
while(num==0) {
printMenu();
System.out.print("请输入你要进行的操作序号:");
int caozuo=input.nextInt();
switch(caozuo) {
case 1:
System.out.println("****我要点餐****");
s.showFood();
s.order();
break;
case 2:
System.out.println("****查看餐袋****");
s.query();
break;
case 3:
System.out.println("****签收订单****");
s.sign();
break;
case 4:
System.out.println("****删除订单****");
s.delete();
break;
case 5:
System.out.println("****我要点赞****");
s.praise();
break;
case 6:
System.out.println("****退出系统****");
num=1;
System.out.println("谢谢你的使用,欢迎下次光临!");
break;
default:
break;
}
}
}
public static void printMenu() {
System.out.println("********************");
System.out.println("1、我要点餐");
System.out.println("2、查看餐袋");
System.out.println("3、签收订单");
System.out.println("4、删除订单");
System.out.println("5、我要点赞");
System.out.println("6、退出系统");
System.out.println("********************");
}
}