需求说明:
1.输出菜单
选择菜单编号,输出菜单信息
如果编号选择错误,输出“您的输入有误!
2.系统询问用户是否继续 如果用户选择继续,则可以继 续选择菜单,否则程序结束, 退出系系统
3.输入用户名和密码,系统产生 4位随机数作为卡号。 注册成功,显示注册信息并修 改注册标识为true
4.输入注册时的用户名和密码, 登录成功,系统提示欢迎信息 如果用户名和密码输入错误, 提示用户继续输入,最多有3 次输入机会
5.登录成功后,用户选择幸运抽 奖菜单,进入幸运抽奖功能 输入会员卡号,系统生成5个4 位随机数作为幸运数字 如果会员卡号是其中之一,则 成为本日幸运会员;否则不是 幸运会员
6.可以允许多注册,保存多个用 户注册的信息。 登录只需要登录一次。 注册时,保证用户名唯一性
package cn.javasm.demo;
import java.util.Arrays;
import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
public class LuckyDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str;
boolean loginFlag = false;
do {
System.out.println("*****************欢迎进入幸运抽奖系统*****************\n" +
"*********************************************************\n" +
"1.注册\n" +
"2.登录\n" +
"3.抽奖\n" +
"*********************************************************");
System.out.println("请选择要操作的功能:");
int choice = scanner.nextInt();
switch (choice){
case 1:
// 注册
userRegist(scanner);
break;
case 2:
// 登录
loginFlag = userLogin(scanner,loginFlag);
break;
case 3:
// 抽奖
lucky(loginFlag);
break;
default:
System.out.println("输入有误!");
break;
}
System.out.println("是否要继续?y/n");
str = scanner.next();
} while ("y".equals(str));
System.out.println("程序终止");
}
// 抽奖方法
private static void lucky(boolean loginFlag) {
// 判断用户是否登录
if (!loginFlag){
System.out.println("请先登录");
return;
}
// 生成5个随机数字
int[] luckyNumArray = new int[5];
for (int i = 0; i < luckyNumArray.length; i++) {
luckyNumArray[i] = (int)(Math.random() * 9000 + 1000);
}
System.out.println("今日的幸运卡号是" + Arrays.toString(luckyNumArray));
for (int num : luckyNumArray) {
if (num == cardNoArray[userLoingIndex]){
System.out.println(cardNoArray[userLoingIndex] + "是今日的幸运会员");
return;
}
}
System.out.println(cardNoArray[userLoingIndex] + "不是今日的幸运会员");
}
private static boolean userLogin(Scanner scanner,boolean loginFlag) {
// 登录前先注册
if (nameArray[0] == null){
System.out.println("请先注册");
return false;
}
if (loginFlag){
System.out.println("已经登录成功了,是否要切换登录账号?");
String str = scanner.next();
if (!"y".equals(str)){
return true;
}
}
int count = 3;
do {
count--;
System.out.println("请输入用户名:");
String loginName = scanner.next();
System.out.println("请输入密码:");
String loginPwd = scanner.next();
for (int i = 0; i < index; i++) {
// 登录的数据和注册的数据进行比较
if (loginName.equals(nameArray[i]) && loginPwd.equals(passArray[i])){
System.out.println("登录成功,欢迎您" + loginName);
userLoingIndex = i;
return true;
}
}
if (count == 0){
System.out.println("3次机会已经用完,返回到主界面");
return false;
}
System.out.println("登录失败,还剩下" + count + "次机会,请重新登录");
} while (true);
}
// 全局变量
// public static String registName;
//
// public static String registPassword;
//
// public static int randomNum;
// 用户名数组
public static String[] nameArray = new String[1];
// 密码数组
public static String[] passArray = new String[1];
// 卡号数组
public static int[] cardNoArray = new int[1];
public static int userLoingIndex = 0;//当前登录用户的索引
// 数组中的有效数据的个数
public static int index = 0;
private static void userRegist(Scanner scanner) {
System.out.println("请输入注册信息:");
System.out.println("请输入注册的用户名:");
String registName;
do {
registName = scanner.next();
// false代表没有重名,true代表重名了
boolean flag = false;
for (int i = 0; i < index; i++) {
if (registName.equals(nameArray[i])){
System.out.println(registName + "重名了,请重新输入");
flag = true;
break;
}
}
if (!flag) break;
} while (true);
System.out.println("请输入注册的密码:");
String registPassword = scanner.next();
// 生成4位随机数 Math.random 范围是[0,1)
// [1000,10000) Math.random() * (最大值 - 最小值) + 最小值
int randomNum = (int)(Math.random() * (10000 - 1000) + 1000);
// 判断数组是否需要扩容
if (index >= nameArray.length){
// 扩容
int newLength = (nameArray.length + index) * 2;
nameArray = Arrays.copyOf(nameArray,newLength);
passArray = Arrays.copyOf(passArray,newLength);
cardNoArray = Arrays.copyOf(cardNoArray,newLength);
}
nameArray[index] = registName;
passArray[index] = registPassword;
cardNoArray[index++] = randomNum;
System.out.println("注册成功,信息如下:");
System.out.println(registName + "\t" + registPassword + "\t" + randomNum);
}
}