题意:
分析男子冰球比赛的结果
解析:
编写一个程序,接受三个参数,第一个参数是作为输入文件的冰球比赛信息,第二个参数是输出文件的名称,第三个参数是打印哪个数据表(--team_stats, --player_stats, or --custom_stats)。
其中:--team_stats的表格是按照队伍胜率的百分比进行从上到下的排序,如果胜率相同则按总进球最多进行排序,若还相等则按照球队的字母进行排序。该表格的每一行包括队伍的名字、胜利、失败、平局、胜率、进球、犯规。
--player_stats的表格是球员的信息,包括名字、所属队伍、进球、助攻、犯规这些信息,并且按照进球加上助攻的总计进行排序,如果相等按姓名排序。
--custom_stats表格是自己设计的一系列表格,需要按前两个表格的格式输出一些信息。并且写一个README对这些信息进行描述:这些数据反应了什么问题,为什么需要这些数据等。
注:在输入文件中,人名和球队名中的空格以下划线替代,在处理输入时最好使用">>"的流输入,而不是getline或者getc,不应该以文件的空格、制表符或是换行符去判断输入。
涉及知识点:
文件读取,流,数据处理
更多可加微信讨论
微信号:WHJ980416
In this assignment you will parse and organize the game results from NCAA Division I Eastern College Athletic Conference men’s ice hockey. Many of you may already be familiar with the basics of this sport – it is one of Rensselaer’s most popular athletics events. We summarize everything you need to know to complete this assignment. Please read the entire handout before starting to code the assignment.
Ice Hockey
Here’s a crash course on the rules of ice hockey: Each game between two teams consists of three periods of
twenty minutes each. Six players from each team are allowed on the ice at any one time. The players work
together to score a goal by hitting the puck into the opponents’ net. Usually one of the six players on each
team is designated as the goalie to guard the net. When a goal is scored, one member of the team is credited
with the score, and up to two other players are credited with assisting in the score. There are many rules
and restrictions on the details of play. If these rules are violated the offending player/team is given a penalty
of a two, five, or ten minute duration. During the penalty time period, the offending player must sit out
(in the penalty box) and that team plays short-handed (with 5 players instead of 6). The other team has an
advantage during this time – the so-called power play.
If the score is tied at the end of the 3 regular periods, the teams will play an additional overtime period. Play ends with the first goal scored in overtime (sudden death), and that team wins. If neither team scores during overtime, we will consider the result of this game a tie. Note: Normally the game proceeds to a shootout to resolve the tie. For more information see: http://en.wikipedia.org/wiki/Ice_hockey and http://en.wikipedia.org/wiki/ECAC_Hockey.
You will parse an input file which contains the details for one or more hockey games. The data was originally
obtained from: http://collegehockeystats.net/. The data has been pre-processed to make your work a
bit simpler. Here is a partial input file for your program:
Each game begins with the date and the names of the two teams – the away team is listed first, followed by the home team. The details of the three periods (and overtime if necessary) begin with a label for the period followed by information about each goal scored and penalty assessed in that period.
For a goal, we are given the time, team, the keyword “goal”, the name of the player who scored the goal, and then in parentheses the names of zero, one, or two teammates who assisted in scoring the goal. The format of time is mm:ss (minutes and seconds) since the start of that period (regular periods are 20 minutes long). For a penalty, we are given the time, team, the keyword “penalty”, the name of the player who violated the rule, the length of time the team will have to play with one fewer players on the ice, and a description of the violation. At the end of the details the final total number of goals for each team is listed. In this game, Yale scored more goals and is the winner.
Note that for ease of parsing we have replaced the spaces between players’ first and last names with underscores (“_”). Similarly, all multi-word team names and multi-word penalty violation descriptions use underscores or dashes instead of spaces. We strongly recommend that you do all of your parsing for this homework using the STL stream operator >> and do not use getline or eof or getc. Your code should not need to rely on the exact placement or quantity of spaces or tabs or newlines in the input.
Hint on reading the file: We suggest you structure your code to read in one string at a time. Depending on
the string, you’ll know what to read next. If you see the word “PERIOD”, you know to read in an integer for
the next period number. If you see a time (formatted with a ’:’ in the middle), you’ll know it is either a
goal or penalty. When you are reading in the names of the players who assisted in the goal, you’ll be looking
for a closed parenthesis ’)’ to know when the list of assisting players is complete.
File I/O and Command Line Arguments
Your program will run with three command-line arguments. The first argument will be the name of the input file containing information for one or more ice hockey games. The second argument will be the name of the output file where you will write the computed statistics. The third argument will indicate which data table should be printed. Valid options for the third argument are: --team_stats, --player_stats, or --custom_stats. For example, here is a valid command line to your program:
hockey_statistics.exe 2012_small.txt 2012_small_output.txt --team_stats
Statistics Collected and Output
When --team_stats is specified, your program should create a table with the teams sorted by win percentage, with most wins at the top. We define win percentage as the (# of wins + 0.5 * # of ties ) / total # of games played. If two teams are tied in win percentage, the team with more total goals is listed first. The teams are sorted alphabetically if they are tied in win percentage and total goals. Each row of the table includes the team’s wins, losses, ties, win percentage, goals, and penalties. For example, here is the first part of the output for the 2012_small.txt dataset:
When the --custom_stats option is specified your program should print an additional, interesting and creative statistic of your own design that can be calculated from this data. Try to leverage some of the input data that was not utilized in preparing the first two tables. For example, can we show that the trailing team becomes more desperate and aggressive by examining the relative number of penalties in the final period? What are the more common penalties? Are certain teams more guilty of certain violations? How significant is the power play advantage? How many goals are scored during time intervals when the opposing team is playing with only five players (or only four players on the ice if two players from the same team are in the penalty box at the same time)? How significant is the “home field advantage”? Do some teams play relatively better at the beginning or end of the season?
Write a concise description (< 200 words) of your new statistic in your README.txt file. What question
you are trying to answer with your statistic? What data did you need to organize? What was interesting
or challenging about the implementation of this statistic? Be sure to tell the grader which dataset best
demonstrates your new statistic and include that output.txt file with your submission. Feel free to create
your own dataset and include it and the corresponding output with your submission.
There are many possible data structure class designs that are similarly effective and elegant and appropriate for solving this problem. Your plans for your 3rd statistic will likely influence your overall design. Note that you do not need to store all of the information and relationships from the input file. Store the information that is necessary to elegantly organize the data that you need for the three different options/output tables. Extra credit will be awarded to particularly interesting statistics that require clever programming.
Useful Code
To control the formatting of your tables, you’ll want to read up on the various I/O manipulators:
std::setw(int), std::setprecision(int), std::fixed, std::left, etc. To use those formatting controls
you’ll need to #include