1. Java 控制台程序开发
图10.1展示了 Java控制台程序开发的知识体系。
对于图10」中的NetBeans,大家可以从网上查阅相关资料进行了解。JavaDoc注释将在后面的章节学习。
图10.1 Java控制台程序开发的知识体系
2. 变量和运算符
图10.2展示了变量与运算符的知识体系。
图 10.2 变量与运算符的知识体系
图10.2中的扩展赋值运算符在实际编程中会经常用到,大家可以阅读相关教材或查找网上的资料学习。
在自增、自减运算符中,大家已经学过后缀形式,需要自学的是前缀形式,即将 ”++” 或 ”--” 运算符放在操作数的前面。大家可以通过自学,了解后缀形式和前缀形式的区别。
在编程中还会用到条件运算符,大家可以查阅资料,了解它的用法。此外,不同的运算符放在一起使用,会出现运算符优先级的问题。
3.数据类型与数组
图10.3展示了数据类型与数组的知识体系。
图10.3数据类型与数组的知识体系
如图10.3所示,对于基本数据类型,教材中讲到了int类型和double类型,此外还有long类型、float类型等,它们的主要区别是表示的数据范围或数据精度不同。
在Java中,数组是引用数据类型。此外,类和接口也是引用数据类型,这些我们会在后面的课程中学习。
关于数据类型转换部分,大家已经学习了自动类型转换和强制类型转换,除了这两种转换,还可以通过基本数据类型的包装类进行类型转换,关于包装类的知识大家可以查阅相关资料。在实际编程中,还经常用到字符串与其他数据类型的转换,会在后面的课程中学习。
关于数组,在教材中学习的数组称为一维数组,此外还有多维数组,大家可以查阅资料自学。
4. 流程控制语句
图10.4展示了流程控制语句的知识体系。
图10.4流程控制语句的知识体系
如图10.4所示,大家已经学习了选择结构和循环结构。对于循环结构中的for循环,除了教材中提到的形式,还有一种增强型for循环,即foreach循环,在第二学期的课程中将会学习到。
选择结构可以嵌套,循环结构也可以嵌套,即二重循环。对于二重循环,我们主要学习了几种循环结构单一的二重嵌套,如while结构中嵌套while结构,for结构中嵌套for结构。相互之间的嵌套循环在实际工作中也是常见的,如while结构中嵌套for结构等。
对于跳转语句,大家要掌握break语句和continue语句的区别。return语句将在后面的章节学习,而goto语句在实际编程中很少使用,或者说不推荐使用,大家查阅相关资料了解即可。
2.1 例子描述
本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录系统之后,就可以参加抽奖活动了。
所以本次任务主要实现会员注册、登录及抽奖三个功能,各功能的具体需求和运行结果详见每一阶段的练习。
1. 注册
用户选择"注册"菜单,进入注册界面。输入用户名和密码后,系统提示注册成功,并给出会员卡号。
2. 登录
注册成功后,用户选择"登录"菜单,进入登录界面。输入注册时的用户名和密码,登录成功,系统提示欢迎信息。如果用户名和密码输入错误,提示用户继续输入,最多有三次输入机会。
3. 幸运抽奖
登录成功后,用户选择 "抽奖" 菜单,进入幸运抽奖界面。输入会员卡号,系统生成五个四位随机数作为幸运数字。如果会员卡号是其中之一,则成为本日幸运会员。
2.2 例子
分阶段完成练习。
阶段1:练习——实现菜单的输出显示
需求说明
- 用户选择一项菜单并输出菜单信息后,系统询问用户是否继续。如果用户选择继续,则可以继续选择菜单;否则程序结束,退出系统。
- 程序运行结果如图10.6所示。
图10.5菜单输出的运行结果
提示:使用switch选择结构实现菜单选择。
阶段2:练习——实现循环执行功能
需求说明
- 用户选择一项菜单并输出菜单信息后,系统询问用户是否继续。如果用户选择继续,则可以继续选择菜单;否则程序结束,退出系统。
- 程序运行结果如图10.6所示。
提示:利用do-while循环实现。
图10.6循环执行的运行结果
阶段3:练习——实现注册功能
需求说明
- 用户选择"注册"菜单,进入注册界面。系统提示用户输入用户名和密码,系统产生四位随机数作为卡号。注册成功,显示注册信息。
- 程序运行结果如图10. 7所示。
图10.7注册功能的运行结果
提示:假设用int类型变量cardNumber存储会员卡号,即四位随机数,则可以用如下代码生成该随机数。
int max = 9999;
int min = 1000;
cardNumber = (int)(Math.random()*(max-min))+min;
阶段4:练习——实现登录功能
需求说明
- 注册成功后,用户选择"登录"菜单,进入登录界面。输入注册时的用户名和密码,登录成功,系统提示欢迎信息。如果用户名和密码输入错误,提示用户继续输入,最多有三次输入机会。
- 程序运行结果如图10.8所示。
图10.8登录功能的运行结果
提示:利用for循环结构和多重if选择结构实现。
阶段5:练习——实现幸运抽奖功能
需求说明
- 登录成功后,用户选择幸运"抽奖"菜单,进入幸运抽奖界面。输入会员卡号,系统生成五个四位随机数作为幸运数字。如果会员卡号是其中之一,则成为本曰幸运会员。
- 程序运行结果如图10.9所示。
提示:利用for循环结构和if-else选择结构实现。
图10.9幸运抽奖功能的运行结果
阶段一代码展示:
package cn.jbit.dlc1; import java.util.Scanner; public class LuckyNumber1 { public LuckyNumber1() { } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("*****欢迎进入奖客富翁系统*****"); System.out.println("\t1.注册"); System.out.println("\t2.登录"); System.out.println("\t3.抽奖"); System.out.println("***************************"); System.out.print("请选择菜单:"); int choice = input.nextInt(); switch(choice) { case 1: System.out.println("[奖客富翁系统 > 注册]"); break; case 2: System.out.println("[奖客富翁系统 > 登录]"); break; case 3: System.out.println("[奖客富翁系统 > 抽奖]"); break; default: System.out.println("[您的输入有误!]"); } } }
阶段2代码展示:
package cn.jbit.dlc1; import java.util.Scanner; public class LuckyNumber2 { public LuckyNumber2() { } public static void main(String[] args) { String answer = "y"; Scanner input = new Scanner(System.in); do { System.out.println("*****欢迎进入奖客富翁系统*****"); System.out.println("\t1.注册"); System.out.println("\t2.登录"); System.out.println("\t3.抽奖"); System.out.println("***************************"); System.out.print("请选择菜单:"); int choice = input.nextInt(); switch(choice) { case 1: System.out.println("[奖客富翁系统 > 注册]"); break; case 2: System.out.println("[奖客富翁系统 > 登录]"); break; case 3: System.out.println("[奖客富翁系统 > 抽奖]"); break; default: System.out.println("[您的输入有误!]"); } System.out.print("继续吗?(y/n):"); answer = input.next(); System.out.println(""); } while("y".equals(answer)); if ("n".equals(answer)) { System.out.println("系统退出,谢谢使用!"); } } }
阶段3代码展示:
package cn.jbit.dlc1; import java.util.Scanner; public class LuckyNumber3 { /** * 幸运抽奖-注册 */ public static void main(String[] args) { String answer = "y"; // 标识是否继续 String userName = ""; // 用户名 String password = ""; // 密码 int cardNumber = 0; // 卡号 boolean isRegister = false; // 标识是否注册 int max = 9999; int min = 1000; Scanner input = new Scanner(System.in); do { System.out.println("*****欢迎进入奖客富翁系统*****"); System.out.println("\t1.注册"); System.out.println("\t2.登录"); System.out.println("\t3.抽奖"); System.out.println("***************************"); System.out.print("请选择菜单:"); int choice = input.nextInt(); switch (choice) { case 1: System.out.println("[奖客富翁系统 > 注册]"); System.out.println("请填写个人注册信息:"); System.out.print("用户名:"); userName = input.next(); System.out.print("密码:"); password = input.next(); // 获取4位随机数作为卡号 cardNumber = (int)(Math.random()*(max-min))+min; System.out.println("\n注册成功,请记好您的会员卡号"); System.out.println("用户名\t密码\t\t\t会员卡号"); System.out.println(userName + "\t" + password + "\t" + cardNumber); isRegister = true; // 注册成功,标志位设置为true break; case 2: System.out.println("[奖客富翁系统 > 登录]"); break; case 3: System.out.println("[奖客富翁系统 > 抽奖]"); System.out.println("[奖客富翁系统 > 抽奖]"); break; default: System.out.println("[您的输入有误!]"); break; } System.out.print("继续吗?(y/n):"); answer = input.next(); System.out.println(""); } while ("y".equals(answer)); if ("n".equals(answer)) { System.out.println("系统退出,谢谢使用!"); } } }
阶段4代码展示:
package cn.jbit.dlc1; import java.util.Scanner; public class LuckyNumber4 { /** * 幸运抽奖-登录 */ public static void main(String[] args) { String answer = "y"; // 标识是否继续 String userName = ""; // 用户名 String password = ""; // 密码 int cardNumber = 0; // 卡号 boolean isRegister = false; // 标识是否注册 boolean isLogin = false; // 标识是否登录 int max = 9999; int min = 1000; Scanner input = new Scanner(System.in); do { System.out.println("*****欢迎进入奖客富翁系统*****"); System.out.println("\t1.注册"); System.out.println("\t2.登录"); System.out.println("\t3.抽奖"); System.out.println("***************************"); System.out.print("请选择菜单:"); int choice = input.nextInt(); switch (choice) { case 1: System.out.println("[奖客富翁系统 > 注册]"); System.out.println("请填写个人注册信息:"); System.out.print("用户名:"); userName = input.next(); System.out.print("密码:"); password = input.next(); // 获取4位随机数作为卡号 cardNumber = (int)(Math.random()*(max-min))+min; System.out.println("\n注册成功,请记好您的会员卡号"); System.out.println("用户名\t密码\t会员卡号"); System.out.println(userName + "\t" + password + "\t" + cardNumber); isRegister = true; // 注册成功,标志位设置为true break; case 2: System.out.println("[奖客富翁系统 > 登录]"); if (isRegister) { // 判断是否注册 // 3次输入机会 for (int i = 1; i <= 3; i++) { System.out.print("请输入用户名:"); String inputName = input.next(); System.out.print("请输入密码:"); String inputPassword = input.next(); if (userName.equals(inputName) && password.equals(inputPassword)) { System.out.println("\n欢迎您:" + userName); isLogin = true; // 登录成功,标志位设置为true break; } else if (i < 3) { System.out.println("用户名或密码错误,还有" + (3 - i) + "次机会!"); } else { System.out.println("您3次均输入错误!"); } } } else { System.out.println("请先注册,再登录!"); } break; case 3: System.out.println("[奖客富翁系统 > 抽奖]"); break; default: System.out.println("[您的输入有误!]"); break; } System.out.print("继续吗?(y/n):"); answer = input.next(); System.out.println(""); } while ("y".equals(answer)); if ("n".equals(answer)) { System.out.println("系统退出,谢谢使用!"); } } }
阶段5代码展示:
package cn.jbit.dlc1; import java.util.Scanner; public class LuckyNumber5 { /** * 幸运抽奖 */ public static void main(String[] args) { String answer = "y"; // 标识是否继续 String userName = ""; // 用户名 String password = ""; // 密码 int cardNumber = 0; // 卡号 boolean isRegister = false; // 标识是否注册 boolean isLogin = false; // 标识是否登录 int max = 9999; int min = 1000; Scanner input = new Scanner(System.in); do { System.out.println("*****欢迎进入奖客富翁系统*****"); System.out.println("\t1.注册"); System.out.println("\t2.登录"); System.out.println("\t3.抽奖"); System.out.println("***************************"); System.out.print("请选择菜单:"); int choice = input.nextInt(); switch (choice) { case 1: System.out.println("[奖客富翁系统 > 注册]"); System.out.println("请填写个人注册信息:"); System.out.print("用户名:"); userName = input.next(); System.out.print("密码:"); password = input.next(); // 获取4位随机数作为卡号 cardNumber = (int)(Math.random()*(max-min))+min; System.out.println("\n注册成功,请记好您的会员卡号"); System.out.println("用户名\t密码\t会员卡号"); System.out.println(userName + "\t" + password + "\t" + cardNumber); isRegister = true; // 注册成功,标志位设置为true break; case 2: System.out.println("[奖客富翁系统 > 登录]"); if (isRegister) { // 判断是否注册 // 3次输入机会 for (int i = 1; i <= 3; i++) { System.out.print("请输入用户名:"); String inputName = input.next(); System.out.print("请输入密码:"); String inputPassword = input.next(); if (userName.equals(inputName) && password.equals(inputPassword)) { System.out.println("\n欢迎您:" + userName); isLogin = true; // 登录成功,标志位设置为true break; } else if (i < 3) { System.out.println("用户名或密码错误,还有" + (3 - i) + "次机会!"); } else { System.out.println("您3次均输入错误!"); } } } else { System.out.println("请先注册,再登录!"); } break; case 3: System.out.println("[奖客富翁系统 > 抽奖]"); if (!isLogin) { // 判断是否登录 System.out.println("请先登录,再抽奖!"); System.out.println("继续吗?(y/n)"); answer = input.next(); } else { //生成5个4位随机数字,并保存在数组中 int[] luckynums = new int[5]; for(int i = 0; i < luckynums.length; i++){ luckynums[i] = (int)(Math.random()*(max-min))+min; } System.out.print("请输入您的卡号:"); int yourcard = input.nextInt(); int i; System.out.print("\n本日的幸运数字为:"); for (i = 0; i < luckynums.length; i++) { System.out.print(luckynums[i] + " "); } for (i = 0; i < luckynums.length; i++) { if (luckynums[i] == yourcard) { System.out.println("\n恭喜!您是本日的幸运会员!"); break; } } if (i == luckynums.length) { System.out.println("\n抱歉!您不是本日的幸运会员!"); } } break; default: System.out.println("[您的输入有误!]"); break; } System.out.print("继续吗?(y/n):"); answer = input.next(); System.out.println(""); } while ("y".equals(answer)); if ("n".equals(answer)) { System.out.println("系统退出,谢谢使用!"); } } }