java小项目之:抽奖系统!java初学者必备(内附源码)
【Java】Java摇奖源码,Java抽奖源码,Java随机抽奖源码
任务描述
本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了。
注册
用户选择“注册”菜单,进入注册界面。输入用户名和密码后,系统提示注册成功,并给出会员卡号。
登录
注册成功后,用户选择“登录”菜单,进入登录界面。输入注册时的用户名和密码。登录成功,系统提示欢迎信息。如果用户和密码输入错误,提示用户继续输入,最多有3次机会。
抽奖
登录成功后,用户选择“抽奖”菜单,进入幸运抽奖界面。输入会员卡号,系统生成5个4位随机数作为幸运数字。如果会员卡号是其中之一,则成为本日幸运会员。
源代码
import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;
import com.thinkive.base.jdbc.DataRow;
public class TurnTable {
static Object[][] prizeArr = new Object[][]{
//里面的指针转动
{1,"一等奖",0.0001},
{2,"不要灰心",39.9994},
{3,"祝您好运",20.0},
{4,"二等奖",0.0002},
{5,"再接再厉",20.0},
{6,"运气先攒着",10.0},
{7,"三等奖",0.0003},
{8,"谢谢参与",10.0}
};
Object result[] = award(prizeArr);//抽奖后返回奖品等级及奖品描述
//抽奖后返回奖品等级及奖品描述
public static Object[] award(Object[][] prizeArr){
//概率数组
float obj[] = new float[prizeArr.length];
for(int i=0;i<prizeArr.length;i++){
obj[i] = Float.parseFloat(prizeArr[i][2].toString());
}
Integer prizeId = getRand(obj); //根据概率获取奖项号码
String msg = (String) prizeArr[prizeId][1];//奖品信息
Integer prizeIds = prizeId +1;
System.out.println("奖品号: "+prizeIds +" 获奖等级:"+msg);
return new Object[]{prizeId,msg};
}
//根据概率获取奖项
public static Integer getRand(float obj[]){
Integer result = null;
try {
float sum = 0.0f;//概率数组的总概率精度
float min = 0.0f;//
for(int i=0;i<obj.length;i++){
BigDecimal beforSum = new BigDecimal(Float.toString(sum));
BigDecimal objValue = new BigDecimal(Float.toString(obj[i]));
sum = beforSum.add(objValue).floatValue();
}
for(int i=0;i<obj.length;i++){//概率数组循环
BigDecimal db = new BigDecimal(Math.random() * (sum - min) + min);
BigDecimal b = new BigDecimal(Float.toString(obj[i]));
if(compareMethod(db,b) == -1){//中奖
result = i;
break;
}else{
sum -=obj[i];
}
}
} catch (Exception e) {
e.printStackTrace();
}
/**
* 奖品控制代码,这里可以控制我们的奖品的等级
* **/
return result;
}
public static void main(String[] args) {
DataRow data = new DataRow();//此处DataRow为封装了的 HashMap
List<DataRow> resultList = new ArrayList<DataRow>();
for (int i = 0; i < 10000; i++) {
int k = 1;
Object result[] = award(prizeArr);//抽奖后返回角度和奖品等级
String prize = "";
String comment = "";
for (Object object : result) {
if(k==1){
prize = object.toString();
}else if(k==2){
comment = object.toString();
}
k++;
}
if(k==3){
data.set("prize", Integer.valueOf(prize)+1);
data.set("comment", comment);
resultList.add(data);
}
}
}
public static int compareMethod(BigDecimal a,BigDecimal b){
return a.compareTo(b);
}
}
喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资料的也可以私信我!
祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早生贵子,从不掉发!
java小项目之:抽奖系统!java初学者必备(内附源码)的更多相关文章
- JAVA WEB项目中生成验证码及验证实例(附源码及目录结构)
[我是一个初学者,自己总结和网上搜索资料,代码是自己敲了一遍,亲测有效,现将所有的目录结构和代码贴出来分享给像我一样的初学者] 作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计 ...
- Ext.NET 4.1 系统框架的搭建(后台) 附源码
Ext.NET 4.1 系统框架的搭建(后台) 附源码 代码运行环境:.net 4.5 VS2013 (代码可直接编译运行) 预览图: 分析图: 上面系统的构建包括三块区域:North.West和C ...
- 微信小程序版博客——开发汇总总结(附源码)
花了点时间陆陆续续,拼拼凑凑将我的小程序版博客搭建完了,这里做个简单的分享和总结. 整体效果 对于博客来说功能页面不是很多,且有些限制于后端服务(基于ghost博客提供的服务),相关样式可以参考截图或 ...
- 干货:Java多线程详解(内附源码)
线程是程序执行的最小单元,多线程是指程序同一时间可以有多个执行单元运行(这个与你的CPU核心有关). 在java中开启一个新线程非常简单,创建一个Thread对象,然后调用它的start方法,一个 ...
- Java学习笔记三十:Java小项目之租车系统
Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
- Java小项目之:教你做个聊天系统!
Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...
- Java小项目之:五子棋,你下棋下得过电脑吗?
Java小项目之:五子棋,你下棋下得过电脑吗? Java五子棋功能要求: 1.创建窗口和设计一个棋盘界面 2.实现鼠标点击,棋子出现,黑白棋轮流下 3.能够判断五子相连输赢 4.添加重新开始,悔棋,退 ...
- java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码
Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...
随机推荐
- 吴裕雄 python 神经网络——TensorFlow 输入数据处理框架
import tensorflow as tf files = tf.train.match_filenames_once("E:\\MNIST_data\\output.tfrecords ...
- vue-cli项目结构详解
vue-cli的webpack模板项目配置文件分析 https://blog.csdn.net/hongchh/article/details/55113751/ 由于最近在vue-cli生成的web ...
- node.js express 中文参考手册
https://www.runoob.com/w3cnote/express-4-x-api.html 原文地址:https://www.zybuluo.com/bajian/note/444152 ...
- Python版GPA计算器
最近在网申投简历时遇到一个需要计算GPA的问题,想起自己在上学时写的Excel公式版GPA计算器略显low,而且操作也比较复杂,于是一时兴起,写了个Python版的,在此分享给大家,也算是跟上时代的浪 ...
- 给Linux系统运维新手的四点建议
随着计算机的普及.互联网的发展,原本黑客手中的攻城利器---Linux,渐渐进入到普通群众的视线里,让越来越多的人接触到Linux,并学习Linux进而投身到Linux运维工作中去. 学习Linux的 ...
- Nginx Rewrite域名及资源重定向!(重点)
第一步:搭建Nginx服务 第二步:修改主配置文件 [root@ns2 ~]# vim /usr/local/nginx/conf/nginx.conf user nginx nginx; work ...
- PB开启源码文件
下载的源码没有pbw文件,新建workspace,然后new Target选existing application
- 「JSOI2015」最大公约数
「JSOI2015」最大公约数 传送门 考虑先枚举区间左端点, 然后我们会发现所有可能的区间虽然有 \(O(n)\) 个,但是本质不同的区间 \(\gcd\) 只有 \(\log n\) 级别,而且是 ...
- 设计模式课程 设计模式精讲 3-7 接口隔离原则讲解及Coding
1 主讲内容 1.1 核心内容 1.2 优点 1.3 课程记录 2 代码演练 2.1 接口隔离原则反比 2.2 接口隔离原则正比 1 主讲内容 1.1 核心内容 总结:细粒度可以进行再组装,粗粒度不可 ...
- requests库 代理
import requests proxy = { 'http': '125.123.137.2208:9999' } res = requests.get('http://httpbin.org/i ...