Java课程设计-基于网络的彩票购买程序

彩票购买抽奖程序

一、团队成员

网络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文件

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值