javase 吃货联盟订餐使用分层结构完成

这是一个简单的餐饮系统实现,包括Food、Order和OrderItem类,用于表示菜品、订单和订单项。系统提供点餐、查看餐袋、签收、删除订单和点赞等功能。用户可以输入菜品编号和数量进行点餐,并设置配送时间和地址。订单处理逻辑在OrderService中实现,包括添加订单、查找订单、签收和删除订单的方法。FoodDao和OrderDao负责数据存储,使用静态Map模拟数据库操作。

实体类  food 类

package c.daomian;
//菜品
public class Food {
    private int id;//菜品编号
    private String name;//菜名
    private double price;//单价
    private int zan;//点赞数

    public Food(int id, String name, double price, int zan) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.zan = zan;
    }

    public Food() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getZan() {
        return zan;
    }

    public void setZan(int zan) {
        this.zan = zan;
    }

    @Override
    public String toString() {
        return "Food{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", zan=" + zan +
                '}';
    }
}

订单类

package c.daomian;

import java.util.List;

public class Order {
    private  int id;//订单编号
    private  String username;//订单人
    private  int time;//配送时间
    private  String address;//配送地址
    private  boolean sign;//是否签收
    private  double peiSong;//配送费
    private  double total;//订单总价格
    private List<OrderItem> orderItems;//订单项

    public Order(int id, String username, int time, String address, boolean sign, double peiSong, double total) {
        this.id = id;
        this.username = username;
        this.time = time;
        this.address = address;
        this.sign = sign;
        this.peiSong = peiSong;
        this.total = total;
    }

    public Order() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public boolean isSign() {
        return sign;
    }

    public void setSign(boolean sign) {
        this.sign = sign;
    }

    public double getPeiSong() {
        return peiSong;
    }

    public void setPeiSong(double peiSong) {
        this.peiSong = peiSong;
    }

    public double getTotal() {
        total=0;
        for (OrderItem item : orderItems) {
            total+=item.getSubTotal();
        }
        total+=peiSong;
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }

    public List<OrderItem> getOrderItems() {
        return orderItems;
    }

    public void setOrderItems(List<OrderItem> orderItems) {
        this.orderItems = orderItems;
    }
}

订单

package c.daomian;

public class OrderItem {
    private Food food;//菜品
    private int count;//份数
    private double subTotal;//餐费小计

    public OrderItem(Food food, int count) {
        this.food = food;
        this.count = count;
    }

    public OrderItem() {
    }

    public Food getFood() {
        return food;
    }

