Java-吃货联盟订餐系统(对象&数组版)

1、订单类Order
    (1)订餐人姓名
    (2) 餐品信息
    (3)订单配送时间
    (4)订单配送地址
    (5)订单状态
    (6)订单的总金额
2、菜品类Meal
    (1)菜品名称
    (2)菜品单价
    (3)菜品点赞数
3、订单管理类OrderManage

(1)点餐
        输入订单信息
            姓名、餐品信息(菜品名称拼接分数的字符串形式)
            订单配送时间
            订单配送地址
            订单状态
            订单的总金额
            将订购成功的订单添加进集合(ArrayList add())            
(2)查看订单
        输出集合orders中所有订单的信息
(3)签收订单
        订单状态为已预定的订单可签收
        订单状态为已完成的订单不可重复签收
(4)删除订单
        订单状态为已完成的订单可删除
        订单状态为已预定的订单不可删除
(5)点赞
        输出集合foods中的所有菜品信息,选择要点赞的菜,点赞数+1
(6)退出

4、测试类
    调用订单管理类,实现功能

package oo.java.day0429.FoodieAlliance;

/**
 * TODO: Order
 *
 * @author shtch
 * @date 2023/4/29 13:32
 */
public class Order {
    String name;
    String dishMeg;
    int num;
    int time;
    String address;
    int states;
    double sumPrices;

    public Order() {
        super();
    }

    public Order(String name, String dishMeg, int num, int time, String address, int states, double sumPrices) {
        super();
        this.name = name;
        this.dishMeg = dishMeg;
        this.num = num;
        this.time = time;
        this.address = address;
        this.states = states;
        this.sumPrices = sumPrices;
    }

}
package oo.java.day0429.FoodieAlliance;

/**
 * TODO: Meal
 *
 * @author shtch
 * @date 2023/4/29 13:35
 */
public class Meal {
    String dishNames;
    double prices;
    int praiseNums;
    public Meal() {
        super();
    }

    public Meal(String dishNames, double prices, int praiseNums) {
        super();
        this.dishNames = dishNames;
        this.prices = prices;
        this.praiseNums = praiseNums;
    }
}
package oo.java.day0429.FoodieAlliance;

import java.util.Scanner;

/**
 * TODO: 订单管理
 *
 * @author shtch
 * @date 2023/4/29 13:38
 */
public class OrderManage {
    Scanner input = new Scanner(System.in);
    int OrderNum;

    Order order1 = new Order("张三", "红烧带鱼", 2, 12, "天成路207号", 1, 76.0);
    Order order2 = new Order("李四", "鱼香肉丝", 2, 12, "天成路207号", 0, 45.0);
    Order order3 = new Order();
    Meal meal1 = new Meal("红烧带鱼", 38.0, 0);
    Meal meal2 = new Meal("鱼香肉丝", 20.0, 0);
    Meal meal3 = new Meal("时令鲜蔬", 10.0, 0);
    Meal meal4 = new Meal();
    Order[] orders = new Order[]{order1, order2, order3};
    Meal[] meals = new Meal[]{meal1, meal2, meal3, meal4};
    /**
     * 找到要签收的订单,判断要签收的订单是否能找到,true表示能找到,false表示不能找到
     */
    boolean isSignFind = false;
    /**
     * 找到要删除的订单,判断要删除的订单是都能找到,true表示能找到,false表示不能找到
     */
    boolean isDelFind = false;

    /**
     * @param * @param i
     * @description TODO:打印菜单界面
     */
    public int start() {
        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("------------------------------");
        System.out.print("请选择:");
        Scanner sc = new Scanner(System.in);
        int inputNum = sc.nextInt();
        return inputNum;
    }

    /**
     * @param * @param i
     * @description TODO:选择菜单,进行操作
     */
    public void choose(int i) {
        switch (i) {
            case 1:
                // 我要订餐
                System.out.println("***我要订餐***");
                // 调用点餐方法
                orderFood();
                break;
            case 2:
                // 查看餐品信息
                System.out.println("***查看餐袋***");
                eachOrders();
                break;
            case 3:
                System.out.println("***签收订单***");
                // 签收订单
                sign();
                break;
            case 4:
                // 删除订单
                System.out.println("***删除订单***");
                delete();
                break;
            case 5:
                // 显示餐品列表
                System.out.println("***我要点赞***");
                upvoteMeal();
                break;
            case 6:
                // 退出系统
                System.out.println("谢谢使用,欢迎下次光临!");
                break;
            default:
                System.out.println("你输入错误,请重新输入");
                break;
        }

    }

