vb 编写一个抽奖程序

vb 编写一个抽奖程序,第1张

command1用来随机抽取,text2显示

text1用来自己输入

command2用来判断

基本思想:假设连续有a位相同,经过验证如果为真则得出结果,如果为假,则假设a=a-1位相同……直到a=0

也可以自己输入text2数据来检验程序

这段程序不局限于7位数

Private Sub Command2_Click()

Dim a$, b$, i%, j%, k%

a = CStr(Text1)

b = CStr(Text2)

For i = Len(a) To 1 Step -1

For j = 1 To Len(a) - i + 1

If Mid(a, j, i) = Mid(b, j, i) Then

k = i

Exit For

End If

Next

If k <> 0 Then Exit For

Next

Print k, Mid(a, j, i)'输出相同位数和相同数字

If len(a)+1-k>5 Then

MsgBox "对不起,无奖项"

Else

MsgBox Len(a) + 1 - k & "等奖"'判断奖项

End If

End Sub

Private Sub Command1_Click()

a = CStr(Text1)

Text2 = 10 ^ (Len(a) - 1) + Int(Rnd 09 10 ^ Len(a))

End Sub

不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xxbat,编码选ANSI@echo off&cd /d "%~dp0"

set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4

title %#% +%$%%$%/%_% %z%

set choice=3

for /f "delims=:" %%a in ('type "%~f0"^|findstr /n "^exit"') do set "last=%%a"

set n=0&for /f "tokens=1 delims=:" %%a in ('type "%~f0"^|more +%last%^|findstr /n ') do (

    set "_#%%~a=%%~b"&set "count=%%a"

)

set /a "m=0,n=0"

:loop

set /a "r=%random% %% count +1"

if not defined _$%r% (

    setlocal enabledelayedexpansion

    echo;!_#%r%!

    endlocal

    set /a "m+=1,n+=1"

    set _$%r%=1

)

if %n% geq %choice% (

    rem cls

    set n=0&pause

)

if %m% geq %count% (goto end)

goto loop

:end

echo;%#% +%$%%$%/%_% %z%

pause

exit

name1

name2

name3

name4

name5

name6

namen

16年年会抽奖网上有人对公司的抽奖结果又偏见,于是全员进行了抽奖代码的review,好像是爱奇艺公司的,下面用python来实现一个抽奖程序。

主要功能有

1从一个csv文件中读入所有员工工号

2将这些工号初始到一个列表中

3用random模块下的choice函数来随机选择列表中的一个工号

4抽到的奖项的工号要从列表中进行删除,以免再次抽到

初级版

这个比较简单,缺少定制性,如没法设置一等奖有几名,二等奖有几名

import csv#创建一个员工列表emplist = []#用with自动关闭文件with open('c://empscsv') as f:

empf = csvreader(f) for emp in empf:

emplistappend(emp)

print("进行一等奖抽奖,共有一名")import random#利用random模块的chice函数来从列表中随机选取一个元素e1 = randomchoice(emplist)#将中奖的员工从列表中剔除emplistremove(e1)

print('一等奖得主的号码是 %s' % e1)

print('进行三个二等奖的号码抽奖')

e2_1 = randomchoice(emplist)

emplistremove(e2_1)

e2_2 = randomchoice(emplist)

emplistremove(e2_2)

e2_3 = randomchoice(emplist)

emplistremove(e2_3)

print('获得3个二等奖是 %s %s %s',(e2_1,e2_2,e2_3))#下面依次类推可以设置三等奖的抽奖123456789101112131415161718192021222324

改进版

上面的那个初级版,假如要设置个三等奖一百名那么将要重新维护几百行代码,下面用比较高级点的办法实现

我们考虑用面向对象来实现,设计一个抽奖类,类中包含一个属性(号码来源),一个方法:产生所有抽奖层次指定个数的抽奖号码。

用到如下知识点:

1 csv模块部分函数用法

2 sys模块读取输入

3 random模块函数choice函数用法

4 列表和字典元素的添加、删除

6 for循环中range用法

7 类和面向对象

8 字符打印,print中的计算

9open中with

#!/usr/bin/python#coding=utf-8import csvimport sysimport random

