吃货联盟订餐系统

这是一个使用Java编程实现的简单订餐系统,涵盖了订餐、查看餐袋、签收订单、删除订单和点赞等功能。系统利用数组存储菜品、订单信息,并通过循环和条件判断实现用户交互。
摘要由CSDN通过智能技术生成

该项目利用Java基础(数据类型、数据、循环等Java基础知识),非常推荐给新手进行操作。

package com.hubstc.order;

import java.util.Scanner;

public class OrderFoodSys {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 各数组主体通过下标进行关联
                // 定义数据主体:菜品
                String[] dishNames = { "红烧带鱼", "鱼香肉丝", "时令蔬菜" }; // 菜品名称
                double[] prices = { 38.0, 20.0, 10.0 }; // 单价
                int[] praiseNums = new int[3]; // 点赞数

                // 初始化2个订单信息
                // 定义数据主体:订单-订餐人 餐品信息 送餐时间 送餐地址 总金额 订单状态
                String[] names = new String[4];
                String[] dishMsg = new String[4]; // 菜品名称+订份数
                int[] times = new int[4];
                String[] address = new String[4];
                double[] sumPrices = new double[4];
                int[] states = new int[4]; // 0:已预订 1:已完成

                names[0] = "张三";
                dishMsg[0] = "红烧带鱼 2份";
                times[0] = 10;
                address[0] = "知春路223号";
                sumPrices[0] = 76; // 餐费>50元免配送费,否则配送费6元
                states[0] = 1;

                names[1] = "李四";
                dishMsg[1] = "鱼香肉丝    1份";
                times[1] = 14;
                address[1] = "江汉路223号";
                sumPrices[1] = 26; // 餐费>50元免配送费,否则配送费6元
                states[1] = 0;

                // 搭建项目整体流程框架
                Scanner sc = new Scanner(System.in);
                int num = -1; // 用户输入0返回时的输入数字,当num = 0时重复显示菜单
                System.out.println("欢迎使用“吃货联盟订餐系统”");

                // 记录用户是否退出系统的状态:退出:true 不退出:false
                boolean flag = false;

