基于web的双色球自动选号功能

双色球自动选号

本节主要使用servlet+jQuery+ajax+json+html实现一个双色球自动选号系统,主要目的是让大家对这几项技术的综合使用有一个更深入的理解。
先说下双色球的规则,很多人都幻想过一夜暴富,所以就有了彩票,其中双色球的玩法即简单,奖金又高,因此受大量彩民朋友的欢迎。双色球的规则如下:
每注中奖号码由6个不同的红色球号码和1个蓝色球号码组成。红色球号码从1~33中选择;蓝色球号码从1~16中选择。需要注意的地方就是注意红球号码做去重处理。

静态资源:https://pan.baidu.com/s/1YC9mJMDzUY2uPSu8_FBJYw
提取码:qcjc

先说下整体思路,用户在页面中输入一个正整数,表示希望系统随机生成的双色球的注数,随机双色球内容的生成交由servlet处理,处理结束后将生成的结果发送到jsp页面中,之后使用ajax无刷新来显示生成的双色球结果。

首先在静态页面中编写javascript代码,这里使用jQuery:

$(function(){
        //按钮点击事件
        $('#getBall').click(function(){
             let num = $("#num").val();
             let reg = /^([1-9]|[1-2]\d)$/;

             //对用户输入的内容进行校验。
             if(!reg.test(num)){

                    let msg = '<div class="alert alert-danger"><strong>注意!</strong> 请输入小于30的正整数</div>';
                    $('#msg').html(msg);

                    setTimeout(function(){
                        $('#msg').empty();
                     },3000);  

                 return;
             }

             //使用ajax处理请求和相应
             $.ajax({
                 type: "post",
                 url: "/colorBall",
                 data: {num:num},
                 dataType: "json",
                 success: function(result){
                             
                             let redBall = ''; 
                             let blueBall = ''; 

                             //遍历servlet中返回的结果
                             $.each(result, function(index, element){

                                 //如果双色球是一位数字的话在前面补0,例如1补0后变成01,主要为了格式好看
                                 if(element < 10){
                                     element = "0" + element;
                                 }


                                if((index+1) % 7 == 0){
                                    //因为下标是从0开始的,所以需要做+1运算
                                    //当对7求余结果是0的时候,则说明这个索引位置上的值是蓝球
                                    blueBall += '<span class="label label-info label-circle">' + element + '</span>';
                                }else{
                                    //换行操作
                                     if(index != 0 && index % 7 == 0){
                                            redBall += "<hr>";
                                            blueBall += "<hr>";
                                        }

                                     //生成红球
                                    redBall += '<span class="label label-danger label-circle">' + element + '</span> ';

                                }

                             });

                             //将生成的html展示在页面中
                             $('#red').html(redBall);
                             $('#blue').html(blueBall);

                             //提示信息
                            let msg = '<div class="alert alert-info">双色球生成成功!</div>';
                             $('#msg').html(msg);

                             setTimeout(function(){
                                 $('#msg').empty();
                              },2000)

                          },
                      error:function(){
                          alert("系统错误,请联系管理员");
                      }

             });

        });

    });

因为用户可以进行输入,所以要添加校验,这里只运行输入大于0小于30的正整数。

前台搞定后,开始编写后台servlet相关的代码。因为双色球红球不能重复,并且需要对球进行排序,正好TreeSet中的数据不能重复,并且是会自动排序的,所以使用TreeSet来存放生成的一注双色球。用户有可能会生成多注双色球,因此每生成一注双色球之后将其放到一个List中,即这个List是存放着最终计算的结果。

package com.monkey1024.servlet;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;

/**
 * 双色球
 */
@WebServlet("/colorBall")
public class CollorBallServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String num = request.getParameter("num");

        //调用方法获取返回的双色球计算结果
        List<Integer> balls = getBall(Integer.parseInt(num));

        String jsonStr = JSON.toJSONString(balls);

        response.getWriter().write(jsonStr);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

    private List<Integer> getBall(int num) {

        //因为双色球红球不能重复,并且需要对球进行排序,所以使用TreeSet来存放生成的一注双色球
        Set<Integer> temp = new TreeSet<>();

        //每生成一注之后,将数据放到list中,该list存放最终的运算结果
        List<Integer> balls = new LinkedList<>();

        Random r = new Random();

        //根据用户的输入来判断生成多少注双色球
        for (int i = 0; i < num; i++) {
            // 不能生成号码相同的红球
            while (temp.size() < 6) {
                // 会随机生成0~32个的随机数,因此做加一运算
                // 生成红球
                temp.add(r.nextInt(33) + 1);
            }
            // 将红球放到list中
            balls.addAll(temp);

            //将set中的数据清空以便下一次的使用
            temp.clear();
            // 生成蓝球放到list中
            balls.add(r.nextInt(16) + 1);
        }

        return balls;
    }

}

总结,该小功能主要是对javascript,ajax,前后台数据交互,TreeSet知识的一个综合练习,希望通过这个练习,可以让大家培养出自己的编程思路。