Private Sub Command1_Click()
Randomize
Label1Caption = Fix(Rnd 10)
Label2Caption = Fix(Rnd 10)
Label3Caption = Fix(Rnd 10)
LabelshuziCaption = Fix(Rnd 10)
If Label1Caption = LabelshuziCaption Or
Label2Caption = LabelshuziCaption Or
Label3Caption =LabelshuziCaption Then
Image1Visible = True
Else
Image1Visible = False
End If
End Sub
注:此段代码可以实现自动选出三个号 Label1 Label2 Label3为选出的三个号
在vb里创建一个 CommandButton按钮 将下面的代码写入 Click 事件 运行就可以了
Private Sub Command1_Click()
Dim a As Integer
a = 1 + Rnd 10000
MsgBox "点数为:" & Int(a)
End Sub
Private Sub Command1_Click()
Timer1Enabled = Not Timer1Enabled
End Sub
Private Sub Form_Load()
Timer1Interval = 20
Timer1Enabled = False
Label1FontSize = 80
Label1Caption = ""
End Sub
Private Sub Timer1_Timer()
Randomize
Dim n As Integer
Label1Caption = Format(1 + 100 Rnd(), "000")
End Sub
Dim a(1 To 100) As String
Dim i As Integer, x As Integer
Const n = 3 'n的值可根据实际需要赋予不同的变量
Private Sub Command1_Click()
Timer1Enabled = True
End Sub
Private Sub Command2_Click()
Timer1Enabled = False
End Sub
Private Sub Form_Load()
Randomize '初始化随机数生成器
a(1) = "富士康" '以此将n个人的姓名保存在数组a中
a(2) = "庞麦郎"
a(3) = "非主流"
For i = 1 To n
List1AddItem a(i)
Next
Timer1Enabled = False
End Sub
Private Sub Timer1_Timer()
x = Rnd() n + 1 '产生一个[1,n]中的随机整数并存入变量x中
Label2Caption = a(x) '在标签Label2中显示下标变量a(x)的值(第x个人的姓名)
End Sub
四个标签、两个按钮、两个文本框。
代码如下:
Dim 上限 As Integer, 下限 As Integer, 抽出() As Boolean, 奖数 As Integer
Private Sub Command1_Click()
If Trim(Text1) = "" Or Trim(Text2) = "" Then '只要有一个空着
MsgBox "你上下限没有输入完整!", vbExclamation '警告
Exit Sub '退出后等待
End If
上限 = Int(Text2)
下限 = Int(Text1)
If 上限 < 下限 Then
MsgBox "你上下限是不是搞反了?重来!", vbQuestion '警告
Text1 = ""
Text2 = ""
Exit Sub '退出后等待
End If
Do
奖数 = Int(InputBox("要抽出多少个奖呢?"))
If 奖数 < 1 Then '没有名额
MsgBox "你上下限没有输入完整!", vbExclamation '警告
ElseIf 奖数 > 上限 - 下限 + 1 Then '奖数超过了总数
MsgBox "你上下限没有输入完整!", vbExclamation '警告
Else '获奖名额在合理范围之内
Exit Do
End If
Loop
Command1Visible = False '这5个就不用了
Text1Visible = False
Text2Visible = False
Label1Visible = False
Label2Visible = False
Command2Visible = True '准备抽奖
Label3Visible = True
Label4Visible = True
ReDim 抽出(下限 To 上限)
For i = 下限 To 上限
抽出(i) = False
Next i
End Sub
Private Sub Command2_Click()
If Command2Caption = "动起来" Then
Timer1Enabled = True
Command2Caption = "抽!"
Else
Timer1Enabled = False
奖数 = 奖数 - 1
Label4 = Label4 & " " & Label3
抽出(Label3) = True
If 奖数 = 0 Then '名额满了
Command2Caption = "完成" '提示
Command2Enabled = False '不可再点击
Label3 = ""
Else '名额没有满
Command2Caption = "动起来" '可以继续
End If
End If
End Sub
Private Sub Form_Load()
Command1Caption = "确定" '上下限输入完成
Command2Caption = "动起来" '滚动与抽出转换
Command2Visible = False '先不用,等确定上下限
Label1 = "最小值"
Text1 = "" '输入最小值的地方
Label2 = "最大值"
Text2 = "" '输入最大值的地方
Label3 = "" '用来做滚动显示
Label3FontSize = 24
Label4 = "" '用于显示已经抽出的
Timer1Enabled = False '等开始滚动再用
Timer1Interval = 100 '每01秒换一个
End Sub
Private Sub Timer1_Timer()
Do
n = Int(Rnd (上限 - 下限) + 下限) '抽出一个
If Not 抽出(n) Then '没有抽过的话
Label3 = n '显示出来
Exit Do
End If
Loop
End Sub
在定义函数时有时在语句前,有的在语句后。
希望能帮到你!
// giftDlgh : header file
//
#if !defined
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CGiftDlg dialog
class CGiftDlg : public CDialog
{
// Construction
public:
int FreeMem();
int ReSetData();
int InitData(); //初始化数组
CGiftDlg(CWnd pParent = NULL); // standard constructor
char code[1000];//指向身份z号数组的指针
char name[1000];//指向姓名数组的指针
char data[1000]; //随机数组
int ptr; //进度条当前指向随机数组的指针
int totalid; //参加抽奖的id总数,如果抽出一个,自减1
bool bstart; //标记进度条是否在滚动
// Dialog Data
//{{AFX_DATA(CGiftDlg)
enum { IDD = IDD_GIFT_DIALOG };
CButton m_btgo;
CString m_code;
CString m_msg;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CGiftDlg)
protected:
virtual void DoDataExchange(CDataExchange pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CGiftDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnCancelMode();
virtual void OnCancel();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line
#endif // !defined(AFX_GIFTDLG_H__21D8D4EF_07F4_4F29_9351_78F99BFF7723__INCLUDED_)
// giftDlgcpp : implementation file
//
#include "stdafxh"
#include "gifth"
#include "giftDlgh"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CGiftDlg dialog
CGiftDlg::CGiftDlg(CWnd pParent /=NULL/)
: CDialog(CGiftDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGiftDlg)
m_code = _T("");
m_msg = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGiftDlg::DoDataExchange(CDataExchange pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGiftDlg)
DDX_Control(pDX, IDOK, m_btgo);
DDX_Text(pDX, IDC_STATIC_CODE2, m_code);
DDX_Text(pDX, IDC_STATIC_MSG, m_msg);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGiftDlg, CDialog)
//{{AFX_MSG_MAP(CGiftDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_WM_CANCELMODE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// CGiftDlg message handlers
BOOL CGiftDlg::OnInitDialog()
{
CDialog::OnInitDialog();
InitData();
bstart=false;
// Set the icon for this dialog The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_msgFormat ("按开始键开始滚动,抽奖箱中人数:%d",totalid);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
// the minimized window
HCURSOR CGiftDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CGiftDlg::OnOK()
{
// TODO: Add extra validation here
if(bstart)
{
KillTimer(1);
bstart=false;
m_msgFormat ("按开始键开始滚动,抽奖箱中人数:%d",totalid-1);
m_codeFormat ("抽出的号码:%s\n姓名:%s",code[data[ptr]],name[data[ptr]]);
//AfxMessageBox(m_code);
ReSetData();//剔除抽出的号码,重新打乱
if(totalid<1)
{
m_btgoEnableWindow (FALSE);
}
m_btgoSetWindowText ("开始");
}
else
{
SetTimer(1, 100,NULL);
bstart=true;
m_msgFormat ("按停止键抽一个奖");
m_btgoSetWindowText ("停止");
}
UpdateData(FALSE);
//CDialog::OnOK();
}
void CGiftDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_codeFormat ("现在的号码:%s",code[data[ptr]]);
UpdateData(FALSE);
ptr++;
ptr%=totalid;
CDialog::OnTimer(nIDEvent);
}
void CGiftDlg::OnCancelMode()
{
CDialog::OnCancelMode();
// TODO: Add your message handler code here
}
int CGiftDlg::InitData()
{
FILE fp=fopen("idtxt","r");
ptr=0;
totalid=1;
if (fp==NULL)
{
return 0;
}
char buf[80];
int line=0;
while(!feof(fp))
{
char p=fgets(buf,80,fp);
if (p!=NULL)
{
name[line]=(char)malloc(80);
code[line]=(char)malloc(80);
memset(code[line],0,80);
memset(name[line],0,80);
int flag=0;
for(int i=0;i<80&&buf[i]!='\0';i++)
{
if((buf[i]!=',' )&& (flag==0))
{
code[line][i]=buf[i];
}
else if(flag==0)
{
flag=i;
}
else if((buf[i]!=',' )&& (flag!=0))
{
name[line][i-flag-1]=buf[i];
}
}
TRACE("%s-%s",code[line],name[line]);
memset(buf,0,80);
line++;
}
}
fclose(fp);
for(int j=0;j<line;j++)
{
data[j]=j;
}
for(int i=0;i<line;i++)
{
int pos=rand()%(line-i)+i;
int temp=data[i];
data[i]=data[pos];
data[pos]=temp;
TRACE("%d",data[i]);
}
totalid=line;
return 1;
}
int CGiftDlg::ReSetData()
{
//ptr剔除,与最后一个交换,然后释放内存
int line=totalid;
int temp=data[ptr];
data[ptr]=data[line-1];
data[line-1]=temp;
//AfxMessageBox(name[data[line-1]]);
free(code[data[line-1]]);
free(name[data[line-1]]);
totalid--;
line--;
ptr=0;
for(int i=0;i<line;i++)//重新打乱
{
int pos=rand()%(line-i)+i;
int temp=data[i];
data[i]=data[pos];
data[pos]=temp;
TRACE("%d",data[i]);
}
return 1;
}
int CGiftDlg::FreeMem()
{
int line=totalid;
for(int i=0;i<line;i++)
{
free(code[i]);
free(name[i]);
}
return 1;
}
void CGiftDlg::OnCancel()
{
// TODO: Add extra cleanup here
FreeMem();
CDialog::OnCancel();
}
idtxt
332601771212061,章鱼
110103198511110453,李光
21010119541201045X,周瑜
320304780102066,韩信
442601771212061,沈兵
510103198511110453,宏志
220101841201045X,范进
520304197801020661,曾国
352601771212088,乱马
540122198511110453,贾海
以上就是关于VB程序做随机抽奖全部的内容,包括:VB程序做随机抽奖、怎样用VB制作一个抽奖器(最好是名字)、VB编程 抽奖程序 开始结束都用一个按钮控制 从001到100等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)