注册 登录
编程论坛 VB6论坛

关于随机摇号功能

godkong 发布于 2023-03-29 16:05, 1628 次点击
求VB程序,实现以下功能:
1、把一组要摇号的姓名放在一个1.TXT文档中,
2、读取1.TXT文件的姓名,点击按钮,随机排序,并加序号,显示在TEXT上。
请问大神,这样的话程序怎么写?
9 回复
#2
阳光上的桥2023-03-29 16:30
这个程序可以分成三部分:

第一部分代码,打开1.txt文件,把所有行读入数组中。使用VB的动态数组功能,每读入一行后ReDim Preserve扩展数组,添加行到数组末尾。简单的办法也可以直接定义个较大的数组。

第二部分,对数组进行随机乱排。简单的算法用For循环对数组的每一项(i),循环中产生一个随机数(j),如果i<>j就交换数组的两项。

第三部分,把数组的内容显示出来。可以使用Join数组为字符串,赋值给控件。

建议你试着自己写这程序,遇到具体的问题再详细讨论,百度能搜到完整代码,但是建议最好不用那样做,对提高编程能力的好处不大。
#3
wds12023-03-30 08:07
如果只是为了实现功能,那就ChatGPT吧,下列示例ChatGPT给出的代码:
Private Sub Command1_Click()
    Dim arrNames() As String
    Dim i As Integer
    Dim strName As String
    Dim intIndex As Integer
    Dim strOutput As String
   
    'Read names from file
    Open "1.TXT" For Input As #1
    Do Until EOF(1)
        Line Input #1, strName
        If strName <> "" Then
            ReDim Preserve arrNames(i)
            arrNames(i) = strName
            i = i + 1
        End If
    Loop
    Close #1
   
    'Randomly sort names
    Randomize
    For i = LBound(arrNames) To UBound(arrNames)
        intIndex = Int((UBound(arrNames) - i + 1) * Rnd + i)
        strName = arrNames(i)
        arrNames(i) = arrNames(intIndex)
        arrNames(intIndex) = strName
    Next i
   
    'Display names with index
    For i = LBound(arrNames) To UBound(arrNames)
        strOutput = strOutput & i + 1 & ". " & arrNames(i) & vbCrLf
    Next i
    Text1.Text = strOutput
End Sub
#4
风吹过b2023-03-30 14:47
建议这节增加一行命令
    'Read names from file
    Open "1.TXT" For Input As #1
    Do Until EOF(1)
        Line Input #1, strName
        strName = trim(strName)      '清前后空格,防出错
        If strName <> "" Then
            ReDim Preserve arrNames(i)
            arrNames(i) = strName
            i = i + 1
        End If
    Loop
    Close #1
#5
yuma2023-04-03 19:12
以下是一个简单的VB程序,实现了随机摇号的功能:

在窗体上添加一个CommandButton和一个TextBox控件。

在CommandButton的Click事件中添加以下代码:


Private Sub Command1_Click()
    '读取1.TXT文件中的姓名
    Dim names() As String
    Dim i As Integer
    Open "1.TXT" For Input As #1
    Do Until EOF(1)
        ReDim Preserve names(i)
        Line Input #1, names(i)
        i = i + 1
    Loop
    Close #1
   
    '随机排序
    Randomize
    Dim j As Integer
    Dim temp As String
    For i = 0 To UBound(names)
        j = Int(Rnd() * (UBound(names) - i + 1)) + i
        temp = names(i)
        names(i) = names(j)
        names(j) = temp
    Next i
   
    '显示结果
    Text1.Text = ""
    For i = 0 To UBound(names)
        Text1.Text = Text1.Text & i + 1 & ". " & names(i) & vbCrLf
    Next i
End Sub

这个程序首先读取1.TXT文件中的姓名,然后使用随机排序算法将姓名随机排序,最后将排序后的结果显示在TextBox控件上。需要注意的是,这个程序假设1.TXT文件中每行只有一个姓名,如果每行有多个姓名,需要稍作修改。
#6
csnpx2023-04-09 14:44
#7
godkong2023-04-10 10:48
谢谢各位大神,我试了下各位的程序,发现还有个问题,不知道怎么解决,我放另外一个贴上。
#8
godkong2023-04-10 11:03
只有本站会员才能查看附件,请 登录

就是每个名字一行,不会按照TEXT组件的宽度,算出大概一行放多少个名字,然后每行就设定放这么多个名字。而是每行一个名字,我摇号名字多的时候,就需要TEXT很高的高度
#9
zwstwqq2023-06-25 21:23
#10
cwa99582023-06-26 08:19
你算他一组名字10个字符,包括序号,按照文本框宽度,固定排列即可。
1