2013-05-04 153 views
0

我想我会发布我正在使用的整个程序。我已经完成了Main方法。我只需要创建3个类。 FileRoutines,学生和学生。 FileRoutine是我遇到的主要问题。它有2个公共课程。 LoadStudents和LoadAssignments。加载学生应该读取学生输入文件中的所有行,从每行创建一个Student对象,并返回一个包含Student对象数组的Student对象。加载分配应读取分配输入文件中的所有行,并根据学生编号将每个分配与相应的学生相关联。 2.文本文件看起来像这样:将.txt文件处理成数组,并处理数组数据

Students.txt

122338 Weltzer Teresa 
123123 Wang Choo 
123131 Adams James 
123132 Binkley Joshua 
123139 Howard Tyler 
123160 King Alma  

Assignments.txt

122338 HW1 93 0.05 
123123 HW1 100 0.05 
123131 HW1 90 0.05 
123132 HW1 85 0.05 
123139 HW1 89 0.05 
123160 HW1 90 0.05 
122338 Quiz1 94 0.08 
123123 Quiz1 83 0.08 
123131 Quiz1 93 0.08 
123132 Quiz1 72 0.08 
123139 Quiz1 0 0.08 
123160 Quiz1 63 0.08 
122338 HW2 70 0.05 
123123 HW2 95 0.05 
123131 HW2 100 0.05 
123132 HW2 82 0.05 
123139 HW2 73 0.05 
123160 HW2 81 0.05 
122338 HW3 87 0.05 
123123 HW3 98 0.05 
123131 HW3 87 0.05 
123132 HW3 65 0.05 
123139 HW3 55 0.05 
123160 HW3 81 0.05 
122338 Test1 86 0.15 
123123 Test1 82 0.15 
123131 Test1 92 0.15 
123132 Test1 78 0.15 
123139 Test1 67 0.15 
123160 Test1 74 0.15 

我真的只是想弄清楚如何处理这些2个文件,并进行他们做我想做的事。我被告知要使用

string[] lines = File.ReadAllLines(path) 

读取线,并

string[] data = line.Split('\t') 

到制表符分隔行分割。

我不是要求某人为我写这个程序。只是为了一些帮助。朝着正确的方向前进。我真的通过看到一些东西来学习,而且我没有真正看到任何人做了像我被指示这样做的方式。如果你们有任何问题要问,请随意!

在此先感谢。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 


namespace Project2 
{ 
    class Program 
    { 
     static void Main() 
     { 
      // Change the path to match where you save the files. 
      //const string STUDENT_FILE = @"C:\Temp\Students.txt"; 
      //const string ASSIGNMENT_FILE = @"C:\Temp\Assignments.txt"; 
      const string STUDENT_FILE = @"C:\Users\PleaseGod\Desktop\Project 2\Students.txt"; 
      const string ASSIGNMENT_FILE = @"C:\Users\PleaseGod\Desktop\Project 2\Assignments.txt"; 

      // First, load the student and assignment data from text files. 
      Students students = FileRoutines.LoadStudents(STUDENT_FILE); 
      FileRoutines.LoadAssignments(ASSIGNMENT_FILE, students); 

      // Next, display information about the students and grades. 
      Console.WriteLine("The students and their average are:"); 
      foreach (Student student in students.StudentList) 
      { 
       Console.WriteLine("{0,-20}\t{1:N2}", student.FullName, student.GetAverage()); 
      } 

      DisplayStudentsByGrade(students, LetterGrade.A); 
      DisplayStudentsByGrade(students, LetterGrade.B); 
      DisplayStudentsByGrade(students, LetterGrade.C); 
      DisplayStudentsByGrade(students, LetterGrade.D); 
      DisplayStudentsByGrade(students, LetterGrade.F); 

      Student[] studentsWithHighestAverage = students.GetStudentsWithHighestAverage(); 
      Console.WriteLine("\nThe students with the highest average are:"); 
      foreach (Student student in studentsWithHighestAverage) 
      { 
       Console.WriteLine("{0,-20}\t{1:N2}", student.FullName, student.GetAverage()); 
      } 

      Console.WriteLine("\nThe class average is: {0:N2}", students.GetClassAverage()); 

      Console.WriteLine("\nThe class average on HW2 is: {0:N2}", students.GetAverageGradeOnAssignment("HW2")); 

      Console.ReadLine(); 
     } 

