当前位置:主页>仓库管理软件> 列表

2006-01-24 数据库中随机抽取记录的问题 大家 找金蝶财务软件使用

仓库管理软件版1楼: 兄弟们 年关到了 单位要搞抽奖 像电视上那样 700多人的编号在屏幕上面跳动
然后 停的时候 第一次要选出50名三等奖 第二次要选出30名二等奖 第三次要选出
10名一等奖 第四次的时候要选出1个特等奖 每人只能得一次奖 这个怎么解决啊
那位提供一个思路都好啊 多谢了 我考虑了先产生一个随机数 根据随机数取数据
库中对应的行 ... 只是 这样难免不重复啊 比如第一次 700 中取 50 就会可能
产生重复了 兄弟们 拜托帮忙想想 明天就要抽奖啦

2楼: 晕
随机数你都知道了
不就解决了
取出的数,就不要再取了 如金蝶财务软件使用

3楼: 将选中的做标识,其余的再选

4楼: procedure TForm1.FormCreate(Sender: TObject);
var
v_Str: TStrings;
v_Count: Integer;
v_Index: Integer;
begin
v_Str := TStringList.Create;
for v_Count := 1 to 1000 do
v_Str.Add(''编号'' + IntToStr(v_Count));

Randomize;

for v_Count := 1 to 50 do
begin
v_Index := Random(v_Str.Count - 1);
Memo1.Lines.Add(v_Str.Strings[v_Index]);
v_Str.Delete(v_Index);
end;

v_Str.Free;
end;

5楼: SiWeiLiuLang 兄 你真是天才啊 佩服 佩服 谢谢你啦

我先去试试 有什么疑问再请教你啊

Avalon 兄 你的办法还是没有排除重复的可能性 因为在540中取50 即使是随机数
也有很大可能会重复取到同一个数的 谢谢你 一起考虑一下 我们还可以继续改进的嘛

6楼: 你没注意 v_Str.Delete(v_Index);
这样几句话吗??

我把抽中的从待选链表中删除 后面再怎么随机也无法重复啊

仓库管理软件版7楼: 啊 不好意思 我看太快了 那句没看清 这样的话确实是不会重复了

[:)] 呵呵 多谢指教啊 我先去试试了

8楼: 窗体里面摆两个Memo,一个用来显示当前的获奖者的编号,一个用来显示已经本次之前获奖的编号!
procedure TForm1.Button1Click(Sender: TObject);
var
i, ID : integer;
begin
if Memo1.Lines.Count > 0 then
Memo2.Lines.AddStrings(Memo1.Lines);

Memo1.Lines.Clear;
while Memo1.Lines.Count < SpinEdit1.Value do
begin
ID := Trunc(Random(699)) + 1;
if (Memo1.Lines.IndexOf(IntToStr(ID)) = -1) and
(Memo2.Lines.IndexOf(IntToStr(ID)) = -1) then
Memo1.Lines.Add(IntToStr(ID));
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Clear;
end;

9楼: Avalon 兄 你的方法很好啊 很方便的 新年愉快啊
royal1442 兄 多次得到你的帮助 非常感谢你 呵呵 祝你拿个大红包
SiWeiLiuLang 兄 你的提议很好 给了我一个解决的思路 真是多谢了
多承以上诸位指点 问题得以顺利解决了 呵呵 谢谢上面几位兄台了 [8D]