用集合的方式创建饭店外送订餐系统

1创建一个(Food)食物类,定义私有属性(private)变量,生成无参有参set/get/toString方法.

2创建一个(Order)订单类,定义私有属性(private)变量,生成无参有参set/get/toString方法.

3

1>创建主类OrderManger,分别定义静态常量来存储食品和订单信息,然后用静态代码块来初始化订单信息.

2>在主类OrderManger静态代码块下创建main主类,读取用户输入并判断是否退出,这里直接false就行了,毕竟代码还要运行,哈哈.然后就是菜单信息部分,要记得用控制台语句输入,然后功能部分采用switch case结构.case1~6分别对应菜单部分的6个选项.

3>case1.1订餐功能部分精讲:菜单1选项是我要订餐,那木这个功能首先就要打印订餐提示,然后就是键盘输入点餐人姓名,然后显示可以点的菜,即输出一遍菜品信息,然后就是用集合遍历菜品列表,然后就是输入点菜的序号和份数,构造字符串dishMessge用于存储订单信息,之后提示输入送餐时间,验证时间合法性,之后就是输入送餐地址,再设置订单初始状态为未签收.

1.2计算菜品总价(分为订单价格和配送费用),这里注意三目运算符的运用double driverMoney = foodPrice > 50 ? 0 : 6; // 计算配送费,如果菜品金额超过50元则不收配送费,然后就是总费用计算,打印输出点单信息(包括订单和费用信息),,再打印送餐信息,最后将这个信息添加到列表.

case2查看餐袋,遍历输出订单信息即可用集合调用get方法

case3遍历订单列表,检查订单状态并签收订单,如果遍历结束后仍没有匹配到订单,提示用户

case4删除订单功能开始,这里注意订单状态,没签收不能被删除,集合元素下标加一即是要删除的当前订单号

case5即是给菜品点赞的功能,首先要遍历打印菜单列表,因为只有列出来才能供用户选择,然后用if else循环更新用户点赞数,注意在不在列表内以及是不是有效序号.

case6就是退出 isExit = true;

若不在1~6范围类则会提示错误,重新输入

代码部分:

public class Order {
    private String name;//姓名
    private String dishMessg;//订单菜品信息,形式是菜名+份数
    private int time;//点餐时间
    private String address;//点餐地址
    private int state;//订单状态
    private double sumPrice;//订单总价
//无参构造
    public Order() {
    }
//有参构造
    public Order(String name, String dishMessg, int time, String address, int state, double sumPrice) {
        this.name = name;
        this.dishMessg = dishMessg;
        this.time = time;
        this.address = address;
        this.state = state;
        this.sumPrice = sumPrice;
    }
//set和get方法
    public String getName() {
        return name;
    }

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

    public String getDishMessg() {
        return dishMessg;
    }

    public void setDishMessg(String dishMessg) {
        this.dishMessg = dishMessg;
    }

    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 int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public double getSumPrice() {
        return sumPrice;
    }

    public void setSumPrice(double sumPrice) {
        this.sumPrice = sumPrice;
    }
//toString方法
    @Override
    public String toString() {
        return "Order{" +
                "name='" + name + '\'' +
                ", dishMessg='" + dishMessg + '\'' +
                ", time=" + time +
                ", address='" + address + '\'' +
                ", state=" + state +
                ", sumPrice=" + sumPrice +
                '}';
    }
}
public class Food {
    private String dishName;//菜名
    private double dishPrice;//菜价
    private int dishNums;//菜的点赞数
//无参构造
    public Food() {
    }
//有参构造
    public Food(String dishName, double dishPrice, int dishNums) {
        this.dishName = dishName;
        this.dishPrice = dishPrice;
        this.dishNums = dishNums;
    }
//get和set方法
    public String getDishName() {
        return dishName;
    }

    public void setDishName(String dishName) {
        this.dishName = dishName;
    }

    public double getDishPrice() {
        return dishPrice;
    }

    public void setDishPrice(double dishPrice) {
        this.dishPrice = dishPrice;
    }

    public int getDishNums() {
        return dishNums;
    }

    public void setDishNums(int dishNums) {
        this.dishNums = dishNums;
    }
//toString方法的生成
    @Override
    public String toString() {
        return "Food{" +
                "dishName='" + dishName + '\'' +
                ", dishPrice=" + dishPrice +
                ", dishNums=" + dishNums +
                '}';
    }
}
import java.util.ArrayList;//这里导入数组类
import java.util.Scanner;//scanner调用

