1、需求分析
(1)用户可以点菜
(2)用户可以查看已经点的菜
(3)结账计算
2、概要设计
(1)编译工具:idea
(2)主要是在控制台实现
(3)只是很简单的一个程序,目的在于开始学习Java时锻炼一下思维
3、详细设计
- 主菜单界面:为用户与计算机进行交互
public static void menu(){
System.out.println("-----主菜单-----");
System.out.println("菜单\t\t\t 1");
System.out.println("已点菜品\t\t 2");
System.out.println("买单\t\t\t 3");
System.out.println("-----根据编号选择服务-----");
}
- 菜单:展示程序预先设计好的菜品,主要利用集合以及集合的遍历
public static void showMenu(){
System.out.println("-----开始点菜-----");
for (int i = 0; i < dishList.size(); i++) {//dishList.fori+enter
Dish dish = dishList.get(i);
System.out.println(dish.id+"\t"+dish.name+"\t"+dish.price);
}
System.out.println("-----输入序号点菜,按0结束点菜-----");
}
- 已点菜品:定义了一个静态的集合,用来存储用户刚刚点过的菜
public static void show_haveOrder(){
System.out.println("-----你已经点的菜-----");
for (int i = 0; i < orderList.size(); i++) {
Dish dish = orderList.get(i);
System.out.println(dish.id+"\t"+dish.name+"\t"+dish.price);
}
}
- 买单:简单的集合遍历
public static void pay(){
System.out.println("-----请稍等,正在结算-----");
double total = 0f;
for (Dish dish : orderList) {
total += dish.price;
}
System.out.println("亲,您需要支付的金额为:"+total+"元");
}
4、流程图
5、扩展设计
(1)点菜时同一个菜点多次,不要一个个打印出来,用 菜品x份数
(2)可以进行退菜操作(删除orderList中的某元素)
(3)可以以文件录入方式来更新菜单(I/O流),不过要注意乱码问题
我没有去做扩展
6、代码部分
-
目录
-
我定义的菜品
public static void initDish(){
Dish dish1 = new Dish(1,"香辣肉丝",29.0);
Dish dish2 = new Dish(2,"油闷大虾",99.0);
Dish dish3 = new Dish(3,"黄焖鸡",80.0);
Dish dish4 = new Dish(4,"水煮牛肉",56.0);
Dish dish5 = new Dish(5,"猪肚汤",46.0);
dishList.add(dish1);
dishList.add(dish2);
dishList.add(dish3);
dishList.add(dish4);
dishList.add(dish5);
}
- 全部代码
Dish.java
package cn.tx.demo;
/*
提供有参数的构造方法
*/
public class Dish {
int id;//编号
String name;//菜名
double price;//价格
//生成构造方法 alt+insert
public Dish(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
}
orderApp.java
package cn.tx.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class orderApp {
//提前准备菜品,展示给用户
static List<Dish> dishList = new ArrayList<>();
static List<Dish> orderList = new ArrayList<>();
public static void main(String[] args){
initDish();//初始化菜单
Scanner user = new Scanner(System.in);
while(true){
menu();
int num = user.nextInt();//阻塞的效果
switch (num){
case 1:
while(true){
showMenu();
int id = user.nextInt();
if(id == 0)break;//结束选菜
Dish dish = dishList.get(id - 1);
orderList.add(dish);
}
case 2:
show_haveOrder();
break;
case 3:
pay();
return;//整个循坏结束
}
}
}
public static void showMenu(){
System.out.println("-----开始点菜-----");
for (int i = 0; i < dishList.size(); i++) {//dishList.fori+enter
Dish dish = dishList.get(i);
System.out.println(dish.id+"\t"+dish.name+"\t"+dish.price);
}
System.out.println("-----输入序号点菜,按0结束点菜-----");
}
public static void show_haveOrder(){
System.out.println("-----你已经点的菜-----");
for (int i = 0; i < orderList.size(); i++) {
Dish dish = orderList.get(i);
System.out.println(dish.id+"\t"+dish.name+"\t"+dish.price);
}
}
public static void pay(){
System.out.println("-----请稍等,正在结算-----");
double total = 0f;
for (Dish dish : orderList) {
total += dish.price;
}
System.out.println("亲,您需要支付的金额为:"+total+"元");
}
public static void menu(){
System.out.println("-----主菜单-----");
System.out.println("菜单\t\t\t 1");
System.out.println("已点菜品\t\t 2");
System.out.println("买单\t\t\t 3");
System.out.println("-----根据编号选择服务-----");
}
public static void initDish(){
Dish dish1 = new Dish(1,"香辣肉丝",29.0);
Dish dish2 = new Dish(2,"油闷大虾",99.0);
Dish dish3 = new Dish(3,"黄焖鸡",80.0);
Dish dish4 = new Dish(4,"水煮牛肉",56.0);
Dish dish5 = new Dish(5,"猪肚汤",46.0);
dishList.add(dish1);
dishList.add(dish2);
dishList.add(dish3);
dishList.add(dish4);
dishList.add(dish5);
}
}