java开发点餐系统【对象练习】

题目要求

点餐系统

  1. 菜品类Dish 属性: 名称 name 价格 price 库存数 stock 售出数 saleNum 点赞数 likeNum

不提供带参构造方法
setter/getter
​
show方法, 横排打印每个菜品对象信息, 示例:
    **名称: 鱼香肉丝***************************************************
      价格: 15.0元    库存: 100    已售: 27    点赞数: 18
    ******************************************************************
​
sale方法, 此方法用于点餐功能, 在测试类中的点赞功能中, 找到菜品对象的指针后, 用指针调用like方法, 实现点赞数+1
此处注意参数n是售出的份数, 在测试类的点餐方法中会提示用户输入, 然后把用户输入的值传过来, 累加到属性saleNum中
public void saleOut(int n){
    this.saleNum += n;  // 此处要注意, 当saleNum为null, +=的时候会报空指针异常
}   
​
like方法, 此方法用于点赞功能, 在测试类中的点赞功能中, 找到菜品对象的指针后, 用指针调用like方法, 实现点赞数+1
public void like(){
    this.likeNum ++;  // 此处要注意, 当likeNum为null, ++的时候会报空指针异常
}   
2. 测试类
静态变量
    控制台输入扫描器对象
    菜品数组dishArray, 初始长度为5
    静态代码块, 初始化3个菜品对象, 存储刀菜品数组中
​
        主函数main, 打印菜单
            do while循环打印菜单, 让用户选择
            switch判断选择, case中分别调用下面的函数处理业务
        
        1. 菜品展示display()
            打印"进入菜品展示业务"
            遍历dishArray, 取出每一个指针, 调用show()方法打印菜品信息
            注意做null指针判断
​
        2. 添加菜品addDish()
            如果数组中没有剩余空间, 提示扩容, 然后return
            打印"进入添加菜品业务"
            构造一个菜品对象Dish dish = new Dish()
            分别提示输入"菜品名称", "菜品价格", "库存数量", 并将用户在控制台输入的返回值存储到dish对象中(用set方法)
            遍历dishArray
            找到第一个不为null的位置, 把菜品对象的指针存进去
            提示"添加成功"
​
        3.  删除菜品deleteDish()
            打印"进入删除菜品业务"
            菜品展示一下
            让用户选择需要删除的菜品编号
            需要判断为空, 有剩余库存 (库存数-售出数)的情况下不能删除 (不要问为什么这么设计, 只要实现就行)
                实现方式一: 直接把dishArray的指定元素置为null, 不前移
                实现方式二: 不仅置为null, 还要将后面的元素前移
                如果你写不出来实现方式二, 那就写实现方式一
            提示"删除成功"
​
        4. 菜品数组扩容dilatation()
            打印"进入菜品扩容业务"
            创建新数组, 长度是原数组1.5倍
            遍历原数组, 把原数组中的元素转移到新数组中
            新数组的指针赋给原数组的指针  (这时候堆中的原数组就没有指针指向了, 等待被gc)
            提示"扩容成功"
​
        5. 点餐 saleDish()
            打印"进入点餐业务"
            菜品展示一下
            输入需要点的菜品编号, 用变量i存储
            输入需要点的份数, 用变量n存储
            从数组中找到指定的菜品对象指针dish
            该有的判断要有
            取值器取出菜品的价格 * 上面输入的份数, 得出需要支付的金额, 打印出来
            dish.sale(n), 设置售出的数量, 把n传过去
            提示"点餐成功"
​
        6. 点赞 likeDish()
            打印"进入点赞业务"
            菜品展示一下
            输入需要点赞的菜品编号, 用变量i存储
            从数组中找到指定的菜品对象指针dish
            该有的判断要有
            dish.like()
            提示"点赞成功"

package OrderFood;

public class Dish {
    //菜品类Dish
    //属性:
    //    名称 name
    //    价格 price
    //    库存数 stock
    //    售出数 saleNum
    //    点赞数 likeNum
    private String name;
    private Double price;
    private Integer stock;
    private Integer saleNum;
    private Integer likeNum;

    //show方法, 横排打印每个菜品对象信息
    public void show() {
        System.out.println("\t**名称:   " + this.name);
        System.out.println("*******************************************************");
        System.out.println("\t价格: " + this.price + "元" + "\t库存: " + this.stock + "\t 已售:" + this.saleNum + "\t 点赞数:" + this.likeNum);
        System.out.println("*******************************************************");
    }

