吃货联盟订餐系统 类和对象

运用类和对象实现订餐系统


package chihuo2;

/**
 * 我们通过定义类,封装多个相关信息
 * 
 * @author Administrator
 * 
 */
public class Cai {
    public String name; // 菜名
    public double price;// 单价
    public int population; // 人气值

}
/**
 * 订单信息
 * 
 * @author Administrator
 * 
 */
public class Order {
    public int no; // 订单编号
    public String customer; // 顾客姓名
    public Cai cai; // 复杂类型, 所定的菜。
    public int quantity;// 数量
    public String address; // 地址
    public int hour;// 订餐的时间。
    public int status;// 状态 0:未处理 1:已完成

    // 属性的初始化。
    public double fee = 5; // 运费:总价低于50时收5元运费

    public String show() {

        StringBuffer buffer = new StringBuffer();
        buffer.append(no + "\t");
        buffer.append(customer + "\t");
        buffer.append(cai.name + "  " + quantity + "份\t");
        buffer.append(hour + "\t");
        buffer.append(address + "\t");
        buffer.append(getAmount() + "\t");
        buffer.append(status == 1 ? "已完成" : "未处理");
        return buffer.toString();
    }

    /**
     * 计算订单总金额(运费)
     * 
     * @return返回总金额
     */
    public double getAmount() {
        if (cai == null)
            return 0;
        double amount = this.quantity * cai.price;
        if (amount < 50)
            amount += fee;
        return amount;
    }

}
package chihuo2;

import java.util.Scanner;

/**
 * 帮助类(封装一些常用的功能,和业务无关)
 * 
 * @author Administrator
 * 
 */
public class Helper {
    /**
     * 获取一个整数
     * 
     * @return msg 提示信息
     * @return errorMsg 输入错误后的提示信息
     * @return 返回整数
     */
    public static int getInteger(String msg, String errorMsg) {
        // 首先输出提示信息
        System.out.println(msg);

        Scanner input = new Scanner(System.in);

        while (!input.hasNextInt()) {
            // 用掉用户输入的错误值
            input.next();
            System.out.println(errorMsg);
        }
        int result = input.nextInt();
        return result;
    }

    /**
     * 接收用戶 提示信息,返回一個字符串
     * 
     * @param msg提示信息
     * @return
     */
    public static String getString(String msg) {
        System.out.println(msg);
        Scanner input = new Scanner(System.in);
        String answer = input.next();
        return answer;
    }

    public static Order[] createNewArray(Order[] oldArray) {
        // 判断是否是第一次
        if (oldArray == null) {
            Order[] newArray = new Order[1];
            return newArray;
        } else {
            Order[] newArray = new Order[oldArray.length + 1];
            // 将原始数组中的学员都转入新数组中
            for (int i = 0; i < oldArray.length; i++) {
                newArray[i] = oldArray[i];
            }
            return newArray;

        }
    }
}
public class OrderingUtil {
    public static Cai[] cais = null;
    public static Order[] orders = null;

    /**
     * 订单管理数据初始化
     */
    public static void initial() {

        initialCais();
        initialOrders();
    }

    /**
     * 开始业务
     */
    public static void start() {
        // 初始化
        initial();

        String answer = "-1";
        // 循环做业务
        do {
            boolean result = startMenu();
            if (result == false) {
                return;
            }
            answer = Helper.getString("输入0 返回");

        } while (answer.equals("0"));

    }

    /**
     * 显示操作菜单
     */
    public static void showMenu() {
        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("************************");

    }

    /**
     * 开始选择菜单 是否要詢問用戶是否繼續
     */
    public static boolean startMenu() {
        showMenu();
        int choose = Helper.getInteger("请选择", "请重新选择");

        switch (choose) {
        case 6:
            System.out.println("谢谢使用,欢迎下次光临");
            return false;
        case 5:
            System.out.println("***我要点赞***");
            praise();
            break;
        case 4:
            delete();
            break;
        case 3:
            sign();
            break;
        case 2:
            display();
            break;
        case 1:
            add();
            break;
        default:
            System.out.println("输入了非法值");
            break;
        }
        return true;
    }

    /**
     * 删除订单
     */
    public static void delete() {
        // 1.获取订单号,根据订单号查找订单
        int no = Helper.getInteger("请输入订单号", "请重新输入");
        Order order = getOrder(no);
        if (order == null) {
            System.out.println("订单不存在");
            return;
        }

        // 2.判断订单状态(只能删除已完成的订单)
        if (order.status != 1) {
            System.out.println("未完成的订单不能删除!");
            return;
        }

        // 3.修改订单数组(移走订单后,订单数组要收缩)
        deleteOrder(order);

        System.out.println("订单删除成功!");
    }

    /**
     * 删除指定订单,收缩数组
     * 
     * @param order
     *            要删除的订单
     */
    public static void deleteOrder(Order order) {

        // 创建新的订单数组
        Order[] temp = new Order[orders.length - 1];

        // 拷贝
        int i = 0; // i代表新数组中元素的下标
        // 依次循环遍历原始数组,遇到null是跳过 一个一个拷贝到temp中
        for (int j = 0; j < orders.length; j++) {
            if (orders[j].no == order.no) {
                continue;
            }

            temp[i] = orders[j];
            i++; // 切记只有当拷贝了一个order过来,i才增加

        }
        // 用新订单数组替换原来的订单数组
        orders = temp;

    }