reload(sys)

syssetdefaultencoding('utf8')#coding=utf-8print("开始进行抽奖")#定义个抽奖类,功能有输入抽奖级别和个数,打印出每个级别的抽奖员工号码class Choujiang:

#定义scv文件路径

def __init__(self,filepath):

selfempfile = filepath def creat_num(self):

emplist = [] with open(selfempfile) as f:

empf = csvreader(f) for emp in empf:

emplistappend(emp)

print('共有%s 人参与抽奖' % len(emplist))

levels = int(input('抽奖分几个层次,请输入:')) #定义一个字典

level_dict = {} for i in range(0,levels):

print('请输入当前获奖层次 %s 对应的奖品个数' % ( i + 1))

str_level_dict_key = sysstdinreadline()

int_level_dict_key = int(str_level_dict_key)

level_dict[i] = int_level_dict_key #循环完成后抽奖层次字典构造完毕

#进行抽奖开始

print('抽奖字典设置为: %s' % level_dict) for i in range(0,len(level_dict)):

winers = [] #产生当前抽奖层次i对应的抽奖个数

for j in range(0,int(level_dict[i])): #利用random模块中的choice函数从列表中随机产生一个

winer = randomchoice(emplist)

winersappend(winer)

emplistremove(winer)

print('抽奖层次 %s 下产出的获奖人员有:' % (i + 1 ))

print(winers)#类功能定义完毕,开始初始化并使用if __name__ == '__main__':

peoples = Choujiang('c://empscsv')

peoplescreat_num()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

该段程序在python 26 以上及 3中均可以运行,运行结果如下图:

Python 343 (v343:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v1600 64 bit (AMD64)] on win32

Type "copyright", "credits" or "license()" for more information>>> ================================ RESTART ================================>>> 开始进行抽奖

共有24790 人参与抽奖

抽奖分几个层次,请输入:2请输入当前获奖层次 1 对应的奖品个数1请输入当前获奖层次 2 对应的奖品个数3抽奖字典设置为: {0: 1, 1: 3}

抽奖层次 1 下产出的获奖人员有:

[['张三19826']]

抽奖层次 2 下产出的获奖人员有:

[['张三18670'], ['张三23235'], ['张三15705']]>>> 1234567891011121314151617

#include<stdioh>

#include <conioh>

#include <stdlibh>

#include <memoryh>

#include <stringh>

#include <timeh>

#define AWARDER_NUM 10

typedef struct tag_award

{

char ID[20];

char name[20];

char telNo[20];

char address[50];

}AWARDER;

AWARDER awarder = new AWARDER[AWARDER_NUM];

int first_award[1] = {-1};

int second_award[2] = {-1,-1};

int third_award[5] ={-1,-1,-1,-1,-1};

int awarder_num = 0;

void info_login()

{

if(awarder_num >= AWARDER_NUM)

{

AWARDER new_awarder = new AWARDER[awarder_num + AWARDER_NUM];

memcpy(new_awarder,awarder,awarder_numsizeof(AWARDER));

delete awarder;

awarder = new_awarder;

}

printf("身份z号:");

scanf("%s",awarder[awarder_num]ID);

printf("姓名:");

scanf("%s",awarder[awarder_num]name);

printf("电话号码:");

scanf("%s",awarder[awarder_num]telNo);

printf("家庭住址:");

scanf("%s",awarder[awarder_num]address);

awarder_num++;

}

void info_delete()

{

char name[20];

printf("输入您要删除的抽奖者的姓名:");

scanf("%s",name);

for(int i=0;i<awarder_num;i++)

{

if (strcmp(awarder[i]name,name) == 0)

{

printf("您选择删除的抽奖者的信息如下:\n");

printf("身份z号:%s\n",awarder[i]ID);

printf("姓名:%s\n",awarder[i]name);

printf("电话号码:%s\n",awarder[i]telNo);

printf("家庭住址:%s\n",awarder[i]address);

break;

}

}

if(i == awarder_num)

{

printf("没有找到您输入的抽奖者!\n");

}

else

{

char c;

printf("您确定要删除吗?(Y//N)");

fflush(stdin);

scanf("%c",&c);

if(c == 'Y' || c == 'y')

{

AWARDER new_award = new AWARDER[awarder_num-1];

if(i <= 0)

memcpy(new_award,awarder+1,sizeof(AWARDER) (awarder_num - 1));

else if( i >= awarder_num -1)

memcpy(new_award,awarder,sizeof(AWARDER) (awarder_num - 1));

else

{

memcpy(new_award,awarder,sizeof(AWARDER) i);

memcpy(new_award+i,awarder+i+1,sizeof(AWARDER) (awarder_num - i - 1));

}

awarder_num--;

delete awarder;

awarder = new_award;

}

}

}