     private static void DisplayStudentsByGrade(Students students, LetterGrade letterGrade) 
     { 
      Student[] studentList = students.GetStudentsByGrade(letterGrade); 

      Console.WriteLine("\nThe following students have a grade of {0}:", letterGrade); 
      if (studentList.Length > 0) 
      { 
       foreach (Student student in studentList) 
       { 
        Console.WriteLine("{0,-20}\t{1:N2}", student.FullName, student.GetAverage()); 
       } 
      } 
      else 
      { 
       Console.WriteLine("<none>"); 
      } 
     } 
    } 
} 
+1

有什么实际问题? – devdigital 2013-05-04 13:20:22

+0

您能否重新解释一下这个问题,让您的需求更加明显?这里有太多的信息。正如我所看到的,你已经通过使用File.ReadAllLines&String.split得到了答案。这是一种方法。你想通过这个问题获得更多的成就吗? – Buddha 2013-05-04 13:26:31

+0

我真的不完全确定一个问题。我在我的学校参加了一个C#课程,在整个学期中途我收到了一个非常糟糕的病毒。我已经失败了,但是我只是回顾一些材料,看看我是否能够在下一次我明白如何去做这些事情。但是如果我想问一个问题,那我应该如何开始所有这些? – 2013-05-04 13:47:05

回答

1

推在正确的方向......这里有一个很好的解决方案来解析文件,并使用LINQ创建对象名单。 从文件中获取您的学生名单,你可以这样做:

public List<Student> LoadStudents(string STUDENT_FILE) 
{ 
    var parseQuery = //read all lines from a file 
       from line in File.ReadAllLines(STUDENT_FILE) 
       //split every line on Tab delimiter 
       let split = line.Split(new[] {'\t'}) 
       //create new Student object from string array created by split for every line 
       select new Student() 
       { 
        ID = split[0], 
        FirstName = split[1], 
        LastName = split[2] 
       }; 

    //execute parseQuery, your student objects are now in List<Student> 
     var studentList = parseQuery.ToList(); 
     return studentList; 
} 
+0

您有没有办法以更持久的方式与您交谈?像Skype,还是什么?我不介意快速导师,或有人帮助我,我实际上可以有所了解。 – 2013-05-04 13:45:10

+0

我想这不可能,哈哈。 – 2013-05-04 14:23:19

+0

@AdamCole对不起。我确实试图在开发者社区做出贡献,并在我的空闲时间回答一些问题。但是我的日常工作和时间是有限的。你可以尝试在这里聊天,并获得更多的辅导。 – jure 2013-05-04 14:41:21

0

它不清楚你想达到什么样的,但是从我了解你想知道如何读文件,那么你可以使用StreamReader。这里有很多关于这个话题的问题,你可以搜索如何阅读txt文件。

+0

我已经看到,有很多方法可以阅读它,但有些暗示这样做的说明。这是一个基本的C#类/书,所以我认为在分支出来之前以这种方式学习它会更好。 – 2013-05-04 13:48:46

+0

如果你想知道如何使用ReadAllLines这里的例子 [MSDN ReadAllLines](http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx)旁边试着具体说明,明确而具体地说你想做但你不知道如何实现它 – ma1169 2013-05-04 15:52:59

0

试着这么做:

class Student 
{ 
    public string mNumber { get; set; } 
    public string mFirstName { get; set; } 
    public string mLastName { get; set; } 

    public Student(string nr, string fName, string lName) 
    { 
     mNumber = nr; 
     mFirstName = fName; 
     mLastName = lName; 
    } 
} 

和环比数据,如:

foreach (string val in data) 
{ 
    string[] valArr = val.Split(' '); 
    Student st = new Student(valArr[0], valArr[1], valArr[2]); 
}