#include #include #include #include using namespace std; int main () { ////////////////////////////// // Set up variables to count // player 1 and player 2 actions string player1_name; int player1_kill_kill = 0; int player1_kill_error = 0; int player1_kill_zero = 0; int player1_assist_kill = 0; int player1_assist_error = 0; int player1_assist_zero = 0; int player1_pass_kill = 0; int player1_pass_error = 0; int player1_pass_zero = 0; int player1_serve_ace = 0; int player1_serve_error = 0; int player1_serve_zero = 0; int player1_dig_dig = 0; int player1_dig_error = 0; int player1_block_solo = 0; int player1_block_assist = 0; int player1_block_error = 0; string player2_name; int player2_kill_kill = 0; int player2_kill_error = 0; int player2_kill_zero = 0; int player2_assist_kill = 0; int player2_assist_error = 0; int player2_assist_zero = 0; int player2_pass_kill = 0; int player2_pass_error = 0; int player2_pass_zero = 0; int player2_serve_ace = 0; int player2_serve_error = 0; int player2_serve_zero = 0; int player2_dig_dig = 0; int player2_dig_error = 0; int player2_block_solo = 0; int player2_block_assist = 0; int player2_block_error = 0; // variables to hold input from the file int input_player_number; char input_action, input_outcome; int line_number = 0; // variables for the computed statistics float player1_kill_pct = 0; float player1_assist_pct = 0; float player1_pass_pct = 0; float player1_serve_pct = 0; float player1_dig_pct = 0; float player1_block_pct = 0; float player1_solo_block_pct = 0; float player2_kill_pct = 0; float player2_assist_pct = 0; float player2_pass_pct = 0; float player2_serve_pct = 0; float player2_dig_pct = 0; float player2_block_pct = 0; float player2_solo_block_pct = 0; ////////////////////////////// // Explain what the program does cout << endl << endl; cout << "GU Beach Volleyball Statistics Determination" << endl; cout << "Go Hoyas!" << endl << endl; ////////////////////////////// // open input file for reading string input_file_name; // Get file name cout << "Please enter the filename of the statistics file to process: "; getline(cin,input_file_name); // open file if it is there ifstream datafile(input_file_name.c_str()); if (!datafile) { cerr << "Could not open file: "<< input_file_name << " for reading." << endl; exit(1); } ////////////////////////////// // If we made it this far, we have an open file // process lines from file // First, read the players names to get them out of the way getline(datafile,player1_name); line_number++; getline(datafile,player2_name); line_number++; // Now start reading lines from the file one at a time datafile >> input_player_number >> input_action >> input_outcome; line_number++; while (datafile){ switch(input_action){ case 'K': // kill switch (input_outcome){ case 'K': // kill if (1 == input_player_number ) player1_kill_kill++; else player2_kill_kill++; break; case 'E': // error if (1 == input_player_number ) player1_kill_error++; else player2_kill_error++; break; case 'Z': // zero result if (1 == input_player_number ) player1_kill_zero++; else player2_kill_zero++; break; default: // error in input file cerr << "Error in outcome code: " << input_outcome << " on line " << line_number << endl; } // switch outcome for kill break; case 'A': // assist switch (input_outcome){ case 'K': // kill followed from assist if (1 == input_player_number ) player1_assist_kill++; else player2_assist_kill++; break; case 'E': // error on assist if (1 == input_player_number ) player1_assist_error++; else player2_assist_error++; break; case 'Z': // zero result on assist if (1 == input_player_number ) player1_assist_zero++; else player2_assist_zero++; break; default: cerr << "Error in outcome code: " << input_outcome << " on line " << line_number << endl; } // switch outcome for assist break; case 'P': // pass switch (input_outcome){ case 'K': // kill on the pass, which is an error that got lucky if (1 == input_player_number ) player1_pass_kill++; else player2_pass_kill++; break; case 'E': // error on the pass if (1 == input_player_number ) player1_pass_error++; else player2_pass_error++; break; case 'Z': // a normal pass if (1 == input_player_number ) player1_pass_zero++; else player2_pass_zero++; break; default: cerr << "Error in outcome code: " << input_outcome << " on line " << line_number << endl; } // switch outcome for pass break; case 'S': // serving switch (input_outcome){ case 'A': // ace on the serve if (1 == input_player_number ) player1_serve_ace++; else player2_serve_ace++; break; case 'E': // error on the serve if (1 == input_player_number ) player1_serve_error++; else player2_serve_error++; break; case 'Z': // a normal serve gets a zero if (1 == input_player_number ) player1_serve_zero++; else player2_serve_zero++; break; default: cerr << "Error in outcome code: " << input_outcome << " on line " << line_number << endl; } // switch outcome for serve break; case 'D': // dig - defence is important switch (input_outcome){ case 'D': // good dig if (1 == input_player_number ) player1_dig_dig++; else player2_dig_dig++; break; case 'E': // error on the dig - shank if (1 == input_player_number ) player1_dig_error++; else player2_dig_error++; break; default: cerr << "Error in outcome code: " << input_outcome << " on line " << line_number << endl; } // switch outcome for dig break; case 'B': // blocking switch (input_outcome){ case 'S': // solo block - excellent if (1 == input_player_number ) player1_block_solo++; else player2_block_solo++; break; case 'A': // assist block - why are two people blocking in doubles? if (1 == input_player_number ) player1_block_assist++; else player2_block_assist++; break; case 'E': // error on the block if (1 == input_player_number ) player1_block_error++; else player2_block_error++; break; default: cerr << "Error in outcome code: " << input_outcome << " on line " << line_number << endl; } // swich outcome for block break; default: cerr << "Error in action code: " << input_action << " on line " << line_number << endl; } // input action switch statement datafile >> input_player_number >> input_action >> input_outcome; line_number++; } /////////////////////////////// // Finished reading in the file // Compute the statistics // Player 1 if ((player1_kill_kill - player1_kill_error) > 0) player1_kill_pct = static_cast(player1_kill_kill - player1_kill_error) /(player1_kill_kill + player1_kill_zero + player1_kill_error); else player1_kill_pct = 0; if ((player1_assist_kill - player1_assist_error) > 0) player1_assist_pct = static_cast(player1_assist_kill - player1_assist_error) /(player1_assist_kill + player1_assist_zero + player1_assist_error); else player1_assist_pct = 0; if (player1_pass_zero > 0) player1_pass_pct = static_cast(player1_pass_zero) /(player1_pass_kill + player1_pass_zero + player1_pass_error); else player1_pass_pct = 0; if ((player1_dig_dig - player1_dig_error) > 0) player1_dig_pct = static_cast(player1_dig_dig - player1_dig_error) /(player1_dig_dig + player1_dig_error); else player1_dig_pct = 0; if ((player1_serve_ace + player1_serve_zero) > 0) player1_serve_pct = static_cast(player1_serve_ace + player1_serve_zero) /(player1_serve_ace + player1_serve_zero + player1_serve_error); else player1_serve_pct = 0; if ((player1_block_solo + player1_block_assist) > 0) player1_block_pct = static_cast(player1_block_solo + player1_block_assist) /(player1_block_solo + player1_block_assist + player1_block_error); else player1_block_pct = 0; if ((player1_block_solo - player1_block_error) > 0) player1_solo_block_pct = static_cast(player1_block_solo - player1_block_error) /(player1_block_solo + player1_block_assist + player1_block_error); else player1_solo_block_pct = 0; // Player 2 if ((player2_kill_kill - player2_kill_error) > 0) player2_kill_pct = static_cast(player2_kill_kill - player2_kill_error) /(player2_kill_kill + player2_kill_zero + player2_kill_error); else player2_kill_pct = 0; if ((player2_assist_kill - player2_assist_error) > 0) player2_assist_pct = static_cast(player2_assist_kill - player2_assist_error) /(player2_assist_kill + player2_assist_zero + player2_assist_error); else player2_assist_pct = 0; if (player2_pass_zero > 0) player2_pass_pct = static_cast(player2_pass_zero) /(player2_pass_kill + player2_pass_zero + player2_pass_error); else player2_pass_pct = 0; if ((player2_dig_dig - player2_dig_error) > 0) player2_dig_pct = static_cast(player2_dig_dig - player2_dig_error) /(player2_dig_dig + player2_dig_error); else player2_dig_pct = 0; if ((player2_serve_ace + player2_serve_zero) > 0) player2_serve_pct = static_cast(player2_serve_ace + player2_serve_zero) /(player2_serve_ace + player2_serve_zero + player2_serve_error); else player2_serve_pct = 0; if ((player2_block_solo + player2_block_assist) > 0) player2_block_pct = static_cast(player2_block_solo + player2_block_assist) /(player2_block_solo + player2_block_assist + player2_block_error); else player2_block_pct = 0; if ((player2_block_solo - player2_block_error) > 0) player2_solo_block_pct = static_cast(player2_block_solo - player2_block_error) /(player2_block_solo + player2_block_assist + player2_block_error); else player2_solo_block_pct = 0; //////////////////////////// // Output the statistics neatly cout << endl << endl; cout << fixed; cout << setprecision(3); cout << setw(35) << player1_name << setw(20) << player2_name << endl; cout << setw(25) << "Kill Percentage:" << setw(10) << player1_kill_pct << setw(20) << player2_kill_pct << endl; cout << setw(25) << "Assist Percentage:" << setw(10) << player1_assist_pct << setw(20) << player2_assist_pct << endl; cout << setw(25) << "Pass Percentage:" << setw(10) << player1_pass_pct << setw(20) << player2_pass_pct << endl; cout << setw(25) << "Serve Percentage:" << setw(10) << player1_serve_pct << setw(20) << player2_serve_pct << endl; cout << setw(25) << "Dig Percentage:" << setw(10) << player1_dig_pct << setw(20) << player2_dig_pct << endl; cout << setw(25) << "Block Percentage:" << setw(10) << player1_block_pct << setw(20) << player2_block_pct << endl; cout << setw(25) << "Solo block Percentage:" << setw(10) << player1_solo_block_pct << setw(20) << player2_solo_block_pct << endl; return 0; }