欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
		}
	}

Java小练_流程控制、方法(模拟幸运抽奖过程)

阶段二:实现循环执行功能

需求:

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("系统退出,谢谢使用!");
		}
	}
}

Java小练_流程控制、方法(模拟幸运抽奖过程)

阶段三:实现注册功能

需求:

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; 要返回一个与返回值类型一致的数据
	}
}

Java小练_流程控制、方法(模拟幸运抽奖过程)

阶段四:实现登录功能

需求:

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里面接收
	}
}
相关标签: Java练习题