Java小练_流程控制、方法(模拟幸运抽奖过程)
程序员文章站
2022-07-12 08:12:23
...
幸运抽奖
任务:模拟注册登录幸运抽奖全过程
主要功能:注册、登录、幸运抽奖
阶段一:实现菜单的输出显示
需求:
1.输出菜单;
2.选择菜单编号,输出菜单信息;
3.如果编号选择错误,输出“您的输入有误!”
public static void main(String[] args) {
Scanner input = new Scanner(System.in);//接收控制台输入的数据,只创建一次即可
System.out.println("****欢迎进入幸运抽奖系统!****");
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
System.out.println("***********************");
System.out.print("请选择菜单编号:");
int choice = input.nextInt();//获取控制台输入的菜单号赋值给变量choice
switch(choice) {
case 1:
System.out.println("跳转至注册页面....");
break;
case 2:
System.out.println("跳转至登录页面....");
break;
case 3:
System.out.println("跳转至抽奖页面....");
break;
default:
System.out.println("您的输入有误!");
break;
}
}
阶段二:实现循环执行功能
需求:
1.系统询问用户是否继续;
2.如果用户选择继续,则可以继续选择菜单,否则程序结束,退出系统。
public class PhaseTwo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);//接收控制台输入的数据,只创建一次即可
String answer;//声明answer变量
do {
System.out.println("****欢迎进入幸运抽奖系统!****");
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
System.out.println("***********************");
System.out.print("请选择菜单编号:");
int choice = input.nextInt();//获取控制台输入的菜单号赋值给变量choice
switch(choice) {
case 1:
System.out.println("跳转至注册页面....");
break;
case 2:
System.out.println("跳转至登录页面....");
break;
case 3:
System.out.println("跳转至抽奖页面....");
break;
default:
System.out.println("您的输入有误!");
break;
}
System.out.println("继续操作吗?(y/n):");
answer = input.next();//获取控制台输入的回答
}while("y".equals(answer));//如果输了y,重复循环体do{}里的操作
if("n".equals(answer)){//如果输了n,退出系统
System.out.println("系统退出,谢谢使用!");
}
}
}
阶段三:实现注册功能
需求:
1.输入用户名和密码,系统产生4位随机数作为卡号;
2.注册成功,显示注册信息并修改标识为true。
public class PhaseThree {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);//从键盘接收数据,只创建一次即可
String answer;//声明answer变量
boolean registerFlag;
do {
System.out.println("****欢迎进入幸运抽奖系统!****");
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
System.out.println("***********************");
System.out.print("请选择菜单编号:");
int choice = input.nextInt();//获取控制台输入的菜单号赋值给变量choice
switch(choice) {
case 1:
System.out.println("跳转至注册页面....");
registerFlag = userRegister(input);
break;
case 2:
System.out.println("跳转至登录页面....");
break;
case 3:
System.out.println("跳转至抽奖页面....");
break;
default:
System.out.println("您的输入有误!");
break;
}
System.out.println("继续操作吗?(y/n):");
answer = input.next();//获取控制台输入的回答
}while("y".equals(answer));//如果输了y,重复循环体do{}里的操作
if("n".equals(answer)){//如果输了n,退出系统
System.out.println("系统退出,谢谢使用!");
input.close();//录入数据流需要关闭,不然会报黄提示。
return;//作用:返回数据(结束方法的) 在方法体里面遇见return语句 当前方法逻辑结束
}
}
// 变量可以让所有的方法使用
// 全局变量==>与方法同级的 [访问权限修饰符 ] 数据类型 变量名 [= 数据];
public static String username;//用户名
public static int password;//密码
public static int cardNo;//会员卡号
public static boolean userRegister(Scanner input) {
System.out.println("****注册页面****");
System.out.println("请根据提示填写个人信息");
System.out.println("用户名:");
username = input.next();//获取控制台输入的用户名
System.out.println("密码:");
password = input.nextInt();//获取控制台输入的密码
//Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double值。 (1000-9999)
cardNo = (int)(Math.random()*9000+1000);//将随机的4位数转换为int整型赋值给变量cardNo
System.out.println("注册成功,请记好您的登录名及密码。");
System.out.println("您的会员卡号:"+cardNo+"\n"+"登录名:"+username+"\n"+"密码:"+password);
return true;//在方法体里面加return语句:不能只return; 要返回一个与返回值类型一致的数据
}
}
阶段四:实现登录功能
需求:
1.输入注册时的用户名和密码,登录成功,系统提示欢迎信息;
2.如果用户名和密码输入错误,提示用户继续输入,最多有3次输入机会。
public class PhaseFour {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);//接收控制台输入的数据,只创建一次即可
String answer;//声明answer变量
boolean registerFlag = false;
boolean loginFlag;
do {
System.out.println("****欢迎进入幸运抽奖系统!****");
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
System.out.println("***********************");
System.out.print("请选择菜单编号:");
int choice = input.nextInt();//获取控制台输入的菜单号赋值给变量choice
switch(choice) {
case 1:
// System.out.println("跳转至注册页面....");
registerFlag = userRegister(input);
break;
case 2:
// System.out.println("跳转至登录页面....");
loginFlag = userLogin(input,registerFlag);
break;
case 3:
System.out.println("跳转至抽奖页面....");
break;
default:
System.out.println("您的输入有误!");
break;
}
System.out.println("继续操作吗?(y/n):");
answer = input.next();//获取控制台输入的回答
}while("y".equals(answer));//如果输了y,重复循环体do{}里的操作
if("n".equals(answer)){//如果输了n,退出系统
System.out.println("系统退出,谢谢使用!");
input.close();//录入数据流需要关闭,不然会报黄提示。
return;//作用:返回数据(结束方法的) 在方法体里面遇见return语句 当前方法逻辑结束
}
}
// 变量可以让所有的方法使用
// 全局变量==>与方法同级的 [访问权限修饰符 ] 数据类型 变量名 [= 数据];
public static String username;//用户名
public static int password;//密码
public static int cardNo;//会员卡号
public static boolean userRegister(Scanner input) {
System.out.println("****注册页面****");
System.out.println("请根据提示填写个人信息");
System.out.println("用户名:");
username = input.next();//获取控制台输入的用户名
System.out.println("密码:");
password = input.nextInt();//获取控制台输入的密码
//Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double值。 (1000-9999)
cardNo = (int)(Math.random()*9000+1000);//将随机的4位数转换为int整型赋值给变量cardNo
System.out.println("注册成功,请记好您的登录名及密码。");
System.out.println("您的会员卡号:"+cardNo+"\n"+"登录名:"+username+"\n"+"密码:"+password);
return true;//在方法体里面加return语句:不能只return; 要返回一个与返回值类型一致的数据
}
public static boolean userLogin(Scanner input,boolean registerFlag) {
if(!registerFlag) {
System.out.println("请先注册!");
return false;
}
System.out.println("****登录页面****");
int count = 3;//3次试错机会
do {
System.out.println("请输入用户名:");
String loginUsername = input.next();
System.out.println("请输入密码:");
int loginPassword = input.nextInt();
//与注册时的数据进行比对
if(!loginUsername.equals(username) || loginPassword != password) {
System.out.println("登录失败,还有"+count+"次机会");
count--;//机会-1
if(count == 0) {
System.out.println("登录机会使用完毕,请重新注册或者重新登录。");
return false;
}
}else {
System.out.println("登录成功。"+"\n"+username+",欢迎您!" );
return true;
}
}while(count>0);
return false;
}
}
阶段五:实现幸运抽奖功能
需求:
1.登录成功后,用户选择幸运抽奖菜单,进入幸运抽奖功能;
2.输入会员卡号,系统生成5个4位随机数作为幸运数字;
3.如果会员卡号是其中之一,则成为本日幸运会员,否则不是幸运会员。
public class PhaseFive {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);//接收控制台输入的数据,只创建一次即可
String answer;//声明answer变量
boolean registerFlag = false;
boolean loginFlag = false;
do {
System.out.println("****欢迎进入幸运抽奖系统!****");
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
System.out.println("***********************");
System.out.print("请选择菜单编号:");
int choice = input.nextInt();//获取控制台输入的菜单号赋值给变量choice
switch(choice) {
case 1:
// System.out.println("跳转至注册页面....");
registerFlag = userRegister(input);
break;
case 2:
// System.out.println("跳转至登录页面....");
loginFlag = userLogin(input,registerFlag);
break;
case 3:
// System.out.println("跳转至抽奖页面....");
luckyDraw(input, loginFlag);
break;
default:
System.out.println("您的输入有误!");
break;
}
System.out.println("继续操作吗?(y/n):");
answer = input.next();//获取控制台输入的回答
}while("y".equals(answer));//如果输了y,重复循环体do{}里的操作
if("n".equals(answer)){//如果输了n,退出系统
System.out.println("系统退出,谢谢使用!");
input.close();//录入数据流需要关闭,不然会报黄提示。
return;//作用:返回数据(结束方法的) 在方法体里面遇见return语句 当前方法逻辑结束
}
}
// 变量可以让所有的方法使用
// 全局变量==>与方法同级的 [访问权限修饰符 ] 数据类型 变量名 [= 数据];
public static String username;//用户名
public static int password;//密码
public static int cardNo;//会员卡号
public static boolean userRegister(Scanner input) {
System.out.println("****注册页面****");
System.out.println("请根据提示填写个人信息");
System.out.println("用户名:");
username = input.next();//获取控制台输入的用户名
System.out.println("密码:");
password = input.nextInt();//获取控制台输入的密码
//Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double值。 (1000-9999)
cardNo = (int)(Math.random()*9000+1000);//将随机的4位数转换为int整型赋值给变量cardNo
System.out.println("注册成功,请记好您的登录名及密码。");
System.out.println("您的会员卡号:"+cardNo+"\n"+"登录名:"+username+"\n"+"密码:"+password);
return true;//在方法体里面加return语句:不能只return; 要返回一个与返回值类型一致的数据
}
public static boolean userLogin(Scanner input,boolean registerFlag) {
if(!registerFlag) {
System.out.println("请先注册!");
return false;
}
System.out.println("****登录页面****");
int count = 3;//3次试错机会
do {
System.out.println("请输入用户名:");
String loginUsername = input.next();
System.out.println("请输入密码:");
int loginPassword = input.nextInt();
//与注册时的数据进行比对
if(!loginUsername.equals(username) || loginPassword != password) {
System.out.println("登录失败,还有"+count+"次机会");
count--;//机会-1
if(count == 0) {
System.out.println("登录机会使用完毕,请重新注册或者重新登录。");
return false;
}
}else {
System.out.println("登录成功。"+"\n"+username+",欢迎您!" );
return true;
}
}while(count>0);
return false;
}
public static void luckyDraw(Scanner input,boolean loginFlag) {
if(!loginFlag) {
System.out.println("请先执行登录操作!");
return;
}
System.out.println("****抽奖页面****");
System.out.println("请输入您的会员卡号:");
int userId = input.nextInt();
if(userId != cardNo) {//如果输入的卡号不是注册时生成的卡号
System.out.println("您输入的会员卡号有误,请重新执行操作。");
return;//结束该方法
}
int[] luckyNums = new int[5];
for(int i=0;i<5;i++) {
int luckyNo = (int)(Math.random()*9000+1000);
luckyNums[i] = luckyNo;//生成的5个随机数放进luckynums数组里
}
System.out.println("今日幸运卡号:" + Arrays.toString(luckyNums));
for(int i=0;i<5;i++) {
if(luckyNums[i] == userId) {
System.out.println(username+"恭喜您成为本日幸运会员....");
break;
}
}
System.out.println("很遗憾,您不是本日的幸运会员。");
}
}
//参考答案
public class Lucky {
public static void main(String[] args) {
String answer;
Scanner input = new Scanner(System.in);//接收控制台输入的数据,只创建一次即可
boolean registerFlag = false;//case之间的变量不共享。在switch外面初始化registerFlag。防止注册后再判断,放在do循环外。
boolean loginFlag = false;
do {
System.out.println("*****欢迎进入顾客抽奖系统*****");
System.out.println(" 1.注册 ");
System.out.println(" 2.登录 ");
System.out.println(" 3.抽奖 ");
System.out.println("****************************** ");
System.out.println("请选择菜单:");
int choice = input.nextInt();
switch (choice) {
case 1:
// 注册
registerFlag = userRegister(input);//接收注册方法里的返回值数据
break;
case 2:
// 登录
loginFlag = userLogin(input, registerFlag);//对registerFalg的预判是在登录方法里,所以registerFalg数据要传到userLogin里。
break;
case 3:
// 抽奖
userLucky(input, loginFlag);
break;
}
System.out.println("是否继续?y/n");
answer = input.next();
} while ("y".equals(answer));
if ("n".equals(answer)) {
System.out.println("程序退出");
input.close();
return;
}
// 其它的功能
}
public static void userLucky(Scanner input, boolean loginFlag) {
// 必须在登录成功的状态下执行抽奖
if (!loginFlag) {
System.err.println("请先执行登录操作。。。。");//err是红色字体,醒目一些,但是级别低于out
return;
}
System.out.println("顾客抽奖系统-->抽奖");
System.out.print("请录入会员卡号:");
int userLuckyNo = input.nextInt();// 局部变量
boolean luckyFlag = false;
// 与随机生成的数字进行比较
int[] luckyNos = new int[5];
for (int i = 0; i < 5; i++) {
int luckyCardNo = (int) (Math.random() * 9000 + 1000);
luckyNos[i] = luckyCardNo;
}
System.out.println("幸运卡号:" + Arrays.toString(luckyNos));
for (int no : luckyNos) {
if (no == userLuckyNo) {
System.out.println(name + "是幸运会员");
luckyFlag = true;
break;
}
}
if (!luckyFlag) {//luckyFlag没有经过循环体里判断是会员然后变true的操作
System.out.println(cardNo + "不是幸运会员");//未防止循环多次输出不是会员,该部分放循环体外面,且加逻辑判断
}
}
// 变量可以让所有的方法使用
// 全局变量==>与方法同级的 [访问权限修饰符 ] 数据类型 变量名 [= 数据];
public static String name;
public static int pass;
public static int cardNo;
public static boolean userLogin(Scanner input, boolean registerFlag) {
// 提前判断 有没有注册成功
if (!registerFlag) {
System.err.println("请先执行注册功能。。。。。");//err是红色字体,醒目一些
return false;//没有注册,返回false
}
System.out.println("顾客抽奖系统-->登录");
int count = 3;// 一共3次机会
boolean flag = false;
do {
System.out.print("请录入用户名:");
String loginName = input.next();
System.out.print("请录入密码:");
int loginPass = input.nextInt();
// 要与注册时候的数据进行比对
if (!loginName.equals(name) || loginPass != pass) {
count--;
System.out.println("登录失败,还有" + count + "次机会");
if (count == 0) {
System.out.println("登录机会使用完毕,请重新注册或者重新登录");
return false;//登录失败,返回false
} else {
System.out.println("请重新录入用户信息:");
}
} else {
flag = true;//登陆成功
break;
}
} while (count > 0);
if (flag) {//登陆成功之后可能有别的操作,所以放外面
System.out.println("登录成功");
System.out.println("欢迎你:" + name);
return true;//登陆成功,返回true
}
return false;
}
public static boolean userRegister(Scanner input) {//(形式参数 局部变量)
System.out.println("顾客抽奖系统-->注册");
System.out.println("请填写个人信息:");
System.out.print("请录入用户名:");
//main里已经创建过1个Scanner了
//再创建的话又开了一个内存,我们要尽可能地节省空间,所以
//可以同用main里的那个input,把那个input作为实际参数传到此方法里
name = input.next();
System.out.print("请录入密码:");
pass = input.nextInt();
cardNo = (int) (Math.random() * 9000 + 1000);// 0.0-1.0 1000-10000
System.out.println("注册成功,请牢记会员卡号");
System.out.println("用户名\t密码\t会员卡号");
System.out.println(name + "\t" + pass + "\t" + cardNo);
//boolean register = true;//需求里注册成功,显示注册信息并修改标识为true。先放这里,之后再判断需不需要
return true;//在main里面调的方法,去main里面接收
}
}