幸运抽奖Demo

26 阅读3分钟

幸运抽奖Demo

该demo分5步完成

阶段1:实现菜单的输出显示

  • 需求说明
    • 输出菜单
    • 选择菜单编号,输出菜单信息
    • 如果编号选择错误,输出“您的输入有误!”

阶段2:实现循环执行功能

  • 需求说明
    • 系统询问用户是否继续
    • 如果用户选择继续,则可以继续选择菜单,否则程序结束, 退出系统

阶段3:实现注册功能

  • 需求说明
    • 输入用户名和密码,系统产生4位随机数作为卡号。
    • 注册成功,显示注册信息并修改注册标识为true

阶段4:练习——实现登录功能

  • 需求说明
    • 输入注册时的用户名和密码,登录成功,系统提示欢迎信息
    • 如果用户名和密码输入错误, 提示用户继续输入,最多有3 次输入机会

阶段5:实现幸运抽奖功能

  • 需求说明
    • 登录成功后,用户选择幸运抽奖菜单,进入幸运抽奖功能
    • 输入会员卡号,系统生成5个4 位随机数作为幸运数字
    • 如果会员卡号是其中之一,则成为本日幸运会员;否则不是幸运会员

附加功能:

  • 可以允许多注册,保存多个用户注册的信息。
  • 登录只需要登录一次。
  • 注册时,保证用户名唯一性

实现代码如下:

public class Lottery {
    public static String[][] strArr = new String[10][3];
    public static int index = -1;

    public static void main(String[] args) {
        int count = 0;
        String name;
        String password;
        String userCode;
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("********欢迎进入奖客富翁系统*********");
            System.out.println("            1.注册                ");
            System.out.println("            2.登录                ");
            System.out.println("            3.抽奖                ");
            System.out.println("*********************************");
            System.out.print("请选择菜单:");
            String menu = sc.next();

            switch (menu) {
                case "1":
                    System.out.println("[奖客富翁系统] -> 注册");

                    do {
                        System.out.println("请填写个人注册信息:");
                        System.out.print("用户名:");
                        name = sc.next();
                    } while (!isHaveUser(name));

                    System.out.print("密码:");
                    password = sc.next();
                    Random rd = new Random();
                    userCode = String.valueOf(rd.nextInt(1000,10000));
                    strArr[count][0] = name;
                    strArr[count][1] = password;
                    strArr[count][2] = userCode;
                    count++;
                    System.out.println("注册成功请记好您的会员卡号");
                    System.out.println("用户名\t密码\t\t会员卡号");
                    System.out.println(name +"\t\t"+password+"\t\t"+userCode);

                    System.out.println("继续吗? (y/n)");
                    switch (sc.next()) {
                        case "y" -> {
                        }
                        case "n" -> {
                            System.out.println("系统退出,谢谢使用!");
                            return;
                        }
                        default -> System.out.println("您的输入有误");
                    }

                    break;
                case "2":
                    System.out.println("[奖客富翁系统] -> 登录");

                    for (int i = 0; i < 3; i++) {
                        System.out.print("请输入用户名:");
                        String reName = sc.next();
                        System.out.print("请输入密码:");
                        String rePassword = sc.next();
                        boolean ok = logic(reName,rePassword,strArr);
                        if (ok){

                            break;
                        }
                        System.out.println("用户名或密码错误,请重新输入");
                    }

                    System.out.println("继续吗? (y/n)");
                    switch (sc.next()) {
                        case "y" -> {
                        }
                        case "n" -> {
                            System.out.println("系统退出,谢谢使用!");
                            return;
                        }
                        default -> System.out.println("您的输入有误");
                    }

                    break;
                case "3":
                    System.out.println("[奖客富翁系统] -> 抽奖");

                    if (index == -1){
                        System.out.println("请登录后再抽奖!");
                    }else {
                        while (true){
                            System.out.println("请输入您的会员卡号:");
                            String reCode = sc.next();
                            if (reCode.equals(strArr[index][2])){
                                boolean ok = getWiningNumber(reCode);
                                if (ok){
                                    System.out.println("恭喜您成为今日的幸运会员");
                                } else{
                                    System.out.println("抱歉,您不是今日的幸运会员");
                                }
                                break;
                            }else {
                                System.out.println("会员卡号错误,请重新输入:");
                            }
                        }
                    }

                    System.out.println("继续吗? (y/n)");
                    switch (sc.next()) {
                        case "y" -> {
                        }
                        case "n" -> {
                            System.out.println("系统退出,谢谢使用!");
                            return;
                        }
                        default -> System.out.println("您的输入有误");
                    }
                    break;
                default:
                    System.out.println("您的输入有误");
                    break;
            }
        }
    }


    /**
     * @param name 登录用户名
     * @param password 登录密码
     * @param strArr 存储用户的数组
     * @return 判断是否登录成功,成功返回true,失败返回false
     */
    public static boolean logic(String name, String password, String[][] strArr){
        for (int i = 0; i < strArr.length; i++) {
            if (name.equals(strArr[i][0]) && password.equals(strArr[i][1])) {
                if (index == i){
                    System.out.println("您已经登陆,不用重新登录");
                    return true;
                }
                index = i;
                System.out.println("欢迎您!" + name);
                return true;
            }
        }
        return false;
    }


    /**
     * @param code  会员卡号
     * @return  生成中奖号码,并判断是否中奖
     */
    public static boolean getWiningNumber(String code) {
        String[] luckyNumber = new String[5];
        // 生成中奖号码
        Random rd = new Random();
        for (int i = 0; i < luckyNumber.length; i++) {
            luckyNumber[i] = String.valueOf(rd.nextInt(1000, 10000));
        }
        for (String string : luckyNumber) {
            boolean b = code.equals(string);
            if (b) {
                return true;
            }
        }
        return false;
    }

    /**
     * 
     * @param name 注册时的用户名
     * @return 查询用户名是否已注册,已注册返回false,未注册返回true
     */
    public static boolean isHaveUser(String name){
        for (String[] strings : strArr) {
            if (strings[0] != null && strings[0].equals(name)) {
                System.out.println("当前用户名已注册,请重新输入:");
                return false;
            }
        }
        return true;
    }
}