2012-08-11 86 views
0

我是一个自学成才的开始程序员。我设计了一个赛马项目,在每个比赛中都会读入一匹有关每匹马的信息的文件,其中包括有关该马前10场比赛的信息。然后将信息输出为可读格式,类似于赛马形式或程序。如何正确设置我的程序的类设计(C#.Net)

例如,8月10日周六在丘吉尔唐斯举行的比赛中,共有9场比赛和8匹马。所以,当天的csv文件将包含72匹马。每匹马也会有最近10场比赛的统计数据。

我目前所做的是在csv文件中读入列表。然后,我将列表中包含的信息转移到马物品列表中,马物品基本上存储了每匹马的所有信息。

我觉得我从使用类来存储所有信息的唯一好处是,操作数据更容易,因为我不必记住索引。

我想知道是否有更好的方法来设计这个程序?任何见解?

+0

设计的一个关键要素是你需要知道你的程序将做什么。如果你所做的只是将文本文件中的数据读入内存中,那么存储它的方式并不重要。程序的用户应该如何与数据交互如果只是计算信息并返回结果,它将执行什么样的计算?这些都会帮助你确定你的设计。由于我们不知道这一点,所以我们很难说。 – 2012-08-11 01:20:04

+0

它读入一个文件,计算过去所有赛马的速度等级,然后显示速度等级以及所有其他未计算的信息,如raceDate,finalTime,racePurse,finishPosition等。我正在使用Crystal Reports显示信息。用户不会与数据交互,它是只读的。 – user1230593 2012-08-11 21:38:22

回答

4

如果您想想这里发生的事情,您可以在特定的比赛中参加马匹,比赛和特定马匹的表现。

所以,如果你允许你的类设计遵循这一点,你可能有这样的事情:

public class Horse 
{ 
    public string Name { get; set; } 
    public Gender Gender { get; set; } 
    public Breed Breed { get; set; } 
    public DateTime WhenBorn { get; set; } 
    // etc... 

    public TimeSpan GetAge() 
    { 
     return DateTime.Now - WhenBorn; 
    } 
} 

public class Race 
{ 
    public string Venue { get; set; } 
    public DateTime WhenStarted { get; set; } 
    public DateTime WhenFinished { get; set; } 
    // etc... 
} 

public class HorseRace 
{ 
    public Race Race { get; set; } 
    public Horse Horse { get; set; } 
    public int? PlaceFinished { get; set; } // null if did not finish 
    public string JockeyName { get; set; } 
    public double HorseWeighIn { get; set; } // weight of horse at time of race 
    public double JockeyWeighIn { get; set; } // weight of jockey at time of race 
    // etc... 
} 

public enum Gender 
{ 
    Colt, 
    Filly 
} 

public enum Breed 
{ 
    // fill in breeds here 
} 

一旦你有一个一流的设计,你喜欢,你可以开始思考如何将数据存储到让它最容易进入你的课堂。 Horses.csv,Races.csv,HorseRaces.csv,而不是一个巨大的csv文件,有很多重复的数据,你可以为每个类有一个单独的文件。最终,您可能希望从CSV升级到小型的基于文件的数据库。最终,你想有三个列表:HorsesRacesHorseRaces。要显示这些列表,您可以遍历您的HorseRaces,并轻松获取您需要的所有数据,只需使用HorseRace的属性以及后续的属性RaceHorse。例如,horseRace.Horse.Name