Java基础练习——吃货联盟

Java基础练习——吃货联盟

提示:使用选择、循环以及数组等基础进行编写



前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用步骤

1.代码

代码如下(示例):

public class EatDemo {

    public static void main(String[] args) {
        //我要订餐的需求=10
        //10 需要一个餐单
        //品名
        String[] names = {"鱼香肉丝", "鸭血粉丝", "桂花糕点 ", "南京板鸭"};
        //价格
        double[] prices = {18.8, 20, 8, 47};
        //库存
        int[] saves = {10, 10, 10, 10};
        //用户选择的id列表,应该是数组,记录的是产品的下标
        //记录用户的姓名
        String[] uname = new String[4];
        //记录每个单品的点赞数量
        int[] like = new int[4];
        //记录系统订单详情
        String[] chooseDish = new String[4];
        //记录订单的点菜数量
        int[] chooseNumber = new int[4];
        //记录订单总价
        double[] choosePriceSum = new double[4];
        //记录订单发货状态
        int[] chooseFa = new int[4];
        //1.订餐系统需要循环运作,制造一个死循环,给出退出条件
        //原因是,有退出系统选项
        //需要接受客户输入
        Scanner scan = new Scanner(System.in);
        //需要一个退出标志位
        int num = -1;
        boolean flag = false;
        System.out.println("网上订餐系统:");
        do {

            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.print("请根据序号,输入您想进行的操作:");
            int selected = scan.nextInt();
            switch (selected) {
                case 1:
                    //我要订餐
                    System.out.println("您好,欢迎进入订餐页面");
                    //先判断是否可以订餐,如果座位满了,停止使用点餐
                    boolean addTest = false;
                    //请顾客选择, 顾客可能选多个,所以这边是循环选择
                    for (int i = 0; i < uname.length; i++) {
                        if (uname[i] == null) {
                            addTest = true;
                            //记录订餐人的姓名,并将用户输入的姓名存入uname数组
                            System.out.print("请输入订餐人的姓名:");
                            String name = scan.next();
                            uname[i] = name;
                            //提示用户进行选择菜品,并完善表头
                            System.out.println("菜品如下,请您选择你想要的菜的编号:");
                            System.out.println("序号" + "\t" + "菜品名称" + "\t" + "菜品单价" + "\t" + "库存数量" + "\t" + "点赞数量");
                            //利用for循环,将菜品的详情进行展示
                            for (int j = 0; j < names.length; j++) {
                                System.out.println((j + 1) + "\t" + names[j] + "\t" + prices[j] + "\t" + saves[j]+ "\t" + like[j]);
                            }
                            System.out.print("请选择您要点的菜品编号:");
                            int dishId = scan.nextInt();
                            //判断用户所输入的编号是否符合存在,不存在的话请重新输入
                            while (dishId < 1 || dishId > names.length) {
                                System.out.print("您输入的菜品不存在,请重新输入:");
                                dishId = scan.nextInt();
                            }
                            //当用户选择的数量超过该单品的库存的时候,要用户重新选择
                            System.out.print("请选择您要点的菜品份数:");
                            int fen = scan.nextInt();
                            while (fen < 0 || fen > saves[dishId - 1]) {
                                System.out.print("您购买的数量已经超过库存,请重新输入");
                                fen = scan.nextInt();
                            }
                            //记录库存数量
                            saves[dishId - 1] = saves[dishId - 1] - fen;
                            //判断用户所点的分数是否超过内存
                            //生成已点餐详细信息,包括菜品名称、菜品单价、点菜数量以及总价
                            System.out.println("请您确认订单信息");
                            System.out.println("菜品名称" + "\t" + "菜品单价" + "" + "\t" + "点菜数量" + "" + "\t" + "菜品总价" + "");
                            System.out.println((names[dishId - 1]) + "\t" + (prices[dishId - 1]) + "元" + "\t" + (fen) + "份" + "\t" + (prices[dishId - 1] * fen) + "元");
                            //记录订单信息
                            //记录预定者姓名
                            uname[i] = name;
                            //记录选择的菜品名称
                            chooseDish[i] = names[dishId - 1];
                            //记录选择的菜品的数量
                            chooseNumber[i] = fen;
                            //记录选择的菜品的总价
                            choosePriceSum[i] = (prices[dishId - 1] * fen);
                            //记录订单的发货状态,初始化为0标识未发货
                            chooseFa[i] = 0;
                            break;
                        }
                    }
                    if (!addTest) {
                        System.out.println("系统不支持继续订餐,请删除已完成订单后,继续订餐");
                    }
                    break;
                case 2:
                    //查看餐袋
                    //这是已经下单的订单信息,请查看
                    System.out.println("这是已经下单的订单信息,请查看");
                    System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品名称" + "\t" + "点菜数量" + "" + "\t" + "菜品总价" + "" + "\t" + "订单状态");
                    //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量
                    for (int k = 0; k < uname.length; k++) {
                        //判断数组中的下标是否为空,如果为空则不显示
                        if (uname[k] == null) {
                            break;
                        }
                        //首先将预定状态改为文字,此处采用三目运算符
                        String state = chooseFa[k] == 0 ? "已预订" : "已发货";
                        System.out.println((k + 1) + "\t" + (uname[k]) + "\t" + (chooseDish[k]) + "\t" + (chooseNumber[k]) + "份" + "\t" + (choosePriceSum[k]) + "元" + "\t" + (state));
                    }
                    //需要给用户提供返回上一级
                    break;
                case 3:
                    //签收订单
                    //需要遍历餐单,根据用户的订单列表 ,展示对应的商品,并计算价格
                    System.out.println("这是订单的状态,请您查看并签收");
                    System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品名称" + "\t" + "点菜数量" + "" + "\t" + "菜品总价" + "" + "\t" + "订单状态");
                    //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量
                    for (int l = 0; l < uname.length; l++) {
                        //判断数组中的下标是否为空,如果为空则不显示
                        if (uname[l] == null) {
                            break;
                        }
                        //首先将预定状态改为文字,此处采用三目运算符
                        String state = chooseFa[l] == 0 ? "已预订" : "已发货";
                        System.out.println((l + 1) + "\t" + (uname[l]) + "\t" + (chooseDish[l]) + "\t" + (chooseNumber[l]) + "份" + "\t" + (choosePriceSum[l]) + "元" + "\t" + (state));
                    }

                    //这里需要根据用户是否结账,在库存中,减去用户的吃掉的数量
                    System.out.print("请选择要签收的订单:");
                    int sfr = scan.nextInt();
                    //判断输入的序号是否超过订单数量
                    while (sfr < 0 || sfr > uname.length) {
                        System.out.print("超出范围,请重新输入:");
                        sfr = scan.nextInt();
                    }
                    //判断订单状态是否已发货,已发货显示订单签收成功,无需重复签收
                    if (chooseFa[sfr - 1] == 0) {
                        chooseFa[sfr - 1] = 1;

                        System.out.println("订单签收成功");

                    } else if (chooseFa[sfr - 1] == 1) {

                        System.out.println("订单已签收,请勿重新签收");

                    } else {
                        System.out.println("系统异常,无法签收");
                    }
                    //给用户一个输出,已结账,输出一句话就可以

                    //需要给用户提供返回上一级
                    break;
                case 4:
                    //删除订单
                    //你需要复制查看餐袋的代码
                    System.out.println("这是所有的订单,请您查看并进行删除操作");
                    System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品名称" + "\t" + "点菜数量" + "" + "\t" + "菜品总价" + "" + "\t" + "订单状态");
                    //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量
                    for (int m = 0; m < uname.length; m++) {
                        //判断数组中的下标是否为空,如果为空则不显示
                        if (uname[m] == null) {
                            break;
                        }
                        //首先将预定状态改为文字,此处采用三目运算符
                        System.out.println((m + 1) + "\t" + (uname[m]) + "\t" + (chooseDish[m]) + "\t" + (chooseNumber[m]) + "份" + "\t" + (choosePriceSum[m]) + "元" + "\t" + (chooseFa[m] == 0 ? "已预定" : "已发货"));
                    }

                    //这里需要根据用户是否结账,在库存中,减去用户的吃掉的数量
                    System.out.print("请选择要删除的订单:");
                    int DeDish = scan.nextInt();
                    while (DeDish > uname.length || DeDish < 1) {
                        System.out.print("超出范围,请重新输入:");
                        DeDish = scan.nextInt();
                    }
                    //此处出现错误,需要认真听讲
                    //错误已经解决,在case1中对chooseFa采用的是减去而不是赋值,所以会出现出现-1的情况跳过执行(chooseFa[(DeDish - 1)] == 1)
                    if (chooseFa[(DeDish - 1)] == 1) {
                        for (int n = DeDish - 1; n < uname.length - 1; n++) {
                            uname[n] = uname[n + 1];
                            chooseDish[n] = chooseDish[n + 1];
                            chooseNumber[n] = chooseNumber[n + 1];
                            choosePriceSum[n] = choosePriceSum[n + 1];
                            chooseFa[n] = chooseFa[n + 1];
                        }
                        uname[uname.length - 1] = null;
                        chooseDish[uname.length - 1] = null;
                        chooseNumber[chooseNumber.length - 1] = 0;
                        choosePriceSum[choosePriceSum.length - 1] = 0;
                        chooseFa[chooseFa.length - 1] = 0;
                        System.out.println("订单删除成功");

                    } else if (chooseFa[DeDish - 1] == 0) {
                        System.out.println("您未确认订单,请确认订单之后进行删除操作");

                    } else {
                        System.out.println("系统异常");
                    }
                    //需要更新用户的餐单列表和餐单数量列表

                    //需要给用户提供返回上一级
                    break;
                case 5:
                    //我要点赞
                    //展示商品列表
                    System.out.println("这是未签收的订单,请您查看并签收");
                    System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品名称" + "\t" + "点菜数量" + "" + "\t" + "菜品总价" + "" + "\t" + "订单状态" + "\t" + "点赞数量");
                    //遍历菜单,根据用户选择的id,展示对应菜单和对应的用户选择的数量
                    for (int m = 0; m < uname.length; m++) {
                        //判断数组中的下标是否为空,如果为空则不显示
                        if (uname[m] == null) {
                            break;
                        }
                        //首先将预定状态改为文字,此处采用三目运算符
                        String state = chooseFa[m] == 0 ? "已预订" : "已发货";
                        System.out.println((m + 1) + "\t" + (uname[m]) + "\t" + (chooseDish[m]) + "\t" + (chooseNumber[m]) + "份" + "\t" + (choosePriceSum[m]) + "元" + "\t" + (state) + "\t" + like[m]);
                    }
                    //根据用户输入的餐品id,记录对应的点赞
                    System.out.print("请选择您要点赞的菜品序号:");
                    int chose2 = scan.nextInt();
                    while (chose2 > uname.length || chose2 < 0) {
                        System.out.print("超出范围,请重新输入:");
                        chose2 = scan.nextInt();
                    }
                    like[chose2 - 1]++;
                    System.out.println("给" + chooseDish[chose2 - 1] + "点赞成功");

                    //用户可能对同一个商品点赞很多次,需要多次记录

                    //需要给用户提供返回上一级
                    break;
                case 6:
                    //退出系统
                    System.out.println("欢迎下次使用!");
                    flag = true;
                    break;
                default:
                    System.out.println("输如错误,请重新选择。");
                    break;
            }
            if (!flag) {
                System.out.print("请输入0返回主菜单:");
                num = scan.nextInt();

            } else {
                break;
            }

        } while (num == 0);



        System.out.println("谢谢惠顾,欢迎下次光临");

    }

}

