java吃货联盟订餐系统---把思路抽丝剥茧讲给你听

思路框架:

完整代码在文章末尾

一、吃货联盟一共有六个功能

1.我要订餐

2.查看餐袋

3.签收订单

4.删除订单

5.我要点赞

6.退出系统

二、首先要完成基本的存储需要使用数组:

1).这六个数组存储的是变化的量

1.String userNames[] = new String[4];         //保存用户姓名
2.String dishMegs[] = new String[4];         //订餐信息,包括菜名和份数,所以是个字符串类型
3.int times[] = new int[4];                  //送餐时间
4.String addresses[] = new String[4];        //送餐地址
5.int status[] = new int[4];                 //订单状态:0:已预定 1:已签收
6.Double sumMoney[] = new Double[4];         //订单的总金额

2).还需要一些数组来装相对固定不变的值

1.String[] dishNames={"红烧带鱼","鱼香肉丝","时令鲜蔬"};       //装菜名
2.double[] prices ={38.0,20.0,10.0};                         //装菜的价格
3.int praiseNums[]=new int[3];                               //装点赞数

三、整体框架

基本框架需要先实现菜单切换:

1.当输入1-5时:会有相关的菜单选项

2.用while包裹switch来显示循环菜单。

3.设置boolean的原因是为了退出while循环

4.基本框架如下,基本框架完成了只需要再逐步完成各个功能了

     boolean f=true; 
     while(f){
            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("***************************************");
            System.out.println("请选择:");
            int choose=scanner.nextInt();
            Scanner scanner=new Scanner(System.in);
            System.out.println("请选择");
            int choose=scanner.nextInt();

          switch (choose){
            case 1:

                System.out.println("****我要订餐****");
                break;

            case 2:

                System.out.println("****查看餐袋****");
                break;

            case 3:

                System.out.println("****签收订单****");
                break;

            case 5:

                System.out.println("****我要点赞****");
                break;

            case 6:

                System.out.println("****退出系统****");
                isExit=true;
                break;

        }
        }
       

代码实现功能:

功能一:我要订餐

思路:

1.输入订餐人姓名,菜品编号,菜品份数,送餐时间,送餐地址

2.等用户输入完上面的数据后要重新显示一遍:菜品和份数,送餐时间和总额,这些都需要放到数组里

3.需要把用户输入的菜名和份数装在一个String数组中,这样显示的时候比较方便

1.我要订餐上:

分析代码:这一块主要是让用户输入信息

1.外层设置一个for循环用来给把信息挨个装进数组

2.紧接着用一个if来判断一下userName数组是否还有空余,如果有空余就进行以下的操作, isAdd这个变量是用来判断餐袋满了没,也可以用else来实现"餐袋已满"。

 3.让用户依次输入信息,当输入到选择菜品前,应该展示那些固定数组中的菜品和价格。

4.存储信息时这里用的是字符串类型的变量,为了展示的时候

 case 1:
               System.out.println("****我要订餐****");
               boolean isAdd = false;//记录是否可以订餐

               for (int i = 0; i < userNames.length; i++) {
                   if (userNames[i] == null) {
                       isAdd = true;
                       System.out.println("请输入订餐人姓名");
                       String name = scanner.next();
                       System.out.println("序号" + "\t" + "菜名" + "\t" + "单价" + "\t" + "点赞数");
                    //循环菜品
                       for (int j = 0; j < dishNames.length; j++) {
                           String price = prices[j] + "元";
                           String priaisenum = (praiseNums[j] > 0 ? praiseNums[j] + "赞" : "0");
                           System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + price + "\t" + priaisenum);

                       }
                       System.out.println("请选择您要点的菜品编号");
                       int chioceDish = scanner.nextInt();

                       System.out.println("请选择您要的份数");
                       int number = scanner.nextInt();
                       //把份数和菜名都存在dishMeg这个String数组中
                       String dishMeg = dishNames[chioceDish - 1] + "" + number + "份";

                       double sumPrice = number * prices[chioceDish - 1];
                       System.out.println("请输入送餐时间 (送餐时间是10点-20点间整点送达):");
                       int time = scanner.nextInt();
                       while (time > 20 || time < 10) {
                            System.out.println("对不起您输入的时间有误,请输入10点-20点间的整数");
                            time = scanner.nextInt();

                            }
                       System.out.println("请输入送餐地址");
                       String address = scanner.next();

2.我要订餐下:

分析代码:这一块主要是把存的用户的信息输出出去

1.把上面用户存入的姓名,菜品信息,地址,送餐时间,总价。把这些存入数组并且终止for循环

                        System.out.println("订餐成功!");
                        System.out.println("您订的是:" + dishMeg);
                        System.out.println("送餐时间" + time);
                        System.out.println("餐费:" + sumPrice);
 
                        userNames[i] = name;
                        dishMegs[i] = dishMeg;
                        addresses[i] = address;
                         times[i] = time;
                        sumMoney[i] = sumPrice;

                         break;
                        }
                        if (!isAdd) {
                            System.out.println("对不起,您的餐袋已满");
                        }

                    }
                    break;

