StreamReader 仅显示所选文件中的最后一项

StreamReader only displaying last item in selected file

我对此很陌生,不知道我做错了什么。

它只处理和显示一行结果,但我需要它来处理和显示文件中的所有内容。可以选择的文件是 .txt 个文件,这些文件有多个学生姓名和 3 个测试分数,供程序计算和显示平均分和字母等级,它做得很好,但每个学生只显示一个学生文件,当文件中每个文件可能有 10 个名称时。

有问题的代码是:

//VARIABLES
string gLetter = null, studentName = null;
int test1 = 0, test2 = 0, test3 = 0, avg = 0;

private void processButton_Click(object sender, EventArgs e)
{
    try
    {
        getdata();
        calculatedata();
        displaydata();
        resetitems();
    }
    catch
    {
        MessageBox.Show("Error");
    }
}

private void getdata()
{
    try
    {

        StreamReader inputFile;
       
        if (openFile.ShowDialog() == DialogResult.OK)
        {
            inputFile = File.OpenText(openFile.FileName);
            while (!inputFile.EndOfStream)
            {
                studentName = inputFile.ReadLine();
                test1 = int.Parse(inputFile.ReadLine());
                test2 = int.Parse(inputFile.ReadLine());
                test3 = int.Parse(inputFile.ReadLine());
            }
        }
    }
    catch (Exception)
    {

        MessageBox.Show("Error");
    }
}

private void calculatedata()
{
    try
    {
        //calc avg
        avg = (test1 + test2 + test3) / 3;
        
        //find gLetter
        if (avg >= 90)
            gLetter = "A";
        else if (avg >= 80)
            gLetter = "B";
        else if (avg >= 70)
            gLetter = "C";
        else if (avg >= 60)
            gLetter = "D";
        else if (avg < 60)
            gLetter = "F";
    }
    catch
    {
        MessageBox.Show("Error");
    }
}

private void displaydata()
{
    try
    {
        listBox1.Items.Add(studentName + "\t" + avg.ToString("N2") + "\t" + gLetter);
    }
    catch (Exception)
    {
        MessageBox.Show("Error");
    }
}

private void resetitems()
{
    openFile.FileName = " ";
}

private void exitButton_Click(object sender, EventArgs e)
{
    try
    {
        Application.Exit();
    }
    catch
    {
        MessageBox.Show("Error");
    }
}

你的问题是,在方法 getData() 上,你正在读取 EOF 的所有行,但你必须将它添加到列表或调用方法内的其他方法,因为你一直在覆盖变量,并且你只得到最后一行