A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cxh0307 中级黑马   /  2017-3-29 19:24  /  1779 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
        }
       
}

评分

参与人数 2黑马币 +10 收起 理由
zhengkai + 5 很给力!
tyq + 5 很给力!

查看全部评分

5 个回复

倒序浏览
楼主厉害,学习了
回复 使用道具 举报
厉害了,大神,求带帶
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
精诚所至 发表于 2017-3-30 12:13
厉害了,大神,求带帶

这题还是挺简单的,等你学完基础班的内容很容易敲的
回复 使用道具 举报
学习了 谢谢 很不错的


这题还是挺简单的
回复 使用道具 举报
等我上完我也要试一下
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马