                do {
                    System.out.println("****************************************");
                    System.out.println("1:订餐 2:查看餐袋 3:签收订单 4:删除订单 5:点赞 6:退出");
                    System.out.println("****************************************");
                    System.out.println("请选择:");
                    int choice = sc.nextInt();
                    switch (choice) {
                    case 1:
                        System.out.println("\n****************订餐*****************");    
                        /*
                         * 订餐功能实现代码 功能实现: 订餐前判断订单(boolean变量)是否已满,如果已满则不能订餐,否则就可以订餐
                         */
                        boolean isAdd = false;
                        for (int i = 0; i < names.length; i++) {
                            if (names[i] == null) {
                                // 订单未满,可以订餐
                                isAdd = true;

                                // 开始订餐
                                System.out.print("请输入订餐人姓名:");
                                String name = sc.next();

                                // 循环输出菜品信息
                                System.out.println("序号\t菜名\t单价");
                                for (int j = 0; j < dishNames.length; j++) {
                                    String praise = (praiseNums[j] == 0) ? "" : praiseNums[j] + "个赞";
                                    System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + prices[j]+"\t"+praise);
                                }

                                // 菜品编号的输入及判断
                                System.out.print("请输入您要点的菜品编号:");
                                int no = sc.nextInt();
                                while (no < 1 || no > dishNames.length) {
                                    System.out.print("本店没有这个菜品,请重新选择:");
                                    no = sc.nextInt();
                                }

                                // 点餐份数
                                System.out.print("请输入你需要的份数:");
                                int number = sc.nextInt();

                                // 送餐时间的输入及判断
                                System.out.print("请输入送餐时间(送餐时间只能在10-20之间的整点):");
                                int time = sc.nextInt();
                                while (time < 10 || no > 20) {
                                    System.out.println("不在配送时间内,请输入10-20之间的整点:");
                                    time = sc.nextInt();
                                }

                                // 送餐地址
                                System.out.print("请输入送餐地址:");
                                String addresses = sc.next();

                                // 输出订单信息给用户看并将订餐信息添加到订单信息
                                System.out.println("订单成功!");

                                // 菜品信息:菜品名称 份数
                                String dishInfo = dishNames[no - 1] + " " + number + "份";
                                System.out.println("您订的是:" + dishInfo);
                                System.out.println("送餐时间:" + time + "点");

                                // 餐费 配送费 总计
                                double dishprice = prices[no - 1] * number; // 餐费=单价*份数
                                double price = (dishprice > 50) ? 0 : 6; // 配送费
                                double sumPrice = dishprice + price; // 总计
                                System.out.println("餐费:" + dishprice + "元,配送费:" + price + "元,总计:" + sumPrice + "元");

                                // 将订餐信息添加到订单信息
                                names[i] = name;
                                dishMsg[i] = dishInfo;
                                times[i] = time;
                                address[i] = addresses;
                                sumPrices[i] = sumPrice;

                                // 结束本次订餐,跳出循环
                                break;
                            }
                        }
                        if (!isAdd) {
                            System.out.println("对不起,您的餐袋已满!");
                        }
                        break;
                    case 2:
                        System.out.println("\n**************查看餐袋****************");
                        // 查看餐袋(循环遍历、三目运算符、if语句进行非空判断)
                        System.out.println("序号" + "\t订餐人" + "\t" + "餐品菜品" 
                        + "\t\t" + "送餐时间" + "\t" + "送餐地点" + "\t\t" + "订餐金额" + "\t订单状态");

                        // 利用for循环,遍历输出数组菜品信息
                        for (int i = 0; i < names.length; i++) {
                            if (names[i] != null) { // 输出非空订单信息
                                String time = times[i] + "点";
                                String state = (states[i] == 0) ? "已预订" : "已完成";
                                System.out.println((i + 1) + "\t" + names[i] + "\t" + dishMsg[i] + "\t" + time + "\t" + address[i]
                                        + "\t" + sumPrices[i] + "\t" + state);
                            }

                        }
                        break;

                    case 3:
                        System.out.println("\n**************签收订单****************");
                        //签收订单前确认订单是否存在
                        boolean isSign = false;
                        System.out.print("请您输入要签收的订单编号:");
                        int signNo = sc.nextInt();
                        for(int i = 0;i < names.length;i++){
                            if(names[i] != null && states[i] == 0 && i == signNo -1){
                                //有订单信息,且用户输入订单编号可以找到
                                isSign = true;
                                //订单状态未已预订
                                states[i] = 1;
                                System.out.println("订单签收成功!");
                            }else if(names[i] != null && states[i] == 1 && i == signNo -1){
                                //有订单信息,且用户输入订单编号可以找到
                                isSign = true;
                                //订单状态未已完成
                                System.out.println("您的订单已签收,不能再次签收!");
                            }    
                        }
                        if(!isSign){
                            System.out.println("您选择的订单不存在!");
                        }
                        break;

                    case 4:
                        System.out.println("\n**************删除订单****************");
                        //删除订单前确认订单是否存在
                        boolean isDelete = false;
                        System.out.print("请您输入要删除的订单编号:");
                        int deleteNo = sc.nextInt();
                        for(int i = 0;i < names.length;i++){
                            if(names[i] != null && states[i] == 0 && i == deleteNo-1){
                                //有订单信息,且用户输入订单编号可以找到
                                isDelete = true;
                                //订单状态未已预订,不能删除
                                System.out.println("您选择的订单未签收,不能删除!");
                            }else if(names[i] != null && states[i] == 1 && i == deleteNo -1){
                                //有订单信息,且用户输入订单编号可以找到
                                isDelete = true;
                                //订单状态未已完成,能删除
                                //找到删除订单的位置的下标i,把i后面的元素依次往前移动,最后一个数组元素要置空
                                //注:移动的过程就是将后一个元素往前一个元素复制的过程
                                for(int j = i;j < names.length-1;j++){//注意下标越界
                                    names[j] = names[j+1];
                                    dishMsg[j] = dishMsg[j+1];
                                    times[j] = times[j+1];
                                    address[j] = address[j+1];
                                    sumPrices[j] = sumPrices[j+1];
                                    states[j] = states[j+1];
                                }
                                //最后一个元素一定要置空,置空后可以进行新订单
                                names[names.length-1] = null;
                                dishMsg[names.length-1] = null;
                                times[names.length-1] = 0;
                                address[names.length-1] = null;
                                sumPrices[names.length-1] = 0;
                                states[names.length-1] = 0;
                                System.out.println("删除订单成功!");
                            }    
                        }
                        if(!isDelete){
                            System.out.println("您选择的订单不存在!");
                        }
                        
                        break;

                    case 5:
                        System.out.println("\n****************点赞*****************");
                        // 循环输出菜品信息
                        System.out.println("序号\t菜名\t单价");
                        for (int j = 0; j < dishNames.length; j++) {
                            String praise = (praiseNums[j] == 0) ? "" : praiseNums[j] + "个赞";
                            System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + prices[j]+"\t"+praise);
                        }
                        
                        //点赞    
                        System.out.println("请输入您要点赞的菜品序号:");
                        int praiseNo = sc.nextInt();
                        while(praiseNo < 1 || praiseNo > dishNames.length){
                            System.out.print("本店没有此菜品,无法点赞!请重新输入一个菜品序号:");
                            praiseNo = sc.nextInt();
                        }
                        
                        //关键点:在何处进行点赞数+1,点赞菜品的位置 = praiseNo -1
                        praiseNums[praiseNo-1]++;                    
                        break;

                    case 6:
                        flag = true;
                        System.out.println("即将退出!");
                        break; // 退出系统

                    default:
                        flag = true;
                        break; // 退出系统
                    }

                    // 退出系统 —— 根据flag的值决定是否退出系统
                    if (!flag) { // !flag 等同于 flag == false
                        System.out.print("请输入0返回:");
                        num = sc.nextInt(); // 接收用户输入的数字
                    } else {
                        break;
                    }

                } while (num == 0);
                System.out.println("谢谢使用,欢迎下次光临!");            
    }
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值