键盘录入抽奖人随机抽奖

    抽奖软件
        a、通过键盘录入抽奖人姓名,多个抽奖人用“|”号分割。输入完成后,
                控制台打印抽奖人姓名,并提示YES OR NO来表示确认。一旦确
                认,自动为抽奖人分配ID,开始抽奖.(如果出现重名,则以ID为准)
        b、奖品存放在某个集合中。
        c、1等奖 1个   2等奖 3个   3等奖  4个。
        d、每次抽奖均打印姓名,然后键盘输入next开始第二次抽奖。如果奖品已经
                抽完,则公布中奖汇总。
        不再提示next
        1.初始化抽奖人的姓名
        2.初始化奖品的信息
        采用面向对象编程思想  拆跟代码 --》把以上两大功能放进工具类
/**
 * 定义一个中奖人
 */
public class LuckDog {
    private Integer id;//中奖人id
    private String name;//中奖人姓名

    public LuckDog(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "LuckDog{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public LuckDog() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

**
 * 定义一个类 奖品类
 */
public class Prize {
    private String name;//奖品的名称
    private String level;////
    private Integer count;//奖品的数量

    @Override
    public String toString() {
        return "Prize{" +
                "name='" + name + '\'' +
                ", level='" + level + '\'' +
                ", count=" + count +
                '}';
    }

    public Prize(String name, String level, Integer count) {
        this.name = name;
        this.level = level;
        this.count = count;
    }

    public Prize() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLevel() {
        return level;
    }

    public void setLevel(String level) {
        this.level = level;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }
}

/**
 * 定义一个中奖结果
 */
public class Result {
    private Integer id;//id
    private String username;//中奖人姓名
    private String prizeName;//中奖人奖品

    @Override
    public String toString() {
        return "Result{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", prizeName='" + prizeName + '\'' +
                '}';
    }

    public Result() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPrizeName() {
        return prizeName;
    }

    public void setPrizeName(String prizeName) {
        this.prizeName = prizeName;
    }

    public Result(Integer id, String username, String prizeName) {
        this.id = id;
        this.username = username;
        this.prizeName = prizeName;
    }
}

/**
 * 定义一个工具类
 * 完成两大功能
 * 1.初始化抽奖人的信息
 * 2.初始化奖品的信息
 */
public class ToolsClass {

    //需要容器 初始化抽奖人的初始容量
    static ArrayList<LuckDog> list = new ArrayList<>();

    //定义一个静态方法 初始化抽奖人的信息
    public static ArrayList<LuckDog> initperson() {
        //从控制台中获取
        System.out.println("请参与抽奖人的信息,如果有多个,中间用|隔开");
        Scanner sc = new Scanner(System.in);
        String strs = sc.nextLine();//抽奖人信息

        //split(String patter) 拆分字符串为字符数组
        //为空校验
        if (strs != null && !strs.equals("") && !strs.equals("null")) {
            //表明 数据是安全的
            String[] persons = strs.split("\\|");//  \\拆分|
            //循环遍历 persons   长度确定
            for (int i = 0; i < persons.length; i++) {
                //往list容器里面添加抽奖人数据
                list.add(new LuckDog((i + 1), persons[i]));//LuckDog 存储类型对象
            }
        } else {
            //如果前面的信息不合法    递归
            initperson();
        }

        //遍历list容器
        for (int i = 0; i < list.size(); i++) {
            System.out.print(" "+ list.get(i).getName()+" ");
        }

        //把结果返回给程序
        return list;
    }

    //2.初始化奖品信息
    public static ArrayList<Prize> initPrize(){
        //构造一个空的奖品容器
        ArrayList<Prize> list =new ArrayList<>();
        //存储奖品 Prize类对象
        list.add(new Prize("IPhone12","一等奖",1));
        list.add(new Prize("华为P40","二等奖",3));
        list.add(new Prize("水杯","三等奖",4));

        return list;
    }
}

    /*      
            测试
    */
public static void main(String[] args) {
        //直接调用ToolClass类中的initperson()方法
        ArrayList<LuckDog> ldalist = ToolsClass.initperson();
//        for (int i = 0; i < initperson.size(); i++) {
//            System.out.println(initperson.get(i));
//        }
        //直接直接调用ToolClass类中的initPrize()方法
        ArrayList<Prize> prize = ToolsClass.initPrize();
//        for (int i = 0; i < prize.size(); i++) {
//            System.out.println(prizes.get(i));
//        }
        //构建一个扫描仪 对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入《YES NO》");
        String str = sc.nextLine();
        //忽略大小写
        if (("NO").equalsIgnoreCase(str)) {
            //
            System.out.println("此次抽奖失败!");
            return;//程序结束
        } else if (!("YES").equalsIgnoreCase(str)) {
            System.out.println("输入的数据不符合要求!");
            return;//程序结束
        } else {
            //程序开始抽奖
            //先构建结果容器
            ArrayList<Result> results = new ArrayList<>();
            //循环 循环的次数  奖品的总数是8
            while (ldalist.size() > 0 && prize.size() > 0) {//循环结束的条件
                //开始抽奖
                int index = (int) (Math.random() * ldalist.size());
                //根据索引获取对应的抽奖人
                LuckDog luckDog = ldalist.get(index);//抽奖人
                //奖品  倒着抽   三等奖
                Prize prize1 = prize.get(prize.size() - 1);
                //拼接中奖结果
                results.add(new Result(luckDog.getId(), luckDog.getName(), prize1.getName()));
                //奖品的个数减一   如果该奖品的个数此时为1 应该把该奖删除掉
                if (prize1.getCount() == 1) {
                    //删除对应的奖品
                    prize.remove(prize1);
                } else {
                    //奖品个数减一
                    prize1.setCount(prize1.getCount() - 1);
                }
                //删除上一轮中奖人的信息
                ldalist.remove(index);//根据索引删除,直接删除对象
                //输出中奖人的信息
                System.out.println("本次中奖的人是" + luckDog.getName() + ",中奖人的id是" + luckDog.getId() + ",奖品为" + prize1.getName() + ",中奖等级" + prize1.getLevel());
                //再次判断 人数和奖品数

                if (prize.size() > 0 && ldalist.size() > 0) {
                    System.out.println("请输入next开启下一轮抽奖:");
                    String next = sc.next();
                    while (!"next".equalsIgnoreCase(next)) {
                        System.out.println("请输入next开启下一轮抽奖!");
                        //重复判读输入的next是否为next的内容
                        next = sc.next();
                    }
                }
            }
            //抽奖结束
            System.out.println("---------------------------");
            //展示抽奖汇总
            System.out.println("中奖信息结果为:");
            for (int i = 0; i < results.size(); i++) {
                System.out.println("ID:"+results.get(i).getId() + "\t\t姓名:" + results.get(i).getUsername() + "\t\t奖品名称" + results.get(i).getPrizeName());
            }

        }

    }

猜你喜欢

转载自blog.51cto.com/14954368/2547215
今日推荐