吃货联盟(基于XML)

基于XML的“吃货联盟系统”

随着不断的学习,我们有不同的手段和方法来对数据进行存储,今天我们将xml 文件当做数据存储方式(基于DOM4J)来进行数据的存储。这里我建了三个xml文件来存放数据:food.xml、order.xml、orderDetail.xml。

food.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>

order.xml(存放用户信息)

<?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>

orderDetail.xml(存放订单信息)

<?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代码的编写:

SqlReader:

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();
            }
        }
    }


}

Run:

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("********************");
    }
}

你可能感兴趣的:(吃货联盟)