求教简单的随机抽奖程序 ( 积分: 200 )

  • 主题发起人 主题发起人 whhnnn
  • 开始时间 开始时间
W

whhnnn

Unregistered / Unconfirmed
GUEST, unregistred user!
求教简单的随机抽奖程序:
单位要搞一个活动,领导非要学电视搞一个随机抽奖:
要求:
1:事先把单位的35人输入电脑。
2:他点击开始,在edit框中快速显示35人的姓名,点停止,显示中奖的一个人姓名
3:他再点开始,继续抽奖,但不能再抽到已经中奖的人。
最好不用数据库,希望高人用简单程序写, 但恳请说得详细点,小人愚昧!
 
如果不用数据库,首先有一点疑问,你的单位人员名单放到那里?
不过也可以不要数据库,你用一个数组来保存单位人员,然后在1--35范围内,随机取一个数字,然后根据该数值就可以在数组里取对应的人员信息显示出来;取随机数值语句如下:
i: integer;

Randomize;
i := Random(i);
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
Mans: TStringList;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
Mans := TStringList.Create;
for i := 0 to 24 do
begin
Mans.Add('员工' + IntToStr(i));
end;
//当然你可以先把员工姓名写在一个txt文件里 一个员工占一行 然后让Mans 去
//loadformfile
Randomize; //不加这个 你把你的名字放第一个 保证第一个中奖
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Mans.Free;
end;
//开始
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.CommaText := Mans.CommaText;
end;
//抽奖
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
i := Random(Mans.Count - 1);
ShowMessage('中奖为: ' + Mans.Strings);
Mans.Delete(i);
Memo1.Clear;
end;

end.
 
Avalon大侠:
“//当然你可以先把员工姓名写在一个txt文件里 一个员工占一行 然后让Mans 去
//loadformfile”

请高人详细讲一下 如何loadfromfile 文本:
谢谢!!
 
请教在点击开始后如何能做出姓名闪烁的效果?
 
把员工资料都写入文本 每人占一行
文本导入数组如下
var
FrmMain: TFrmMain;
array1:array[0..1000] of string;


var
tf1:TextFile;
str1:string;
i1:integer;
begin
if OpenDialog1.Execute then
begin
Memo_account.Lines.LoadFromFile(opendialog1.filename);
assignfile(tf1, opendialog1.FileName);
reset(tf1);
readln(tf1, str1);
i1:=0;
while str1 <> #$1A do
begin
if trim(str1)<>'' then
array1[i1]:=str1;
inc(i1);
readln(tf1, str1);
end;

end;
接下就是抽取随机数了
抽到了 可以把该员工从数组中移走 后面的员工资料位置提前一位
 
把员工资料都写入文本 每人占一行
加入存放在C:/111.txt

把这三行
for i := 0 to 24 do
begin
Mans.Add('员工' + IntToStr(i));
end;
改为
LoadFromFile('C:/111.txt');

置于你想名字闪烁 不知你是想如何闪烁
 
不过也可以不要数据库,你用一个枚举类来保存单位人员,然后在1--35范围内,随机取一个数字,然后根据该数值就可以在枚举里取对应的人员信息显示出来;取随机数值语句如下:
type edite=(张三,李四);
i: integer;

Randomize;
i := Random(type);
 
名字闪烁 就是希望做成所有名字不断滚动的效果,如按“开始”后在edit框中不断快速的轮流显示35个人的姓名,按“停止”随机抽取一个中奖人!
 
avalon 老大:
我运行LoadFromFile('C:/111.txt'); 语句时出错,
提示:[Error] Unit1.pas(38): Undeclared identifier: 'loadfromfile'
请指教?
 
读入文件失败
not '/' is '/'
loadfromfile('c:/111.txt')
 
写成 loadfromfile('c:/111.txt') 还是出错:
[Error] Unit1.pas(42): Undeclared identifier: 'loadfromfile'
 
Mans.LoadFromFile('C:/111.txt');
 
这个程序。。。。有个技术难点的是闪烁,做不好的话闪烁很难看,并且慢的很
 
好好的 给你的LoadFromFile(opendialog1.filename) 示例不试试
猪啊
 
[Error] Unit1.pas(42): Undeclared identifier: 'loadfromfile'
去死吧!你还要编程,连这个都写不出来,丢脸。
最好还是口头巴结领导比这个强多了。
如果你懒可以在baidu,google,查询一下。
事实证明你不仅懒,而且蠢。
骂得你不好意思问这种初级问题。
 
连初级问题都算不上的。 在dfw上看到这种帖子,有种被侮辱的感觉
 
1.35人的姓名设成数组变量;
2.放一个定时器,开始按钮和停止按钮控制他的开和关,运行一次显示一个人名,35人可循环 显示,定时器周期看运行效果社定.
 
{以下程序满足你的要求:
一个Label1 用于你要看到的闪烁效果,Button1用于开始,Button2用于停止, Memo1用于放要抽的名单, Memo2用于放抽出的名单,还要高置两个全程变量sb,i 见程序,程序调试通过
下载看看:http://okok777.ys168.com/ }
unit Unit1;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
sb:Boolean; //设置全程变量
i:integer;
implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);//开始抽奖
begin
sb:=True;
Randomize;//随机初始化
while sb do
begin
i:=Random(memo1.Lines.Count);
label1.Caption:=memo1.Lines;
label1.Update;
Application.ProcessMessages;
sleep(20);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);//停
begin
sb:=False;
memo2.Lines.Add(label1.Caption);
memo1.Lines.Delete(i);
end;
end.
 
这种提问 好象是直接把自己的工作交给别人去做了
就这个感觉
估计楼主还没自己动过脑吧
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部