欢迎光临
我们一直在努力

ArrayList之模仿外卖系统综合案例

ArrayList之模仿外卖系统综合案例

需求

完成菜品的上架 以及菜品信息浏览功能

分析需求:

1.在外卖系统中,每一份菜都包含 菜品的名称 菜品的原价 菜品的优惠价 菜品的其他信息 那我们就可以定义一个菜品类(Food类) 用来描述每一个菜品对象要封装那些数据

2.接着再写一个菜品管理类(FoodManager类) 提供展示操作界面 上架菜品 浏览菜品的功

分为三部分写

首先我们先定义一个菜品(Food类),用来描述每一个菜品对象要封装那些数据

1. 数据层:Food 类(封装菜品属性)

核心目标:定义菜品的所有属性,提供操作属性的方法(get/set),保证数据封装性

具体思路:

① 定义私有属性:新增id(唯一标识)+ 原有name(名称)、originalPrice(原价)、specialPrice(优惠价)、info(描述)

② 无参构造:满足「先创建对象、后赋值」的场景(如上架菜品时逐步输入信息);③ 有参构造(可选):方便快速创建带完整属性的菜品对象;④ get/set 方法:私有属性无法直接访问,通过方法读写,保证数据安全性(比如后续可在 set 方法中加价格合法性校验)

然后写一个菜品管理类 提供上架菜品的功能 浏览菜品的功能 展示操作界面的功能

2. 业务层:FoodManager 类(实现核心功能)

这是系统的核心,所有操作逻辑都集中在这里 拆解为 4 个核心功能:

(1)自动生成唯一 ID
  • 问题:手动输入 ID 易重复,用户体验差
  • 解决方案:定义nextId变量(初始值 1),每次上架菜品时,将nextId赋值给菜品 ID,然后nextId++,保证每个菜品 ID 唯一且递增。
(2)上架菜品(add 方法)
  • 流程思路:① 提示用户输入菜品信息(名称、价格等)
  • ② 创建 Food 对象,用 set 方法为对象赋值(ID 自动分配,无需用户输入)
  • ③ 将 Food 对象添加到ArrayList<Food>集合中(集合是存储多个菜品的容器,支持动态增删)
  • ④ 提示上架成功
(3)浏览所有菜品(printAllFoods 方法)
  • 流程思路:① 先判断集合是否为空(避免遍历空集合),为空则提示 “暂无菜品”;② 非空则遍历集合,逐个取出 Food 对象,通过 get 方法获取属性并打印;③ 格式美化(如分隔线),提升可读性
(4)根据 ID 查找菜品(findFoodById 方法)
  • 流程思路:
  • ① 先判断集合是否为空,为空则提示 “无法查找”;
  • ② 接收用户输入的目标 ID;
  • ③ 遍历集合,对比每个 Food 对象的 ID 与目标 ID:
    • 匹配:打印该菜品的所有信息,标记 “找到” 并退出循环(避免无效遍历);
    • 不匹配:遍历结束后提示 “未找到该 ID 菜品”。
(5)系统主界面(start 方法)
  • 流程思路:① 用while(true)实现循环菜单(直到用户选择退出)
  • ② 打印功能选项(上架 / 浏览 / 查找 / 退出)
  • ③ 接收用户输入的命令,用switch语句匹配并调用对应方法
  • ④ 处理无效输入(提示 “命令有误”),退出时终止循环(return)

最后写一个测试类 在测试类中进行测试 其实测试类 只起到一个启动程序的作用

3. 测试层:FoodTest 类(运行系统)
  • 核心思路:创建 FoodManager 对象,调用start()方法启动系统,作为程序入口

总结

  • 数据封装:用 Food 类封装菜品属性,通过 get/set 方法保证数据安全
  • 数据存储:用 ArrayList 集合动态存储多个菜品对象,支持增删查操作
  • 交互逻辑:控制台循环菜单 + 分支判断,实现用户与系统的交互
  • ID 唯一性:通过自增变量 nextId 自动生成 ID,避免手动输入重复问题
  • 这个思路遵循「高内聚、低耦合」的设计原则:Food 类只负责封装数据,FoodManager 类只负责业务逻辑,测试类只负责启动程序,各模块职责清晰,便于后续扩展(如添加修改 / 删除菜品功能)

    输出 直接在控制台输出就行了

    赞(0)
    未经允许不得转载:171主机测评 » ArrayList之模仿外卖系统综合案例
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址