介绍类GradeBook,使用一个二维数组存储学生在多次考试所得的成绩.在一个学期中,学生很可能参加多次考试,老师也可能希望分析一个学生或整个班级在整个学期所获得成绩.即:在GradeBook二维数组中存储学生成绩.程序如下所示:
//Definiton of class Gradebook that uses a two-dimesion array to store test grades #include <string> //program uses C++ Standard Library string class using namespace std; #ifndef GRADEBOOK_H #define GRADEBOOK_H //GradeBook class definition class GradeBook { public: //constants static const int students =10; //number of students static const int tests = 3; // number of tests //constructor inititalizes cousre name and array of grades GradeBook(string, const int [][ tests]); void setCourseName( string); // function to set the course name string getCourseName(); // function to retrieve the course name void displayMessage(); // display a welcome message void processGrades(); // perform various operations on the grade data int getMinimum(); //find the minimum grade in the grade book int getMaximum(); //find the maximum grade in the grade book double getAverage (const int[] , const int); // get student's average void outputBarChart(); // output bar char of grade distriudbution void outputGrades(); // output the constanets of the grades array private: string courseName ; // course name for this grade book int grades[students][tests]; // two-dimensional array of grades }; // end class #endif //
// Member-function definitions for class GradeBook that // uses a two-dimensional array to store grades. #include <iostream> using std::cout; using std::cin; using std::endl; using std::fixed; #include <iomanip> // parameterized stream manipulators using std::setprecision; // sets numeric output precision using std::setw; // sets field width // include definition of class GradeBook from GradeBook.h #include "GradeBook.h" // two-argument constructor initializes courseName and grades array GradeBook::GradeBook( string name, const int gradesArray[][ tests ] ) { setCourseName( name ); // initialize courseName // copy grades from gradeArray to grades for ( int student = 0; student < students; student++ ) for ( int test = 0; test < tests; test++ ) grades[ student ][ test ] = gradesArray[ student ][ test ]; } // end two-argument GradeBook constructor // function to set the course name void GradeBook::setCourseName( string name ) { courseName = name; // store the course name } // end function setCourseName // function to retrieve the course name string GradeBook::getCourseName() { return courseName; } // end function getCourseName // display a welcome message to the GradeBook user void GradeBook::displayMessage() { // this statement calls getCourseName to get the name of the course this GradeBook represents cout << "Welcome to the grade book for\n" << getCourseName() << "!" << endl; } // end function displayMessage // perform various operations on the data void GradeBook::processGrades() { // output grades array outputGrades(); // call functions getMinimum and getMaximum cout << "\nLowest grade in the grade book is " << getMinimum() << "\nHighest grade in the grade book is " << getMaximum() << endl; outputBarChart();// output grade distribution chart of all grades on all tests outputBarChart(); } // end function processGrades // find minimum grade int GradeBook::getMinimum() { int lowGrade = 100; // assume lowest grade is 100 for ( int student = 0; student < students; student++ ) // loop through rows of grades array { for ( int test = 0; test < tests; test++ ) // loop through columns of current row { if ( grades[ student ][ test ] < lowGrade ) // if current grade less than lowGrade, assign it to lowGrade lowGrade = grades[ student ][ test ]; // new lowest grade } // end inner for } // end outer for return lowGrade; // return lowest grade } // end function getMinimum // find maximum grade int GradeBook::getMaximum() { int highGrade = 0; // assume highest grade is 0 // loop through rows of grades array for ( int student = 0; student < students; student++ ) { // loop through columns of current row for ( int test = 0; test < tests; test++ ) { // if current grade greater than lowGrade, assign it to highGrade if ( grades[ student ][ test ] > highGrade ) highGrade = grades[ student ][ test ]; // new highest grade } // end inner for } // end outer for return highGrade; // return highest grade } // end function getMaximum // determine average grade for particular set of grades double GradeBook::getAverage( const int setOfGrades[], const int grades ) { int total = 0; // initialize total // sum grades in array for ( int grade = 0; grade < grades; grade++ ) total += setOfGrades[ grade ]; return static_cast< double >( total ) / grades; // return average of grades } // end function getAverage // output bar chart displaying grade distribution void GradeBook::outputBarChart() { cout << "\nOverall grade distribution:" << endl; // stores frequency of grades in each range of 10 grades const int frequencySize = 11; int frequency[ frequencySize ] = { 0 }; // for each grade, increment the appropriate frequency for ( int student = 0; student < students; student++ ) for ( int test = 0; test < tests; test++ ) ++frequency[ grades[ student ][ test ] / 10 ]; // for each grade frequency, print bar in chart for ( int count = 0; count < frequencySize; count++ ) { // output bar label ("0-9:", ..., "90-99:", "100:" ) if ( count == 0 ) cout << " 0-9: "; else if ( count == 10 ) cout << " 100: "; else cout << count * 10 << "-" << ( count * 10 ) + 9 << ": "; // print bar of asterisks for ( int stars = 0; stars < frequency[ count ]; stars++ ) cout << '*'; cout << endl; // start a new line of output } // end outer for } // end function outputBarChart // output the contents of the grades array void GradeBook::outputGrades() { cout << "\nThe grades are:\n\n"; cout << " "; // align column heads // create a column heading for each of the tests for ( int test = 0; test < tests; test++ ) cout << "Test " << test + 1 << " "; cout << "Average" << endl; // student average column heading // create rows/columns of text representing array grades for ( int student = 0; student < students; student++ ) { cout << "Student " << setw( 2 ) << student + 1; // output student's grades for ( int test = 0; test < tests; test++ ) cout << setw( 8 ) << grades[ student ][ test ]; // call member function getAverage to calculate student's average; // pass row of grades and the value of tests as the arguments double average = getAverage( grades[ student ], tests ); cout << setw( 9 ) << setprecision( 2 ) << fixed << average << endl; } // end outer for } // end function outputGrades
// TestMain.cpp // Creates GradeBook object using a two-dimensional array of grades. #include "GradeBook.h" // GradeBook class definition // function main begins program execution int main() { // two-dimensional array of student grades int gradesArray[ GradeBook::students ][ GradeBook::tests ] = { { 87, 96, 70 },{ 68, 87, 90 }, { 94, 100, 90 },{ 100, 81, 82 }, { 83, 65, 85 },{ 78, 87, 65 }, { 85, 75, 83 },{ 91, 94, 100 }, { 76, 72, 84 },{ 87, 93, 73 } }; GradeBook myGradeBook( "C++ Programming Practice", gradesArray ); myGradeBook.displayMessage(); myGradeBook.processGrades(); return 0; // indicates successful termination } // end main
关于程序设计基石与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.