QT实现双色球随机生成及兑奖(C++代码)

目录

一、前言

二、代码部分

2.1 头文件

2.2 源文件

2.2.1 widget.cpp

2.2.1 main.cpp

三、ui界面

3.1 模版页

3.2 运行页面

3.2.1 一次购买成功显示

3.2.2 输入号码有重复

3.2.3 输入的号码超出范围


一、前言

        双色球投注区分为红色球号码区和蓝色球号码区,红色球号码区由1-33(共33个)号码组成,蓝色球号码区由1-16(共16个)号码组成。投注时用户选择6个红球号、1个蓝球号组成一注,机选6个红球、1个蓝球,其中红球号码不能有重复。

中几个号码就可以得到对应奖级的奖金,如下表:

中奖号码数量(个)奖金(元)
35
420
520000
620 0000
7500 0000

二、代码部分

2.1 头文件

       用到"QString":用于处理字符串的类,"QDebug":用于调试输出的类,"Ctime"、"Cstdlib":用于后面创建随机数, "QPixmap"、"QPainter":显示ui背景的类。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QString>
#include<QDebug>
#include<ctime>
#include<cstdlib>

#include<QPixmap>
#include<QPainter>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    //void paintEvent(QPaintEvent *event);

private slots:
    void userNum();
    void judge(int usernum,int i);
    void overCode();
    bool isSave(int  user[],int len, int usernum);
    void on_pushButton_clicked(bool checked);

private:
    Ui::Widget *ui;
    int user[7]={0};
    int zj[7]={0};
    int num=0;
    bool tag=true;
};

#endif // WIDGET_H

2.2 源文件

2.2.1 widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置该页面标题
    this->setWindowTitle("双色球");
    //设置随机数种子
    srand(time(NULL));
    //利用信号和槽机制实现功能,当界面上名为ok的按钮被点击时,当前对象的userNum槽函数将被调用。
    connect(ui->ok,SIGNAL(clicked(bool)),this,SLOT(userNum()));
    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(overCode()));
}

Widget::~Widget()
{
    delete ui;
}

//设置页面背景
/*void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,width(),height(),QPixmap("E:\second\qtProject\prgSSQ1\ssq.jpg"));
}*/

//去重
bool Widget::isSave(int  user[],int len, int usernum)
{
    //判断是否有重复值
    for(int i=0;i<len;i++)
    {
        if(user[i]== usernum)
        {
            return true;
        }
    }
    return false;
}

void Widget::on_pushButton_clicked(bool checked) 
{
    //点击开奖按钮,生成随机红球
    for(int i=0;i<6;i++)
    {
        int h=rand()%33+1;
        int a=isSave(zj,7,h);
        if(a)
        {
            i--;
            continue;
        }
        zj[i]=h;
        if(i==0) //这里也可以使用for循环
        {
            ui->zj_num1->setText(QString::number(zj[0]));
        }
        else if(i==1)
        {
            ui->zj_num2->setText(QString::number(zj[1]));
        }
        else if(i==2)
        {
            ui->zj_num3->setText(QString::number(zj[2]));
        }
        else if(i==3)
        {
            ui->zj_num4->setText(QString::number(zj[3]));
        }
        else if(i==4)
        {
            ui->zj_num5->setText(QString::number(zj[4]));
        }
        else if(i==5)
        {
            ui->zj_num6->setText(QString::number(zj[5]));
        }else if(i==6)
        {
            ui->zj_num7->setText(QString::number(zj[6]));
        }
    }
    //生成随机蓝球
    int l=rand()%16+1;
    zj[6]=l;
    ui->zj_num7->setText(QString::number(zj[6]));
}

void Widget::userNum() //用户输入号码
{
    //将输入的数据全部清零
    for(int i = 0; i < 7; i++)
    {
        user[i] = 0;
    }
    tag = true;
    if(tag)
    {
        judge(ui->user_num1->text().toInt(),0);
        if(!tag) return;
        judge(ui->user_num2->text().toInt(),1);
        if(!tag) return;
        judge(ui->user_num3->text().toInt(),2);
        if(!tag) return;
        judge(ui->user_num4->text().toInt(),3);
        if(!tag) return;
        judge(ui->user_num5->text().toInt(),4);
        if(!tag) return;
        judge(ui->user_num6->text().toInt(),5);
        if(!tag) return;
        judge(ui->user_num7->text().toInt(),6);
        if(!tag) return;
        tag=true;
    }
}

//判断用户输入的号码是否有误
void Widget::judge(int usernum, int i)
{
    if(tag){
        if(i < 6){
            if(usernum>33||usernum<1)
            {
                ui->user_msg->setText(QString::number(usernum).append("本次输入的号码超出范围,红球范围为1~33"));
                tag=false;
                return ;
            }
            //判断红球是否有重复
            int a=isSave(user,7,usernum);
            if(a)
            {
                ui->user_msg->setText(QString::number(usernum).append("号码重复,请重新输入"));
                tag=false;
                return ;
            }
            //如果输入的数没有重复或超范围,则存入数组
            else{
                user[i]=usernum;
                ui->user_msg->setText("购买成功");
            }
        }
        else
        {
            //判断蓝球是否在范围内
            if(usernum>16||usernum<1)
            {
                ui->user_msg->setText(QString::number(usernum).append("本次输入的号码超出范围,蓝球范围为1~16"));
               tag=false;
               return ;
            }
            //将第6个数存入数组
            user[6]=usernum;
        }
    }
}
void Widget::overCode()
{
    //遍历用户输入数组和机器随机生成的数组
    int num=0;
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<6;j++)
        {
            if(user[i]==zj[j])
            {
                num++;
            }
        }
    }
    //有相同则计数
    if(user[6]==zj[6])
    {
        num++;
    }
    switch (num) {
    case 1:
        ui->msg->setText("恭喜您只有一个号码相同,获得一次参与感");
        break;
    case 2:
        ui->msg->setText("恭喜您只有两个号码相同,获得一次参与感");
        break;
    case 3:
        ui->msg->setText("恭喜您中奖5元");
        break;
    case 4:
        ui->msg->setText("恭喜您中奖20元");
        break;
    case 5:
        ui->msg->setText("恭喜您中奖2w");
        break;
    case 6:
        ui->msg->setText("恭喜您中奖20w");
        break;
    case 7:
        ui->msg->setText("恭喜您中奖500w");
        break;
    default:
        ui->msg->setText("感谢参与");
        break;
    }
}
2.2.1 main.cpp
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

三、ui界面

3.1 模版页

        用户先输入用户号码,点击确认按钮判断号码是否有误,若有误则修改后再次点击确认,若无误则点击开奖。

3.2 运行页面

3.2.1 一次购买成功显示

3.2.2 输入号码有重复

3.2.3 输入的号码超出范围

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值