📄 gradebookmanager.cpp
字号:
// Tutorial 21: GradeBookManager.cpp
// This application stores and processes student grades as ints or
// doubles by using templates
#include <iostream> // required to perform C++ stream I/O
#include <string> // required to access string functions
#include <iomanip> // required for parameterized stream manipulation
#include "GradeBook.h" // GradeBook class definition
#include "GradeBook.cpp" // GradeBook implementation
using namespace std; // for accessing C++ Standard Library members
// function prototype
template< class T >
void processGrades( GradeBook< T > );
// function main begins program execution
int main()
{
// define variables
int students; // number of students in the course
string courseName; // name of the course
// determines whether grades are stored as ints or doubles
int selection; // 1 = ints, 2 = doubles
// format the output to one digit of precision
cout << fixed << setprecision( 1 );
// prompt the user for and input number of students
cout << "\nEnter the number of students: ";
cin >> students; // get number of students
// repeat if the user enters an invalid number of students
while ( students <= 0 )
{
cout << "\nError: Must have a positive number of students";
cout << "\nEnter the number of students: ";
cin >> students;
} // end while
// prompt user to choose to process grades as ints or doubles
cout << "\nSelect the grade type:" << endl;
cout << "1 - Integer" << endl;
cout << "2 - Floating-point" << endl;
cout << "Enter selection: ";
cin >> selection;
// repeat until the user selects a valid option
while ( selection != 1 && selection != 2 )
{
cout << "\nError: Invalid choice" << endl;
cout << "\nSelect the grade type:" << endl;
cout << "1 - Integer" << endl;
cout << "2 - Floating-point" << endl;
cout << "Enter selection: ";
cin >> selection;
} // end while
// create a GradeBook of ints if user selects integer grades
if ( selection == 1 )
{
// create class-template specialization for int grades
GradeBook< int > myIntGradeBook( students );
// input grades and display statistics
processGrades( myIntGradeBook );
} // end if
// create a GradeBook of doubles if user selects
// floating-point grades
else
{
// create class-template specialization for double grades
GradeBook< double > myDoubleGradeBook( students );
// input grades and display statistics
processGrades( myDoubleGradeBook );
} // end else
cout << endl;
return 0; // indicates successful termination
} // end function main
// function template that prompts the user for and inputs grades,
// then outputs grades and statistics
template< class T >
void processGrades( GradeBook< T > myGrades )
{
// define variable
T grade; // grade that the user inputs
cout << endl;
// prompt the user for and input each student's grade
for ( int count = 0; count < myGrades.getClassSize(); count++ )
{
cout << "Enter student " << count + 1
<< "'s grade (0-100): ";
cin >> grade; // input grade
// repeat while the user has entered an invalid grade
while ( grade < 0 || grade > 100 )
{
cout << "\nError: Invalid grade" << endl;
cout << "Enter student " << count + 1
<< "'s grade (0-100): ";
cin >> grade;
} // end while
// insert grade into GradeBook object
myGrades.setGrade( grade, count );
} // end for
// display grade information
cout << "\nGrade Report" << endl;
cout << "------------" << endl << endl;
myGrades.displayGrades(); // display each grade
myGrades.displayStatistics(); // display statistics
} // end function template processGrades
/**************************************************************************
* (C) Copyright 1992-2005 by Deitel & Associates, Inc. and *
* Pearson Education, Inc. All Rights Reserved. *
* DISCLAIMER: The authors and publisher of this book have used their *
* best efforts in preparing the book. These efforts include the *
* development, research, and testing of the theories and programs *
* to determine their effectiveness. The authors and publisher make *
* no warranty of any kind, expressed or implied, with regard to these *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or *
* consequential damages in connection with, or arising out of, the *
* furnishing, performance, or use of these programs. *
**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -