Vba Visual Basic学校项目

Vba Visual Basic学校项目,vba,Vba,VisualBasic不是我的主要语言,我试图帮助我的儿子完成一个学校项目,但失败惨重。假设程序读取一个文件,创建一个ID并将其保存到磁盘。除了最后两个程序外,一切正常,确定最短游泳时间,但我尝试将用户的名字分配给最快的游泳运动员,并在最后一个程序中显示获胜者和最小时间 它正在读取的文件只是一个文本文件,格式为名字、姓氏、年龄和性别。 我最快的游泳者总是向该方法传递空引用。任何帮助都将不胜感激 这是整个计划: Public Class Form1 Private Sub StartBtn

VisualBasic不是我的主要语言,我试图帮助我的儿子完成一个学校项目,但失败惨重。假设程序读取一个文件,创建一个ID并将其保存到磁盘。除了最后两个程序外,一切正常,确定最短游泳时间,但我尝试将用户的名字分配给最快的游泳运动员,并在最后一个程序中显示获胜者和最小时间

它正在读取的文件只是一个文本文件,格式为名字、姓氏、年龄和性别。 我最快的游泳者总是向该方法传递空引用。任何帮助都将不胜感激

这是整个计划:

Public Class Form1
    Private Sub StartBtn_Click(sender As Object, e As EventArgs) Handles StartBtn.Click
        Dim firstName(5) As String
        Dim surname(5) As String
        Dim age(5) As String
        Dim gender(5) As String
        Dim swimID(5) As String
        Dim time(5) As Single
        Dim fastestSwimmer As String
        Dim minTime As Single

        'Call Procedures
        Call GetDetails(firstName, surname, age, gender)
        Call CalcSwimID(swimID, firstName, surname, age, gender)
        Call RaceTimes(time, firstName, surname)
        Call CalcWinner(time, firstName, fastestSwimmer, minTime)
        'Call WinnersCircle(fastestSwimmer, minTime)
    End Sub

    'Get details from reading a file
    Private Shared Sub GetDetails(ByVal firstName As String(), ByVal surname As String(), ByVal age As String(), ByVal gender As String())
        Dim filename As String
        filename = "C:/Users/rk/source/repos/CleanFolder/SwimersChampionShip/details.txt"
        FileOpen(1, filename, OpenMode.Input)
        For counter = 1 To 5
            Input(1, firstName(counter))
            Input(1, surname(counter))
            Input(1, age(counter))
            Input(1, gender(counter))
        Next
        FileClose(1)
    End Sub

    'Create a Swimmers ID and save it back to disk
    Private Shared Sub CalcSwimID(ByRef swimID As String(), ByRef firstName As String(), ByRef surname As String(), ByRef Age As String(), ByRef gender As String())
        Dim genderAscii(5) As Integer
        Dim firstCharacter(5) As String
        For counter = 1 To 5
            firstCharacter(counter) = firstName(counter).Substring(0, 1)
            genderAscii(counter) = Asc(gender(counter))
            swimID(counter) = genderAscii(counter) & "-" & firstCharacter(counter) & surname(counter) & "-" & Age(counter)
        Next
        Dim savedFile As String
        savedFile = ("C:/Users/rk/source/repos/CleanFolder/SwimersChampionShip/competitorsID.txt")
        FileOpen(1, savedFile, OpenMode.Output)
        For counter = 1 To 5
            PrintLine(1, swimID(counter))
        Next
        FileClose(1)

    End Sub
    ' Gets the race times by input box
    Private Shared Sub RaceTimes(ByRef time As Single(), ByRef firstName As String(), ByRef surname As String())

        For counter = 1 To 5
            time(counter) = InputBox(" Please enter the swim times for " & firstName(counter) & " " & surname(counter))
        Next
        'MsgBox(time)

    End Sub
    'This will calculate the winner
    Private Sub CalcWinner(ByRef time As Single(), ByRef firstName As String(), ByVal fastestSwimmer As String, ByRef minTime As Single)
        'MsgBox(time(1))
        minTime = time(1) And fastestSwimmer = firstName(1)
        For counter = 2 To 5
            If time(counter) < minTime Then
                minTime = time(counter) And fastestSwimmer = firstName(counter)
            End If
        Next
        'MsgBox(minTime)
    End Sub

    ' Displays winner of the race to the winners circle, Gold medal will be sent by mail!
    Private Sub WinnersCircle(ByRef fastestSwimmer As String, ByRef minTime As Single)
        ListBox1.Items.Add("Congradulations " & fastestSwimmer & " you are the winner your time was " & minTime & " seconds. A new world record!")
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Me.Close()
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged

    End Sub
