幸运抽奖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;
}
}