void info_modify()

{

char name[20];

printf("输入您要修改的抽奖者的姓名:");

scanf("%s",name);

for(int i=0;i<awarder_num;i++)

{

if (strcmp(awarder[i]name,name) == 0)

{

printf("您选择的抽奖者的信息如下:\n");

printf("身份z号:%s\n",awarder[i]ID);

printf("姓名:%s\n",awarder[i]name);

printf("电话号码:%s\n",awarder[i]telNo);

printf("家庭住址:%s\n",awarder[i]address);

break;

}

}

if(i == awarder_num)

{

printf("没有找到您输入的抽奖者!\n");

}

else

{

printf("请输入该抽奖者的新信息:\n");

printf("身份z号:");

scanf("%s",awarder[i]ID);

printf("姓名:");

scanf("%s",awarder[i]name);

printf("电话号码:");

scanf("%s",awarder[i]telNo);

printf("家庭住址:");

scanf("%s",awarder[i]address);

}

}

bool check_over(int cur_award,int awarderNo)

{

if(awarderNo == 1)

{

if(cur_award == first_award[0])

return true;

}

else if(awarderNo <= 3)

{

if(cur_award == first_award[0])

return true;

for(int i=0;i<awarderNo-1;i++)

if(cur_award == second_award[i])

return true;

}

else if(awarderNo <= 8)

{

if(cur_award == first_award[0])

return true;

for(int i=0;i<2;i++)

if(cur_award == second_award[i])

return true;

for(i=0;i<awarderNo-3;i++)

if(cur_award == third_award[i])

return true;

}

return false;

}

void award()

{

if(awarder_num < 8)

{

printf("人数太少,请添加足够的人再抽奖!\n");

return;

}

srand((long)time(0));

char hit_id[20];

printf("\n开始抽第一等奖(1名),按任意键开始\n");

getch();

while(!kbhit())

{

first_award[0] = rand() % awarder_num;

memcpy(hit_id,awarder[first_award[0]]ID,18);

printf("\r ");

printf("\r %s",hit_id);

}

printf("\n\n开始抽第二等奖(2名)");

for (int i=0;i<2;i++)

{

printf("\n第%d个二等奖,按任意键开始\n",i+1);

getch();

while(!kbhit())

{

second_award[i] = rand() % awarder_num;

while(check_over(second_award[i],1+i))

second_award[i] = rand() % awarder_num;

memcpy(hit_id,awarder[second_award[i]]ID,18);

printf("\r ");

printf("\r %s",hit_id);

}

}

printf("\n\n开始抽第三等奖(5名)");

for (i=0;i<5;i++)

{

printf("\n第%d个三等奖,按任意键开始\n",i+1);

getch();

while(!kbhit())

{

third_award[i] = rand() % awarder_num;

while(check_over(third_award[i],3+i))

third_award[i] = rand() % awarder_num;

memcpy(hit_id,awarder[third_award[i]]ID,20);

printf("\r ");

printf("\r %s",hit_id);

}

}

}

void info_show()

