请高手帮看看这个抽奖程序
本帖最后由 waxy 于 2014-1-10 19:05 编辑先给兄弟拜个早年!祝财源广进,马上有钱!哈哈!
过几天公司要弄个年会,要搞个电脑抽奖,于是小弟就从咱们的坛子里下了段代码(具体是哪位兄弟的代码忘了,不过还是要说声谢谢!)。
但发现这段代码有点问题,就是已经抽到的奖的员工名字没有从源“数据库”删除(test.ini),这样就可能出现重复中奖。试了好多方法都
没能实现。我想把他改成以下形式:
1、只要中奖后名字即从源ini中删除。
2、中奖的名单直接显示在旁边。
3、可以人为选定所抽奖项的级别(比如一等奖、二等奖等),并且可以设定所抽奖项的人数。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#Include <GuiToolBar.au3>
#include <array.au3>
Opt("GUIOnEventMode", 1)
Global $gui, $guiPos, $pic, $picPos
Local $n, $msg
Local $Prize=["10000元","5000元","2000元","1000元","500元","400元","300元","200元","100元","50元"]
Local $ini=IniReadSection("test.ini","name")
Global $stop=1,$temp
$form1=GUICreate("My GUI picture", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
GUISetBkColor(0xE0FFFF)
$n = GUICtrlCreatePic(@ScriptDir & "\狂欢.jpg", 0, 0, @DesktopWidth, @DesktopHeight)
GUICtrlSetState(-1, $gui_disable)
$lable = GUICtrlCreateLabel("年终抽奖", @DesktopWidth / 16 * 8 - 100, @DesktopHeight / 10 * 5 - 100, 300, 80);,bitOr($SS_SUNKEN, $SS_CENTER,$TBSTYLE_EX_DOUBLEBUFFER))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 40, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable3 = GUICtrlCreateLabel("名单", @DesktopWidth / 16 * 8 - 100, @DesktopHeight / 10 * 7 - 100, 200, 40);,bitOr($SS_SUNKEN, $SS_CENTER,$TBSTYLE_EX_DOUBLEBUFFER))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 24, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable1 = GUICtrlCreateLabel("抽奖参与人数:"&UBound($ini), @DesktopWidth / 16 * 1, @DesktopHeight / 10 * 1, 100, 200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 12, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable2 = GUICtrlCreateLabel("已抽奖人数:", @DesktopWidth / 16 * 12, @DesktopHeight / 10 * 1, 200, 40)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 12, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$button1 = GUICtrlCreateButton("开始", @DesktopWidth / 16 * 5, @DesktopHeight / 10 * 8, 80, 40)
GUICtrlSetOnEvent(-1,'_start')
$button2 = GUICtrlCreateButton("退出", @DesktopWidth / 16 * 9, @DesktopHeight / 10 * 8, 80, 40)
GUICtrlSetOnEvent(-1,'_exit')
GUISetState()
$i=1 ;记录数组键值
While 1
Sleep(10)
If Not $stop Then
GUICtrlSetData($lable3,$prize)
$temp=Random(0,UBound($ini)-1,1)
If $temp="" Then
$temp=Random(0,UBound($ini)-1,1)
endif
GUICtrlSetData($lable,$ini[$temp])
IniWrite ( "w.ini", "zj", $i, $ini[$temp] )
EndIf
WEnd
Func _start()
If GUICtrlRead($button1)='停止' Then
$stop=1
GUICtrlSetData($button1,'开始')
$i=$i+1 ;数组记录
_ArrayDelete($ini,$temp)
GUICtrlSetData($lable2,"剩余抽奖人数:"&UBound($ini))
Else
$stop=0
GUICtrlSetData($button1,'停止')
EndIf
EndFunc
Func _exit()
Exit
EndFuncini如下---谢谢。
1=张三
2=李四
3=王五
4=明明
5=东东
6=西西
7=丽丽
8=刘王
9=张鹏
10=胡三 哪位帮我看一下啊,怎么没理我啊? 支持一下楼主! 哪位帮帮忙啊,哪怕能解决第一个问题也好啊。 回复 4# waxy
程序里面已经删了,不会重复的,只是没把删除后的数组写回文件而已 回复 5# www378660084
我有试过的,会有重复的,这样的话在第二次打开程序同样会出现重复的问题。 回复waxy
程序里面已经删了,不会重复的,只是没把删除后的数组写回文件而已
www378660084 发表于 2014-1-11 11:36 http://www.autoitx.com/images/common/back.gif
我尝试用IniDelete (@ScriptDir &"\test.ini","name",$cfg[$temp]),根本没反应。 给你稍微改了下~~~~
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiToolBar.au3>
#include <array.au3>
Opt("GUIOnEventMode", 1)
Global $gui, $guiPos, $pic, $picPos
Local $n, $msg
Local $Prize = ["10000元", "5000元", "2000元", "1000元", "500元", "400元", "300元", "200元", "100元", "50元"]
Local $ini = IniReadSection("test.ini", "name")
Global $stop = 1, $temp
Dim $label_arr
$form1 = GUICreate("My GUI picture", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
GUISetBkColor(0xE0FFFF)
$n = GUICtrlCreatePic(@ScriptDir & "\狂欢.jpg", 0, 0, @DesktopWidth, @DesktopHeight)
GUICtrlSetState(-1, $gui_disable)
$lable = GUICtrlCreateLabel("年终抽奖", @DesktopWidth / 16 * 8 - 100, @DesktopHeight / 10 * 5 - 100, 300, 80);,bitOr($SS_SUNKEN, $SS_CENTER,$TBSTYLE_EX_DOUBLEBUFFER))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 40, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable3 = GUICtrlCreateLabel("名单", @DesktopWidth / 16 * 8 - 100, @DesktopHeight / 10 * 7 - 100, 200, 40);,bitOr($SS_SUNKEN, $SS_CENTER,$TBSTYLE_EX_DOUBLEBUFFER))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 24, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable1 = GUICtrlCreateLabel("抽奖参与人数:" & (UBound($ini)-1), @DesktopWidth / 16 * 1, @DesktopHeight / 10 * 1, 100, 200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 12, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable2 = GUICtrlCreateLabel("已抽奖人数:", @DesktopWidth / 16 * 12, @DesktopHeight / 10 * 1, 200, 40)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 12, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
For $i = 1 To 10
$label_arr[$i]= GUICtrlCreateLabel("1", @DesktopWidth / 16 * 12, @DesktopHeight / 10 * 2 + 40 * $i, 200, 40)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 24, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
Next
$button1 = GUICtrlCreateButton("开始", @DesktopWidth / 16 * 5, @DesktopHeight / 10 * 8, 80, 40)
GUICtrlSetOnEvent(-1, '_start')
$button2 = GUICtrlCreateButton("退出", @DesktopWidth / 16 * 9, @DesktopHeight / 10 * 8, 80, 40)
GUICtrlSetOnEvent(-1, '_exit')
GUISetState()
$i = 1 ;记录数组键值
While 1
Sleep(10)
If Not $stop Then
GUICtrlSetData($lable3, $prize[$i-1])
If UBound($ini)-1 = 1 Then
$temp = 1
Else
$temp = Random(1, UBound($ini) - 1, 1)
EndIf
GUICtrlSetData($label_arr[$i], $ini[$temp])
If $ini[$temp] = "" Then MsgBox(0,0,UBound($ini) - 1)
IniWrite("w.ini", "zj", $i, $ini[$temp])
EndIf
WEnd
Func _start()
If GUICtrlRead($button1) = '停止' Then
$stop = 1
GUICtrlSetData($button1, '开始')
$i = $i + 1 ;数组记录
_ArrayDelete($ini, $temp)
GUICtrlSetData($lable2, "剩余抽奖人数:" & UBound($ini) - 1)
Else
If $i >= 11 Then
GUICtrlSetData($lable,"抽奖完成")
return
EndIf
$stop = 0
GUICtrlSetData($button1, '停止')
EndIf
EndFunc ;==>_start
Func _exit()
Exit
EndFunc ;==>_exit
回复 7# waxy
一次选完不就行了.
删除的话用这个
IniDelete (@ScriptDir &"\test.ini","name",$cfg[$temp])
看看IniReadSection函数的帮助 本帖最后由 afan 于 2014-1-11 13:24 编辑
LZ要求那么多,重写一个会更快…
中奖纪录保存在“中奖纪录.ini”里,不会删除原ini数据,不会重复。
各奖项数量设置在$ajx数组里,奖项太多,人数不够分钱,test.ini里面多增加几段。#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
Global $aini = IniReadSection('test.ini', 'name')
Global $Prize = ['10000元', '5000元', '2000元', '1000元', '500元', '400元', '300元', '200元', '100元', '50元']
Global $ajx = ;对应上面的各奖项数量
Global $iMax = 0
For $xx = 0 To UBound($ajx) - 1
$iMax += $ajx[$xx] ;奖项总数
Next
Global $stop = 1, $ix, $iJx
$form1 = GUICreate('My GUI picture', @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
GUISetBkColor(0xFF0000)
$n = GUICtrlCreatePic(@ScriptDir & '\狂欢.jpg', 0, 0, @DesktopWidth, @DesktopHeight)
GUICtrlSetState(-1, $gui_disable)
$lable = GUICtrlCreateLabel('年终抽奖', @DesktopWidth / 16 * 8 - 100, @DesktopHeight / 10 * 5 - 100, 300, 80);,bitOr($SS_SUNKEN, $SS_CENTER,$TBSTYLE_EX_DOUBLEBUFFER))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 40, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable3 = GUICtrlCreateLabel('', @DesktopWidth / 16 * 8 - 100, @DesktopHeight / 10 * 7 - 100, 300, 40);,bitOr($SS_SUNKEN, $SS_CENTER,$TBSTYLE_EX_DOUBLEBUFFER))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 24, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable1 = GUICtrlCreateLabel('抽奖参与人数:' & $aini & @LF & @LF & _
'奖项总数:' & $iMax, @DesktopWidth / 16 * 1, @DesktopHeight / 10 * 1, 150, 200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 12, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$lable2 = GUICtrlCreateLabel('已抽奖人数:0', @DesktopWidth / 16 * 12, @DesktopHeight / 10 * 1, 200, 200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 12, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
Global $sZjjl = '前N条中奖记录:' & @LF
$lableX = GUICtrlCreateLabel($sZjjl, @DesktopWidth / 16 * 12, @DesktopHeight / 10+ 80, 400, @DesktopHeight - 100)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 12, 800, Default, '黑体')
GUICtrlSetColor(-1, 0xffffff)
$button1 = GUICtrlCreateButton('开始', @DesktopWidth / 16 * 5, @DesktopHeight / 10 * 8, 80, 40)
GUICtrlSetOnEvent(-1, '_start')
$button2 = GUICtrlCreateButton('退出', @DesktopWidth / 16 * 9, @DesktopHeight / 10 * 8, 80, 40)
GUICtrlSetOnEvent(-1, '_exit')
GUISetState()
$i = 0 ;记录数组键值
While 1
Sleep(10)
If $stop Then ContinueLoop
Do
$iJx = 9 - Random(0, 9, 1)
Until Eval('~~' & $iJx + 1) < $ajx[$iJx]
GUICtrlSetData($lable3, $iJx + 1 & '等奖:' & $Prize[$iJx])
Do
$ix = Random(1, UBound($aini) - 1, 1)
Until Not IsDeclared('~' & $ix)
GUICtrlSetData($lable, $aini[$ix])
WEnd
Func _start()
If GUICtrlRead($button1) = '已结束' Then
GUICtrlSetData($lable, '已结束')
GUICtrlSetData($lable3, '明年再试 :)')
GUICtrlSetState($button1, 128)
Return
ElseIf GUICtrlRead($button1) = '停止' Then
$stop = 1
GUICtrlSetData($button1, '开始')
$i += 1 ;数组记录
GUICtrlSetData($lable2, '已抽奖人数:' & $i & @LF & @LF & '剩余奖项数:' & $iMax - $i)
Assign('~' & $ix, 1, 2)
Assign('~~' & $iJx + 1, Eval('~~' & $iJx + 1) + 1, 2)
$s = GUICtrlRead($lable3)
IniWrite('中奖纪录.ini', @YEAR & @MON & @MDAY, $ix & ':' & $aini[$ix], $s)
$sZjjl &= $aini[$ix] & ':' & $s & @LF
GUICtrlSetData($lableX, $sZjjl)
If $i = $aini Or $i = $iMax Then GUICtrlSetData($button1, '已结束')
Else
$stop = 0
GUICtrlSetData($button1, '停止')
EndIf
EndFunc ;==>_start
Func _Exit()
Exit
EndFunc ;==>_Exit
LZ要求那么多,重写一个会更快…
中奖纪录保存在“中奖纪录.ini”里,不会删除原ini数据,不会重复。
各奖 ...
afan 发表于 2014-1-11 13:07 http://www.autoitx.com/images/common/back.gif
谢谢,afan总,可以不考虑中奖金额,只要分奖的等级,把人员抽出来即可。 回复 11# waxy
修改了下,把名单加在右边。至于奖金数,自己做减法吧 本帖最后由 waxy 于 2014-1-11 13:31 编辑
谢谢,afan总,可以不考虑中奖金额,只要分奖的等级,把人员抽出来即可。
waxy 发表于 2014-1-11 13:21 http://www.autoitx.com/images/common/back.gif
比如三等奖抽20人,二等奖抽10人,一等奖3人,其实现在还不知道公司的奖品是什么,只要把各等级的奖项上抽出来。当然各奖项的人数是可以指定的,每个奖项的人数也不一定的,不知道到时候会抽多少人。 比如三等奖抽20人,二等奖抽10人,一等奖3人,其实现在还不知道公司的奖品是什么,只要把各等级的奖项上 ...
waxy 发表于 2014-1-11 13:29 http://www.autoitx.com/images/common/back.gif
www378660084兄弟的代码比较接近我的想法,只是不需“奖金的金额”滚动。 本帖最后由 waxy 于 2014-1-11 13:42 编辑
回复 10# afan
再次感谢afan总,这个就比较不错了,但如果不删除“原始名单表”的已中奖人员,在第二次打开程序的时候应该还是会出现重复中奖的情况。
页:
[1]
2