前言

继上次写了一个 Java SE 版本的 学生成绩管理系统 之后,发现大家反响还不错,所以今天我有带来了差不多一样的点菜系统,希望利用我们所学的 Java SE 知识,实现我们的点菜系统。

而在上次文章的评论中,我也看到了大家的一些建议,可能没有及时回复大家,但是在这次文章中,我会尽量满足大家提的一些好的建议,向着更好的方向前进!

需求分析

此次可以,我们需要设计一个点菜系统,我们就需要对我们的系统进行分析,面向的对象是谁?对象常用的操作又有哪些?

既然是点菜系统,那我们的餐馆一般都是有一个固定的菜单,然后面向的对象一般都是顾客,顾客可以通过这个菜单进行点菜、删除菜,查看已经点过的菜,以及最后用完餐后的结账。

因此,对于点菜系统,主要所需功能如下:

  1. 初始化菜单
  2. 点菜
  3. 移除已点的菜
  4. 查看已点的菜
  5. 结账
  6. 退出系统

功能预览

系统菜单

进入我们的点菜系统之后,一般都是有系统菜单的,用于提示我们进行下一步的操作。

点菜

根据系统菜单进入点菜功能后,输入菜品序号进行点菜以及返回上一级菜单。

查看已点菜品

假设我们点完菜之后,要确认下有没有点重复的菜,此时就可以查看已点菜品。

当然,上图是我们已经点过菜才会出现菜品,如果我们还没有点过菜,那么系统则会提示还未点菜。

删除菜品

假设我们不小心点了重复的菜,那该怎么办呢?不用担心,我们直接选择删除菜品功能,然后删除对应重复菜品即可。

同样的,加入我们还未点菜就进入删除菜品功能,系统也会给出提示。

结账

当我们用完餐之后,接下来就是结账了。此时只要进入我们的结账选项,系统就会打印出本次所消费的所有金额。

同样的,加入我们还未点菜就进入结账功能,系统也会给出提示。

退出系统

当我们输入选择为 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<Dish> dishList = dish.initMenu();Scanner scanner = new Scanner(System.in);List<Dish> 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<Dish> initMenu();/*** 显示菜单** @param dishList 菜品列表*/public void showMenu(List<Dish> dishList);/*** 显示已经点过的菜品** @param orderedList 当前已点菜品*/public void showOrderedMenu(List<Dish> orderedList);/*** 移除菜品** @param id          菜品对应序号* @param dishList    菜品列表* @param orderedList 已点菜品列表*/public void deleteDish(int id, List<Dish> dishList, List<Dish> orderedList);/*** 结账** @param orderedList*/public void checkout(List<Dish> orderedList);
}

初始化菜单

一般餐馆都是提供的固定的菜单,所以这里没有给出管理菜单的功能,直接进行初始化后给出各个菜品,将其存入列表中。

/*** 初始化菜单** @return 初始化后的菜单*/
public List<Dish> initMenu() {List<Dish> 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<Dish> 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<Dish> 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<Dish> dishList, List<Dish> orderedList) {if (!orderedList.isEmpty()) {orderedList.remove(dishList.get(id - 1));}
}

结账

先判断是否点菜,如果没有则提示,若已经点过餐,则直接结账。