{

printf("一等奖获得者:\n");

printf("\t身份z号:%s\n",awarder[first_award[0]]ID);

printf("\t姓名:%s\n",awarder[first_award[0]]name);

printf("\t电话号码:%s\n",awarder[first_award[0]]telNo);

printf("\t家庭住址:%s\n",awarder[first_award[0]]address);

printf("二等奖获得者:\n");

for (int i=0;i<2;i++)

{

printf("第%d个二等奖获得者:\n");

printf("\t身份z号:%s\n",awarder[second_award[i]]ID);

printf("\t姓名:%s\n",awarder[second_award[i]]name);

printf("\t电话号码:%s\n",awarder[second_award[i]]telNo);

printf("\t家庭住址:%s\n",awarder[second_award[i]]address);

}

printf("三等奖获得者:\n");

for (int i=0;i<5;i++)

{

printf("第%d个三等奖获得者:\n");

printf("\t身份z号:%s\n",awarder[third_award[i]]ID);

printf("\t姓名:%s\n",awarder[third_award[i]]name);

printf("\t电话号码:%s\n",awarder[third_award[i]]telNo);

printf("\t家庭住址:%s\n",awarder[third_award[i]]address);

}

}

/提示信息/

bool raise()

{

printf("\n请输入你需要的 *** 作代号:\n");

printf("\t1录入:完成抽奖者信息的输入;\n");

printf("\t2删除:完成抽奖者信息的删除;\n");

printf("\t3修改:允许对已经录入的数据重新进行编辑、修改;\n");

printf("\t4抽奖:开始抽奖!\n");

printf("\t5显示:显示所有中奖者的信息;\n");

printf("\t6退出。\n");

printf("==>");

int operate;

fflush(stdin);

scanf("%d",&operate);

switch(operate)

{

case 1:

info_login();

break;

case 2:

info_delete();

break;

case 3:

info_modify();

break;

case 4:

award();

break;

case 5:

info_show();

break;

case 6:

return false;

default:

break;

}

printf("\n *** 作完成。\n");

return true;

}

void main()

{

while(raise());

}

用datatxt文件保存以下内容:

13725528132 李桂荣

13725528131 李二来

13725528133 张荣刚

13725528130 荣南

13725528137 王三

13725528138 吴立

13725528139 郭德纲

13725528140 周星驰

13725528141 张曼玉

13725528142 张艺谋

13725528152 秦香莲

13725528162 潘金莲

13725528172 李大嘴

13725528182 展堂

//源代码如下

#include <stdioh>

#include <stdlibh>

#include <timeh>

#define MAX_NUM 9999

//定义保存人名和电话的数据结构

struct Person

{

char name[20];

char telno[15];

char award;

};

int num = 0; //统计人数

FILE fp; //文件指针

Person persons[MAX_NUM]; //定义数组

int awarder_1[1] = {-1}; //一等奖

int awarder_2[2] = {-1, -1}; //二等奖

int awarder_3[5] = {-1, -1, -1, -1, -1};//三等奖

//读取文件

void readdata()

{

int i = 0; //数组下标

Person person;

//文件打开

fp = fopen("datatxt", "r");

if (fp == NULL)

{

printf("打开文件datatxt失败!\n");

return;

}

//当文件不为空

while (!feof(fp))

{

num ++;

fscanf(fp, "%s", persontelno);

fscanf(fp, "%s", personname);

personaward = 'F';

persons[i++] = person;

}

}

//初始化标识

void init()

{

for(int i = 0; i < num; i++)

{

persons[i]award = 'F';

}

}

//显示单个中奖信息

void info( int i)

{

printf("手机号码: %s 姓名: %s\n", persons[i]telno, persons[i]name);

}

void main()

{

char again = 'Y';

//读取文件

readdata();

printf("简单抽奖程序\n");

srand((long)time(0));

while(again == 'Y' || again == 'y')

{

//初始化标识

init();

printf("\n开始抽第一等奖(1名),按任意键开始\n");

getchar();

awarder_1[0] = abs(rand() % num);

while (persons[awarder_1[0]]award == 'T')

{

awarder_1[0] = rand() % num;

}

persons[awarder_1[0]]award = 'T';

info(awarder_1[0]);

printf("\n开始抽第二等奖(2名)\n");

for (int i = 0; i < 2; i++)

{

printf("\n第%d个二等奖,按任意键开始\n", i+1);

getchar();

awarder_2[i] = rand() % num;

while (persons[awarder_2[i]]award == 'T')

{

awarder_2[i] = rand() % num;

}

persons[awarder_2[i]]award = 'T';

info(awarder_2[i]);

}

printf("\n\n开始抽第三等奖(5名)\n");

for (i = 0; i < 5; i++)

{

printf("\n第%d个三等奖,按任意键开始\n", i + 1);

getchar();

awarder_3[i] = rand() % num;

while (persons[awarder_3[i]]award == 'T')

{

awarder_3[i] = rand() % num;

}

persons[awarder_3[i]]award = 'T';

info(awarder_3[i]);

}

printf("\n是否重新开始抽奖(Y or N)\n");

again = getchar();

}

getchar();

return;

}