    /**
     * @param * @param null
     * @description TODO:订餐功能
     */
    public Order orderFood() {
        int orderNum;
        for (int j = 0; j < orders.length; j++) {
            // 找到第一个空位置,可以添加订单信息,可以使用任何一个数组来做判断
            if (orders[j].name == null) {
                orderNum = j;
                // 查看菜单
                System.out.println("序号\t菜品名称\t价格\t点赞数");
                for (int i = 0; i < meals.length; i++) {
                    if (meals[i].dishNames != null) {
                        System.out.println((i + 1) + "\t" + meals[i].dishNames + "\t" + meals[i].prices + "\t" + meals[i].praiseNums);
                    }
                }
                System.out.print("请选择您要点的菜品编号:");
                int index = input.nextInt();
                // 客户选择的菜品为
                // 非常重要一定要搞明白
                Meal newMeal = meals[index - 1];
                System.out.println("您要点的菜品为:" + newMeal.dishNames);
                System.out.print("\n请选择您需要的份数:");
                int num = input.nextInt();
                //计算菜的价格
                double sumPrice = newMeal.prices * num;
                // 计算配送费,餐费满50元,免送餐费6元
                double deliCharge = (sumPrice >= 50) ? 0 : 6;

                System.out.print("请输入订餐人姓名:");
                String name = input.next();
                // 送达时间
                System.out.print("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
                int time = input.nextInt();
                while (time < 10 || time > 20) {
                    System.out.println("您输入错误,请您重新输入:");
                    time = input.nextInt();
                }

                System.out.println("请输入送餐地址:");
                String address = input.next();
                // 接受所有订单信息,封装成为对象重要中的重要
                // 餐品总价为
                double sumPrices = sumPrice + deliCharge;
                Order newOrder = new Order(name, newMeal.dishNames, num, time, address, 0, sumPrices);
                orders[orderNum] = newOrder;
                System.out.println("订餐成功!");
                System.out.println("您订的是:" + num + "份" + newMeal.dishNames);
                System.out.println("送餐时间:" + time + "点");
                System.out.println("餐费:" + sumPrice + "元,送餐费" + deliCharge + "元,总计:" + sumPrices + "元。");
                return newOrder;
            }
        }
        System.out.println("对不起,您的餐袋已满!");
        return null;
    }

    /**
     * @param * @param null
     * @description TODO:退出系统
     */
    public boolean isExit() {
        System.out.println("是否返回(输入0返回):");
        int i = input.nextInt();
        return i == 0 ? false : true;
    }

    /**
     * @param * @param null
     * @description TODO:查看餐袋功能
     */
    public void eachOrders() {
        // 查看餐袋
        System.out.println("***查看餐袋***");
        System.out.println("序号\t订餐人\t餐品信息\t\t送餐日期\t送餐地址\t\t总金额\t订单状态");
        for (int i = 0; i < orders.length; i++) {
            if (orders[i].name != null) {
                //订单状态在数组中是用0和1表示的,显示的时候要转换成已预订和已完成形式
                String state = (orders[i].states == 0) ? "已预定" : "已完成";
                //时间拼接“点”字
                String date = orders[i].time + "点";
                //订单总价格拼接“元”字
                String sumPrice = orders[i].sumPrices + "元";
                //输出信息
                System.out.println((i + 1) + "\t" + orders[i].name + "\t" + orders[i].dishMeg + "\t" + date + "\t"
                        + orders[i].address + "\t" + sumPrice + "\t" + state);
            }
        }
    }

    /**
     * @param * @param null
     * @description TODO:签收订单
     */
    public void sign() {
        System.out.print("请选择要签收的订单序号:");
        int signOrderId = input.nextInt();
        for (int i = 0; i < orders.length; i++) {
            // 状态为已预定,序号为用户输入的订单序号:可签收
            // 状态为已完成,序号为用户输入的订单序号:不可签收
            if (orders[i].name != null && orders[i].states == 0 && signOrderId == (i + 1)) {
                // 将状态值置为已完成
                orders[i].states = 1;
                System.out.println("订单签收成功!");
                isSignFind = true;
            } else if (orders[i].name != null && orders[i].states == 1 && signOrderId == (i + 1)) {
                System.out.println("您选择的订单已完成签收,不能再次签收!");
                isSignFind = true;
            }
        }
        // 未找到的订单序号:不可签收
        if (!isSignFind) {
            System.out.println("您选择的订单不存在!");
        }
    }

    /**
     * @param * @param null
     * @description TODO:删除订单
     */
    public void delete() {
        System.out.print("请输入要删除的订单序号:");
        int delId = input.nextInt();
        for (int i = 0; i < orders.length; i++) {
            // 状态值为已完成 序号值为用户输入的序号:可删除
            // 状态值为已预定 序号值为用户输入的序号:不可删除
            if (orders[i].name != null && orders[i].states == 1 && delId == (i + 1)) {
                // 表示找到了要删除的订单,并且订单可以删除
                isDelFind = true;
                // 执行删除操作:删除位置后的元素依次前移
                for (int j = delId - 1; j < orders.length - 1; j++) {
                    orders[j] = orders[j + 1];
                }
                // 最后一位清空
                orders[orders.length - 1] = new Order();
                System.out.println("删除订单成功!");
                break;// 这个break的作用是跳出188行的for循环结构
            } else if (orders[i].name != null && orders[i].states == 0 && delId == i + 1) {
                System.out.println("您选择的订单未签收,不能删除!");
                // 表示找到了要删除的订单,并且订单不可以删除
                isDelFind = true;
                break;
            }
        }

        /**
         * 未找到该序号的订单:不能删除
         * isDelFind=false表示没有找到要删除的订单*/
        if (!isDelFind) {
            System.out.println("您要删除的订单不存在!");
        }
    }

    /**
     * @param * @param null
     * @description TODO:点赞菜品
     */
    public void upvoteMeal() {
        System.out.println("序号\t菜品名称\t价格\t点赞数");
        for (int i = 0; i < meals.length && meals[i].dishNames != null; i++) {
            System.out.println((i + 1) + "\t" + meals[i].dishNames + "\t"
                    + meals[i].prices + "\t" + meals[i].praiseNums+"赞");
        }
        System.out.println("请给某个菜品点赞");
        int dian = input.nextInt();
        meals[dian - 1].praiseNums++;
        System.out.println("点赞成功");
        System.out.println(meals[dian - 1].dishNames + " "
                + meals[dian - 1].praiseNums + "赞");
    }
}
package oo.java.day0429.FoodieAlliance;

/**
 * TODO: Test
 *
 * @author shtch
 * @date 2023/4/29 13:47
 */
public class Test {
    public static void main(String[] args) {
        OrderManage manage = new OrderManage();
        do {
            //result接收选择菜单项id
            int result = manage.start();
            manage.choose(result);
        } while (!manage.isExit());
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值