/*** 结账*/
public void checkout(List<Dish> 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、接口类 DishInterface 以及主程序 DishApp

总结

好了,以上就是我们点菜系统的实现了。如果你对 Java SE 部分的知识掌握较好的话,这一定不是啥难事,毕竟是个十分简单的控制台程序,主要语法熟悉,稍微理理逻辑即可。

好了,今天的内容就到此结束了,如果你有什么好的建议,欢迎留言交流。

最后的最后,贴出本设计的 Github 仓库地址:https://github.com/cunyu1943/java-in-actions

有需要的童鞋可以自取,当然了,也希望大家给我一个⭐ star,满足一下我这个菜鸟的虚荣心呀 ~ ❤️❤️❤️

新鲜出炉的点菜系统(附源码)相关推荐

  1. php jquery ajax登录,jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)

    弹出层主要用于展示丰富的页面信息,还有一个更好的应用是弹出表单层丰富交互应用.常见的应用有弹出登录表单层,用户提交登录信息,后台验证登录成功后,弹出层消失,主页面局部刷新用户信息.本文我们将给大家介绍 ...

  2. 在线计算机考试系统源代码,在线考试系统 附源码和文档

    [实例简介] 在线考试系统 附源码和文档. 做毕业设计,课程设计或者正在学习相关技术知识的朋友可以下载资源学习.想继续学习相关知识的可以关注我. [实例截图] [核心代码] 在线考试系统4 └── S ...

  3. Shark(鲨鱼记账系统)--附源码

    Shark(鲨鱼记账系统)–附源码 程序员就要多撸代码,以便在脑海中形成深刻记忆,昨晚试着撸了一个小小的记账系统,内容很简单,主要负责简单的记账,不过没用到持久层,后续会做持久层的版本,先看个简单的把 ...

  4. C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码

    源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 没啥好说的.开干吧. 今天的学习内容? 今天的内容比较简单. 就几个弹出 ...

  5. IM在线客服系统_开源在线客服系统附源码

    在线客服系统比以往任何时候都更受欢迎,随着即时通讯巨头WhatsApp.Facebook Messenger和微信的崛起,即时通讯平台也正在接管商业通信.精简和用户友好的消息传递解决方案已经取代了电话 ...

  6. leaflet+geoserve+jquery实现简单Webgis系统(附源码下载)

    1.基于leaflet的小系统,源码1000多行,能注释的我都注释了,运行没有任何问题,源码下载链接在评论区: 2.里面用到了很多插件,大部分插件都是使用BootCDN的复制<script> ...

  7. 2022新鲜出炉Android面试总结附真题+答案解析(京东、新东方、货拉拉...)

    前言 从我的面试情况来看,不要以为技术面试过了就稳了,hr会卡人(京东),审批会卡人(货拉拉),所以,面试的时候,要多面试几家,不要一棵树吊死. 1.技术面试,通过 9家: 千喜鹤(2面),广州星域( ...

  8. C# 实现视频监控系统(附源码)

    去过工厂或者仓库的都知道,在工厂或仓库里面,会有很多不同的流水线,大部分的工厂或仓库,都会在不同流水线的不同工位旁边安装一台电脑,一方面便于工位上的师傅把产品的重要信息录入系统,便于公司系统数据采集分 ...

  9. 计算机毕业设计ssm 曲沃县农产品销售系统(附源码)

    通过对系统功能模块分析可以得知,主要是对项目元素组合.分解和更换做出相应的单元,再通过系统模块来规划出一个原则,系统的设计首先是围绕管理员需求进行开发设计的,主要是为了能够更好的管理信息和服务于用户, ...

最新文章

  1. 如何在linux下检测内存泄漏
  2. 服务外包技术培训——后端开发技术栈分析(Java)
  3. AC Automaton
  4. tableau地图城市数据_举个栗子!Tableau 技巧(156):在地图分析中创建缓冲区
  5. SpringBoot 之Spring Boot Starter依赖包及作用
  6. 1. Go语言顺序程序设计,错误处理
  7. Windows中的磁盘分区、MBR、GPT
  8. 首页大屏广告效果 jquery轮播图淡入淡出
  9. ARM 内核寄存器 和 基本汇编语言讲解
  10. esp32-cam拍照上传,微信小程序照片显示
  11. 一个软件公司需要多少前端_建一个微商城需要多少钱?
  12. Aspose WorkbookDesigner打开文件异常Error xml namespace
  13. GNU Make 使用手册!
  14. “清洁地球日”看AI与碳中和:百度OCR成无纸化办公利器
  15. 中止执行后超过2年_申请执行超过2年时效,法院还处理吗?
  16. MD500E源码和代码解析文档 代码包含了同步机FOC控制算法、电阻、电感、磁链、反电动势
  17. v4l2 Camera详细设置
  18. PDF文件转DWG文件用CAD转换器可以操作吗?
  19. 网易员工入职必学excel课程,妈妈再也不懂担心我做表哥/表姐了!
  20. 百度松果线上菁英班(竞赛真题MC0101~MC0104)

热门文章

  1. transformers中GLUE各个任务所用的评估方法
  2. vue动态拼接图片路径、img地址拼接问题 [模板字符串]
  3. PHP app登录qq,APP配置QQ登录的详细教程
  4. 计算机文字录入培训大纲,计算机文字录入处理员教学大纲.doc
  5. mysql安装apply_MySQL安装过程中出现“APPLY security settings错误”的解决方式
  6. 可编程数据平面(论文阅读)
  7. 各大数据库厂商怎样看竞争对手
  8. Cannot enhance @Configuration bean definition ‘dataSourceConfig‘ since its singleton instanc .......
  9. “21 天好习惯”第一期-6
  10. 智能优化算法(源码)-食肉植物算法(Carnivorous Plant Algorithm ,CPA)