java --- sistema de pedidos

Sistema de pedidos de Java

Requisitos:
Inserte la descripción de la imagen aquí
Análisis:
Inserte la descripción de la imagen aquí

Código:

package Demo20210113;

import java.util.Scanner;

/**
 * @Author shall潇
 * @Date 2021/1/13
 * @Description     点餐系统
 */
public class EatLeagueSystem {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int choice;

        String[] dishes = {"假红烧肉", "炭烤生蚝", "开水白菜", "真佛跳墙"};        //菜类
        double[] dish_price = {18, 23, 12, 30};    //菜的单价
        int[] honer = {12, 45, 203, 11};           //点赞数
        String[][] order = new String[1024][];

        do {
            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("********请输入选择:***********");
            choice = sc.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("***我要订餐***");
                    System.out.println("请输入订餐人姓名:");
                    String user_name = sc.next();
                    System.out.println("序号\t菜品\t\t单价");
                    for (int i = 0; i < dishes.length; i++) {
                        System.out.println((i + 1) + "\t" + dishes[i] + "\t" + dish_price[i]);
                    }
                    int disNum = 0;
                    do {
                        System.out.println("请输入您要的菜品编号:");
                        disNum = sc.nextInt();
                        if (disNum <= 0 || disNum >= dishes.length) {
                            System.out.println("输入有误");
                        }
                    } while (disNum <= 0 || disNum >=dishes.length);
                    int pcs = 0;
                    do {
                        System.out.println("请输入您需要的份数");
                        pcs = sc.nextInt();
                        if (pcs < 0) {
                            System.out.println("输入有误");
                        }
                    }while (pcs < 0) ;
                    int time = 0;
                    do {
                            System.out.println("请输入送餐时间10~20点");
                            time = sc.nextInt();
                            if (time < 10 || time > 20) {
                                System.out.println("输入有误");
                            }
                    } while (time < 10 && time > 20);
                        System.out.println("请输入您的收货地址");
                        String address = sc.next();

                        System.out.println("订餐成功!");
                        System.out.println("您订的是:" + dishes[disNum - 1] + "\t份数:" + pcs);
                        System.out.println("送餐时间:" + time + "点");

                        double cost = dish_price[disNum - 1] * pcs;
                        double sent = cost > 30 ? 6 : 3;
                        double total = cost + sent;
                        System.out.println("订餐费:" + cost + "\t送餐费:" + sent + "\t总计:" + total);

                        for (int i = 0; i < order.length; i++) {
                            if (order[i] == null){                  //如果订单为空
                                order[i] = new String[2];           //定义两列
                                order[i][0] = user_name+"\t"+dishes[disNum-1]+" "+pcs+"份\t"+time+"点\t"+ address+"\t"+total+"元"; //第一列:订单基本信息
                                order[i][1] = "已预订";                                                                            //第二列:订单状态
                                break;
                            }
                        }
                        break;
                    case 2:
                        System.out.println("***查看餐袋***");
                        System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
                        for (int i = 0; i < order.length; i++) {
                            if (order[i]!=null){
                                System.out.println(i+1+"\t"+order[i][0]+"\t"+order[i][1]);
                            }else {
                                break;
                            }
                        }
                        break;
                    case 3:
                        System.out.println("***签收订单***");
                        System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
                        for (int i = 0; i < order.length; i++) {
                           if (order[i]!=null){         //如果有订单就输出
                               System.out.println(i+1+"\t"+order[i][0]+"\t"+order[i][1]);
                               int ordernum = 0;        //定义要签收的订单号
                               int end = 0;             //定义最后一位
                               do {
                                   System.out.println("请选择要签收的订单号");
                                   for (int j = 0; j < order.length; j++) {
                                       if (order[j] == null) {
                                           end = j;
                                           break;
                                       }
                                   }
                                   ordernum = sc.nextInt();
                                   if (ordernum < 1 || ordernum > end) {
                                       System.out.println("输入有误");
                                   } else if (!"已预订".equals(order[ordernum - 1][1])) {
                                       System.out.println("订单已签收,不能重复签收");
                                   } else {
                                       order[ordernum - 1][1] = "已完成";
                                       System.out.println("订单签收成功");
                                       break;
                                   }
                               } while (ordernum < 1 || ordernum > end || !"已预订".equals(order[ordernum - 1][1]));
                               break;											//只是导致bug的一个原因,不加的话会卡死,哈哈哈
                           }else {                     //没有订单就退出
                               break;
                           }
                        }
                        break;
                    case 4:
                        System.out.println("***删除订单***");
                        System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
                        for (int i = 0; i < order.length; i++) {
                            if (order[i]!=null){
                                System.out.println(i+1+"\t"+order[i][0]+"\t"+order[i][1]);
                            }else {
                                //System.out.println("\n暂无订单!\n");
                                break;
                            }
                        }
                        int n = 0;              //定义要删除的订单号
                        int e = 0;              //定义最后一位
                        do{
                            for (int k = 0; k < order.length; k++) {
                                if(order[k]==null){
                                    e =k;
                                    break;
                                }
                            }
                            System.out.println("请输入要删除的订单号");
                            n = sc.nextInt();
                            if(n<1||n>e){
                                System.out.println("请重新输入");
                            }else if(!"已完成".equals(order[n-1][1])){
                                System.out.println("未签收不能删除");
                            }else {
                                boolean isDelete = false;			//定义删除操作标志
                                for (int j = n-1; j < order.length; j++) {
                                    if(j==order.length-1){        	//如果要删除的是最后一位
                                        order[j]=null;				//先置空
                                        isDelete = true;
                                    }else {
                                        order[j] = order[j+1];      //前移
                                        if(order[j]==null){
                                            isDelete = true;
                                            break;
                                        }
                                    }
                                }
                                if(isDelete){
                                    System.out.println("订单删除成功");
                                    break;
                                }
                            }

                        }while (n<1||n>e||!"已完成".equals(order[n-1][1]));
                        break;
                    case 5:
                        System.out.println("***我要点赞***");
                        for (int i = 0; i < dishes.length; i++) {
                            System.out.println((i+1)+"\t"+dishes[i]+"点赞数:"+honer[i]);       //先输出序号,菜品,点赞数
                        }
                        int hornor_dish_pos = 0;                //记录被点赞的菜品序号
                        do{
                            System.out.println("请选择要点赞的菜品序号:(每次点赞只能点赞一次)");
                            hornor_dish_pos = sc.nextInt();
                            if(hornor_dish_pos<=0 || hornor_dish_pos>=dishes.length){
                                System.out.println("输入序号有误");
                            }else {
                                honer[hornor_dish_pos - 1]++;     //被点赞的菜品的点赞数++
                                System.out.println("点赞完成!");
                                break;
                            }
                        }while (hornor_dish_pos<=0 || hornor_dish_pos>=dishes.length);
                        break;
                    default:
                        System.exit(0);
                    }
                    if (choice >= 1 && choice <= 6) {
                        System.out.println("输入0返回");
                        choice = sc.nextInt();
                    } else {
                        break;
                    }
            } while (choice == 0) ;
            System.out.println("欢迎使用本系统");
        }
}

De hecho, el contenido no es muy bueno, porque esto solo usa el contenido mencionado anteriormente, y no usa funciones, try-catch, colecciones, etc., por lo que es muy desordenado y no lo suficientemente conciso, pero la lógica básica del código. y la lógica empresarial no son un problema. Pero este programa tiene dos errores:

La primera es que solo la información del primer pedido se puede generar en la función de firmar por pedido, pero no se muestra otra información (de hecho, se guarda, puede ir a la función 2 para verificar) la
segunda es la eliminación real función de pedido, si todos están en el estado sin firmar Los pedidos se bloquearán.

De hecho, estos dos son el mismo error al principio, pero cambié el error de firmar la orden (que puede resolver el problema del ciclo atascado) y ocurrió un nuevo error, jajajaja.La razón es que se agrega una pausa al final de la instrucción if al principio, El resultado de la salida solo puede generar la información de primer pedido. Por lo tanto, se genera un nuevo error y la función eliminada es demasiado perezosa para cambiar.

Supongo que te gusta

Origin blog.csdn.net/qq_43288259/article/details/112573356
Recomendado
Clasificación