彩票购买抽奖程序
一、团队成员
网络2112 林双强 202121333059
二、项目git地址
仓库数据统计 · 林双强/BigJob - Gitee.com
三、项目简介
登录时自动识别用户或管理员,用户需要账号和密码来登录,登录后可以实现彩票的手动选号,自动选号进行购买,余额不足则无法购买,可以充值余额。
管理员进行开奖,点开始屏幕彩票号开始滚动,按暂停及开出奖项,管理员可以查看用户的中奖信息。可通过后台进行十万个用户数据 的测试。如果用户在线且中奖可以实时通知。
四、项目功能架构图
五、包规划以及UML图
六、部分运行测试
七、核心代码
开奖
drawButton.setOnAction(e->{
if(flag[0]){
flag[0]=false;
new Thread(() -> {
while (!flag[0]){
HashSet<Integer> set = new HashSet<>();
Random random = new Random();
while(set.size()<8){
set.add(random.nextInt(36)+1);
}
Iterator<Integer> iterator = set.iterator();
textFieldNum1.setText(iterator.next()+"");
textFieldNum2.setText(iterator.next()+"");
textFieldNum3.setText(iterator.next()+"");
textFieldNum4.setText(iterator.next()+"");
textFieldNum5.setText(iterator.next()+"");
textFieldNum6.setText(iterator.next()+"");
textFieldNum7.setText(iterator.next()+"");
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
}
}).start();
}
});
stopButton.setOnAction(e->{
flag[0]=true;
});
中奖后的转账
public static void transforAccout(HashSet<Integer> set,int id){
Connection conn;
PreparedStatement st;
HashSet<Integer> integers;
int times=0;//倍数
try{
conn = JdbcUtils.getConnection();
String sql="select * from lottery where `ID` =? and account!=0";
st=conn.prepareStatement(sql);
st.setInt(1,id);
ResultSet resultSet = st.executeQuery();
while(resultSet.next()){
integers=new HashSet<>();
String account1 = resultSet.getString("account");
integers.add(resultSet.getInt("num1"));
integers.add(resultSet.getInt("num2"));
integers.add(resultSet.getInt("num3"));
integers.add(resultSet.getInt("num4"));
integers.add(resultSet.getInt("num5"));
integers.add(resultSet.getInt("num6"));
integers.add(resultSet.getInt("num7"));
BigDecimal money=resultSet.getBigDecimal("money");
integers.removeAll(set);
int size= integers.size();
switch (size) {
case 5 -> times = 20;
case 4 -> times = 500;
case 3 -> times = 5000;
case 2 -> times = 50000;
case 1 -> times = 500000;
case 0 -> times = 5000000;
}
if(size>1){
BigDecimal ignotNum = getIgnotNum(account1);
for (int i = 0; i < Administrator.getOnlineClientList().size(); i++) {
if(account1.equals(Administrator.getOnlineClientList().get(i).getAccount())){
Socket socket = Administrator.getOnlineClientList().get(i).getSocket();
PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
out.println("你中了"+account1);out.flush();
}
}
realTranforAccount(account1,ignotNum.add(money.multiply(new BigDecimal(times))));
}
}
JdbcUtils.release(conn,st,null);
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void realTranforAccount(String account,BigDecimal money){
Connection conn;
PreparedStatement st;
try {
conn=JdbcUtils.getConnection();
String sql="update user set ingotNum=? where account=?";
st=conn.prepareStatement(sql);
st.setBigDecimal(1,money);
st.setString(2,account);
st.executeUpdate();
JdbcUtils.release(conn,st,null);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
显示购彩记录
public static ArrayList<Lottery> displayBought(String account) {//显示买过了的
Connection conn;
PreparedStatement st ;
ArrayList<Lottery> lotteries = new ArrayList<>();
try {
conn = JdbcUtils.getConnection();
String sql = "select * from lottery where `account`=? ";
st = conn.prepareStatement(sql);
st.setString(1,account);
ResultSet resultSet = st.executeQuery();
while(resultSet.next()){
HashSet<Integer> set = new HashSet<>();
int id = resultSet.getInt("id");
BigDecimal money = resultSet.getBigDecimal("money");
int run = resultSet.getInt("run");
int num1 = resultSet.getInt("num1");set.add(num1);
int num2 = resultSet.getInt("num2");set.add(num2);
int num3 = resultSet.getInt("num3");set.add(num3);
int num4 = resultSet.getInt("num4");set.add(num4);
int num5 = resultSet.getInt("num5");set.add(num5);
int num6 = resultSet.getInt("num6");set.add(num6);
int num7 = resultSet.getInt("num7");set.add(num7);
Lottery lottery = new Lottery(id, set, money,run);
lotteries.add(lottery);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return lotteries;
}
购买彩票
public static void purchase(Lottery lottery) throws SQLException {
Connection conn;
PreparedStatement st;
Iterator<Integer> iterator = lottery.getNums().iterator();
conn = JdbcUtils.getConnection();
String sql="insert into lottery(`id`,`account`,`money`,`run`,`num1`,`num2`,`num3`,`num4`,`num5`,`num6`,`num7`) " +
"values (?,?,?,?,?,?,?,?,?,?,?)";
st=conn.prepareStatement(sql);
st.setInt(1,lottery.getID());
st.setString(2,lottery.getAccount());
st.setBigDecimal(3,lottery.getMoney());
st.setInt(4,lottery.getRun());
st.setInt(5,iterator.next());
st.setInt(6,iterator.next());
st.setInt(7,iterator.next());
st.setInt(8,iterator.next());
st.setInt(9,iterator.next());
st.setInt(10,iterator.next());
st.setInt(11,iterator.next());
JdbcUtils.release(conn,st,null);
}
八、展望
使用的是GUI,将来可以使用web技术,还有框架技术加以完善。
没法控制手动选号时号码重复的问题。
可视化界面设计的比较潦草,将来有待完善。
还未生成exe文件