    public void setFood(Food food) {
        this.food = food;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public double getSubTotal() {
        return count*food.getPrice();
    }

}

入口

package c;

import c.view.FoodView;

public class Main {
    public static void main(String[] args){
        FoodView foodView = new FoodView();
        foodView.main();
    }
}

界面

package c.view;


import c.daomian.Food;
import c.daomian.Order;
import c.daomian.OrderItem;
import c.service.FoodService;
import c.service.OrderService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class FoodView {
    private FoodService foodService=new FoodService();
    private OrderService orderService=new OrderService();
    private Scanner scanner=new Scanner(System.in);
    public void main() {
        while (true) {
            menu();
            System.out.println("请选择:");
            int i = scanner.nextInt();
            switch(i){
                case 1:
                    order();
                    break;
                case 2:
                    view();
                    break;
                case 3:
                    sign();
                    break;
                case 4:
                    del();
                    break;
                case 5:
                    zan();
                    break;
                case 6:
                   return;
                default:
                    break;
            }
        }
    }

    private void zan() {
        System.out.println("FoodView.zan([])方法");
    }

    private void del() {
        System.out.println("订单删除");
        System.out.println("请输入要删除的定单号:");
        int id = scanner.nextInt();
        Order order = orderService.findById(id);
        if (order==null){
            System.out.println("您选择的订单不存在");
        }
        else if (!order.isSign()){
            System.out.println("该订单仍未签收,不能被删除!");
        }
        else{
            orderService.del(id);
            System.out.println("删除订单成功!");
        }
    }

    private void sign() {
        System.out.println("签收订单");
        System.out.println("请选择需要签收的订单编号:");
        int id = scanner.nextInt();
        Order order=orderService.findById(id);
        if (order==null){
            System.out.println("您选择的订单不存在!");
        }
        else if (order.isSign()){
            System.out.println("您选择的订单已经签收,不能再次签收!");
        }
        else{
            orderService.sign(order);
            System.out.println("签收成功!");
        }
    }

    private void view() {
        System.out.println("查看餐袋");
        System.out.println("序号\t订餐人\t餐品信息");
        List<Order> list=orderService.list();
        //循环遍历订单order
        for (Order order : list) {
            System.out.print(order.getId()+"\t\t"+order.getUsername()+"\t");
            //循环遍历订单项orderItem
            List<OrderItem> items = order.getOrderItems();
            for (OrderItem item : items) {
                System.out.print(item.getFood().getName()+item.getCount()+"份\t");
            }
            System.out.println();//换行
        }
    }

    private void order() {
        System.out.println("我要订餐");
        System.out.println("请输入用户名:");
        String username = scanner.next();
        //循环点餐:点多个菜品
        boolean end=false;
        Map<Integer,Integer> map=new HashMap<>();
        do{
            //菜品的菜单
            foodMenu();
            System.out.println("请输入你选择的菜品的序号:");
            int id = scanner.nextInt();
            System.out.println("请输入购买的份数:");
            int count = scanner.nextInt();
            //判断map原来点过菜品
            if (map.containsKey(id)){//点过该菜品
                Integer oldCount = map.get(id);
                map.put(id, count+oldCount);
            }else{
                map.put(id, count);
            }
            //是否继续点餐
            System.out.println("继续点餐(y/n)?");
            String s = scanner.next();
            if (!s.equals("y")){
                end=true;
            }
        }while (!end);
        int time=0;//送餐时间
        do {
            System.out.println("请输入配送时间(10-20的整点)送餐:");
            time=scanner.nextInt();
            //判断:提示
            if (!(time>=10 && time<=20)){
                System.out.println("配送时间输入错误,请重新输入!");
            }
        }while (!(time>=10 && time<=20));
        //请输入送餐地址:
        System.out.println("请输入送餐地址:");
        String adress = scanner.next();
        //添加订单
        Order order = orderService.add(map, username, time, adress);
        System.out.println("订餐成功!");
        System.out.print("您的订餐是");
        //得到订单项集合
        List<OrderItem> orderItems = order.getOrderItems();
        //循环遍历集合
        for (OrderItem item : orderItems) {
            System.out.println(item.getFood().getName()+item.getCount()+"份,餐费是"+item.getSubTotal());
        }
        System.out.println(",配送费是"+order.getPeiSong()+",总金额是:"+order.getTotal());
    }

    private void foodMenu() {
        //把dao的菜品集合返回
        List<Food> list=foodService.list();
        //循环遍历集合显示菜品
        System.out.println("序号\t菜名\t单价\t点赞数");
        for (Food food : list) {
            System.out.println(food.getId()+"\t\t"+food.getName()+"\t"+food.getPrice()+"\t"+(food.getZan()>0?food.getZan()+"赞":""));
        }
    }

    private void menu(){
        System.out.println("欢迎进入吃货联盟系统");
        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("*********************");
    }
}

订单处理逻辑Service

package c.service;

import c.dao.FoodDao;
import c.dao.OrderDao;
import c.daomian.Food;
import c.daomian.Order;
import c.daomian.OrderItem;


import java.util.*;

//处理订单业务逻辑
public class OrderService {
    private static int num=1;
    private FoodDao foodDao=new FoodDao();
    private OrderDao orderDao=new OrderDao();
    public Order add(Map<Integer, Integer> map, String username, int time, String adress) {
         //创建订单对象
        Order order = new Order();
        //创建List<OrderItem>对象
        List<OrderItem> orderItems=new ArrayList<>();
        //循环遍历map(定的菜品id和份数)
        Set<Integer> keySet = map.keySet();
        for (Integer id : keySet) {
            //根据菜品的id得到菜品
            Food food=foodDao.findById(id);//根据菜品的id得到Food对象
            //创建订单项OrderItem对象
            OrderItem orderItem = new OrderItem(food, map.get(id));
            //计算订单的总价格
//            order.setTotal(order.getTotal()+orderItem.getSubTotal());
            //加入到list
            orderItems.add(orderItem);
        }
        order.setOrderItems(orderItems);
        order.setId(num++);
        order.setUsername(username);
        order.setTime(time);
        order.setAddress(adress);
        order.setSign(false);
        order.setPeiSong(0);
        //存储到订单集合中去
        orderDao.add(order);
        return order;
    }

    public List<Order> list() {
        return orderDao.list();
    }

    public Order findById(int id) {
        return orderDao.findById(id);
    }

    public void sign(Order order) {
        order.setSign(true);
    }

    public void del(int id) {
        orderDao.del(id);
    }
}

食品处理逻辑server

package c.service;

import c.dao.FoodDao;
import c.daomian.Food;

import java.util.List;

public class FoodService {
    private FoodDao foodDao=new FoodDao();
    public List<Food> list() {
       return foodDao.list();
    }
}

食品dao类

package c.dao;

import c.daomian.Food;

import java.util.*;

public class FoodDao {

    //菜品数据存储在dao,数据结构Map<Integer,Food>
    private static Map<Integer, Food> foodMap;
    static {
        foodMap=new LinkedHashMap<>();
        foodMap.put(1,new Food(1, "大肘子", 59, 6));//1		大肘子	59.0	6赞
        foodMap.put(2,new Food(2, "锅包肉", 58, 5));//2		锅包肉	58.0	5
        foodMap.put(3,new Food(3, "辣鸭头", 48, 0));//3		辣鸭头	48.0
        foodMap.put(4,new Food(4, "麻辣虾", 69, 0));//4		麻辣虾	69.0
    }

    public List<Food> list() {
        Collection<Food> values = foodMap.values();
        return new ArrayList<>(values);
    }

    public Food findById(Integer id) {
        return foodMap.get(id);
    }


}

订单dao类

package c.dao;



import c.daomian.Order;

import java.util.ArrayList;
import java.util.List;

//处理订单的数据
public class OrderDao {
    private static List<Order> orders=new ArrayList<>();

    public void add(Order order) {
        orders.add(order);
    }

    public List<Order> list() {
        return orders;
    }

    public Order findById(int id) {
        //循环遍历订单
        for (Order order : orders) {
            if (order.getId()==id){
                return order;
            }
        }
        return null;
    }

    public void del(int id) {
        for (int i = 0; i < orders.size(); i++) {
            if (orders.get(i).getId()==id){
                orders.remove(i);
                break;
            }
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值