public class OrderManage {
    private static final ArrayList<Food> FOOD_LIST=new ArrayList<>();//用final定义一个静态常量来存储食品信息
    private static final ArrayList<Order> ORDER_LIST=new ArrayList<>();//用final定义一个静态常量来存储订单信息
    static {//定义静态方法添加订单信息
        FOOD_LIST.add(new Food("鱼香肉丝",20.0,5));
        FOOD_LIST.add(new Food("红烧带鱼",30.0,15));
        FOOD_LIST.add(new Food("时令鲜蔬",15.0,10));

    }

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);//用于读取用户输入
        Boolean isExit=false;//控制是否退出
        System.out.println("-------------------------欢迎来到饭店外送订单系统--------------------------");//系统首页
//菜单信息
    while (!isExit) {
        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("请选择功能(输入序号):");
        int choose = scanner.nextInt();//控制台读取用户输入

        switch (choose) {
            // case 1: 订餐功能开始
            case 1:
                System.out.println("----->我要订餐<-----"); // 打印订餐提示
                System.out.println("请输入订餐人姓名:"); // 提示用户输入订餐人姓名
                String name = scanner.next(); // 读取用户输入的姓名
                System.out.println("上菜单"); // 提示菜单信息
                System.out.println("序号\t菜名\t价格\t点赞数"); // 打印菜单列标题
                // 遍历菜品列表,打印菜品信息
                for (int i = 0; i < FOOD_LIST.size(); i++) {
                    System.out.println((i + 1) + "\t" + FOOD_LIST.get(i).getDishName() + "\t" + FOOD_LIST.get(i).getDishPrice() + "元\t" + FOOD_LIST.get(i).getDishNums() + "赞");
                }
                System.out.println("请选择你要点的菜(输入序号):"); // 提示用户选择菜品
                int dishChoose = scanner.nextInt(); // 读取用户输入的菜品序号
                System.out.println("输入你要的菜品的份数:"); // 提示输入份数
                int dishCount = scanner.nextInt(); // 读取用户输入的菜品份数
                // 构造菜品信息字符串
                String dishMessge = FOOD_LIST.get(dishChoose - 1).getDishName() + dishCount + "份";//订单菜品信息,形式是菜名+份数
                System.out.println("请输入送餐时间(10-23之间的整点数):"); // 提示输入送餐时间
                int time = scanner.nextInt(); // 读取用户输入的送餐时间
                // 验证时间是否在10-23之间
                while (time < 10 || time > 23) {
                    System.out.println("时间只能在10-23之间整点,请重新输入:");
                    time = scanner.nextInt();
                }
                System.out.println("请输入送餐地址:"); // 提示输入送餐地址
                String address = scanner.next(); // 读取用户输入的送餐地址
                int orderState = 0; // 设置订单初始状态为未签收
                // 计算菜品总价
                double foodPrice = FOOD_LIST.get(dishChoose - 1).getDishPrice() * dishCount;
                double driverMoney = foodPrice > 50 ? 0 : 6; // 计算配送费,如果菜品金额超过50元则不收配送费
                // 总费用计算
                double dishSumPrice = foodPrice + driverMoney;
                System.out.println("订餐成功,订餐信息如下:"); // 提示订餐成功
                System.out.println("你点的菜:" + dishMessge); // 打印菜品信息
                System.out.println("菜品金额:" + foodPrice + ",配送费:" + driverMoney); // 打印费用信息
                System.out.println("你要求" + time + "点送到" + address); // 打印送餐信息
                // 将订单信息添加到订单列表
                ORDER_LIST.add(new Order(name, dishMessge, time, address, orderState, dishSumPrice));
                break;
// case 2: 查看订单功能开始
            case 2:
                System.out.println("----->查看餐袋<-----"); // 打印查看订单提示
                System.out.println("序号\t订餐人姓名\t菜品信息\t送餐时间\t送餐地址\t订单价格\t订单状态"); // 打印表头
                // 遍历订单列表,打印订单信息
                for (int i = 0; i < ORDER_LIST.size(); i++) {
                    System.out.println((i + 1) + "\t" + ORDER_LIST.get(i).getName() + "\t" + ORDER_LIST.get(i).getDishMessg() + "\t" + ORDER_LIST.get(i).getTime() + "点\t" + ORDER_LIST.get(i).getAddress() + "\t" + ORDER_LIST.get(i).getSumPrice() + "元\t" + (ORDER_LIST.get(i).getState() == 0 ? "已预订" : "已完成"));
                }
                break;
// case 3: 签收订单功能开始
            case 3:
                System.out.println("----->签收订单<-----"); // 签收订单提示
                System.out.println("请输入你要签收的订单(输入序号):"); // 提示输入签收订单序号
                int orderChoose = scanner.nextInt(); // 读取用户输入的订单序号
                // 遍历订单列表,检查订单状态并签收订单
                for (int i = 0; i < ORDER_LIST.size(); i++) {
                    if (ORDER_LIST.get(i).getState() == 0 && orderChoose == (i + 1)) {
                        ORDER_LIST.get(i).setState(1); // 更改订单状态为已签收
                        System.out.println("订单签收成功");
                    } else if (ORDER_LIST.get(i).getState() == 1 && orderChoose == (i + 1)) {
                        System.out.println("该订单已签收,不能重复签收");
                    }
                }
                // 如果遍历结束后仍没有匹配到订单,提示用户
                if (ORDER_LIST.stream().noneMatch(order -> orderChoose == (ORDER_LIST.indexOf(order) + 1))) {
                    System.out.println("系统中没有你要签收的订单");
                }
                break;
// case 4: 删除订单功能开始
            case 4:
                System.out.println("----->删除订单<-----"); // 删除订单提示
                System.out.println("请输入你要删除的订单序号(输入序号):"); // 提示输入删除订单序号
                int deleteChoose = scanner.nextInt(); // 读取用户输入的订单序号
                // 遍历订单列表,检查订单状态并删除订单
                for (int i = 0; i < ORDER_LIST.size(); i++) {
                    if (ORDER_LIST.get(i).getState() == 1 && deleteChoose == (i + 1)) {
                        ORDER_LIST.remove(i); // 删除订单
                        System.out.println("订单删除成功");
                    } else if (ORDER_LIST.get(i).getState() == 0 && deleteChoose == (i + 1)) {
                        System.out.println("订单未签收,不能删除");
                    }
                }
                // 如果遍历结束后仍没有匹配到订单,提示用户
                if (ORDER_LIST.stream().noneMatch(order -> deleteChoose == (ORDER_LIST.indexOf(order) + 1))) {
                    System.out.println("系统中没有你要删除的订单");
                }
                break;
// case 5: 给菜品点赞功能开始
            case 5:
                System.out.println("----->我要点赞<-----"); // 点赞提示
                // 打印菜品列表
                System.out.println("序号\t菜名\t价格\t点赞数");
                for (int i = 0; i < FOOD_LIST.size(); i++) {
                    System.out.println((i + 1) + "\t" + FOOD_LIST.get(i).getDishName() + "\t" + FOOD_LIST.get(i).getDishPrice() + "元\t" + FOOD_LIST.get(i).getDishNums() + "赞");
                }
                System.out.println("请选择你要点赞的菜(选择序号):"); // 提示选择点赞菜品
                int goodChoose = scanner.nextInt(); // 读取用户输入的菜品序号
                // 根据输入的菜品序号,更新菜品点赞数
                if (goodChoose > 0 && goodChoose <= FOOD_LIST.size()) {//如果用户输入的序号在菜品列表的有效范围内
                    FOOD_LIST.get(goodChoose - 1).setDishNums(FOOD_LIST.get(goodChoose - 1).getDishNums() + 1);
                    // 获取用户选择的菜品(下标为goodChoose - 1,因为数组/列表的下标从0开始),
                    // 并将其点赞数(或这里可能表示的是数量,但根据语境,我将它解释为点赞数)增加1
                    System.out.println("点赞成功!");
                } else {// 如果用户输入的序号不在菜品列表的有效范围内
                    System.out.println("请输入有效序号!");
                }
                break;
            case 6:
                System.out.println("----->退出系统<-----");
                isExit = true;
                break;
            default:
                System.out.println("输入错误,请重新输入序号!");
                break;
        }
        if (!isExit) {
            System.out.println("按任意键继续,输入'exit'退出");
            String choice = scanner.next();
            if ("exit".equalsIgnoreCase(choice)) {
                isExit = true;
            }
        }
    }

        System.out.println("欢迎下次光临,再见");
        scanner.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值