功能二:查看餐袋

查看餐袋据相当于是显示历史订单

1.查看餐袋就是把功能一存进去的值再用字符串拼接一下,取出来,这里的for循环是为了循环取出字符串中的值,用三元运算符把数值转为文字,最后把这些值拼接起来

 case 2:
             System.out.println("****查看餐袋****");
             System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品信息" + "\t" + "送餐时间" + "\t" + "送餐地址" + "\t" + "总金额" + "\t" + "订单状态");
                  for (int i = 0; i < userNames.length; i++) {
                      if (userNames[i] != null) {
//   0为已预定,1为已完成
                            String state = (status[i] == 0 ? "已预定" : "已完成");
                            System.out.println((i + 1) + "\t" + userNames[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t" + "点" + addresses[i] + "\t" + sumMoney[i] + "\t" + state);

                        }
                    }

功能三:签收订单

状态为0的订单是已预定订单,可以签收

状态为1的订单是已完成订单,已经签收过了,不能再次签收

1.boolean isSignFind = false;这个变量是为了识别是否找到订单,没找到值为false,找到了值为true,是为了应对没找到此订单这种情况,末尾有一个条件判断

2.if (userNames[i] != null && status[i] == 0 && signOrderId == i + 1)的意思是找到用户名不为空,状态为0,而且订单号等于数组序号+1的进入签收,否则显示已签收

case 3:
                    //0已预定,1,已完成
                    System.out.println("****签收订单****");
                    boolean isSignFind = false;//找到要签收的订单
                    System.out.println("请选择要签收的订单号");
                    int signOrderId = scanner.nextInt();
                    for (int i = 0; i < userNames.length; i++) {

                        if (userNames[i] != null && status[i] == 0 && signOrderId == i + 1) {
                            status[i] = 1;//将状态值设为已签收
                            System.out.println("订单签收完成");
                            isSignFind = true;
                        } else if (userNames[i] != null && status[i] == 1) {
                            System.out.println("您选择的订单已完成签收,不能再次签收");
                            isSignFind = true;

                        }
                    }
                    if (!isSignFind) {
                        System.out.println("您选择的订单不存在");
                    }
                    break;

功能四:删除订单

这个功能的难点是:当我们删除了一个订单之后,userNames[] 、dishMegs[]、 times[]、addresses[] 、status[] 、 sumMoney[] 这六个数组的值都要往前挪一位,填补上删除的空缺,把空缺放进数组的末尾。

1完成的订单才能被删除,未完成的订单不能删

2.isDelFind变量是为了标记这个删除订单是否被找到

3.第二个for循环是为了删除数值:直接把要删除订单的上一个值覆盖掉要删除的值,然后把最后的值清空

 case 4:
//                删除订单号需要其他数组的都往前挪一位
                    System.out.println("****删除订单****");
                    boolean isDelFind = false;//标记未找到的删除订单
                    System.out.println("请输入要删除的订单编号");
                    int delOrderId = scanner.nextInt();
                    for (int j = 0; j < userNames.length; j++) {
                        //当用户名不为空,状态为已完成的可以删除
                        if (userNames[j] != null && status[j] == 1) {
                            isDelFind = true;//表示已找到
//                        为啥这个地方要length-1,有的地方都不用
                            for (int k = delOrderId - 1; k < userNames.length - 1; k++) {
                                userNames[k] = userNames[k + 1];
                                dishMegs[k] = dishMegs[k + 1];
                                sumMoney[k] = sumMoney[k + 1];
                                times[k] = times[k + 1];
                                status[k] = status[k + 1];
                                addresses[k] = addresses[k + 1];
                            }
//                        把最后一位清空
                            int endIndex = userNames.length - 1;
                            userNames[endIndex] = null;
                            dishMegs[endIndex] = null;
                            sumMoney[endIndex] = 0.0;
                            times[endIndex] = 0;
                            status[endIndex] = 0;
                            addresses[endIndex] = null;
                            System.out.println("删除订单成功");
                            break;

                        } else if (userNames[j] != null && status[j] == 0) {

                            System.out.println("您选择的订单还没签收,不能删除");
                            isDelFind = true;

                        }
                        if (!isDelFind) {
                            System.out.println("您要删除的订单不存在");
                        }
                        break;


                    }

                    break;

功能五:我要点赞

点赞的数量是装在praiseNums[]这个数组里的,而且赞的数量只能增加

1.点赞前需要先展示菜单,第一个for循环就是为了展示菜品和数量

2.System.out.println(price);等于System.out.println(prices[j] + "元");可以换成自己喜欢的方式

3.点赞的序号-1才等于要点赞的菜品数组下标

case 5:
              System.out.println("****我要点赞****");
               //                显示菜单
               for (int j = 0; j < dishNames.length; j++) {
                        String price = prices[j] + "元";
                        String priaisenum = (praiseNums[j] > 0 ? praiseNums[j] + "赞" : "0");
                        System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + price + "\t" + priaisenum);
                    }
                    System.out.println("请选择您要点赞的菜品序号");
                    int dishPriaseID = scanner.nextInt();
                    praiseNums[dishPriaseID - 1] += 1;
                    System.out.println("点赞成功");
                    break;

功能六:退出系统

这里结合前面的while循环,如果退出系统f会赋值为false,就不能进入系统了

        boolean f = true;
        while (f) {
            System.out.println("欢迎使用“吃货联盟订餐系统");
            System.out.println("***************************************");
            System.out.println("1.我要订餐");
            System.out.println("2.查看餐袋");
        //  下面的代码省略
}
case 6:
                    System.out.println("****退出系统****");
                    f = false;
                    break;

全部代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
//        功能:1.我要订餐 2.查看餐袋 3.签收订单 4.删除订单 5.我要点赞 6.退出系统
        Scanner scanner = new Scanner(System.in);

        String userNames[] = new String[4];  //保存用户姓名
        String dishMegs[] = new String[4];   //订餐信息,包括菜名和份数,所以是个字符串类型
        int times[] = new int[4];   //送餐时间
        String addresses[] = new String[4];  //送餐地址
        int status[] = new int[4];  //订单状态:0:已预定 1:已签收
        Double sumMoney[] = new Double[4];   //订单的总金额


//        这几个数组装的是固定的
        String[] dishNames = {"红烧带鱼", "鱼香肉丝", "时令鲜蔬"};
        double[] prices = {38.0, 20.0, 10.0};
        int praiseNums[] = new int[3];


//        1.主页面
        boolean f = true;
        while (f) {
            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("***************************************");
            System.out.println("请选择:");
            int choose = scanner.nextInt();

            switch (choose) {

                case 1:
                    System.out.println("****我要订餐****");
                    boolean isAdd = false;//记录是否可以订餐
                    for (int i = 0; i < userNames.length; i++) {
                        if (userNames[i] == null) {
                            isAdd = true;
                            System.out.println("请输入订餐人姓名");
                            String name = scanner.next();
                            System.out.println("序号" + "\t" + "菜名" + "\t" + "单价" + "\t" + "点赞数");
                            for (int j = 0; j < dishNames.length; j++) {
                                String price = prices[j] + "元";
                                String priaisenum = (praiseNums[j] > 0 ? praiseNums[j] + "赞" : "0");
                                System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + price + "\t" + priaisenum);
                            }
                            System.out.println("请选择您要点的菜品编号");
                            int chioceDish = scanner.nextInt();

                            System.out.println("请选择您要的份数");
                            int number = scanner.nextInt();
                            //把份数和菜名都存在dishMeg这个String数组中
                            String dishMeg = dishNames[chioceDish - 1] + "" + number + "份";

                            double sumPrice = number * prices[chioceDish - 1];
                            System.out.println("请输入送餐时间 (送餐时间是10点-20点间整点送达):");
                            int time = scanner.nextInt();
                            while (time > 20 || time < 10) {
                                System.out.println("对不起您输入的时间有误,请输入10点-20点间的整数");
                                time = scanner.nextInt();

                            }
                            System.out.println("请输入送餐地址");
                            String address = scanner.next();

                            System.out.println("订餐成功!");
                            System.out.println("您订的是:" + dishMeg);
                            System.out.println("送餐时间" + time);
                            System.out.println("餐费:" + sumPrice);
                            //                    存放数据
                            userNames[i] = name;
                            dishMegs[i] = dishMeg;
                            addresses[i] = address;
                            times[i] = time;
                            sumMoney[i] = sumPrice;

                            break;
                        }
                        if (!isAdd) {
                            System.out.println("对不起,您的餐袋已满");
                        }

                    }
                    break;
  case 2:
                    System.out.println("****查看餐袋****");
                    System.out.println("序号" + "\t" + "订餐人" + "\t" + "餐品信息" + "\t" + "送餐时间" + "\t" + "送餐地址" + "\t" + "总金额" + "\t" + "订单状态");
                    for (int i = 0; i < userNames.length; i++) {
                        if (userNames[i] != null) {
//                        0为已预定,1为已完成
                            String state = (status[i] == 0 ? "已预定" : "已完成");
                            System.out.println((i + 1) + "\t" + userNames[i] + "\t" + dishMegs[i] + "\t" + times[i] + "\t" + "点" + addresses[i] + "\t" + sumMoney[i] + "\t" + state);

                        }
                    }
                    break;
                case 3:
                    //0已预定,1,已完成
                    System.out.println("****签收订单****");
                    boolean isSignFind = false;//找到要签收的订单
                    System.out.println("请选择要签收的订单号");
                    int signOrderId = scanner.nextInt();
                    for (int i = 0; i < userNames.length; i++) {
//                    状态为已预定status=0的已预定的可以签收
//                    状态为已预定status=1的已签收的不可以签收
                        if (userNames[i] != null && status[i] == 0 && signOrderId == i + 1) {
                            status[i] = 1;//将状态值设为已签收
                            System.out.println("订单签收完成");
                            isSignFind = true;
                        } else if (userNames[i] != null && status[i] == 1) {
                            System.out.println("您选择的订单已完成签收,不能再次签收");
                            isSignFind = true;

                        }
                    }
                    if (!isSignFind) {
                        System.out.println("您选择的订单不存在");
                    }
                    break;
                case 4:
//                删除订单号需要其他数组的都往前挪一位
                    System.out.println("****删除订单****");
                    boolean isDelFind = false;//标记未找到的删除订单
                    System.out.println("请输入要删除的订单编号");
                    int delOrderId = scanner.nextInt();
                    for (int j = 0; j < userNames.length; j++) {
                        //当用户名不为空,状态为已完成的可以删除
                        if (userNames[j] != null && status[j] == 1) {
                            isDelFind = true;//表示已找到

                            for (int k = delOrderId - 1; k < userNames.length - 1; k++) {
                                userNames[k] = userNames[k + 1];
                                dishMegs[k] = dishMegs[k + 1];
                                sumMoney[k] = sumMoney[k + 1];
                                times[k] = times[k + 1];
                                status[k] = status[k + 1];
                                addresses[k] = addresses[k + 1];
                            }
//                        把最后一位清空
                            int endIndex = userNames.length - 1;
                            userNames[endIndex] = null;
                            dishMegs[endIndex] = null;
                            sumMoney[endIndex] = 0.0;
                            times[endIndex] = 0;
                            status[endIndex] = 0;
                            addresses[endIndex] = null;
                            System.out.println("删除订单成功");
                            break;

                        } else if (userNames[j] != null && status[j] == 0) {

                            System.out.println("您选择的订单还没签收,不能删除");
                            isDelFind = true;

                        }
                        if (!isDelFind) {
                            System.out.println("您要删除的订单不存在");
                        }
                        break;


                    }

                    break;
                case 5:
                    System.out.println("****我要点赞****");
                    //                显示菜单
                    for (int j = 0; j < dishNames.length; j++) {
//                        String price = prices[j] + "元";
                        String priaisenum = (praiseNums[j] > 0 ? praiseNums[j] + "赞" : "0");
                        System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + prices[j] + "元" + "\t" + priaisenum);

                    }
                    System.out.println("请选择您要点赞的菜品序号");
                    int dishPriaseID = scanner.nextInt();
                    praiseNums[dishPriaseID - 1] += 1;
                    System.out.println("点赞成功");
//                    第二个循环是为了展示点出的赞
                    for (int j = 0; j < dishNames.length; j++) {
//                        String price = prices[j] + "元";
                        String priaisenum = (praiseNums[j] > 0 ? praiseNums[j] + "赞" : "0");
                        System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + prices[j] + "元" + "\t" + priaisenum);

                    }

                    break;
                case 6:
                    System.out.println("****退出系统****");
                    f = false;
                    break;
            }
        }
    }
}

你可能感兴趣的:(java,开发语言)