用Java完成商场幸运抽奖系统的开发

简介: 本章技能目标理解并使用选择结构解决问题理解并使用循环结构解决问题掌握各种数据类型理解并使用数组解决问题

本章技能目标


理解并使用选择结构解决问题

理解并使用循环结构解决问题

掌握各种数据类型

理解并使用数组解决问题

本章简介


通过对本课程第1章~第9章的学习,学员们了解了 Java程序结构,学习了变量、数据类型和运算符等基本知识,能够利用选择结构、循环结构及数组解决简单的问题。


本章通过对本课程第1章~第9章所学习知识和技能的梳理,帮助大家加深理解,多做练习,努力提高熟练度,构建软件开发知识体系。


技术内容


10.1 复习串讲


10.1.1 难点突破

表10-1列出了本学习阶段的难点,这些技能你都掌握了吗?


表10-1学习进度记录表


image.png


如果某个难点没有完全掌握,请写下自己感到疑惑的地方,然后通过复习教材、从网上查找资料、与同学探讨、向教员请教等途径突破这些难点。如果掌握了这个难点,请在"是否掌握"一栏中打 "√"。这些技能是学习后面技能的基础,所以一定要在继续学习前突破。如果还有其他难点,也请填写在表中。


10.1.2 知识梳理

下面对技能点进行梳理,以知识体系图的形式给出。



在知识体系图中,图标   表示已经学过的知识;图标  表示部分学过或者学过相关内容,但需要巩固和深化的知识;图标   表示需要通过自学或者了解的知识;图标   表示将在后续章节学习的知识。


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语句在实际编程中很少使用,或者说不推荐使用,大家查阅相关资料了解即可。


10.2综合练习

10.2.1 任务描述

本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录系统之后,就可以参加抽奖活动了。


所以本次任务主要实现会员注册、登录及抽奖三个功能,各功能的具体需求和运行结果详见每一阶段的练习。


1. 注册

用户选择"注册"菜单,进入注册界面。输入用户名和密码后,系统提示注册成功,并给出会员卡号。



2. 登录

注册成功后,用户选择"登录"菜单,进入登录界面。输入注册时的用户名和密码,登录成功,系统提示欢迎信息。如果用户名和密码输入错误,提示用户继续输入,最多有三次输入机会。


3. 幸运抽奖

登录成功后,用户选择 "抽奖" 菜单,进入幸运抽奖界面。输入会员卡号,系统生成五个四位随机数作为幸运数字。如果会员卡号是其中之一,则成为本日幸运会员。


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

 


相关文章
|
1月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
172 10
|
1月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
5天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
28天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
50 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
15天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
87 13
|
20天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
54 10
|
14天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
52 2
|
23天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
29天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
1月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
58 2