新鲜出炉的点菜系统(附源码)
2023-07-03 10:06:39发布 浏览482次 信息编号:61721
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
新鲜出炉的点菜系统(附源码)
本文已收录于:
前言
上次写了一个Java SE版本后,发现大家反响不错,所以今天带来了同样的点餐系统,希望利用我们所学的Java SE知识来实现我们的点餐系统。
在上一篇文章的评论中,我也看到了大家的一些建议,我可能不会及时回复你们,但是在这篇文章中,我会尽力满足大家的一些好的建议,朝着更好的方向前进!
需求分析
这个时候,我们需要设计一个点菜系统,我们需要分析我们的系统,是给谁用的? 对对象的常用操作有哪些?
既然是点餐系统,我们的餐厅一般都有固定的菜单,对象一般都是顾客。 通过这个菜单,顾客可以点菜、删除菜品、查看自己点的菜品,最后在餐后使用。
因此,对于点菜系统来说,主要所需的功能如下:
初始化菜单、点菜、删除已点菜、查看已点菜、结账并退出系统
订单系统
功能预览系统菜单
进入我们的点餐系统后,通常会有一个系统菜单,它是用来提示我们进行下一步操作的。
系统菜单
点菜
根据系统菜单进入点餐功能后,输入要点菜的菜品编号,返回上一级菜单。
点菜
查看已订购的商品
假设我们点完菜品后,需要确认是否有重复的菜品。 这个时候我们就可以查看点的菜品了。
当然,上图是我们点完菜后才会出现的菜品。 如果我们还没有订购,系统会提示我们还没有订购。
删除菜单
如果我们不小心点了重复的菜怎么办? 不用担心,我们可以直接选择删除菜品功能,然后删除对应的重复菜品。
同样,如果我们点餐前进入删除菜品的功能,系统也会给出提示。
结账
吃完饭后,下一步就是结账了。 此时,只要您进入我们的结帐选项,系统就会打印出本次消费的所有金额。
同样,如果我们在点餐前进入结帐功能,系统也会给出提示。
退出系统
当我们输入选择为0时,意味着我们退出系统。
功能实现主界面
系统主界面主要是打印出功能选择菜单,然后根据我们的输入选择不同的子功能。
package com.cunyu;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
*
* @author : 村雨
* @version : 1.0
* @project : Java 实战
* @package : com.cunyu
* @className : DishApp
* @createTime : 2021/7/31 17:30
* @email : 747731461@qq.com
* @公众号 : 村雨遥
* @website : https://cunyu1943.github.io
* @description : 系统主界面
*/
public class DishApp {
public static void main(String[] args) {
Dish dish = new Dish();
// 初始化菜单
List dishList = dish.initMenu();
Scanner scanner = new Scanner(System.in);
List orderedList = new ArrayList<>();
while (true) {
System.out.println("----------欢迎使用点餐系统--------");
System.out.println("----------【1】点菜--------------");
System.out.println("----------【2】参看已点菜品-------");
System.out.println("----------【3】删除菜品-----------");
System.out.println("----------【4】结账--------------");
System.out.println("----------【0】返回上一级/退出-----");
System.out.println("输入你的选择");
String choice = scanner.next();
switch (choice) {
case "1":
while (true) {
dish.showMenu(dishList);
System.out.println("请输入菜品序号进行点菜,输入 0 则返回上一级菜单");
int id = scanner.nextInt();
if (id == 0) {
break;
}
System.out.println("输入菜品序号:" + id);
System.out.println("你点的菜是:" + dishList.get(id - 1).getName());
// 把已点的菜加入已点菜单
orderedList.add(dishList.get(id - 1));
}
break;
case "2":
dish.showOrderedMenu(orderedList);
break;
case "3":
if (orderedList.isEmpty()) {
System.out.println("当前还未点菜,请重新输入你的选择");
} else {
System.out.println("输入要删除菜品的序号");
int id = scanner.nextInt();
dish.deleteDish(id, dishList, orderedList);
}
break;
case "4":
dish.checkout(orderedList);
break;
case "0":
System.exit(0);
default:
break;
}
}
}
}
复制
主班设计
主要涉及到菜品,所以定义了一个菜品类别,主要包括三个属性:序号、菜品名称、菜品单价。
package com.cunyu;
/**
* Created with IntelliJ IDEA.
*
* @author : 村雨
* @version : 1.0
* @project : Java 实战
* @package : com.cunyu
* @className : Dish
* @createTime : 2021/7/31 17:27
* @email : 747731461@qq.com
* @公众号 : 村雨遥
* @website : https://cunyu1943.github.io
* @description : 菜品类
*/
public class Dish {
/**
* 编号
*/
private int id;
/**
* 菜名
*/
private String name;
/**
* 价格
*/
private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 Dish() {
}
public Dish(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
}
复制
功能接口
上一篇文章中,读者建议我把各个功能从接口中分离出来,然后再实现,所以这里我先给出各个功能的接口。
package com.cunyu;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @author : 村雨
* @version : 1.0
* @project : Java 实战
* @package : com.cunyu
* @className : DishInterface
* @createTime : 2021/7/31 20:26
* @email : 747731461@qq.com
* @公众号 : 村雨遥
* @website : https://cunyu1943.github.io
* @description :
*/
public interface DishInterface {
/**
* 初始化菜单
*
* @return 返回餐厅当前所提供的菜品列表
*/
public List initMenu();
/**
* 显示菜单
*
* @param dishList 菜品列表
*/
public void showMenu(List dishList);
/**
* 显示已经点过的菜品
*
* @param orderedList 当前已点菜品
*/
public void showOrderedMenu(List orderedList);
/**
* 移除菜品
*
* @param id 菜品对应序号
* @param dishList 菜品列表
* @param orderedList 已点菜品列表
*/
public void deleteDish(int id, List dishList, List orderedList);
/**
* 结账
*
* @param orderedList
*/
public void checkout(List orderedList);
}
复制
初始化菜单
一般餐厅都会提供固定的菜单,所以这里没有管理菜单的功能。 初始化后,给出每道菜并存储在列表中。
/**
* 初始化菜单
*
* @return 初始化后的菜单
*/
public List initMenu() {
List dishList = new ArrayList<>();
dishList.add(new Dish(1, "黄金手抓骨", 38));
dishList.add(new Dish(2, "乡村爆火肉", 58));
dishList.add(new Dish(3, "养生甲鱼汤", 68));
dishList.add(new Dish(4, "三鲜汤", 28));
dishList.add(new Dish(5, "紫菜蛋花汤", 18));
dishList.add(new Dish(6, "铁板黄金蛋", 38));
dishList.add(new Dish(7, "泡椒炒牛肉", 48));
dishList.add(new Dish(8, "麻婆豆腐", 18));
dishList.add(new Dish(9, "干煸豆角", 28));
dishList.add(new Dish(10, "干锅娃娃菜", 29));
dishList.add(new Dish(11, "干锅土豆丝", 28));
dishList.add(new Dish(12, "清炒时蔬", 25));
dishList.add(new Dish(13, "凉拌黄瓜", 10));
dishList.add(new Dish(14, "胡椒皮蛋", 15));
dishList.add(new Dish(15, "红烧茄子", 20));
return dishList;
}
复制
显示菜单列表
初始化菜单后,向顾客展示整个菜单。
/**
* 展示菜单
*
* @param dishList 菜品列表
*/
public void showMenu(List dishList) {
System.out.println("------------本店菜单------------");
System.out.println("序号\t\t菜名\t\t\t\t单价");
for (int i = 0; i < dishList.size(); i++) {
System.out.format("%d\t\t%s\t\t\t%.2f\n", dishList.get(i).getId(), dishList.get(i).getName(), dishList.get(i).getPrice());
}
System.out.println("---------------------------");
}
复制
显示已点菜
/**
* 查看已点的菜
*/
public void showOrderedMenu(List orderedList) {
if (orderedList.isEmpty()) {
System.out.println("当前您还未点餐,请重新输入选择");
} else {
System.out.println("当前您点的菜品如下");
for (int i = 0; i < orderedList.size(); i++) {
System.out.println(orderedList.get(i).getName());
}
}
}
复制
取出盘子
找到相应序列号对应的盘子,然后将其取出。
/**
* 删除对应菜品
*
* @param id 菜品对应序号
* @param dishList 菜品列表
* @param orderedList 已点菜品列表
*/
public void deleteDish(int id, List dishList, List orderedList) {
if (!orderedList.isEmpty()) {
orderedList.remove(dishList.get(id - 1));
}
}
复制
结账
首先判断是否订购,如果没有则提示,如果已经订购了则直接结账。
/**
* 结账
*/
public void checkout(List orderedList) {
double money = 0.0d;
if (orderedList.isEmpty()) {
System.out.println("当前您还未点餐,请重新输入选择");
} else {
System.out.println("请稍等,正在结算中……");
for (int i = 0; i < orderedList.size(); i++) {
money += orderedList.get(i).getPrice();
}
System.out.format("你此次总共消费:¥ %.2f\n", money);
}
}
复制
总计划
好了,实现了上述模块的功能之后,将它们整合在一起,就得到了我们最终的整体方案。
每个部分的代码已经发布,但为了您的方便,我将在这里给出一般的程序结构。
所有代码都位于com.cunyu包下,依次是实体类Dish、界面类和主程序。
总结
好了,以上就是我们点餐系统的实现了。 如果你很好的掌握了Java SE部分的知识,这一定不难,毕竟就是一个很简单的控制台程序,主要语法熟悉了,一点逻辑就够了。
好了,今天的内容就到此结束了。 如果您有什么好的建议,欢迎留言交流。
最后贴出这个设计的仓库地址:
有需要的童鞋可自行领取。 当然希望大家给我一颗⭐星,满足我菜鸟的虚荣心~
-结尾-
提醒:请联系我时一定说明是从星空网上看到的!