2.编写思路

代码如下(示例):

主界面:
利用了Switch语句进行选择,输入(1-6)内数字进行相应的操作,如果输入超出范围,则提示输入错误,按0跳转回主界面重新进入主界面。
外层套用了do while循环进行选择,定义一个变量num,当用户输入0的时候再次进入Switch循环
同时定义一个退出标志位Boolean型的flag,如果Boolean=true时,退出do while循环,同时退出程序,当退出程序的时候提示谢谢惠顾。
当进入Switch一个功能结束之后,会跳出循环,这时候我们用!flag这个来进行操作,!flag=false,这时,重新进入主界面,进入Switch循环进行选择,当选择退出系统时彻底退出do while循环。
case1我要订餐:
用户在主界面输入1之后成功跳转到我要订餐页面,同时出现欢迎词
首先用Boolean add=false对购物车进行判断,如果购物车已满则返回false,同时提示用户进行删除操作,如果购物车没有满的情况下根据用户数量数组进入for循环进行遍历。
在for循环中要做的操作,一个是给用户姓名进行赋值
之后根据菜品的名字数组建立一个for循环,遍历菜品的详情
跳出for循环,提醒你输入想要买的商品的序号,同时利用while语句对你输入的序号进行判断,如果超出菜品数组的长度或者小于0则报错,提醒你重新进行输入
提醒你输入想要买的商品的份数,同时利用while语句对你输入的份数进行判断,如果超出库存量则报错,提醒你重新进行输入
以上成功之后则进入余量的处理,用余量减去用户选择的份数得到当前余量
同时利用for循环,列出本次操作所购买的商品的订单详情
建立用户选择的商品的数组,包括价格、数量、总价、商品名称、商品的发货情况等数组
将之前操作的分数以及商品名称等内容赋值给商品的详情的数组
操作结束,跳转到判断!flag,提示输入0返回主界面,当while num=0的时候,符合条件,重新进入do while循环进入主界面。
case2查看餐袋:
用户在主界面输入2进入查看餐袋页面,同时出现查看订单的标题
根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情
同时判断数组内容是否为空,如果为空的的话返回break,不显示
利用三目运算符,将0或者1改成已预订或者已完成
显示已下单的商品的详细的信息
case3签收订单:
用户在输入3进入签收订单页面,同时出现签收订单页面
根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情
同时判断数组内容是否为空,如果为空的的话返回break,不显示
利用三目运算符,将0或者1改成已预订或者已完成
显示已下单的商品的详细的信息
输入要签收的订单的编号,根据输入的编号寻找订单
首先要用while语句判定输入序号是否正确,不正确重新输入
其次利用if语句判断输入的需要的状态,如果=0的话将发货状态改为已发货,同时输出已签收成功
如果=1的话,显示订单已签收请勿重新签收,如果为其它则返回系统异常,退出循环
case4删除订单:
根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情
同时判断数组内容是否为空,如果为空的的话返回break,不显示
在输出商品信息的商品状态利用三目运算符,将0或者1改成已预订或者已完成
定义一个变量,用来接收输入的选择的删除的序号
显示已下单的商品的详细的信息,并提示请选择要删除的订单
先判断发货状态,如果是已预定的则不能删除,如果是已发货的则可以删除改订单
同时在if循环中判断如果是已发货,则进入for循环
for循环是根据选择的菜品的名称来的,定位到选择的序号位置(变量-1),从这个位置开始遍历
利用数组中序号下一个前移进行替换,遍历后只剩最后一个位置没有内容,跳出循环
给最后一个位置赋值null或者0;
跳出循环,输入0进入主界面
case5我要点赞:
根据在之前case赋值的用户选择的商品的数组用for循环进行遍历,显示用户选择的商品的详情
同时判断数组内容是否为空,如果为空的的话返回break,不显示
在输出商品信息的商品状态利用三目运算符,将0或者1改成已预订或者已完成
定义一个变量,用来接收输入的选择的删除的序号
显示已下单的商品的详细的信息,提示输入你要点赞的菜品的序号
定义一个变量接收序号
利用while语句判断输入序号的范围是否超出范围,如果超出则重新输入
根据输入的序号变量定位选择的菜品位置(变量-1),同时该数组位置的点赞数量执行自增运算。
输出给该位置菜品点赞成功
case6退出系统:
进入后首先提示欢迎下次使用,然后执行Boolean flag=true操作,退出do while循环,并输出谢谢惠顾

总结

提示:这里对文章进行总结:
例如:以上就是我根据循环的基础写的吃货联盟系统,以及个人的编写思路,如有更好的方法请指教

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十碗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值