    // sale方法, 在测试类的点餐方法中会提示用户输入, 然后把用户输入的值传过来, 累加到属性saleNum中
    public void saleOut(int n) {
            this.saleNum += n;
    }

    //like方法, 此方法用于点赞功能, 在测试类中的点赞功能中, 找到菜品对象的指针后, 用指针调用like方法, 实现点赞数+1
    public void like() {
        this.likeNum ++;
    }

    //setter/getter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }

    public Integer getSaleNum() {
        return saleNum;
    }

    public void setSaleNum(Integer saleNum) {
        this.saleNum = saleNum;
    }

    public Integer getLikeNum() {
        return likeNum;
    }

    public void setLikeNum(Integer likeNum) {
        this.likeNum = likeNum;
    }
}
 

package OrderFood;

import java.util.Scanner;

public class Test {
    //    控制台输入扫描器对象
    static Scanner sc = new Scanner(System.in);
    //菜品数组dishArray, 初始长度为5
    static Dish[] dishArray = new Dish[5];

    //静态代码块, 初始化3个菜品对象, 存储刀菜品数组中
    static {
        Dish dish1 = new Dish();
        dish1.setName("鱼香肉丝");
        dish1.setPrice(20.0);
        dish1.setStock(100);
        dish1.setSaleNum(500);
        dish1.setLikeNum(300);
        dishArray[0] = dish1;

        Dish dish2 = new Dish();
        dish2.setName("麻婆豆腐");
        dish2.setPrice(10.0);
        dish2.setStock(100);
        dish2.setSaleNum(200);
        dish2.setLikeNum(190);
        dishArray[1] = dish2;

        Dish dish3 = new Dish();
        dish3.setName("佛跳墙");
        dish3.setPrice(99.0);
        dish3.setStock(5);
        dish3.setSaleNum(100);
        dish3.setLikeNum(9);
        dishArray[2] = dish3;
    }

    //    主函数main, 打印菜单
    //            do while循环打印菜单, 让用户选择
    //            switch判断选择, case中分别调用下面的函数处理业务
    public static void main(String[] args) {
        int choice = 0;
        do {
            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("**********7.退出*************");
            System.out.println("请输入:");
            choice = sc.nextInt();
            switch (choice) {
                case 1:
                    display();
                    break;
                case 2:
                    addDish();
                    break;
                case 3:
                    deleteDish();
                    break;
                case 4:
                    dilatation();
                    break;
                case 5:
                    saleDish();
                    break;
                case 6:
                    likeDish();
                    break;
            }
        } while (choice != 7);
        System.out.println("******欢迎再次光临~~~********");

    }

    //4. 菜品数组扩容dilatation()
    //            打印"进入菜品扩容业务"
    //            创建新数组, 长度是原数组1.5倍
    //            遍历原数组, 把原数组中的元素转移到新数组中
    //            新数组的指针赋给原数组的指针  (这时候堆中的原数组就没有指针指向了, 等待被gc)
    //            提示"扩容成功"
    private static void dilatation() {
        System.out.println("进入菜品扩容业务");
        Dish[] newDishArray = new Dish[dishArray.length + (dishArray.length / 2)];
        for (int i = 0; i < dishArray.length; i++) {
            newDishArray[i] = dishArray[i];
        }
        dishArray = newDishArray;
        System.out.println("扩容成功!");
    }

    //6. 点赞 likeDish()
    //            打印"进入点赞业务"
    //            菜品展示一下
    //            输入需要点赞的菜品编号, 用变量i存储
    //            从数组中找到指定的菜品对象指针dish
    //            该有的判断要有
    //            dish.like()
    //            提示"点赞成功"
    private static void likeDish() {
        System.out.println("进入点赞业务!");
        display();
        System.out.println("请输入需要点赞的菜品编号:");
        int i = sc.nextInt() - 1;
        if (i<0||i> dishArray.length+1||dishArray[i] == null) {
            System.out.println("没有这个菜品");
            return;
        } else {
            dishArray[i].like();
            System.out.println("点赞成功!");
        }
    }

