前情回顾:
- 【2023,学点儿新Java-14】携程面试题:如何看待Java是一门半编译半解释型的语言?| 咨询互联网行业 资深前辈的一些问题 | 附:为什么说ChatGPT的核心算法是…?| GPT-3.5
- 【2023,学点儿新Java-13】阶段练习之Java面试企业真题(阿里巴巴&拼多多 等) | 常用的Java命令行操作都有哪些 | 如何解决Java的内存泄漏和内存溢出问题?
- 【2023,学点儿新Java-12】小结:阶段性复习 | Java学习书籍推荐(小白该读哪类Java书籍?有一定基础后,再去读哪类书籍?)
- …
- 更多Java系列文章,可参阅博主主页哦!
所有的弯路都是直的,不要纠结选择的路是否对,去做才知道。
🎯作者主页: 追光者♂🔥
🌸个人简介:
💖[1] 计算机专业硕士研究生💖
🌟[2] 2022年度博客之星人工智能领域TOP4🌟
🏅[3] 阿里云社区特邀专家博主🏅
🏆[4] CSDN-人工智能领域优质创作者🏆
📝[5] 预期2023年10月份 · 准CSDN博客专家📝
- 无限进步,一起追光!!!
🍎感谢大家 点赞👍 收藏⭐ 留言📝!!!
🌿本篇,分享一个Java基础案例——餐厅点餐系统。针对实现的每个功能给出描述并附上具体实现的源代码以及所实现的效果和测试/验证。这是一个比较适合学习完Java基础的朋友练手的小案例(更多Java知识,敬请期待!)
🕝目录
- 🍄一、功能描述
- 🍄二、具体实现
- 🍑2.1 餐厅菜单初始化
- 🍑2.2 菜单显示
- 🍑2.3 获取用户输入
- 🍑2.4 实现点菜功能
- 🍑2.5 结算账单
- 🍑2.6 查看账单
- 🍑2.7 主程序
- 🍑2.8 完整源代码
- 🍄三、所实现的效果
- 🍑3.1 初始化
- 🍑3.2 测试
- 💧3.2.1 无账单时:
- 💧3.2.2 点菜
- 💧3.2.3 Bug验证
🍄一、功能描述
本案例是一个适合Java中级学习者的小程序,涵盖了Java编程中 常用概念,同时也需要一定的面向对象设计思想
。 (不适合Java初学者哈~ 需要具备一定的Java学习经历哦~)
具体而言,整个案例实现了如下功能:
- 餐厅菜单初始化:使用
initializeMenu()
方法 初始化菜单和价格列表。 - 菜单显示:使用
displayMenu()
方法显示菜单,让用户选择点餐选项。 - 输入获取:使用
getUserInput()
方法 获取用户的选择选项。 - 点菜功能:使用
orderDish()
方法进行点菜,包括输入桌号、选择菜品和将菜品加入已点菜单中。 - 结算账单:使用
calculateBill()
方法 显示已点菜品列表和总金额,将订单标记为已付款。 - 查看账单:使用
displayBill()
方法 显示已点菜品列表。 - 主程序:包含程序入口和循环逻辑。
🍄二、具体实现
🍑2.1 餐厅菜单初始化
// 初始化菜单
private static void initializeMenu() {
menu.add("鱼香肉丝");
price.add(28.0);
menu.add("宫保鸡丁");
price.add(32.0);
menu.add("酸菜鱼");
price.add(38.0);
menu.add("干锅牛肉");
price.add(48.0);
menu.add("清蒸大闸蟹");
price.add(68.0);
}
🍑2.2 菜单显示
// 显示菜单
private static void displayMenu() {
System.out.println("欢迎光临餐厅,请您点餐:");
for (int i = 0; i < menu.size(); i++) {
System.out.println(i + ": " + menu.get(i) + " " + price.get(i) + "元");
}
System.out.println("0: 查看账单");
System.out.println("1: 点菜");
System.out.println("2: 结算账单");
}
🍑2.3 获取用户输入
// 获取用户输入
private static String getUserInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入选项:");
return scanner.nextLine();
}
🍑2.4 实现点菜功能
// 点菜
private static void orderDish() {
System.out.print("请输入桌号:");
Scanner scanner = new Scanner(System.in);
tableNumber = scanner.nextInt();
System.out.println("已选菜品:");
int dishIndex;
do {
System.out.print("输入菜品编号(输入-1结束点菜):");
dishIndex = scanner.nextInt();
if (dishIndex != -1) {
System.out.println("已点:" + menu.get(dishIndex));
orderedList.add(dishIndex);
}
} while (dishIndex != -1);
}
🍑2.5 结算账单
// 结算账单
private static void calculateBill() {
double total = 0.0;
System.out.println("桌号:" + tableNumber + ",已点菜品:");
for (int i = 0; i < orderedList.size(); i++) {
System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
total += price.get(orderedList.get(i));
}
System.out.println("总计:" + total + "元");
System.out.println("感谢您的光临,祝您用餐愉快!");
isPaid = true;
}
🍑2.6 查看账单
// 显示账单
private static void displayBill() {
if (orderedList.isEmpty()) {
System.out.println("还没有点菜!");
return;
}
System.out.println("桌号:" + tableNumber + ",已点菜品:");
for (int i = 0; i < orderedList.size(); i++) {
System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
}
}
🍑2.7 主程序
public class Restaurant {
private static List<String> menu = new ArrayList<>(); // 菜单列表
private static List<Double> price = new ArrayList<>(); // 菜品对应的价格列表
private static List<Integer> orderedList = new ArrayList<>(); // 已点菜品列表
private static int tableNumber; // 餐桌号
private static boolean isPaid = false; // 是否已付款
public static void main(String[] args) {
initializeMenu(); // 初始化菜单
while (!isPaid) {
displayMenu(); // 显示菜单
String input = getUserInput(); // 获取输入
switch (input) {
case "0":
displayBill(); // 显示账单
break;
case "1":
orderDish(); // 点菜
break;
case "2":
calculateBill(); // 结算账单
break;
default:
System.out.println("无效输入!");
break;
}
}
}
🍑2.8 完整源代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Restaurant {
private static List<String> menu = new ArrayList<>(); // 菜单列表
private static List<Double> price = new ArrayList<>(); // 菜品对应的价格列表
private static List<Integer> orderedList = new ArrayList<>(); // 已点菜品列表
private static int tableNumber; // 餐桌号
private static boolean isPaid = false; // 是否已付款
public static void main(String[] args) {
initializeMenu(); // 初始化菜单
while (!isPaid) {
displayMenu(); // 显示菜单
String input = getUserInput(); // 获取输入
switch (input) {
case "0":
displayBill(); // 显示账单
break;
case "1":
orderDish(); // 点菜
break;
case "2":
calculateBill(); // 结算账单
break;
default:
System.out.println("无效输入!");
break;
}
}
}
// 初始化菜单
private static void initializeMenu() {
menu.add("鱼香肉丝");
price.add(28.0);
menu.add("宫保鸡丁");
price.add(32.0);
menu.add("酸菜鱼");
price.add(38.0);
menu.add("干锅牛肉");
price.add(48.0);
menu.add("清蒸大闸蟹");
price.add(68.0);
}
// 显示菜单
private static void displayMenu() {
System.out.println("欢迎光临餐厅,请您点餐:");
for (int i = 0; i < menu.size(); i++) {
System.out.println(i + ": " + menu.get(i) + " " + price.get(i) + "元");
}
System.out.println("0: 查看账单");
System.out.println("1: 点菜");
System.out.println("2: 结算账单");
}
// 获取用户输入
private static String getUserInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入选项:");
return scanner.nextLine();
}
// 点菜
private static void orderDish() {
System.out.print("请输入桌号:");
Scanner scanner = new Scanner(System.in);
tableNumber = scanner.nextInt();
System.out.println("已选菜品:");
int dishIndex;
do {
System.out.print("输入菜品编号(输入-1结束点菜):");
dishIndex = scanner.nextInt();
if (dishIndex != -1) {
System.out.println("已点:" + menu.get(dishIndex));
orderedList.add(dishIndex);
}
} while (dishIndex != -1);
}
// 结算账单
private static void calculateBill() {
double total = 0.0;
System.out.println("桌号:" + tableNumber + ",已点菜品:");
for (int i = 0; i < orderedList.size(); i++) {
System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
total += price.get(orderedList.get(i));
}
System.out.println("总计:" + total + "元");
System.out.println("感谢您的光临,祝您用餐愉快!");
isPaid = true;
}
// 显示账单
private static void displayBill() {
if (orderedList.isEmpty()) {
System.out.println("还没有点菜!");
return;
}
System.out.println("桌号:" + tableNumber + ",已点菜品:");
for (int i = 0; i < orderedList.size(); i++) {
System.out.println(menu.get(orderedList.get(i)) + " " + price.get(orderedList.get(i)) + "元");
}
}
}
🍄三、所实现的效果
🍑3.1 初始化
可以看到如下选项:
🍑3.2 测试
我们可以根据提示 来输入选项进行点餐等一系列操作:
💧3.2.1 无账单时:
当我们尚未点餐,就查看账单时:即输入0,可以看到“还没有点菜!”的提示,如下图所示:
💧3.2.2 点菜
同样地,根据提示 正常操作即可点菜:
💧3.2.3 Bug验证
当然,还是存在不少的小bug,有待于进一步优化。例如:
至于优化,敬请期待咯~
大家也可以自己练习一下,总之是一个很简单的小项目!
🍒 热门专栏推荐:
- 🥇Python&AI专栏:【Python从入门到人工智能】
- 🥈前端专栏:【前端之梦~代码之美(H5+CSS3+JS.】
- 🥉文献精读&项目专栏:【小小的项目 (实战+案例)】
- 🍎C语言/C++专栏:【C语言、C++ 百宝书】(实例+解析)
- 🍏Java系列(Java基础/进阶/Spring系列/Java软件设计模式等)
- 🌞问题解决专栏:【工具、技巧、解决办法】
- 📝 加入Community 一起追光:追光者♂社区
持续创作优质好文ing…✍✍✍
记得一键三连哦!!!
求关注!求点赞!求个收藏啦!