分析
将整体系统分为以下部分:
测试类
注册类
登录类
抽奖类
保存用户信息的类
思考:
1、将用户信息保存在类中,并且定义为static,方便其他类调用
2、遇到需要的功能,尽量新建方法,在main方法中代码量尽量的少
3、设置变量定义登录与否的状态,在抽奖的时候通过用户名长度判断是否注册,通过记录登录状态的变量判断是否登录
通过卡号与用户信息中数据进行匹配判断卡号是否正确
4、在登录次数、和输错次数判断的时候,利用递归函数,就是使用if else语句,判断语句外定义变量,并且自增或者自减,
当if语句满足或者不满足条件的时候,继续执行函数,知道满足条件跳出判断语句
测试类代码:
public class CJTest {
public static void main(String[] args) {
//循环的判断条件 是否继续
String isGoon = "";
do {
System.out.println("************幸运52***********");
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.幸运大抽奖");
System.out.println("***************************");
System.out.println("请选择菜单");
Scanner scanner = new Scanner(System.in);
String menuNum = scanner.nextLine();
//调用menuChoose方法
menuChoose(menuNum);
System.out.println("是否继续---输入y/n");
//判断是否继续输入
isGoon = scanner.nextLine();
}while(isGoon.equals("y"));
//循环结束提示
System.out.println("欢迎下次使用");
}
//选择对应的方法
public static void menuChoose(String menuNum) {
//根据用户的选择来执行对应的功能
switch (menuNum) {
case "1":
System.out.println("注册");
Register.register();
break;
case "2":
System.out.println("登录");
//调用登录的方法,保存登录状态
User.isLogin = Login.login();//直接调用有返回值的方法,不会报错。
case "3":
System.out.println("幸运抽奖");
LuckDraw.luckDraw();
break;
default:
System.out.println("输入错误,请重新输入");
break;
}
}
}
注册类代码:
public class Register {
public static void register() {
System.out.println("请注册用户的个人信息");
Scanner scanner =new Scanner(System.in);
//scanner只能关闭一次,关闭后在本程序执行中再创建也不能接收键盘信息了
System.out.println("用户名");
//接收用户名,放在用户信息中
User.name = scanner.next();
System.out.println("密码");
User.password =scanner.nextInt();
System.out.println("卡号");
//随机一个1000~2000的数,保存到用户中
User.luckNumber = (int)(Math.random()*1001+1000);
//显示用户的注册信息
System.out.println("显示用户的注册信息");
System.out.println("用户名:"+User.name);
System.out.println("密码"+User.password);
System.out.println("卡号"+User.luckNumber);
}
}
登录类代码:
public class Login {
//控制循环输入密码三次
public static int number = 0;
public static boolean login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名");
String username = scanner.nextLine();
System.out.println("请输入密码");
int password = scanner.nextInt();
//判断用户名、密码是否匹配
if(username.equals(User.name)&&password==User.password) {
//登录成功
System.out.println("登录成功");
return true;
}else{
//登录失败,有三次机会重新登录
System.out.println("登录失败");
number++;
System.out.println("你还有"+(3-number)+"次机会");
if(number!=3) {
login();
}else {
//三次机会已经使用 登录失败
System.out.println("登录失败");
}
//写返回值的时候每一个分支都要有返回值
return false;
}
}
}
抽奖类代码:
public class LuckDraw {
static int a =0;
public static void luckDraw() {
//是否注册,注册不能抽,判断用户名是否存在
//是否登录,没登录不让抽
if(User.name.length()==0) {
//没注册,下面都不执行
System.out.println("没注册");
return ;
}
if(!User.isLogin) {
System.out.println("没登录");
return;
}
//卡号是否正确
if(!isLuckNumber()) {
return;
}
//抽奖
//首先定义一个变量保存中奖的结果
Boolean isluck = false ;
//随机五个数打印出结果,并判断是否匹配幸运号码
//定义一个变量保存累加的字符串
String s = "本次幸运数据:";
for(int i = 0; i < 5; i++) {
int num = (int)(Math.random()*1001+1000);
//判断是否中奖
if(User.luckNumber==num) {
isluck = true;
}
//拼接要打印的字符串
if(i!=4) {
s = s + num+",";
}else {
s = s + num;
}
}
//打印幸运数字
System.out.println(s);
//判断下,根据isluck打印结束语
if(isluck) {
System.out.println("恭喜你中奖了");
}else {
System.out.println("您没有中奖");
}
}
public static boolean isLuckNumber() {
System.out.println("请输入卡号");
Scanner scanner = new Scanner(System.in);
int luckNumber = scanner.nextInt();
//判断用户输入的卡号是不是这个用户之前随机出来的那个数
if(User.luckNumber==luckNumber) {
//卡号相同 抽奖
System.out.println("抽奖马上进行");
return true;
}else {
//卡号不同 三次机会
System.out.println("卡号不正确,请继续输入");
a++;
if(a!=3) {
luckDraw();
}else {
System.out.println("机会使用完毕");
}
return false;
}
}
}
用户信息类代码:
public class User {
public static String name;
public static int password;
public static int luckNumber;
public static boolean isLogin; //登录状态,用于抽奖的时候进行判断
}