    /**
     * 签收订单
     */
    public static void sign() {
        int no = Helper.getInteger("请输入订单号", "请重新输入");

        // 根据订单号查找订单
        Order order = getOrder(no);
        if (order == null) {
            System.out.println("订单不存在");
            return;
        }
        // 判断用户民是否一致
        String name = Helper.getString("请输入顾客名称");
        if (name.equals(order.customer) == false) {
            System.out.println("顾客名输入错误");
            return;
        }

        // 更改订单状态
        order.status = 1;
        System.out.println("订单签收成功");
    }

    /**
     * 根据订单编号查找订单
     * 
     * @param no
     *            要查找的订单编号
     * @return 对应的订单,如果订单不存在,返回null
     */
    public static Order getOrder(int no) {
        for (int i = 0; i < orders.length; i++) {
            if (orders[i].no == no) {
                return orders[i];
            }
        }

        // 如果运行到本行代码,程序都没有结束,说明没有和次订单对应的订单
        return null;
    }

    /**
     * 我要点餐
     */
    public static void add() {
        System.out.println("**********我要订餐***********");
        // 1.显示所有的菜品
        showAllCais();
        // 2.收集订单信息
        Order order = getOrderInfo();

        // 3. 将订单添加到订单数组中, 并生成订单号
        int no = addOrder(order);

        // 4. 显示订单详情,包含订单号。

    }

    /**
     * 添加订单到订单数组
     * 
     * @param order
     *            要添加的订单信息
     * @return 返回新订单的订单号
     */
    public static int addOrder(Order order) {
        // last最后一个first第一个
        Order lastOrder = orders[orders.length - 1];

        // 新订单编号
        int newNo = lastOrder.no + 1;
        order.no = newNo; // 用新生成的订单号;

        // 扩展订单初始
        orders = Helper.createNewArray(orders);

        // 将新订单放到最后一位
        orders[orders.length - 1] = order;

        return newNo;
    }

    public static Order getOrderInfo() {
        Order order = new Order();

        order.customer = Helper.getString("请输入你的姓名:");
        int num = Helper.getInteger("请选择要点的菜品", "请重新输入");
        order.cai = cais[num - 1];

        int quantity = Helper.getInteger("请问要点多少份?", "请重新输入");
        order.quantity = quantity;

        int hour = Helper.getInteger("请问什么时候送到?", "请重新输入");

        order.hour = hour;

        String address = Helper.getString("地址是?");
        order.address = address;

        return order;
    }

    public static void showAllCais() {
        // 1.输出标题
        System.out.println("序号\t菜名\t单价\t点赞数");

        StringBuffer buffer = null; // 声明变量
        // 2. 循环显示菜的信息
        for (int i = 0; i < cais.length; i++) {
            // 实例化buffer
            buffer = new StringBuffer();
            buffer.append((i + 1) + "\t");
            buffer.append(cais[i].name + "\t");
            buffer.append(cais[i].price + "\t");
            buffer.append(cais[i].population + "\t");
            System.out.println(buffer.toString());

        }

    }

    /**
     * 显示餐袋(顾客姓名不为空)
     */
    public static void display() {
        System.out.println("查看餐袋");
        System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t地址\t总金额\t状态");
        // 遍历所有的订单 顾客信息如果为空 转入下一行
        for (int i = 0; i < orders.length; i++) {
            if (orders[i].customer == null) {
                continue;
            }
            System.out.println(orders[i].show());

        }

    }

    /**
     * 订单数据初始化
     */
    public static void initialOrders() {
        orders = new Order[2];

        orders[0] = new Order();
        orders[0].address = "东莞庄";
        orders[0].no = 1;
        orders[0].cai = cais[0];
        orders[0].quantity = 2;
        orders[0].customer = "张三";
        orders[0].hour = 3;
        orders[0].status = 1;

        orders[1] = new Order();
        orders[1].address = "东莞庄一横路123";
        orders[1].no = 2;
        orders[1].cai = cais[1];
        orders[1].quantity = 3;
        orders[1].customer = "李四";
        orders[1].hour = 12;
        orders[1].status = 0;

    }

    /**
     * 菜的数据初始化
     */
    public static void initialCais() {
        cais = new Cai[3]; // 创建数组

        cais[0] = new Cai(); // 创建第一个菜
        cais[0].name = "鱼香肉丝";
        cais[0].population = 0;
        cais[0].price = 20;

        cais[1] = new Cai();
        cais[1].name = "红烧带鱼";
        cais[1].population = 0;
        cais[1].price = 12;

        cais[2] = new Cai();
        cais[2].name = "蔬菜";
        cais[2].population = 0;
        cais[2].price = 22;

    }

    /**
     * 点赞系统
     */
    public static void praise() {
        // 显示菜品信息
        showAllCais();

        // 输入要点赞的菜品编号
        int praiseNum = Helper.getInteger("请选择您要点赞的菜品编号:", "输入错误,请重新输入。");
        cais[praiseNum - 1].population++;
        System.out.println("点赞成功!");
    }
}
public class Test {

    public static void main(String[] args) {
        OrderingUtil.start();
    }

}

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值