0

正在向论坛寻求帮助的高级 VB 课程的大学生 - 我找到了一些代码示例,但很难弄清楚这一点.. 任何和所有帮助都表示赞赏:)

此应用程序导入存储在 bin 中的 .txt 文件,名为 data.txt ..20 记录的调试文件夹,每条记录 3 行,最后一行是学生的成绩,我需要通过将每个记录的成绩相加并除以来平均成绩20 然后显示在显示平均值的 lstbox 上。

到目前为止我有..

    Dim objReader As IO.StreamReader
    Dim intFill As Integer
    Dim intCount As Integer = 0
    Dim intAverage As Integer
    Dim strLocationAndNameOfFile As String = "data.text"

    If IO.File.Exists(strLocationAndNameOfFile) = True Then
        objReader = IO.File.OpenText(strLocationAndNameOfFile)
    Else
        MsgBox("The file is not available. Restart the program when the file is avilable", , "Error")
        Me.Close()
    End If

    If IO.File.Exists(strLocationAndNameOfFile) Then
        objReader = IO.File.OpenText(strLocationAndNameOfFile)
        Do While objReader.Peek <> -1
            _strName(intCount) = Convert.ToString(objReader.ReadLine())
            _strItemID(intCount) = Convert.ToString(objReader.ReadLine())
            _intGrade(intCount) = Convert.ToInt32(objReader.ReadLine())
            intCount += 1
        Loop
        objReader.Close()
    End If

    For intFill = 0 To (_strName.Length - 1)
        *'intAverage = SUM OF ALL AVERAGES / LENGTH OF ARRAY -1*
        Me.lstAverage.Items.Add(intAverage.ToString())
4

2 回答 2

1

在循环阅读成绩时总结它们

    Dim total as Integer
    Do While objReader.Peek <> -1
        _strName(intCount) = Convert.ToString(objReader.ReadLine())
        _strItemID(intCount) = Convert.ToString(objReader.ReadLine())
        _intGrade(intCount) = Convert.ToInt32(objReader.ReadLine())
        total += _intGrade(intCount)
        intCount += 1
    Loop

然后除以 20 或 _intGrade.Length

    intAverage = total / _intGrade.Length
于 2013-03-08T21:36:22.180 回答
1

这么多问题,尽管我讨厌做别人的作业我想让你看看这会是什么样子

Public Function GetAverageGrade(ByVal filename As String) As Double
    Dim totalGrade As Integer = 0
    Dim lineCount As Integer = 0
    Dim line As String

    Using rdr As New IO.StreamReader(filename)
       While (line = rdr.ReadLine()) IsNot Nothing
           lineCount += 1
           If lineCount Mod 3 = 0 Then totalGrade += Convert.ToInt32(line)
       End While
    End Using
    Return totalGrade / (lineCount / 3.0)
End Function

当然,您可能希望利用这些数据做更多事情,而不仅仅是获得平均成绩。因此,一个更好的选择是构建代码,将其作为一组记录全部读取:

Public Class GradeItem
    Public Property Name As String
    Public Property Item As String
    Public Property Grade As Integer
End Class

接着

Public Iterator Function ReadGradeItems(ByVal fileName As String) As IEnumerable(Of GradeItem)
    Using rdr As New IO.StreamReader(fileName)
        While rdr.Peek() <> -1
            Yield New GradeItem With {.Name = rdr.ReadLine(), .Item= rdr.ReadLine(), .Grade = Convert.ToInt32(rdr.ReadLine()}
        End While
    End Using
End Function

现在把它们放在一起:

Dim grades As IEnumerable(Of GradeItem) = ReadGradeItems("data.text")

lstAverage.Items.Add(grades.Select(Function(g) g.Grade).Average())
于 2013-03-08T22:06:47.580 回答