    //5. 点餐 saleDish()
    //            打印"进入点餐业务"
    //            菜品展示一下
    //            输入需要点的菜品编号, 用变量i存储
    //            输入需要点的份数, 用变量n存储
    //            从数组中找到指定的菜品对象指针dish
    //            该有的判断要有
    //            取值器取出菜品的价格 * 上面输入的份数, 得出需要支付的金额, 打印出来
    //            dish.sale(n), 设置售出的数量, 把n传过去
    //            提示"点餐成功"
    private static void saleDish() {
        System.out.println("进入点餐业务");
        display();
        System.out.println("请输入需要点的菜品编号:");
        int i = sc.nextInt() - 1;
        System.out.println("请输入输入需要点的份数:");
        int n = sc.nextInt();

        if (i<0||i> dishArray.length+1||dishArray[i] == null) {
            System.out.println("没有这个菜品!");
        } else {
            System.out.println("您需要支付" + dishArray[i].getPrice() * n + "元!");
            dishArray[i].saleOut(n);
            dishArray[i].setStock(dishArray[i].getStock() - n);
            System.out.println("点餐成功!");
        }
    }

    //3.  删除菜品deleteDish()
    //            打印"进入删除菜品业务"
    //            菜品展示一下
    //            让用户选择需要删除的菜品编号
    //            需要判断为空, 有剩余库存 (库存数-售出数)的情况下不能删除 (不要问为什么这么设计, 只要实现就行)
    //                实现方式一: 直接把dishArray的指定元素置为null, 不前移
    //                实现方式二: 不仅置为null, 还要将后面的元素前移
    //                如果你写不出来实现方式二, 那就写实现方式一
    //            提示"删除成功"
    private static void deleteDish() {
        System.out.println("进入删除菜品业务");
        display();
        System.out.println("请选择需要删除的菜品编号:");
        int index = sc.nextInt() - 1;
        if (index<0||index>dishArray.length+1||dishArray[index] == null){
            System.out.println("没有这个菜品");
            return;
        } else if ((dishArray[index].getStock() - dishArray[index].getSaleNum()) > 0) {
            System.out.println("还有库存,不能删除");
            return;
        } else {
            dishArray[index] = null;
            System.out.println("删除成功!~");
        }

//        for (int i = 0; i < dishArray.length; i++) {
//            if (dishArray[i] == null) {
//                dishArray[i] = dishArray[i + 1];
//            }
//        }
    }

    //2. 添加菜品addDish()
    //            如果数组中没有剩余空间, 提示扩容, 然后return
    //            打印"进入添加菜品业务"
    //            构造一个菜品对象Dish dish = new Dish()
    //            分别提示输入"菜品名称", "菜品价格", "库存数量", 并将用户在控制台输入的返回值存储到dish对象中(用set方法)
    //            遍历dishArray
    //            找到第一个不为null的位置, 把菜品对象的指针存进去
    //            提示"添加成功"
    private static void addDish() {
        for (int i = 0; i < dishArray.length; i++) {
            if (dishArray[i]==null){
                System.out.println("有栏位");
                break;
            }
        }
        if (dishArray[dishArray.length - 1] != null) {
            System.out.println("没有剩余栏位,请扩容!");
            return;
        }
        System.out.println("进入添加菜品业务~~~");
        Dish dish = new Dish();
        System.out.println("请输入菜品名称:");
        dish.setName(sc.next());
        System.out.println("请输入菜品价格:");
        dish.setPrice(sc.nextDouble());
        System.out.println("请输入库存数量:");
        dish.setStock(sc.nextInt());
        dish.setSaleNum(0);
        dish.setLikeNum(0);
        for (int i = 0; i < dishArray.length; i++) {
            if (dishArray[i] == null) {
                dishArray[i] = dish;
                return;
            }
        }
        System.out.println("添加成功!");
    }

    //1. 菜品展示display()
    //            打印"进入菜品展示业务"
    //            遍历dishArray, 取出每一个指针, 调用show()方法打印菜品信息
    //            注意做null指针判断
    private static void display() {
        System.out.println("*******进入菜品展示业务********");
        for (int i = 0; i < dishArray.length; i++) {
            if (dishArray[i] == null) {
                System.out.println((i + 1) + "栏位无菜品");
            } else {
                dishArray[i].show();
            }
        }
    }
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码老祖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值