Java注册登录抽奖系统模块化设计

来源:互联网 发布:高级系统数据库工程师 编辑:程序博客网 时间:2024/05/19 05:34

分析

将整体系统分为以下部分:

测试类

注册类

登录类

抽奖类

保存用户信息的类

思考:

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; //登录状态,用于抽奖的时候进行判断}