package com.itheima;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;
/*
* 、模拟一个智能点菜宝:
a.在项目根目录下手动创建food.txt文件(某饭店菜单),
菜名-价格-折扣(比如:0.8是8折,1代表没有折扣)文件内容如下:
京酱肉丝-28-0.8
锅包肉-48-0.6
皮蛋豆腐-12-0.9
烧茄子-15-1
水煮肉片-38-0.5
拍黄瓜-10-1
大盘鸡-56-0.9
b.自定义Food类,属性:菜名(String),价格(int),折扣(double),生成对应的set/get方法,满参构造
c.创建Test测试类在main方法中利用流读取food.txt文件中的内容,并且生成对应的Food对象,存放到任意集合中
d.提示用户输入菜名,直到用户输入“已点完”(可以重复点同一道菜),输出应付的餐费(单个菜品价格=原价*折扣)
PS:如果用户输入不存在的菜名则提示用户重新输入;
示例:
控制台提示: 请输入菜名:
用户输入: 大盘鸡
控制台提示: 请输入菜名:
用户输入: 皮
控制台提示: 本店没有这道菜,请重新输入
用户输入: 皮蛋豆腐
控制台提示: 请输入菜名
用户输入: 已点完
控制台提示: 您点了【大盘鸡,皮蛋豆腐】一共消费:61.20元
* */
public class Test09 {
public static void main(String[] args) throws IOException {
//声明一个字符串变量line
String line;
//创建ArrayList集合用来存储Food对象
ArrayList<Food> list = new ArrayList<Food>();
//创建ArrayList集合用来存储菜名
ArrayList<String> foodName = new ArrayList<String>();
//创建ArrayList用来存储客人点的菜的名字
ArrayList<String> order = new ArrayList<String>();
//创建输入流对象关联菜单
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("food.txt")));
//读取菜单文件中的内容
while((line = br.readLine()) != null){
//将读取到的一行字符串用-号切割存储在字符串数组中
String[] arr = line.split("-");
//将菜名存储在foodName这个ArrayList集合中
foodName.add(arr[0]);
//请切割出来的数据作为参数传递给Food类的有参构造创建Food对象
Food f = new Food(arr[0], Integer.parseInt(arr[1]), Double.parseDouble(arr[2]));
//将这个对象存储在food这个ArrayList集合中
list.add(f);
}
//关闭输入流
br.close();
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//声明一个空的字符串变量
String s = null;
//提示用户开始点菜
System.out.println("请开始点菜,结束请输入“已点完”");
//循环录入
while(true){
//提示用户输入菜名
System.out.print("请输入菜名:");
//将用户输入存储在字符串s中
s = sc.nextLine();
//如果用户输入“已点完”,就跳出循环
if("已点完".equals(s)){
break;
}
//如果用户输入的菜名不存在就提示用户本店没有这道菜,请重新输入
if(!foodName.contains(s)){
System.out.println("本店没有这道菜,请重新输入");
}else{
//否则将这个菜名存储在点菜的这个集合中
order.add(s);
}
}
System.out.println("您点了" + order.toString() + " 一共消费:" + getSOC(order, list) + "元");
}
//定义一个方法,作用是求出客户点餐总消费金额,返回值类型为double,参数列表为food集合对象 和点餐集合对象
private static double getSOC(ArrayList<String> order, ArrayList<Food> list) {
//声明一个double类型的总消费变量
double soc = 0;
//遍历点菜这个集合拿到每一个菜名
for(String s : order){
//遍历food这个集合拿到每一道菜对象
for(Food f : list){
//如果顾客点的菜跟菜单上的菜名匹配
if(s.equals(f.getName())){
//将折后的金额累加
soc += f.getAp();
}
}
}
//返回消费总金额
return soc;
}
}
//创建food类
class Food{
//定义成员变量菜名
private String name;
//定义成员变量单价
private int price;
//定义成员变量折扣
private double dis;
//定义成员变量实际金额
private double ap;
//空参构造
public Food() {
super();
// TODO Auto-generated constructor stub
}
//有参构造
public Food(String name, int price, double dis) {
super();
this.name = name;
this.price = price;
this.dis = dis;
//实际消费金额等于单价乘以折扣
ap = (double)price * dis;
}
//获取菜名
public String getName() {
return name;
}
//设置菜名
public void setName(String name) {
this.name = name;
}
//获取单价
public int getPrice() {
return price;
}
//设置单价
public void setPrice(int price) {
this.price = price;
}
//获取折扣
public double getDis() {
return dis;
}
//设置折扣
public void setDis(double dis) {
this.dis = dis;
}
//获取实际金额
public double getAp() {
return ap;
}
//设置实际金额
public void setAp(double ap) {
this.ap = ap;
}
}
|