商场搞活动想要制作一个抽奖程序,今天我们就来看看使用vb60制作抽奖小程序的教程。

1、首先启动vb60,执行 文件-新建命令 ,d出新建工程对话框,在该对话框中选择 标准的exe 后点击打开按钮, 进入vb程序主界面。

2、在主界面中,按住鼠标左键按住窗体周围的任意一个小正方形进行拖拽, 调节窗体的大小 ,直至自己满意为止。

3、选择窗体,在其右边的属性中找到 boderstyle属性 ,设置 属性值为none, 接着再找到 startupposition属性 ,修改属性值为2-屏幕中心,再次修改 backcolor属性 值为淡**。

4、在工具箱里选择frame1,然后在窗体上进行拖拽,大小比窗体小一些,并调整其位置,使其居中,在属性窗口找到 backcolor属性 修改其属性值为粉红色,这样设置看起来就有层次感了。

5、在工具箱里双击标签控件两次,在frame1中显示两个标签控件, 修改lable1的caption属性名称为“幸运抽奖”, 修改label2的caption属性为“0”,同时修改这两个标签控件的backcolor属性为粉色,和 frame 控件保持一致。

6、分别选择 label1和label2 ,修改其font属性,打开字体对话框选择字体为王羲之书法字体,字形为常规,字号为三号,点击确定按钮。

7、选择工具箱里按钮控件,连续双击四次,在frame1上显示四个按钮,调整他们在frame1上的位置,使排列整齐,并依次修改四个按钮的caption属性,属性值依次为“ 号码滚动”、“号码停止”、“号码重置”、“退出程序”。

8、接着选择工具箱里计时器控件并双击,在frame1上显现出来该控件,该控件的作用很大,起到计时作用,同时需要注意的是在程序运行时控件是不显示出来的。

9、双击号码滚动控件,进入代码编辑区域,对象选择 command1, 过程选择click事件,在其输入代码为

Timer1Enabled = True

主要作用是触发器开始工作。

10、双击号码停止按钮,输入代码为 Timer1Enabled = False ,起到的作用是触发器停止工作。

11、双击号码重置按钮输入代码 为Label1Caption = "0", 起到的作用是每次号码滚动后都要重新置0让每次抽奖的起始都是一样的。并双击退出程序按钮输入代码为end。

12、代码timer1的代码区域,输入代码为

Randomize

Label1Caption = "幸运中奖的号码是:" & Int(Rnd 64 + 1)

主要功能是使用随机函数产生不同的随机数值

13、代码编程完成后就可以运行调试了,点击启动标志,进行编译,如果出现错误根据错误提示进行修改,并不断调试直至通过达到预期目的为止。提示出现要求对象说明控件名称有错误,修改过来,提示出现子程序未定义则说明函数不对,即系统不能认识的函数,进行修改。

14、调试无误后,你会看到号码在不停的滚动, 点击号码停止即可停止 ,点击号码重置就会出现号码为0,点击退出程序即可界面消失,这说明已经达到所预期的功能了。

15、执行文件-生成抽奖exe,这样经过编译就生成了可执行文件,这样就可以跨平台 *** 作了,不再依赖原始程序。接 着执行文件-保存命令, 把所有的源文件进行保存即可,以方便以后修改使用。

以上就是vb60中设计抽奖器的教程,希望大家喜欢,请继续关注我们。

以上就是关于vb 编写一个抽奖程序全部的内容,包括:vb 编写一个抽奖程序、bat设计要求:一个抽奖人数为80人的小公司抽奖、怎么用python写一个抽奖程序,是抽取图片或视频等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10065307.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存