End Class
公共类表单1
私有子StartBtn_Click(发送者作为对象,e作为事件参数)处理StartBtn。单击
Dim firstName(5)作为字符串
模糊姓氏(5)作为字符串
模糊年龄(5)作为字符串
模糊性别(5)作为字符串
作为字符串的Dim swimID(5)
变暗时间(5)为单个
最快的游泳运动员
将minTime变为单身
"呼叫程序",
Call GetDetails(名字、姓氏、年龄、性别)
调用CalcWimid(swimID、名字、姓氏、年龄、性别)
通话时间(时间、名字、姓氏)
呼叫CalcWinner(时间、名字、最快游泳运动员、分钟)
'呼叫WinnersCircle(最快的游泳运动员,minTime)
端接头
'从读取文件中获取详细信息
私有共享子GetDetails(ByVal firstName为String()、ByVal姓氏为String()、ByVal age为String()、ByVal gender为String())
将文件名设置为字符串
filename=“C:/Users/rk/source/repos/CleanFolder/SwimersChampionShip/details.txt”
FileOpen(1,文件名,OpenMode.Input)
对于计数器=1到5
输入(1,名字(计数器))
输入(1,姓氏(计数器))
输入(1,年龄(计数器))
输入(1,性别(柜台))
下一个
文件关闭(1)
端接头
'创建游泳者ID并将其保存回磁盘
私有共享子CalcSwimID(ByRef swimID为String(),ByRef firstName为String(),ByRef姓氏为String(),ByRef Age为String(),ByRef gender为String())
Dim genderAscii(5)作为整数
将第一个字符(5)设置为字符串
对于计数器=1到5
firstCharacter(计数器)=firstName(计数器)。子字符串(0,1)
性别(计数器)=Asc(性别(计数器))
swimID(计数器)=genderAscii(计数器)&“-”和第一个字符(计数器)&姓氏(计数器)&“-”和年龄(计数器)
下一个
将savedFile设置为字符串
savedFile=(“C:/Users/rk/source/repos/CleanFolder/SwimersChampionShip/competitorsID.txt”)
文件打开(1,savedFile,OpenMode.Output)
对于计数器=1到5
打印行(1,swimID(计数器))
下一个
文件关闭(1)
端接头
'通过输入框获取比赛时间
专用共享子比赛时间(ByRef time为Single(),ByRef firstName为String(),ByRef姓氏为String())
对于计数器=1到5
时间(计数器)=输入框(“请输入“&firstName(计数器)”和“&firstName(计数器)”的游泳时间)
下一个
'MsgBox(时间)
端接头
这将计算出获胜者
Private Sub-CalcWinner(ByRef-time为Single(),ByRef-firstName为String(),ByVal-fastestswimer为String,ByRef-minTime为Single)
'MsgBox(时间(1))
minTime=时间(1)和最快的游泳者=名字(1)
对于计数器=2到5
如果时间(计数器)
在您使用的CalcWinner方法中,以错误的方式:

Private Sub CalcWinner(ByRef time As Single(), ByRef firstName As String(), ByVal 
fastestSwimmer As String, ByRef minTime As Single)
    'MsgBox(time(1))
    minTime = time(1) 
    fastestSwimmer = firstName(1)
    For counter = 2 To 5
        If time(counter) < minTime Then
            minTime = time(counter) 
            fastestSwimmer = firstName(counter)
        End If
    Next
    'MsgBox(minTime)
End Sub

VB将添加第一次(时间(1))和最快的游泳者=firstName(1),这是0,因为最快的游泳者不等于firstName(1),因此计算结果为0

非常感谢。工作得很好。我的儿子谢谢你们,他可能会通过。最后一个难题是如何找出女性游泳运动员和男性游泳运动员的计数方法。我有三个女游泳运动员,但在点击msgBox 3次后,它给了我她们。像这样的子调用
调用CalcSwimID(swimID,firstName,姓氏,年龄,性别)
1)不需要调用,2)不需要()即使用CalcSwimID swimID,firstName,姓氏,年龄,性别
minTime = time(1) And fastestSwimmer = firstName(1)